Преглед изворни кода

Ticket #255 - Clean up: Cover changer.

AntonLV пре 10 година
родитељ
комит
36db56c984

+ 8 - 0
inc/classes/BxDolTemplate.php

@@ -1142,6 +1142,14 @@ class BxDolTemplate extends BxDol implements iBxDolSingleton
                 break;
             case 'cover':
                 $oCover = BxDolCover::getInstance($this);
+
+                $iId = (int)getParam('sys_site_cover_' . (bx_get('i') == 'home' ? 'home' : 'common'));
+                if($iId != 0 && $oCover)
+                	$oCover->setCoverImageUrl(array(
+                		'id' => $iId,
+                		'transcoder' => BX_DOL_TRANSCODER_OBJ_COVER
+                	));
+
                 $sRet = $oCover ? $oCover->display() : '';
                 break;
             case 'dol_images':

+ 1 - 0
inc/params.inc.php

@@ -43,6 +43,7 @@ define('BX_DOL_INT_MAX', 2147483647);
 define('BX_DOL_TRANSCODER_OBJ_ICON_APPLE', 'sys_icon_apple');
 define('BX_DOL_TRANSCODER_OBJ_ICON_FACEBOOK', 'sys_icon_facebook');
 define('BX_DOL_TRANSCODER_OBJ_ICON_FAVICON', 'sys_icon_favicon');
+define('BX_DOL_TRANSCODER_OBJ_COVER', 'sys_cover');
 
 //--- Module types ---//
 

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
install/sql/system.sql


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

@@ -569,6 +569,7 @@
 	<string name="_adm_dbd_msg_c_clean_success"><![CDATA[Cache was successfully cleaned]]></string>
 	<string name="_adm_dbd_msg_c_all_disabled"><![CDATA[All caches are disabled]]></string>
     <string name="_adm_dsn_cnf_uninstall"><![CDATA[<h3>Uninstall "{0}" template?</h3><p>Uninstalling "{0}" template will also delete all of its data. Do you want to continue?</p>]]></string>
+	<string name="_adm_dsg_btn_delete"><![CDATA[Delete]]></string>
 	<string name="_adm_dsg_btn_make_default"><![CDATA[Make Default]]></string>
 	<string name="_adm_dsg_dsc_alt_text"><![CDATA[Serves as "ALT" text for logo image. Used as a logo when no logo image is uploaded.]]></string>
 	<string name="_adm_dsg_dsc_splash_warning"><![CDATA[Note, that improper use of HTML may break the site layout.]]></string>
@@ -576,16 +577,21 @@
 	<string name="_adm_dsg_err_deactivate_default"><![CDATA[You cannot deactivate template which was selected as Default]]></string>
 	<string name="_adm_dsg_err_last_active"><![CDATA[You need to have at least one active template.]]></string>
 	<string name="_adm_dsg_err_make_default"><![CDATA[Cannot make the template default.]]></string>
+	<string name="_adm_dsg_err_remove_old_cover"><![CDATA[Cannot remove current cover image.]]></string>
 	<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_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[Common pages cover]]></string>
+	<string name="_adm_dsg_txt_cover_home"><![CDATA[Home page cover]]></string>
 	<string name="_adm_dsg_txt_splash_enabled"><![CDATA[Enable splash page]]></string>
 	<string name="_adm_dsg_txt_default"><![CDATA[default]]></string>
 	<string name="_adm_dsg_txt_icon_apple"><![CDATA[Apple Touch Devices (152x152)]]></string>
 	<string name="_adm_dsg_txt_icon_facebook"><![CDATA[Facebook Share (100x100)]]></string>
 	<string name="_adm_dsg_txt_icon_favicon"><![CDATA[Favicon (16x16)]]></string>
+	<string name="_adm_dsg_txt_upload_cover_common"><![CDATA[Upload New Common Pages Cover]]></string>
+	<string name="_adm_dsg_txt_upload_cover_home"><![CDATA[Upload New Home Page Cover]]></string>
 	<string name="_adm_dsg_txt_upload_icon"><![CDATA[Upload New Site Icon]]></string>
 	<string name="_adm_dsg_txt_upload_image"><![CDATA[Upload New Logo Image]]></string>
 	<string name="_adm_dsg_txt_upload_image_preview"><![CDATA[Current Logo Image]]></string>
