瀏覽代碼

#16 - Developer Module -> Polyglot

AntonLV 13 年之前
父節點
當前提交
a0c16ff928

+ 40 - 2
modules/boonex/developer/classes/BxDevConfig.php

@@ -11,9 +11,47 @@
 
 
 bx_import('BxDolModuleConfig');
 bx_import('BxDolModuleConfig');
 
 
-class BxDevConfig extends BxDolModuleConfig {
-    function BxDevConfig($aModule) {
+class BxDevConfig extends BxDolModuleConfig
+{
+	protected $aJsClasses;
+    protected $aJsObjects;
+	protected $sAnimationEffect;
+    protected $iAnimationSpeed;
+
+    function BxDevConfig($aModule)
+    {
         parent::BxDolModuleConfig($aModule);
         parent::BxDolModuleConfig($aModule);
+
+        $this->aJsClasses = array('polyglot' => 'BxDevPolyglot');
+        $this->aJsObjects = array('polyglot' => 'oBxDevPolyglot');
+        $this->sAnimationEffect = 'fade';
+        $this->iAnimationSpeed = 'slow';
+    }
+
+	function getJsClass($sType = 'main')
+	{
+        if(empty($sType))
+            return $this->aJsClasses;
+
+        return $this->aJsClasses[$sType];
+    }
+
+    function getJsObject($sType = 'main')
+    {
+        if(empty($sType))
+            return $this->aJsObjects;
+
+        return $this->aJsObjects[$sType];
+    }
+
+	function getAnimationEffect()
+	{
+        return $this->sAnimationEffect;
+    }
+
+    function getAnimationSpeed()
+    {
+        return $this->iAnimationSpeed;
     }
     }
 }
 }
 
 

+ 3 - 0
modules/boonex/developer/classes/BxDevModule.php

@@ -15,12 +15,14 @@ require_once('BxDevForms.php');
 require_once('BxDevFunctions.php');
 require_once('BxDevFunctions.php');
 require_once('BxDevBuilderPage.php');
 require_once('BxDevBuilderPage.php');
 require_once('BxDevNavigation.php');
 require_once('BxDevNavigation.php');
+require_once('BxDevPolyglot.php');
 require_once('BxDevPermissions.php');
 require_once('BxDevPermissions.php');
 
 
 define('BX_DEV_TOOLS_GENERAL', 'general');
 define('BX_DEV_TOOLS_GENERAL', 'general');
 define('BX_DEV_TOOLS_FORMS', 'forms');
 define('BX_DEV_TOOLS_FORMS', 'forms');
 define('BX_DEV_TOOLS_PAGES', 'pages');
 define('BX_DEV_TOOLS_PAGES', 'pages');
 define('BX_DEV_TOOLS_NAVIGATION', 'navigation');
 define('BX_DEV_TOOLS_NAVIGATION', 'navigation');
+define('BX_DEV_TOOLS_POLYGLOT', 'polyglot');
 define('BX_DEV_TOOLS_PERMISSIONS', 'permissions');
 define('BX_DEV_TOOLS_PERMISSIONS', 'permissions');
 
 
 class BxDevModule extends BxDolModule {
 class BxDevModule extends BxDolModule {
@@ -34,6 +36,7 @@ class BxDevModule extends BxDolModule {
             array('name' => BX_DEV_TOOLS_FORMS, 'title' => ''),
             array('name' => BX_DEV_TOOLS_FORMS, 'title' => ''),
             array('name' => BX_DEV_TOOLS_NAVIGATION, 'title' => ''),
             array('name' => BX_DEV_TOOLS_NAVIGATION, 'title' => ''),
             array('name' => BX_DEV_TOOLS_PAGES, 'title' => ''),
             array('name' => BX_DEV_TOOLS_PAGES, 'title' => ''),
+            array('name' => BX_DEV_TOOLS_POLYGLOT, 'title' => ''),
             //array('name' => BX_DEV_TOOLS_PERMISSIONS, 'title' => ''),
             //array('name' => BX_DEV_TOOLS_PERMISSIONS, 'title' => ''),
         );
         );
     }
     }

