AntonLV пре 10 година
родитељ
комит
1432041c25

+ 20 - 0
inc/classes/BxDolTemplate.php

@@ -964,6 +964,26 @@ class BxDolTemplate extends BxDol implements iBxDolSingleton
     {
         return $this->_getAbsoluteLocationJs('path', $sName);
     }
+    /**
+     * Get full URL of Template (HTML) file.
+     *
+     * @param  string $sName    - Template file name.
+     * @return string full URL.
+     */
+    function getTemplateUrl($sName, $sCheckIn = BX_DOL_TEMPLATE_CHECK_IN_BOTH)
+    {
+        return $this->_getAbsoluteLocation('url', $this->_sFolderHtml, $sName, $sCheckIn);
+    }
+    /**
+     * Get full Path of JS file.
+     *
+     * @param  string $sName    - JS file name.
+     * @return string full URL.
+     */
+    function getTemplatePath($sName, $sCheckIn = BX_DOL_TEMPLATE_CHECK_IN_BOTH)
+    {
+        return $this->_getAbsoluteLocation('path', $this->_sFolderHtml, $sName, $sCheckIn);
+    }
 
     /**
      * Get menu.

+ 2 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -587,6 +587,7 @@
 	<string name="_adm_dsg_err_remove_old_icon"><![CDATA[Cannot remove current icon.]]></string>
 	<string name="_adm_dsg_err_remove_old_logo"><![CDATA[Cannot remove current logo image.]]></string>
 	<string name="_adm_dsg_err_save"><![CDATA[Cannot save: ]]></string>
+	<string name="_adm_dsg_err_save_file"><![CDATA[Cannot save changes in the file.]]></string>
 	<string name="_adm_dsg_scs_save"><![CDATA[The changes were successfully saved]]></string>
 	<string name="_adm_dsg_txt_alt_text"><![CDATA[Logo Text]]></string>
 	<string name="_adm_dsg_txt_cover_common"><![CDATA[Default pages cover]]></string>
@@ -853,6 +854,7 @@
 	<string name="_adm_lmi_cpt_general"><![CDATA[General]]></string>
 	<string name="_adm_lmi_cpt_goodies"><![CDATA[Storefront]]></string>
 	<string name="_adm_lmi_cpt_icon"><![CDATA[Site Icon]]></string>
+	<string name="_adm_lmi_cpt_injections"><![CDATA[Injections]]></string>
 	<string name="_adm_lmi_cpt_images"><![CDATA[Images]]></string>
 	<string name="_adm_lmi_cpt_items"><![CDATA[Items]]></string>
 	<string name="_adm_lmi_cpt_keys"><![CDATA[Keys]]></string>

+ 2 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -585,6 +585,7 @@
 	<string name="_adm_dsg_err_remove_old_icon"><![CDATA[Невозможно удалить текущую иконку.]]></string>
 	<string name="_adm_dsg_err_remove_old_logo"><![CDATA[Невозможно удалить текущую лого-картинку.]]></string>
 	<string name="_adm_dsg_err_save"><![CDATA[Невозможно сохранить: ]]></string>
+	<string name="_adm_dsg_err_save_file"><![CDATA[Не удается сохранить изменения в файле.]]></string>
 	<string name="_adm_dsg_scs_save"><![CDATA[Изменения удачно сохранены]]></string>
 	<string name="_adm_dsg_txt_alt_text"><![CDATA[Текст лого]]></string>
 	<string name="_adm_dsg_txt_cover_common"><![CDATA[Стандартная обложка страницы]]></string>
@@ -851,6 +852,7 @@
 	<string name="_adm_lmi_cpt_general"><![CDATA[Общие]]></string>
 	<string name="_adm_lmi_cpt_goodies"><![CDATA[Витрина]]></string>
 	<string name="_adm_lmi_cpt_icon"><![CDATA[Иконка сайта]]></string>
+	<string name="_adm_lmi_cpt_injections"><![CDATA[Вставки]]></string>
 	<string name="_adm_lmi_cpt_images"><![CDATA[Изображения]]></string>
 	<string name="_adm_lmi_cpt_items"><![CDATA[Элементы]]></string>
 	<string name="_adm_lmi_cpt_keys"><![CDATA[Ключи]]></string>

+ 18 - 0
studio/classes/BxDolStudioDesigner.php

@@ -12,6 +12,7 @@ define('BX_DOL_STUDIO_DSG_TYPE_LOGO', 'logo');
 define('BX_DOL_STUDIO_DSG_TYPE_ICON', 'icon');
 define('BX_DOL_STUDIO_DSG_TYPE_COVER', 'cover');
 define('BX_DOL_STUDIO_DSG_TYPE_SPLASH', 'splash');
+define('BX_DOL_STUDIO_DSG_TYPE_INJECTIONS', 'injections');
 define('BX_DOL_STUDIO_DSG_TYPE_SETTINGS', 'settings');
 
 define('BX_DOL_STUDIO_DSG_TYPE_DEFAULT', 'general');
@@ -220,6 +221,23 @@ class BxDolStudioDesigner extends BxTemplStudioPage
 
         return $this->getJsResult('_adm_dsg_scs_save', true, true, BX_DOL_URL_STUDIO . 'designer.php?page=' . BX_DOL_STUDIO_DSG_TYPE_SPLASH);
     }
+
+	function submitInjections(&$oForm)
+    {
+		$sPath = BxDolTemplate::getInstance()->getTemplatePath('_header.html', BX_DOL_TEMPLATE_CHECK_IN_BASE);
+
+		$rHandle = fopen($sPath, 'w');
+		if(!$rHandle)
+			return $this->getJsResult('_adm_dsg_err_save_file');
+
+		$bResult = fwrite($rHandle, $oForm->getCleanValue('code'));
+		fclose($rHandle);
+
+		if(!$bResult)
+			return $this->getJsResult('_adm_dsg_err_save_file');
+
+        return $this->getJsResult('_adm_dsg_scs_save', true, true, BX_DOL_URL_STUDIO . 'designer.php?page=' . BX_DOL_STUDIO_DSG_TYPE_INJECTIONS);
+    }
 }
 
 /** @} */