@@ -828,6 +834,7 @@
     <string name="_adm_lang_cnf_uninstall"><![CDATA[<h3>Uninstall "{0}" language?</h3><p>Uninstalling "{0}" language will also delete all of its data. Do you want to continue?</p>]]></string>
 	<string name="_adm_lmi_cpt_actions"><![CDATA[Actions]]></string>
 	<string name="_adm_lmi_cpt_checkout"><![CDATA[Checkout {checkout_counter}]]></string>
+	<string name="_adm_lmi_cpt_cover"><![CDATA[Cover]]></string>
 	<string name="_adm_lmi_cpt_splash"><![CDATA[Splash]]></string>
 	<string name="_adm_lmi_cpt_displays"><![CDATA[Displays]]></string>
 	<string name="_adm_lmi_cpt_downloaded"><![CDATA[Downloaded]]></string>

+ 8 - 1
modules/boonex/russian/data/langs/system/ru.xml

@@ -569,6 +569,7 @@
 	<string name="_adm_dbd_msg_c_clean_success"><![CDATA[Кэш был удачно очищен]]></string>
 	<string name="_adm_dbd_msg_c_all_disabled"><![CDATA[Весь кэш был отключён]]></string>
     <string name="_adm_dsn_cnf_uninstall"><![CDATA[<h3>Удалить тему "{0}"?</h3><p>Удаление темы "{0}" также удалит все связанные с ней данные. Вы хотите продолжить?</p>]]></string>
+    <string name="_adm_dsg_btn_delete"><![CDATA[Удалить]]></string>
 	<string name="_adm_dsg_btn_make_default"><![CDATA[Сделать основным]]></string>
 	<string name="_adm_dsg_dsc_alt_text"><![CDATA[Используется для дополнительного текста для лого-картинки. Используется в качестве лого, если картинка не загружена.]]></string>
 	<string name="_adm_dsg_dsc_splash_warning"><![CDATA[Заметьте, что неправильное применение HTML может испортить дизайн сайта.]]></string>
@@ -576,16 +577,21 @@
 	<string name="_adm_dsg_err_deactivate_default"><![CDATA[Невозможно деактивировать тему, выбранную в качестве основной]]></string>
 	<string name="_adm_dsg_err_last_active"><![CDATA[Нужно иметь как минимум одну активную тему.]]></string>
 	<string name="_adm_dsg_err_make_default"><![CDATA[Невозможно сделать тему основной.]]></string>
+	<string name="_adm_dsg_err_remove_old_cover"><![CDATA[Невозможно удалить текущее изображение обложки.]]></string>
 	<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_scs_save"><![CDATA[Изменения удачно сохранены]]></string>
 	<string name="_adm_dsg_txt_alt_text"><![CDATA[Текст лого]]></string>
+	<string name="_adm_dsg_txt_cover_common"><![CDATA[Обложка обычных страниц]]></string>
+	<string name="_adm_dsg_txt_cover_home"><![CDATA[Обложка главной страницы]]></string>
 	<string name="_adm_dsg_txt_splash_enabled"><![CDATA[Включить титульную страницу]]></string>
 	<string name="_adm_dsg_txt_default"><![CDATA[по умолчанию]]></string>
 	<string name="_adm_dsg_txt_icon_apple"><![CDATA[Устройства Apple Touch (152x152)]]></string>
 	<string name="_adm_dsg_txt_icon_facebook"><![CDATA[Facebook (100x100)]]></string>
 	<string name="_adm_dsg_txt_icon_favicon"><![CDATA[Favicon (16x16)]]></string>
+	<string name="_adm_dsg_txt_upload_cover_common"><![CDATA[Загрузить новое изображение обложки обычных страниц]]></string>
+	<string name="_adm_dsg_txt_upload_cover_home"><![CDATA[Загрузить новое изображение обложки главной страницы]]></string>
 	<string name="_adm_dsg_txt_upload_icon"><![CDATA[Загрузить новую иконку сайта]]></string>
 	<string name="_adm_dsg_txt_upload_image"><![CDATA[Загрузить новую лого-картинку]]></string>
 	<string name="_adm_dsg_txt_upload_image_preview"><![CDATA[Текущая лого-картинка]]></string>