+ 76 - 0
modules/boonex/developer/classes/BxDevPolyglot.php

@@ -0,0 +1,76 @@
+<? defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ * 
+ * @defgroup    Developer Developer
+ * @ingroup     DolphinModules
+ *
+ * @{
+ */
+
+bx_import('BxTemplStudioPolyglot');
+
+class BxDevPolyglot extends BxTemplStudioPolyglot
+{
+    protected $oModule;
+    protected $aParams;
+    protected $aMenuItems = array(
+        BX_DOL_STUDIO_PGT_TYPE_GENERAL,
+	);
+    protected $aGridObjects = array(
+        'manage' => 'mod_dev_pgt_manage'
+    );
+
+	function BxDevPolyglot($aParams)
+	{
+        parent::BxTemplStudioPolyglot(isset($aParams['page']) ? $aParams['page'] : '');
+
+        $this->aParams = $aParams;
+        $this->sSubpageUrl = $this->aParams['url'] . '&pgt_page=';
+
+        bx_import('BxDolModule');
+        $this->oModule = BxDolModule::getInstance('bx_developer');
+    }
+
+    function getPageCss()
+    {
+    	$this->oModule->_oTemplate->addStudioCss(array('polyglot.css'));
+		return parent::getPageCss();
+    }
+
+	function getPageJs()
+	{
+		$this->oModule->_oTemplate->addStudioJs(array('polyglot.js'));
+        return parent::getPageJs();
+    }
+
+	function getPageJsClass()
+	{
+        return $this->oModule->_oConfig->getJsClass('polyglot');
+    }
+
+	function getPageJsObject()
+	{
+        return $this->oModule->_oConfig->getJsObject('polyglot');
+    }
+
+    function getPageJsCode($aOptions = array(), $bWrap = true)
+    {
+    	$aOptions = array_merge($aOptions, array(
+    		'sActionUrl' => BX_DOL_URL_ROOT . $this->oModule->_oConfig->getBaseUri(),
+    		'sPolyglotUrl' => BX_DOL_URL_STUDIO . 'polyglot.php',
+    		'sObjName' => $this->getPageJsObject(),
+    		'sAnimationEffect' => $this->oModule->_oConfig->getAnimationEffect(),
+    		'iAnimationSpeed' => $this->oModule->_oConfig->getAnimationSpeed()
+    	));
+
+    	return parent::getPageJsCode($aOptions, $bWrap);
+    }
+
+	protected function getGeneral()
+	{
+        return $this->getGrid($this->aGridObjects['manage']);
+    }
+}
+/** @} */

+ 104 - 0
modules/boonex/developer/classes/BxDevPolyglotManage.php

@@ -0,0 +1,104 @@
+<? defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ * 
+ * @defgroup    Developer Developer
+ * @ingroup     DolphinModules
+ *
+ * @{
+ */
+
+bx_import('BxDolModule');
+bx_import('BxTemplStudioGrid');
+
+class BxDevPolyglotManage extends BxTemplStudioGrid {
+	private $sAllUri = 'all';
+	private $aActions = array(
+		'restore' => 'eraser',
+		'recompile' => 'refresh'
+	);
+
+    protected $oModule;
+    protected $aLanguage;
+
+    function __construct($aOptions, $oTemplate = false) {
+        parent::__construct($aOptions, $oTemplate);
+
+        $this->oModule = BxDolModule::getInstance('bx_developer');
+
+        bx_import('BxDolLanguages');
+        $this->aLanguages = BxDolLanguages::getInstance()->getLanguages();
+
+        $iWidth = floor(100 / (count($this->aLanguages) + 1));
+        $this->_aOptions['fields']['title']['width'] = $iWidth;
+
+		foreach($this->aLanguages as $sName => $sTitle)
+			$this->_aOptions['fields'][$sName] = array(
+				'title' => $sTitle,
+				'width' => $iWidth,
+				'translatable' => '0',
+				'chars_limit' => '0'
+			);
+    }
+
+	public function performActionRecompile() {
+		bx_import('BxDolStudioLanguagesUtils');
+		$aResult = array('msg' => _t(BxDolStudioLanguagesUtils::getInstance()->compileLanguage() ? '_adm_pgt_scs_recompiled' : '_adm_pgt_err_cannot_recompile_lang'));
+
+		$this->_echoResultJson($aResult, true);
+    }
+
+	public function performActionRestore() {
+		bx_import('BxDolStudioLanguagesUtils');
+		$aResult = array('msg' => _t(BxDolStudioLanguagesUtils::getInstance()->restoreLanguage() ? '_adm_pgt_scs_restored' : '_adm_pgt_err_cannot_restore_lang'));
+
+		$this->_echoResultJson($aResult, true);
+    }
+
+	protected function _getCellDefault($mixedValue, $sKey, $aField, $aRow) {
+		$sJsObject = $this->oModule->_oConfig->getJsObject('polyglot');
+
+		$aLangNames = array_keys($this->aLanguages);
+		if(in_array($sKey, $aLangNames)) {
+			$bAll = false;
+			$aActions = array('restore');
+			$sOnclickMask = "javascript:%s.%s('%s', '%s')";
+
+			if($aRow['uri'] == $this->sAllUri) {
+				$bAll = true;
+				$aActions[] = 'recompile';
+				$sOnclickMask = "javascript:%s.%s('%s')";
+			}
+
+			$mixedValue = '';
+			foreach($aActions as $sAction) {
+				$sIcon = $this->aActions[$sAction];
+				$sTitle = _t('_bx_dev_pgt_txt_manage_' . $sAction . '_title' . ($bAll ? '_plur' : '_sing'));
+				$sContent = _t('_bx_dev_pgt_txt_manage_' . $sAction);
+
+				$mixedValue .= $this->_oTemplate->parseHtmlByName('bx_a.html', array(
+		            'href' => 'javascript:void(0)',
+		            'title' => sprintf($sTitle, $aField['title'], $aRow['title']),
+		        	'bx_repeat:attrs' => array(
+						array('key' => 'class', 'value' => 'bx-btn bx-def-margin-sec-left-auto'),
+						array('key' => 'onclick', 'value' => sprintf($sOnclickMask, $sJsObject, $sAction, $sKey, $aRow['uri']))
+					),
+		            'content' => $this->_oTemplate->parseHtmlByName('bx_icon.html', array('name' => $sIcon))
+		        ));
+			}
+		}
+
+    	return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+	}
+
+	protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage) {
+        $this->_aOptions['source'] .= " AND `name`<>'system'";
+
+        $aData = array(
+        	array('id' => 0, 'title' => _t('_bx_dev_pgt_txt_manage_modules_all'), 'uri' => $this->sAllUri)
+        );
+        return array_merge($aData, parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage));
+    }
+}
+/** @} */