+ 16 - 0
studio/js/designer.js

@@ -10,8 +10,24 @@ function BxDolStudioDesigner(oOptions) {
     this.sObjName = oOptions.sObjName == undefined ? 'oBxDolStudioDesigner' : oOptions.sObjName;
     this.sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'fade' : oOptions.sAnimationEffect;
     this.iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+    this.sCodeMirror = oOptions.sCodeMirror == undefined ? '' : oOptions.sCodeMirror;
+
+    var $this = this;
+    $(document).ready (function () {
+    	if($this.sCodeMirror != '')
+    		$this.initCodeMirror($this.sCodeMirror);
+    });
 }
 
+BxDolStudioDesigner.prototype.initCodeMirror = function(sSelector) {
+    var e = CodeMirror.fromTextArea($(sSelector).get(0), {
+        lineNumbers: true,
+        mode: "htmlmixed",
+        htmlMode: true,
+        matchBrackets: true
+    });
+};
+
 BxDolStudioDesigner.prototype.makeDefault = function(sUri) {
 	var $this = this;
 	var oDate = new Date();

+ 1 - 5
studio/template/designer.html

@@ -1,6 +1,2 @@
 __content__
-<script defer type="text/javascript">
-	var __js_object__ = new BxDolStudioDesigner({
-	    sActionUrl: '__action_url__'
-	});
-</script>
+__js_content__

+ 0 - 14
studio/template/designer_splash.html

@@ -1,14 +0,0 @@
-__content__
-<script defer type="text/javascript">
-	var __js_object__ = new BxDolStudioDesigner({
-		sActionUrl: '__action_url__'
-	});
-    $(document).ready (function () {
-        var e = CodeMirror.fromTextArea($('textarea[name=code]').get(0), {
-            lineNumbers: true,
-            mode: "htmlmixed",
-            htmlMode: true,
-            matchBrackets: true
-        });
-    });
-</script>

+ 1 - 0
studio/template/dsr_injections.html

@@ -0,0 +1 @@
+<bx_include_auto:dsr_splash.html />

+ 101 - 17
studio/template/scripts/BxBaseStudioDesigner.php

@@ -12,14 +12,21 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
 {
     protected $sLogoFormId = 'adm-dsg-logo-form';
     protected $sLogoIframeId = 'adm-dsg-logo-iframe';
+
     protected $sIconFormId = 'adm-dsg-icon-form';
     protected $sIconIframeId = 'adm-dsg-icon-iframe';
+
     protected $sCoverFormId = 'adm-dsg-cover-form';
     protected $sCoverIframeId = 'adm-dsg-cover-iframe';
+
     protected $sSplashFormId = 'adm-dsg-splash-form';
     protected $sSplashIframeId = 'adm-dsg-splash-iframe';
     protected $sSplashEditorId = 'adm-dsg-splash-editor';
 
+    protected $sInjectionsFormId = 'adm-dsg-injections-form';
+    protected $sInjectionsIframeId = 'adm-dsg-injections-iframe';
+    protected $sInjectionsEditorId = 'adm-dsg-injections-editor';
+
     protected $aPageCss;
     protected $aPageJs;
 
@@ -42,6 +49,18 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
     {
         return 'oBxDolStudioDesigner';
     }
+    function getPageJsClass()
+    {
+    	return 'BxDolStudioDesigner';
+    }
+    public function getPageJsCode($aOptions = array(), $bWrap = true)
+    {
+    	$aOptions = array_merge(array(
+    		'sActionUrl' => $this->sManageUrl
+    	), $aOptions);
+
+    	return parent::getPageJsCode($aOptions, $bWrap);
+    }
     function getPageMenu($aMenu = array(), $aMarkers = array())
     {
         $sJsObject = $this->getPageJsObject();
@@ -53,6 +72,7 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
             BX_DOL_STUDIO_DSG_TYPE_ICON => array('icon' => 'picture-o'),
             BX_DOL_STUDIO_DSG_TYPE_COVER => array('icon' => 'file-image-o'),
             BX_DOL_STUDIO_DSG_TYPE_SPLASH => array('icon' => 'file-image-o'),
+            BX_DOL_STUDIO_DSG_TYPE_INJECTIONS => array('icon' => 'object-group'),
             BX_DOL_STUDIO_DSG_TYPE_SETTINGS => array('icon' => 'cogs'),
         );
         foreach($aMenuItems as $sMenuItem => $aItem)
@@ -123,9 +143,8 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
         ));
 
         return $oTemplate->parseHtmlByName('designer.html', array(
-            'js_object' => $this->getPageJsObject(),
-        	'action_url' => $this->sManageUrl,
             'content' => $sContent,
+        	'js_content' => $this->getPageJsCode()
         ));
     }
 