@@ -828,7 +834,8 @@
     <string name="_adm_lang_cnf_uninstall"><![CDATA[<h3>Удалить "{0}" язык?</h3><p>Удаление "{0}" языка также удалит все его данные. Вы хотите продолжить?</p>]]></string>
 	<string name="_adm_lmi_cpt_actions"><![CDATA[Действия]]></string>
 	<string name="_adm_lmi_cpt_checkout"><![CDATA[Оплата {checkout_counter}]]></string>
-	<string name="_adm_lmi_cpt_splash"><![CDATA[Обложка]]></string>
+	<string name="_adm_lmi_cpt_cover"><![CDATA[Обложка]]></string>
+	<string name="_adm_lmi_cpt_splash"><![CDATA[Заставка]]></string>
 	<string name="_adm_lmi_cpt_displays"><![CDATA[Дисплеи]]></string>
 	<string name="_adm_lmi_cpt_downloaded"><![CDATA[Скачано]]></string>
 	<string name="_adm_lmi_cpt_etemplates"><![CDATA[Имейл-шаблоны]]></string>

+ 55 - 0
studio/classes/BxDolStudioDesigner.php

@@ -10,6 +10,7 @@
 define('BX_DOL_STUDIO_DSG_TYPE_GENERAL', 'general');
 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_SETTINGS', 'settings');
 
@@ -26,6 +27,8 @@ class BxDolStudioDesigner extends BxTemplStudioPage
     protected $sParamLogoWidth;
     protected $sParamLogoHeight;
 
+    protected $aCovers;
+
     function __construct($sPage = "")
     {
         parent::__construct('designer');
@@ -42,6 +45,11 @@ class BxDolStudioDesigner extends BxTemplStudioPage
 		$this->sParamLogoAlt = 'sys_site_logo_alt';
 		$this->sParamLogoWidth = 'sys_site_logo_width';
 		$this->sParamLogoHeight = 'sys_site_logo_height';
+
+		$this->aCovers = array(
+        	'cover_common' => array('setting' => 'sys_site_cover_common', 'title' => '_adm_dsg_txt_cover_common'),
+        	'cover_home' => array('setting' => 'sys_site_cover_home', 'title' => '_adm_dsg_txt_cover_home')
+        );
     }
 
     function checkAction()
@@ -60,6 +68,14 @@ class BxDolStudioDesigner extends BxTemplStudioPage
 					$aResult = array('code' => 2, 'message' => _t('_adm_dsg_err_remove_old_logo'));
 				break;
 
+			case 'delete_cover':
+				$sValue = bx_process_input(bx_get('dsg_value'));
+
+				$aResult = array('code' => 0, 'message' => '');
+				if(empty($sValue) || !$this->deleteCover($sValue))
+					$aResult = array('code' => 2, 'message' => _t('_adm_dsg_err_remove_old_cover'));
+				break;
+
 			case 'make_default':
 				$aResult = array('code' => 0, 'message' => '');
 				if(!$this->makeDefault())
@@ -137,6 +153,18 @@ class BxDolStudioDesigner extends BxTemplStudioPage
         return true;
     }
 
+	function deleteCover($sCover)
+    {
+        $oStorage = BxDolStorage::getObjectInstance(BX_DOL_STORAGE_OBJ_IMAGES);
+
+        $iId = (int)getParam($this->aCovers[$sCover]['setting']);
+        if($iId != 0 && !$oStorage->deleteFile($iId, getLoggedId()))
+            return false;
+
+        $this->oDb->setParam($this->aCovers[$sCover]['setting'], 0);
+        return true;
+    }
+
     function submitIcon(&$oForm)
     {
         $iProfileId = getLoggedId();
@@ -159,6 +187,33 @@ 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_ICON);
     }
 