+ 14 - 0
modules/boonex/developer/classes/BxDevStudioPage.php

@@ -87,6 +87,20 @@ class BxDevStudioPage extends BxTemplStudioModule {
         return $this->oModule->_oTemplate->displayPageContent($oContent);
         return $this->oModule->_oTemplate->displayPageContent($oContent);
     }
     }
 
 
+	protected function getPolyglot() {
+        $sType = bx_get('pgt_type');
+        $sType = $sType !== false ? bx_process_input($sType) : '';
+
+        $sPage = bx_get('pgt_page');
+        $sPage = $sPage !== false ? bx_process_input($sPage) : '';
+
+        $oContent = new BxDevPolyglot(array(
+            'page' => $sPage,
+            'url' => sprintf($this->sUrl, $this->sModule, BX_DEV_TOOLS_POLYGLOT),
+        ));
+        return $this->oModule->_oTemplate->displayPageContent($oContent);
+    }
+
     protected function getPermissions() {
     protected function getPermissions() {
         $sPage = bx_get('prm_page');
         $sPage = bx_get('prm_page');
         $sPage = $sPage !== false ? bx_process_input($sPage) : '';
         $sPage = $sPage !== false ? bx_process_input($sPage) : '';

+ 1 - 1
modules/boonex/developer/classes/BxDevTemplate.php

@@ -23,7 +23,7 @@ class BxDevTemplate extends BxDolModuleTemplate {
         $this->addStudioJs($oContent->getPageJs(), false, false);
         $this->addStudioJs($oContent->getPageJs(), false, false);
         return $this->parseHtmlByName('page_content.html', array(
         return $this->parseHtmlByName('page_content.html', array(
             'page_menu_code' => $oContent->getPageMenu(),
             'page_menu_code' => $oContent->getPageMenu(),
-        	'page_main_code' => $oContent->getPageCode()
+        	'page_main_code' => $oContent->getPageJsCode() . $oContent->getPageCode()
         ));
         ));
     } 
     } 
 }
 }

