Просмотр исходного кода

Ticket #4759 - Market: Improve Header Image and Icon functionality. Core changes.

AntonLV 2 лет назад
Родитель
Сommit
80aadb0873

+ 5 - 1
inc/classes/BxDolUploader.php

@@ -291,6 +291,7 @@ abstract class BxDolUploader extends BxDolFactory
             'uniq_id' => $this->_sUniqId,
             'template_ghost' => $sJsValue,
             'multiple' => $isMultiple ? 1 : 0,
+            'latest' => 0, //--- Return the latest one uploaded ghost only.
             'storage_private' => isset($aParams['storage_private']) ? $aParams['storage_private'] : 1,
             'is_init_reordering' => isset($aParams['is_init_reordering']) ? $aParams['is_init_reordering'] : 0,
             'bx_if:restore_ghosts' => [
@@ -420,9 +421,12 @@ abstract class BxDolUploader extends BxDolFactory
         }
     }
 
-    public function getGhostsWithOrder($iProfileId, $sFormat, $sImagesTranscoder = false, $iContentId = false)
+    public function getGhostsWithOrder($iProfileId, $sFormat, $sImagesTranscoder = false, $iContentId = false, $isLatestOnly = false)
     {
         $a = $this->getGhosts($iProfileId, 'array', $sImagesTranscoder, $iContentId);
+        if($isLatestOnly)
+            $a = array_slice($a, 0, 1, true);
+
         if(!empty($a) && is_array($a))
             $a = ['g' => $a, 'o' => array_keys($a)];
 

+ 17 - 5
inc/js/classes/BxDolUploader.js

@@ -43,6 +43,7 @@ BxDolUploaderBase.prototype.init = function (sUploaderObject, sStorageObject, sU
     this._sTemplateErrorGhosts = options.template_error_ghosts ? options.template_error_ghosts : this._sTemplateError;
 
     this._isMultiple = undefined == options.multiple || !options.multiple ? false : true;
+    this._isLatest = undefined == options.latest || !options.latest ? false : true;
     this._isReordering = undefined == options.reordering || !options.reordering ? false : true;
 
     this._iContentId = undefined == options.content_id || '' == options.content_id ? '' : parseInt(options.content_id);
@@ -148,7 +149,7 @@ BxDolUploaderBase.prototype.cancelAll = function () {
 }
 
 BxDolUploaderBase.prototype.restoreGhosts = function (bInitReordering, onComplete) {
-    var sUrl = this._getUrlWithStandardParams() + '&img_trans=' + this._sImagesTranscoder + '&a=restore_ghosts&f=json' + '&c=' + this._iContentId + '&_t=' + escape(new Date());
+    var sUrl = this._getUrlWithStandardParams() + '&img_trans=' + this._sImagesTranscoder + '&a=restore_ghosts&f=json' + '&c=' + this._iContentId + '&l=' + (this._isLatest ? 1 : 0) + '&_t=' + escape(new Date());
     var $this = this;
 
     bInitReordering = bInitReordering !== undefined ? bInitReordering : this._isReordering;
@@ -1080,13 +1081,24 @@ BxDolImageTweak.prototype.uploadComplete = function(obj){
     
     $this._oContainerButtons.removeClass('bx-image-edit-buttons-no-image');
     $.post(sUrl, function (aData) {
+        var sSelImage = ".bx-image-edit-source-" + $this._sUniqueId;
+        var sSelPlaceholder = ".bx-image-edit-placeholder-" + $this._sUniqueId;
+
         if ($this._bAllowTweak){
-            $(".bx-image-edit-source-" + $this._sUniqueId).css("background-image", "url(" + aData + ")").css('background-position', '');
-            $(".bx-image-edit-source-" + $this._sUniqueId).parents('.bx-base-pofile-cover-image.bx-bpci-holder').removeClass('bx-bpci-holder h-32 lg:h-32').addClass('h-64 lg:h-80')
+            $(sSelImage).css("background-image", "url(" + aData + ")").css('background-position', '').show();
+
+            if($(sSelPlaceholder).length > 0)
+                $(sSelPlaceholder).hide();
+            else
+                $(sSelImage).parents('.bx-base-pofile-cover-image.bx-bpci-holder').removeClass('bx-bpci-holder h-32 lg:h-32').addClass('h-64 lg:h-80')
         }
         else{
-            $(".bx-image-edit-source-" + $this._sUniqueId).attr("src", aData).show();
-            $(".bx-image-edit-source-" + $this._sUniqueId).parents('.bx-base-pofile-cover-thumb').find('p.bx-base-pofile-unit-thumb').hide();
+            $(sSelImage).attr("src", aData).show();
+
+            if($(sSelPlaceholder).length > 0)
+                $(sSelPlaceholder).hide();
+            else
+                $(sSelImage).parents('.bx-base-pofile-cover-thumb').find('p.bx-base-pofile-unit-thumb').hide();
         }
     });
 }

+ 20 - 32
modules/base/general/classes/BxBaseModGeneralTemplate.php

@@ -791,43 +791,27 @@ class BxBaseModGeneralTemplate extends BxDolModuleTemplate
         return $sCoverSettings;
     }
 
-    function _prepareImage($aData, $sUniqId, $sUploader, $sStorage, $sField, $bAllowTweak)
+    function _prepareImage($aData, $sUniqId, $aUploaders, $sStorage, $sField, $bAllowTweak, $bAllowMultiple = false)
     {
-        $CNF = &$this->_oConfig->CNF;
-        
         $oUploader = null;
-        $sUploadersButtons = $sUploadersJs = '';
-
-        $aUploaders = $sUploader;
-        $sUploadersJs = '';
-        $sJsName = '';
+        $sJsName = $sJsCode = '';
         foreach ($aUploaders as $sUploaderObject) {
             $oUploader = BxDolUploader::getObjectInstance($sUploaderObject, $sStorage, $sUniqId, $this);
             $sGhostTemplate = '{file_id}';
 
-            $aParamsJs = array_merge($oUploader->getUploaderJsParams(), 
-                [
-                    'content_id' => $aData['id'],
-                    'storage_private' => '0',
-                    'is_init_ghosts' => 0,
-                    'is_init_reordering' => 0
-                ]
-            );
-            $sUploadersJs .= $oUploader->getUploaderJs($sGhostTemplate, false, $aParamsJs);
+            $sJsCode .= $oUploader->getUploaderJs($sGhostTemplate, $bAllowMultiple, array_merge($oUploader->getUploaderJsParams(), [
+                'latest' => 1,
+                'content_id' => $aData['id'],
+                'storage_private' => '0',
+                'is_init_ghosts' => 0,
+                'is_init_reordering' => 0
+            ]));
             $sJsName = $oUploader->getNameJsInstanceUploader();
         }
 
-        $aParamsButtons = [
-            'content_id' => $aData['id'],
-            'storage_private' => '0',
-            'btn_class' => '',
-            'button_title' => '',
-            'attrs' => "class='hidden'"
-        ];
-        
         $this->addJs(['BxDolUploader.js']);
-
-        $sAddCode = $this->parseHtmlByName('image_tweak.html', [
+        $this->addJsTranslation(['_sys_uploader_image_reposition_info']);        
+        return $this->parseHtmlByName('image_tweak.html', [
             'id' => $aData['id'],
             'js_object' => $sJsName,
             'unique_id' => $sUniqId,
@@ -836,11 +820,15 @@ class BxBaseModGeneralTemplate extends BxDolModuleTemplate
             'image_exists' => $aData[$sField] == 0 ? 'bx-image-edit-buttons-no-image' : '',
             'field' => $sField,
             'action_url' => BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri(),
-            'uploader' => $oUploader->getUploaderButton($aParamsButtons),
-            'uploader_js' => $sUploadersJs,
-        ]); 
-        $this->addJsTranslation(['_sys_uploader_image_reposition_info']);        
-        return $sAddCode;
+            'uploader' => $oUploader->getUploaderButton([
+                'content_id' => $aData['id'],
+                'storage_private' => '0',
+                'btn_class' => '',
+                'button_title' => '',
+                'attrs' => "class='hidden'"
+            ]),
+            'uploader_js' => $sJsCode,
+        ]);
     }
 
     public function addCssJs()

+ 31 - 16
modules/base/text/classes/BxBaseModTextTemplate.php

@@ -648,8 +648,10 @@ class BxBaseModTextTemplate extends BxBaseModGeneralTemplate
 
         $aVars = parent::getTmplVarsText($aData);
 
-        $sImage = '';
+        $aImageParams = $this->_getHeaderImageParams();
         $mixedImage = $this->_getHeaderImage($aData);
+
+        $sImage = '';
         if($mixedImage !== false) {
             if(!empty($mixedImage['object']))
                 $o = BxDolStorage::getObjectInstance($mixedImage['object']);
@@ -659,20 +661,20 @@ class BxBaseModTextTemplate extends BxBaseModGeneralTemplate
             if($o)
                 $sImage = $o->getFileUrlById($mixedImage['id']);
         }
-        
-        if(bx_is_api() ){
-            if($sImage){
-                $aVars['image'] = bx_api_get_image($CNF['OBJECT_STORAGE'], $mixedImage['id']);
-            }
+
+        if($this->_bIsApi) {
+            if($sImage)
+                $aVars['image'] = bx_api_get_image($aImageParams['storage'], $mixedImage['id']);
+
             return $aVars;
         }
-        
+
         $sAddClassPicture = "";
         $sAddCode = "";
         $oModule = $this->getModule();
-        $bIsAllowEditPicture =  CHECK_ACTION_RESULT_ALLOWED === $oModule->checkAllowedEdit($aData);
+        $bIsAllowEditPicture = CHECK_ACTION_RESULT_ALLOWED === $oModule->checkAllowedEdit($aData);
 
-        if(isset($CNF['FIELD_THUMB']) && isset($CNF['OBJECT_UPLOADERS']) && isset($CNF['OBJECT_STORAGE']) && isset($CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW'])){
+        if($aImageParams['field'] && $aImageParams['uploaders'] && $aImageParams['storage'] && $aImageParams['transcoder_cover']) {
             /**
              * @hooks
              * @hookdef hook-system-image_editor 'system', 'image_editor' - hook to override content header image editor
@@ -701,10 +703,10 @@ class BxBaseModTextTemplate extends BxBaseModGeneralTemplate
                 'is_allow_edit' => $bIsAllowEditPicture,
                 'image_type' => 'header_image',
                 'image_url' => $sImage,
-                'uploader' => !empty($CNF['OBJECT_UPLOADERS']) && is_array($CNF['OBJECT_UPLOADERS']) ? $CNF['OBJECT_UPLOADERS'][0] : '',
-                'storage' => isset($CNF['OBJECT_STORAGE']) ? $CNF['OBJECT_STORAGE'] : '',
-                'transcoder' => isset($CNF['OBJECT_IMAGES_TRANSCODER_COVER']) ? $CNF['OBJECT_IMAGES_TRANSCODER_COVER'] : '',
-                'field' => isset($CNF['FIELD_THUMB']) ? $CNF['FIELD_THUMB'] : '',
+                'uploader' => $aImageParams['uploaders'] && is_array($aImageParams['uploaders']) ? $aImageParams['uploaders'][0] : '',
+                'storage' => $aImageParams['storage'],
+                'transcoder' => $aImageParams['transcoder_cover'],
+                'field' => $aImageParams['field'],
                 'is_background' => false,
                 'add_class' => &$sAddClassPicture,
                 'add_code' => &$sAddCode
@@ -713,8 +715,8 @@ class BxBaseModTextTemplate extends BxBaseModGeneralTemplate
 
         $sImageTweak = '';
         $sUniqIdImage = genRndPwd (8, false);
-        if ($bIsAllowEditPicture && empty($sAddCode) && isset($CNF['FIELD_THUMB_POSITION'])){
-            $sImageTweak = $this->_prepareImage($aData, $sUniqIdImage, $CNF['OBJECT_UPLOADERS'], $CNF['OBJECT_STORAGE'], $CNF['FIELD_THUMB'], true);
+        if ($bIsAllowEditPicture && empty($sAddCode) && $aImageParams['field_position']){
+            $sImageTweak = $this->_prepareImage($aData, $sUniqIdImage, $aImageParams['uploaders'], $aImageParams['storage'], $aImageParams['field'], true);
         }
 
         
@@ -724,7 +726,7 @@ class BxBaseModTextTemplate extends BxBaseModGeneralTemplate
             'condition' => !empty($sImage),
             'content' => array(
                 'entry_image' => $sImage,
-                'image_settings' => isset($CNF['FIELD_THUMB_POSITION']) ? $this->_getImageSettings($aData[$CNF['FIELD_THUMB_POSITION']]) : '',
+                'image_settings' => $aImageParams['field_position'] ? $this->_getImageSettings($aData[$aImageParams['field_position']]) : '',
                 'add_class' => $sAddClassPicture,
                 'img_class' => $sAddClassPicture != '' ? 'bx-media-editable-src' : '',
                 'additional_code' => $sAddCode,
@@ -1097,6 +1099,19 @@ class BxBaseModTextTemplate extends BxBaseModGeneralTemplate
         return str_replace('_', '-', $this->MODULE . '_unit_' . $aData[$CNF['FIELD_ID']]);
     }
 
+    protected function _getHeaderImageParams()
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        return [
+            'field' => isset($CNF['FIELD_THUMB']) ? $CNF['FIELD_THUMB'] : false,
+            'field_position' => isset($CNF['FIELD_THUMB_POSITION']) ? $CNF['FIELD_THUMB_POSITION'] : false,
+            'storage' => isset($CNF['OBJECT_STORAGE']) ? $CNF['OBJECT_STORAGE'] : false,
+            'uploaders' => isset($CNF['OBJECT_UPLOADERS']) ? $CNF['OBJECT_UPLOADERS'] : false,
+            'transcoder_cover' => isset($CNF['OBJECT_IMAGES_TRANSCODER_COVER']) ? $CNF['OBJECT_IMAGES_TRANSCODER_COVER'] : false,
+        ];
+    }
+
     protected function _getHeaderImage($aData)
     {
         return $this->getModule()->getEntryImageData($aData);

+ 2 - 3
storage_uploader.php

@@ -13,6 +13,7 @@ $sUploaderObject = bx_process_input(bx_get('uo'));
 $sStorageObject = bx_process_input(bx_get('so'));
 $sUniqId = preg_match("/^[\d\w]+$/", bx_get('uid')) ? bx_get('uid') : '';
 $isMultiple = bx_get('m') ? true : false;
+$isLatest = bx_get('l') ? true : false;
 
 $sFormat = bx_process_input(bx_get('f'));
 if ($sFormat != 'html' &&  $sFormat != 'json')
@@ -38,7 +39,6 @@ if (!$oUploader) {
 $sAction = bx_process_input(bx_get('a'));
 
 switch ($sAction) {
-
     case 'show_uploader_form':
         header('Content-type: text/html; charset=utf-8');
 
@@ -52,7 +52,7 @@ switch ($sAction) {
     case 'restore_ghosts':
         header('Content-Type: application/json; charset=utf-8');
         $sImagesTranscoder = bx_process_input(bx_get('img_trans'));
-        echo $oUploader->getGhostsWithOrder((int)bx_get_logged_profile_id(), $sFormat, $sImagesTranscoder, $iContentId);
+        echo $oUploader->getGhostsWithOrder((int)bx_get_logged_profile_id(), $sFormat, $sImagesTranscoder, $iContentId, $isLatest);
         break;
     
     case 'reorder_ghosts':
@@ -74,7 +74,6 @@ switch ($sAction) {
 
         $oUploader->handleUploads(bx_get_logged_profile_id(), isset($_FILES['f']) ? $_FILES['f'] : null, $isMultiple, $iContentId, $isPrivate);
         break;
-
 }
 
 /** @} */

+ 1 - 1
template/scripts/BxBasePage.php

@@ -541,7 +541,7 @@ class BxBasePage extends BxDolPage
          * Profile/Context view page.
          */
         if(isset($this->_aProfileInfo)) {
-            $oProfileModule = BxDolModule::getInstance($this->getModule());
+            $oProfileModule = BxDolModule::getInstance($this->_aProfileInfo['type']);
             if($oProfileModule !== null)
                 $aProfileContentInfo = $oProfileModule->_oDb->getContentInfoById($this->_aProfileInfo['content_id']);
 

+ 1 - 0
template/uploader_button_html5_js.html

@@ -1,5 +1,6 @@
 __uploader_instance_name__ = new BxDolUploaderHTML5('__engine__', '__storage_object__', '__uniq_id__', {
     'multiple': __multiple__,
+    'latest': __latest__,
     'content_id': '__content_id__',
     'images_transcoder' : '__images_transcoder__',
     'storage_private' : '__storage_private__',