+	function submitCover(&$oForm)
+    {
+        $iProfileId = getLoggedId();
+
+        $oStorage = BxDolStorage::getObjectInstance(BX_DOL_STORAGE_OBJ_IMAGES);
+
+        foreach($this->aCovers as $sCover => $aCover) {
+        	if(empty($_FILES[$sCover]['tmp_name']))
+        		continue;
+
+			$iId = (int)getParam($aCover['setting']);
+			if($iId != 0 && !$oStorage->deleteFile($iId, $iProfileId))
+				return $this->getJsResult('_adm_dsg_err_remove_old_cover');
+
+			$iId = $oStorage->storeFileFromForm($_FILES[$sCover], true, $iProfileId);
+			if($iId === false) {
+				$this->oDb->setParam($aCover['setting'], 0);
+				return $this->getJsResult(_t('_adm_dsg_err_save') . $oStorage->getErrorString(), false);
+			}
+
+			$this->oDb->setParam($aCover['setting'], $iId);
+			$oStorage->afterUploadCleanup($iId, $iProfileId);
+        }
+
+		return $this->getJsResult('_adm_dsg_scs_save', true, true, BX_DOL_URL_STUDIO . 'designer.php?page=' . BX_DOL_STUDIO_DSG_TYPE_COVER);
+    }
+
     function submitSplash(&$oForm)
     {
     	$this->oDb->setParam('sys_site_splash_code', $oForm->getCleanValue('code'));

+ 1 - 0
studio/designer.php

@@ -10,6 +10,7 @@
 
 require_once('./../inc/header.inc.php');
 require_once(BX_DIRECTORY_PATH_INC . 'design.inc.php');
+require_once(BX_DOL_DIR_STUDIO_INC . 'utils.inc.php');
 
 bx_import('BxDolLanguages');
 

+ 25 - 0
studio/js/designer.js

@@ -56,4 +56,29 @@ BxDolStudioDesigner.prototype.deleteLogo = function() {
 		'json'
 	);
 };
+
+BxDolStudioDesigner.prototype.deleteCover = function(sType, iId) {
+	var $this = this;
+	var oDate = new Date();
+
+	$.post(
+		this.sActionsUrl,
+		{
+			dsg_action: 'delete_cover',
+			dsg_value: sType, 
+			_t: oDate.getTime()
+		},
+		function(oData) {
+			if(oData.code != 0 && oData.message.length > 0) {
+				alert(oData.message);
+				return;
+			}
+
+			$('#bx-dsg-cover-' + iId).bx_anim('hide', $this.sAnimationEffect, $this.iAnimationSpeed, function() {
+				$(this).remove();
+			});
+		},
+		'json'
+	);
+};
 /** @} */

+ 11 - 0
studio/template/css/designer.css

@@ -27,6 +27,17 @@ div.bx-dsg-icon i.sys-icon {
 div.bx-dsg-template-info {
 	overflow: hidden;
 }
+
 span.bx-dsg-template-version {
 	font-weight: bold;
+}
+
+/*--- Cover Manager---*/
+div.bx-dsg-cover {
+	position: relative;
+}
+
+div.bx-dsg-cover-actions .bx-btn {
+	float: none;
+	display: inline-block;
 }

+ 2 - 0
studio/template/dsr_cover.html

@@ -0,0 +1,2 @@
+<iframe name="__iframe_id__" class="bx-std-hidden"></iframe>
+__form__

+ 15 - 0
studio/template/dsr_cover_preview.html

@@ -0,0 +1,15 @@
+<bx_repeat:covers>
+	<div id="bx-dsg-cover-__image_id__" class="bx-dsg-cover bx-def-margin-top-auto">
+		<div class="bx-cover-wrapper" <bx_if:show_bg>style="background-image:url(__image_url__)"</bx_if:show_bg>>
+		    <div class="bx-cover-gradient"></div>
+		    <div class="bx-cover bx-def-centered bx-def-page-width bx-def-padding bx-def-box-sizing">
+		    	<div class="bx-cover-title bx-def-margin-sec-topbottom bx-def-font-h1" style="z-index:2;">
+		            <span class="bx-def-font-contrasted">__caption__</span>
+		        </div>
+			</div>
+		</div>
+		<div class="bx-dsg-cover-actions bx-def-margin-thd-top">
+			<a class="bx-btn bx-btn-small" href="javascript:void(0)" onclick="__js_object__.deleteCover('__type__', __image_id__);"><bx_text:_adm_dsg_btn_delete /></a>
+		</div>
+	</div>
+</bx_repeat:covers>

+ 108 - 2
studio/template/scripts/BxBaseStudioDesigner.php

@@ -14,21 +14,29 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
     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 $aPageCss;
+    protected $aPageJs;
+
     function __construct($sPage = '')
     {
         parent::__construct($sPage);
+
+        $this->aPageCss = array('forms.css', 'designer.css');
+        $this->aPageJs = array('settings.js', 'designer.js');
     }
     function getPageCss()
     {
-        return array_merge(parent::getPageCss(), array('forms.css', 'designer.css'));
+        return array_merge(parent::getPageCss(), $this->aPageCss);
     }
     function getPageJs()
     {
-        return array_merge(parent::getPageJs(), array('settings.js', 'designer.js'));
+        return array_merge(parent::getPageJs(), $this->aPageJs);
     }
     function getPageJsObject()
     {
@@ -43,6 +51,7 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
             BX_DOL_STUDIO_DSG_TYPE_GENERAL => array('icon' => 'globe'),
             BX_DOL_STUDIO_DSG_TYPE_LOGO => array('icon' => 'pencil'),
             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_SETTINGS => array('icon' => 'cogs'),
         );
@@ -325,6 +334,103 @@ class BxBaseStudioDesigner extends BxDolStudioDesigner
         ));
     }
 