+ 11 - 3
modules/boonex/developer/install/langs/en.xml

@@ -378,9 +378,17 @@
     <string name="_bx_dev_bp_btn_sys_block_cancel"><![CDATA[Cancel]]></string>
     <string name="_bx_dev_bp_btn_sys_block_cancel"><![CDATA[Cancel]]></string>
     <string name="_bx_dev_bp_btn_block_cancel"><![CDATA[Cancel]]></string>
     <string name="_bx_dev_bp_btn_block_cancel"><![CDATA[Cancel]]></string>
 
 
-    <string name=""><![CDATA[]]></string>
-    <string name=""><![CDATA[]]></string>
-    <string name=""><![CDATA[]]></string>
+	<!-- Polyglot -->
+    <string name="_bx_dev_pgt_txt_manage_gl_title"><![CDATA[Module]]></string>
+    <string name="_bx_dev_pgt_btn_manage_gl_recompile"><![CDATA[Recompile All]]></string>
+    <string name="_bx_dev_pgt_btn_manage_gl_restore"><![CDATA[Restore All]]></string>
+    <string name="_bx_dev_pgt_txt_manage_recompile"><![CDATA[recompile]]></string>
+    <string name="_bx_dev_pgt_txt_manage_restore"><![CDATA[restore]]></string>
+    <string name="_bx_dev_pgt_txt_manage_recompile_title_sing"><![CDATA[Recompile %s languege for %s module.]]></string>
+    <string name="_bx_dev_pgt_txt_manage_restore_title_sing"><![CDATA[Restore %s languege for %s module.]]></string>
+    <string name="_bx_dev_pgt_txt_manage_recompile_title_plur"><![CDATA[Recompile %s languege for all modules.]]></string>
+    <string name="_bx_dev_pgt_txt_manage_restore_title_plur"><![CDATA[Restore %s languege for all modules.]]></string>
+    <string name="_bx_dev_pgt_txt_manage_modules_all"><![CDATA[All]]></string>
     <string name=""><![CDATA[]]></string>
     <string name=""><![CDATA[]]></string>
     <string name=""><![CDATA[]]></string>
     <string name=""><![CDATA[]]></string>
     <string name=""><![CDATA[]]></string>
     <string name=""><![CDATA[]]></string>

+ 15 - 1
modules/boonex/developer/install/sql/install.sql

@@ -512,4 +512,18 @@ INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_fo
 ('mod_dev_bp_block_edit', 'copyable', 2147483647, 1, 9),
 ('mod_dev_bp_block_edit', 'copyable', 2147483647, 1, 9),
 ('mod_dev_bp_block_edit', 'controls', 2147483647, 1, 10),
 ('mod_dev_bp_block_edit', 'controls', 2147483647, 1, 10),
 ('mod_dev_bp_block_edit', 'do_submit', 2147483647, 1, 11),
 ('mod_dev_bp_block_edit', 'do_submit', 2147483647, 1, 11),