@@ -219,11 +238,10 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
         }
 
         return $oTemplate->parseHtmlByName('designer.html', array(
-            'js_object' => $this->getPageJsObject(),
-        	'action_url' => $this->sManageUrl,
             'content' => $this->getBlockCode(array(
 				'items' => $oTemplate->parseHtmlByName('dsr_logo.html', array('logo_iframe_id' => $this->sLogoIframeId, 'form' => $oForm->getCode())),
-			))
+			)),
+			'js_content' => $this->getPageJsCode()
         ));
     }
 
@@ -326,11 +344,10 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
         }
 
         return $oTemplate->parseHtmlByName('designer.html', array(
-            'js_object' => $this->getPageJsObject(),
-        	'action_url' => $this->sManageUrl,
             'content' => $this->getBlockCode(array(
 				'items' => $oTemplate->parseHtmlByName('dsr_icon.html', array('icon_iframe_id' => $this->sIconIframeId, 'form' => $oForm->getCode())),
-			))
+			)),
+			'js_content' => $this->getPageJsCode()
         ));
     }
 
@@ -423,11 +440,10 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
 
         $this->aPageCss[] = 'cover.css';
         return $oTemplate->parseHtmlByName('designer.html', array(
-            'js_object' => $this->getPageJsObject(),
-        	'action_url' => $this->sManageUrl,
             'content' => $this->getBlockCode(array(
 				'items' => $oTemplate->parseHtmlByName('dsr_cover.html', array('iframe_id' => $this->sCoverIframeId, 'form' => $oForm->getCode())),
-			))
+			)),
+			'js_content' => $this->getPageJsCode()
         ));
     }
 