+	protected function getCover()
+    {
+    	$sJsObject = $this->getPageJsObject();
+        $oTemplate = BxDolStudioTemplate::getInstance();
+
+        $aFormInputs = array();
+        $aTmplVarsCovers = array();
+        foreach($this->aCovers as $sCover => $aCover) {
+        	$aFormInputs[$sCover] = array(
+				'type' => 'file',
+				'name' => $sCover,
+				'caption' => _t('_adm_dsg_txt_upload_' . $sCover)
+			);
+
+        	if(($iImageId = (int)getParam($aCover['setting'])) == 0)
+        		continue;
+
+			$sImageUrl = BxDolTranscoderImage::getObjectInstance(BX_DOL_TRANSCODER_OBJ_COVER)->getFileUrl($iImageId);
+            if($sImageUrl === false) {
+            	setParam($aCover['setting'], 0);
+                continue;
+			}
+
+			$aTmplVarsCovers[] = array(
+				'js_object' => $sJsObject,
+				'type' => $sCover,
+				'caption' => _t($aCover['title']),
+				'image_id' => $iImageId,
+                'bx_if:show_bg' => array(
+					'condition' => !empty($sImageUrl),
+					'content' => array(
+						'image_url' => $sImageUrl
+					)
+				),
+			);
+        }
+
+        $aForm = array(
+            'form_attrs' => array(
+                'id' => $this->sCoverFormId,
+                'name' => $this->sCoverFormId,
+                'action' => BX_DOL_URL_STUDIO . 'designer.php',
+                'method' => 'post',
+                'enctype' => 'multipart/form-data',
+                'target' => $this->sCoverIframeId
+            ),
+            'params' => array(
+                'db' => array(
+                    'table' => '',
+                    'key' => '',
+                    'uri' => '',
+                    'uri_title' => '',
+                    'submit_name' => 'save'
+                ),
+            ),
+            'inputs' => array(
+                'page' => array(
+                    'type' => 'hidden',
+                    'name' => 'page',
+                    'value' => $this->sPage
+                ),
+                'preview' => array(
+                    'type' => 'custom',
+                    'name' => 'preview',
+                    'content' => $oTemplate->parseHtmlByName('dsr_cover_preview.html', array(
+                		'bx_repeat:covers' => $aTmplVarsCovers
+                	))
+                ),
+
+                'save' => array(
+                    'type' => 'submit',
+                    'name' => 'save',
+                    'value' => _t('_adm_btn_designer_submit'),
+                )
+            )
+        );
+
+        $aForm['inputs'] = bx_array_insert_after($aFormInputs, $aForm['inputs'], 'preview');
+
+        $oForm = new BxTemplStudioFormView($aForm);
+        $oForm->initChecker();
+
+        if($oForm->isSubmittedAndValid()) {
+            echo $this->submitCover($oForm);
+            exit;
+        }
+
+        $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())),
+			))
+        ));
+    }
+
     protected function getSplash()
     {
     	$oTemplate = BxDolStudioTemplate::getInstance();

Неке датотеке нису приказане због велике количине промена