-('mod_dev_bp_block_edit', 'cancel', 2147483647, 1, 12);
+('mod_dev_bp_block_edit', 'cancel', 2147483647, 1, 12);
+
+--
+-- Polyglot -> Grid descriptors
+--
+INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `override_class_name`, `override_class_file`) VALUES
+('mod_dev_pgt_manage', 'Sql', 'SELECT * FROM `sys_modules` WHERE 1 ', 'sys_modules', 'id', '', '', '', 100, NULL, '', '', '', '', '', '', '', 'BxDevPolyglotManage', 'modules/boonex/developer/classes/BxDevPolyglotManage.php');
+
+
+INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
+('mod_dev_pgt_manage', 'title', '_bx_dev_pgt_txt_manage_gl_title', '100%', 0, '', '', 1);
+
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
+('mod_dev_pgt_manage', 'independent', 'recompile', '_bx_dev_pgt_btn_manage_gl_recompile', '', 0, 1),
+('mod_dev_pgt_manage', 'independent', 'restore', '_bx_dev_pgt_btn_manage_gl_restore', '', 0, 2);

+ 6 - 22
modules/boonex/developer/js/main.js

@@ -1,16 +1,17 @@
-function BxArlMain(oOptions) {
+function BxDevMain(oOptions) {
     this._sSystem = oOptions.sSystem;
     this._sSystem = oOptions.sSystem;
     this._sActionsUrl = oOptions.sActionUrl;
     this._sActionsUrl = oOptions.sActionUrl;
-    this._sObjName = oOptions.sObjName == undefined ? 'oArlMain' : oOptions.sObjName;
+    this._sObjName = oOptions.sObjName == undefined ? 'oDevMain' : oOptions.sObjName;
     this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'slide' : oOptions.sAnimationEffect;
     this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'slide' : oOptions.sAnimationEffect;
     this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
     this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
 }
 }
-BxArlMain.prototype.changePage = function(iStart, iPerPage, sType, sTypeParams) {
+
+BxDevMain.prototype.pgtRecompile = function(sLanguage) {
     var $this = this;
     var $this = this;
     var oDate = new Date();
     var oDate = new Date();
     var oParams = {
     var oParams = {
         _t:oDate.getTime()
         _t:oDate.getTime()
-    }
+    };
 
 
     if(sTypeParams)
     if(sTypeParams)
         oParams['params'] = sTypeParams;
         oParams['params'] = sTypeParams;
@@ -33,21 +34,4 @@ BxArlMain.prototype.changePage = function(iStart, iPerPage, sType, sTypeParams)
         },
         },
         'html'
         'html'
     );
     );
-}
-BxArlMain.prototype.deleteEntry = function(iId) {
-    var $this = this;
-
-    $.post(
-        this._sActionsUrl + "act_delete/",
-        {id:iId},
-        function(sData) {
-            var iCode = parseInt(sData);
-            if(iCode == 1) {
-                alert(aDolLang['_articles_msg_success_delete']);
-                window.location.href = $this._sActionsUrl
-            }
-            else
-                alert(aDolLang['_articles_msg_failed_delete']);
-        }
-    )
-}
+};

+ 44 - 0
modules/boonex/developer/js/polyglot.js