@@ -495,15 +511,84 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
         $oTemplate->addJs(array('codemirror/codemirror.min.js'));
         $oTemplate->addCss(BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'codemirror/|codemirror.css');
 
-		return $oTemplate->parseHtmlByName('designer_splash.html', array(
-			'js_object' => $this->getPageJsObject(),
-			'action_url' => $this->sManageUrl,
+		return $oTemplate->parseHtmlByName('designer.html', array(
 			'content' => $this->getBlockCode(array(
 				'items' => $oTemplate->parseHtmlByName('dsr_splash.html', array(
 					'warning' => MsgBox(_t('_adm_dsg_dsc_splash_warning')),
 					'splash_iframe_id' => $this->sSplashIframeId, 
 					'form' => $oForm->getCode()
 				)),
+			)),
+			'js_content' => $this->getPageJsCode(array(
+				'sCodeMirror' => 'textarea[name=code]'
+			))
+		));
+    }
+
+	protected function getInjections()
+    {
+    	$oTemplate = BxDolStudioTemplate::getInstance();
+
+		$aForm = array(
+			'form_attrs' => array(
+				'id' => $this->sInjectionsFormId,
+				'name' => $this->sInjectionsFormId,
+				'action' => BX_DOL_URL_STUDIO . 'designer.php',
+				'method' => 'post',
+				'enctype' => 'multipart/form-data',
+				'target' => $this->sInjectionsIframeId
+			),
+			'params' => array(
+				'db' => array(
+					'table' => '',
+					'key' => '',
+					'uri' => '',
+					'uri_title' => '',
+					'submit_name' => 'save'
+				),
+			),
+			'inputs' => array(
+				'page' => array(
+					'type' => 'hidden',
+					'name' => 'page',
+					'value' => $this->sPage
+				),
+				'code' => array(
+                    'type' => 'textarea',
+                    'code' => true,
+                    'name' => 'code',
+					'caption' => '',
+					'value' => BxDolTemplate::getInstance()->getHtml('_header.html', BX_DOL_TEMPLATE_CHECK_IN_BASE),
+				),
+				'save' => array(
+					'type' => 'submit',
+					'name' => 'save',
+					'value' => _t('_adm_btn_designer_submit'),
+				)
+			)
+		);
+
+		$oForm = new BxTemplStudioFormView($aForm, $oTemplate);
+		$oForm->initChecker();
+
+		if($oForm->isSubmittedAndValid()) {
+			echo $this->submitInjections($oForm);
+			exit;
+		}
+
+        $oTemplate->addJs(array('codemirror/codemirror.min.js'));
+        $oTemplate->addCss(BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'codemirror/|codemirror.css');
+
+		return $oTemplate->parseHtmlByName('designer.html', array(
+			'content' => $this->getBlockCode(array(
+				'items' => $oTemplate->parseHtmlByName('dsr_injections.html', array(
+					'warning' => MsgBox(_t('_adm_dsg_dsc_splash_warning')),
+					'splash_iframe_id' => $this->sInjectionsIframeId, 
+					'form' => $oForm->getCode()
+				)),
+			)),
+			'js_content' => $this->getPageJsCode(array(
+				'sCodeMirror' => 'textarea[name=code]'
 			))
 		));
     }
@@ -513,9 +598,8 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
         $oPage = new BxTemplStudioSettings(BX_DOL_STUDIO_STG_TYPE_SYSTEM, BX_DOL_STUDIO_STG_CATEGORY_TEMPLATES);
 
         return BxDolStudioTemplate::getInstance()->parseHtmlByName('designer.html', array(
-            'js_object' => $this->getPageJsObject(),
-        	'action_url' => $this->sManageUrl,
-            'content' => $oPage->getPageCode()
+            'content' => $oPage->getPageCode(),
+        	'js_content' => $this->getPageJsCode()
         ));
     }
 }