@@ -0,0 +1,44 @@
+function BxDevPolyglot(oOptions) {
+    this._sActionsUrl = oOptions.sActionUrl;
+    this._sPolyglotUrl = oOptions.sPolyglotUrl;
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxDevPolyglot' : oOptions.sObjName;
+    this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'slide' : oOptions.sAnimationEffect;
+    this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+}
+
+BxDevPolyglot.prototype.recompile = function(sLanguage) {
+	this.perform('recompile', sLanguage);
+};
+
+BxDevPolyglot.prototype.restore = function(sLanguage, sModule) {
+	this.perform('restore', sLanguage, sModule);
+};
+
+BxDevPolyglot.prototype.perform = function(sAction, sLanguage, sModule) {
+    var $this = this;
+    var oDate = new Date();
+    var oParams = {
+    	pgt_action: sAction,
+        _t:oDate.getTime()
+    };
+
+    if(sLanguage)
+    	oParams['pgt_language'] = sLanguage;
+
+    if(sModule)
+    	oParams['pgt_module'] = sModule;
+
+    bx_loading($('body'), true);
+
+    $.post(
+        this._sPolyglotUrl,
+        oParams,
+        function(oData) {
+        	bx_loading($('body'), false);
+
+        	if(oData.content)
+        		alert(oData.content);
+        },
+        'json'
+    );
+};

+ 0 - 0
modules/boonex/developer/template/css/polyglot.css


二進制
modules/boonex/developer/template/images/icons/bx-dev-mi-polyglot.png


+ 1 - 1
modules/boonex/russian/install/config.php

@@ -33,7 +33,7 @@ $aConfig = array(
     'update_url' => 'http://www.boonex.com/m/{uri}',
     'update_url' => 'http://www.boonex.com/m/{uri}',
 
 
     'compatible_with' => array(
     'compatible_with' => array(
-        '7.0.6'
+        '8.0.x'
     ),
     ),
 
 
     /**
     /**

+ 6 - 6
modules/boonex/sites/classes/BxSitesConfig.php

@@ -20,10 +20,10 @@ class BxSitesConfig extends BxDolModuleConfig
     
     
     //General
     //General
     protected $sDomainMask;
     protected $sDomainMask;
-    protected $_aJsClasses;
-    protected $_aJsObjects;
-    protected $_sAnimationEffect;
-    protected $_iAnimationSpeed;
+    protected $aJsClasses;
+    protected $aJsObjects;
+    protected $sAnimationEffect;
+    protected $iAnimationSpeed;
 
 
     //PayPal payments integration
     //PayPal payments integration
     protected $iTrialMaxNumber;
     protected $iTrialMaxNumber;
@@ -193,12 +193,12 @@ class BxSitesConfig extends BxDolModuleConfig
 
 
 	function getAnimationEffect()
 	function getAnimationEffect()
 	{
 	{
-        return $this->_sAnimationEffect;
+        return $this->sAnimationEffect;
     }
     }
 
 
     function getAnimationSpeed()
     function getAnimationSpeed()
     {
     {
-        return $this->_iAnimationSpeed;
+        return $this->iAnimationSpeed;
     }
     }
 }
 }
 
 

+ 1 - 1
studio/polyglot.php

@@ -32,7 +32,7 @@ $oTemplate->setPageHeader($oPage->getPageHeader());
 $oTemplate->setPageContent('page_caption_code', $oPage->getPageCaption());
 $oTemplate->setPageContent('page_caption_code', $oPage->getPageCaption());
 $oTemplate->setPageContent('page_attributes', $oPage->getPageAttributes());
 $oTemplate->setPageContent('page_attributes', $oPage->getPageAttributes());
 $oTemplate->setPageContent('page_menu_code', $oPage->getPageMenu());
 $oTemplate->setPageContent('page_menu_code', $oPage->getPageMenu());
-$oTemplate->setPageContent('page_main_code', $oPage->getPageCode());
+$oTemplate->setPageContent('page_main_code', $oPage->getPageJsCode() . $oPage->getPageCode());
 $oTemplate->addCss($oPage->getPageCss());
 $oTemplate->addCss($oPage->getPageCss());
 $oTemplate->addJs($oPage->getPageJs());
 $oTemplate->addJs($oPage->getPageJs());
 $oTemplate->getPageCode();
 $oTemplate->getPageCode();

+ 0 - 5
studio/template/polyglot.html

@@ -1,6 +1 @@
-<script defer type="text/javascript">
-var __js_object__ = new BxDolStudioPolyglot({
-    sActionUrl: '<bx_url_studio />polyglot.php'
-});
-</script>
 <bx_include_auto:page_blocks.html />
 <bx_include_auto:page_blocks.html />

+ 1 - 0
studio/template/scripts/BxBaseStudioModule.php

@@ -64,6 +64,7 @@ class BxBaseStudioModule extends BxDolStudioModule {
 
 
         return parent::getPageMenu($aMenu);
         return parent::getPageMenu($aMenu);
     }
     }
+
     function getPageCode($bHidden = false) {
     function getPageCode($bHidden = false) {
         $sMethod = 'get' . ucfirst($this->sPage);
         $sMethod = 'get' . ucfirst($this->sPage);
         if(!method_exists($this, $sMethod))
         if(!method_exists($this, $sMethod))

+ 26 - 1
studio/template/scripts/BxBaseStudioPage.php

@@ -13,6 +13,8 @@ bx_import('BxDolStudioPage');
 bx_import('BxDolStudioTemplate');
 bx_import('BxDolStudioTemplate');
 bx_import('BxTemplStudioFunctions');
 bx_import('BxTemplStudioFunctions');
 
 
+require_once(BX_DIRECTORY_PATH_PLUGINS . 'Services_JSON.php');
+
 class BxBaseStudioPage extends BxDolStudioPage {
 class BxBaseStudioPage extends BxDolStudioPage {
 
 
     function BxBaseStudioPage($mixedPageName) {
     function BxBaseStudioPage($mixedPageName) {
@@ -33,10 +35,33 @@ class BxBaseStudioPage extends BxDolStudioPage {
         return array('common_anim.js', 'page.js');
         return array('common_anim.js', 'page.js');
     }
     }
 
 
-    function getPageJsObject() {
+    function getPageJsClass() {
         return '';
         return '';
     }
     }
 
 
+	function getPageJsObject() {
+        return '';
+    }
+
+	function getPageJsCode($aOptions = array(), $bWrap = true) {
+        $sJsClass = $this->getPageJsClass();
+        $sJsObject = $this->getPageJsObject();
+        if(empty($sJsClass) || empty($sJsObject))
+        	return '';
+
+		$sOptions = '{}';
+		if(!empty($aOptions)) {
+			$oJson = new Services_JSON();		        
+			$sOptions = $oJson->encode($aOptions);
+		}
+
+        $sContent = 'var ' . $sJsObject . ' = new ' . $sJsClass . '(' . $sOptions . ');';
+		if($bWrap)
+        	$sContent = BxDolStudioTemplate::getInstance()->_wrapInTagJsCode($sContent);
+
+        return $sContent;
+    }
+
     function getPageCss() {
     function getPageCss() {
         $aCss = array('menu_top.css');
         $aCss = array('menu_top.css');
         if((int)$this->aPage['index'] == 3)
         if((int)$this->aPage['index'] == 3)

+ 27 - 10
studio/template/scripts/BxBaseStudioPolyglot.php

@@ -12,32 +12,50 @@ defined('BX_DOL') or die('hack attempt');
 bx_import('BxDolStudioPolyglot');
 bx_import('BxDolStudioPolyglot');
 
 
 class BxBaseStudioPolyglot extends BxDolStudioPolyglot {
 class BxBaseStudioPolyglot extends BxDolStudioPolyglot {
+	protected $sSubpageUrl;
+	protected $aMenuItems = array(
+        BX_DOL_STUDIO_PGT_TYPE_GENERAL, 
+        BX_DOL_STUDIO_PGT_TYPE_KEYS, 
+    	BX_DOL_STUDIO_PGT_TYPE_ETEMPLATES
+	);
+    protected $aGridObjects = array(
+        'keys' => 'sys_studio_lang_keys',
+        'etemplates' => 'sys_studio_lang_etemplates',
+    );
+
     function BxBaseStudioPolyglot($sPage = '') {
     function BxBaseStudioPolyglot($sPage = '') {
         parent::BxDolStudioPolyglot($sPage);
         parent::BxDolStudioPolyglot($sPage);
+
+        $this->sSubpageUrl = BX_DOL_URL_STUDIO . 'polyglot.php?page=';
     }
     }
     function getPageCss() {
     function getPageCss() {
         return array_merge(parent::getPageCss(), array('forms.css', 'paginate.css', 'polyglot.css'));
         return array_merge(parent::getPageCss(), array('forms.css', 'paginate.css', 'polyglot.css'));
     }
     }
     function getPageJs() {
     function getPageJs() {
         return array_merge(parent::getPageJs(), array('jquery.autoresize.js', 'settings.js', 'polyglot.js'));
         return array_merge(parent::getPageJs(), array('jquery.autoresize.js', 'settings.js', 'polyglot.js'));
+    }
+	function getPageJsClass() {
+        return 'BxDolStudioPolyglot';
     }
     }
     function getPageJsObject() {
     function getPageJsObject() {
         return 'oBxDolStudioPolyglot';
         return 'oBxDolStudioPolyglot';
     }
     }
+    function getPageJsCode($aOptions = array(), $bWrap = true) {
+    	$aOptions = array_merge($aOptions, array(
+    		'sActionUrl' => BX_DOL_URL_STUDIO . 'polyglot.php'
+    	));
+
+    	return parent::getPageJsCode($aOptions, $bWrap);
+    }
     function getPageMenu($aMenu = array(), $aMarkers = array()) {
     function getPageMenu($aMenu = array(), $aMarkers = array()) {
         $sJsObject = $this->getPageJsObject();
         $sJsObject = $this->getPageJsObject();
 
 
         $aMenu = array();
         $aMenu = array();
-        $aMenuItems = array(
-            BX_DOL_STUDIO_PGT_TYPE_GENERAL, 
-            BX_DOL_STUDIO_PGT_TYPE_KEYS, 
-            BX_DOL_STUDIO_PGT_TYPE_ETEMPLATES
-        );
-        foreach($aMenuItems as $sMenuItem)
+        foreach($this->aMenuItems as $sMenuItem)
             $aMenu[] = array(
             $aMenu[] = array(
                 'name' => $sMenuItem,
                 'name' => $sMenuItem,
                 'icon' => 'mi-pgt-' . $sMenuItem . '.png',
                 'icon' => 'mi-pgt-' . $sMenuItem . '.png',
-            	'link' => BX_DOL_URL_STUDIO . 'polyglot.php?page=' . $sMenuItem,
+            	'link' => $this->sSubpageUrl . $sMenuItem,
             	'title' => _t('_adm_lmi_cpt_' . $sMenuItem),
             	'title' => _t('_adm_lmi_cpt_' . $sMenuItem),
             	'selected' => $sMenuItem == $this->sPage
             	'selected' => $sMenuItem == $this->sPage
             );
             );
@@ -72,11 +90,11 @@ class BxBaseStudioPolyglot extends BxDolStudioPolyglot {
     }
     }
 
 
     protected function getKeys() {
     protected function getKeys() {
-        return $this->getGrid('sys_studio_lang_keys');
+        return $this->getGrid($this->aGridObjects['keys']);
     }
     }
 
 
     protected function getEtemplates() {
     protected function getEtemplates() {
-        return $this->getGrid('sys_studio_lang_etemplates');
+        return $this->getGrid($this->aGridObjects['etemplates']);
     }
     }
 
 
     protected function getGrid($sObjectName) {
     protected function getGrid($sObjectName) {
@@ -88,7 +106,6 @@ class BxBaseStudioPolyglot extends BxDolStudioPolyglot {
             return '';
             return '';
 
 
         $aTmplVars = array(
         $aTmplVars = array(
-            'js_object' => $this->getPageJsObject(),
         	'bx_repeat:blocks' => array(
         	'bx_repeat:blocks' => array(
                 array(
                 array(
                 	'caption' => '',
                 	'caption' => '',