From 18c7b8b510c33978c6281e9bfa1d6d637b17cbeb Mon Sep 17 00:00:00 2001 From: AntonLV Date: Tue, 12 Nov 2019 15:38:47 +0300 Subject: [PATCH] Ticket #2451 - Privacy dynamic loading. --- inc/classes/BxDolPrivacy.php | 3 +- .../classes/BxBaseModGeneralFormEntry.php | 68 +++++++++++++++---- modules/boonex/ads/js/entry.js | 2 +- template/scripts/BxBasePrivacy.php | 2 +- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/inc/classes/BxDolPrivacy.php b/inc/classes/BxDolPrivacy.php index f5eb9db7bf..22e1b22324 100644 --- a/inc/classes/BxDolPrivacy.php +++ b/inc/classes/BxDolPrivacy.php @@ -163,6 +163,7 @@ public static function getGroupChooser($sObject, $iOwnerId = 0, $aParams = array $sTitle = _t(!empty($sTitle) ? $sTitle : '_' . $sName); } + $bDynamicMode = isset($aParams['dynamic_mode']) ? (bool)$aParams['dynamic_mode'] : false; return array( 'type' => 'select', 'name' => $sName, @@ -180,7 +181,7 @@ public static function getGroupChooser($sObject, $iOwnerId = 0, $aParams = array 'db' => array( 'pass' => 'Int' ), - 'content' => $oPrivacy->getJsScript() + 'content' => $oPrivacy->getJsScript($bDynamicMode) ); } diff --git a/modules/base/general/classes/BxBaseModGeneralFormEntry.php b/modules/base/general/classes/BxBaseModGeneralFormEntry.php index 0e174281a1..a43c8097ba 100644 --- a/modules/base/general/classes/BxBaseModGeneralFormEntry.php +++ b/modules/base/general/classes/BxBaseModGeneralFormEntry.php @@ -69,7 +69,21 @@ public function __construct($aInfo, $oTemplate = false) $this->aInputs[$CNF['FIELD_PHOTO']]['ghost_template'] = ''; } - $this->_preparePrivacyField('VIEW'); + $aPrivacyFields = $this->_getPrivacyFields(); + foreach($aPrivacyFields as $sField => $sObject) + $this->_preparePrivacyField($sField, $sObject); + } + + function getCode($bDynamicMode = false) + { + if(!$bDynamicMode && bx_is_dynamic_request()) + $bDynamicMode = true; + + $aPrivacyFields = $this->_getPrivacyFields(); + foreach($aPrivacyFields as $sField => $sObject) + $this->_addCssJsPrivacyField($sField, $sObject, $bDynamicMode); + + return parent::getCode($bDynamicMode); } /** @@ -138,7 +152,9 @@ function initChecker ($aValues = array (), $aSpecificValues = array()) $this->aInputs[$CNF['FIELD_ANONYMOUS']]['checked'] = $aValues[$CNF['FIELD_AUTHOR']] < 0; } - $this->_preloadPrivacyField('VIEW', $aValues); + $aPrivacyFields = $this->_getPrivacyFields(); + foreach($aPrivacyFields as $sField => $sObject) + $this->_preloadPrivacyField($sField, $sObject, $aValues); parent::initChecker ($aValues, $aSpecificValues); } @@ -436,45 +452,71 @@ protected function _processMetas(&$aValsToAdd) } } - protected function _preparePrivacyField($Type) + protected function _getPrivacyFields() + { + $CNF = &$this->_oModule->_oConfig->CNF; + + $aFields = array('FIELD_ALLOW_VIEW_TO' => 'OBJECT_PRIVACY_VIEW'); + if(isset($CNF['PRIVACY_FIELD_TO_OBJECT']) && is_array($CNF['PRIVACY_FIELD_TO_OBJECT'])) + $aFields = $CNF['PRIVACY_FIELD_TO_OBJECT']; + + return $aFields; + } + + function _addCssJsPrivacyField($sField, $sObject, $bDynamicMode = false) { $CNF = &$this->_oModule->_oConfig->CNF; - if(!isset($CNF['FIELD_ALLOW_' . $Type . '_TO']) || !isset($this->aInputs[$CNF['FIELD_ALLOW_' . $Type . '_TO']]) || !isset($CNF['OBJECT_PRIVACY_' . $Type])) + if(!isset($CNF[$sField]) || !isset($this->aInputs[$CNF[$sField]]) || !isset($CNF[$sObject])) return; - $oPrivacy = BxDolPrivacy::getObjectInstance($CNF['OBJECT_PRIVACY_' . $Type]); + $oPrivacy = BxDolPrivacy::getObjectInstance($CNF[$sObject]); if(!$oPrivacy) return; + $this->aInputs[$CNF[$sField]]['content'] = $oPrivacy->addCssJs($bDynamicMode) . $this->aInputs[$CNF[$sField]]['content']; + } + + protected function _preparePrivacyField($sField, $sObject) + { + $CNF = &$this->_oModule->_oConfig->CNF; + + if(!isset($CNF[$sField]) || !isset($this->aInputs[$CNF[$sField]]) || !isset($CNF[$sObject])) + return; + + $oPrivacy = BxDolPrivacy::getObjectInstance($CNF[$sObject]); + if(!$oPrivacy) + return; $aSave = array('db' => array('pass' => 'Xss')); - array_walk($this->aInputs[$CNF['FIELD_ALLOW_' . $Type . '_TO']], function ($a, $k, $aSave) { + array_walk($this->aInputs[$CNF[$sField]], function ($a, $k, $aSave) { if (in_array($k, array('info', 'caption', 'value'))) $aSave[0][$k] = $a; }, array(&$aSave)); - $aGroupChooser = $oPrivacy->getGroupChooser($CNF['OBJECT_PRIVACY_' . $Type]); + $aGroupChooser = $oPrivacy->getGroupChooser($CNF[$sObject], 0, array( + 'dynamic_mode' => $this->_bDynamicMode + )); - $this->aInputs[$CNF['FIELD_ALLOW_' . $Type . '_TO']] = array_merge($this->aInputs[$CNF['FIELD_ALLOW_' . $Type . '_TO']], $aGroupChooser, $aSave); + $this->aInputs[$CNF[$sField]] = array_merge($this->aInputs[$CNF[$sField]], $aGroupChooser, $aSave); } - protected function _preloadPrivacyField($Type, $aValues) + protected function _preloadPrivacyField($sField, $sObject, $aValues) { $CNF = &$this->_oModule->_oConfig->CNF; - if(!isset($CNF['FIELD_ALLOW_' . $Type . '_TO']) || !isset($this->aInputs[$CNF['FIELD_ALLOW_' . $Type . '_TO']]) || !isset($CNF['OBJECT_PRIVACY_' . $Type])) + if(!isset($CNF[$sField]) || !isset($this->aInputs[$CNF[$sField]]) || !isset($CNF[$sObject])) return; - $oPrivacy = BxDolPrivacy::getObjectInstance($CNF['OBJECT_PRIVACY_' . $Type]); + $oPrivacy = BxDolPrivacy::getObjectInstance($CNF[$sObject]); if(!$oPrivacy) return; $iContentId = !empty($aValues[$CNF['FIELD_ID']]) ? (int)$aValues[$CNF['FIELD_ID']] : 0; $iProfileId = !empty($iContentId) ? (int)$this->getContentOwnerProfileId($iContentId) : bx_get_logged_profile_id(); - $iGroupId = !empty($aValues[$CNF['FIELD_ALLOW_' . $Type . '_TO']]) ? $aValues[$CNF['FIELD_ALLOW_' . $Type . '_TO']] : 0; + $iGroupId = !empty($aValues[$CNF[$sField]]) ? $aValues[$CNF[$sField]] : 0; - $sKey = $CNF['FIELD_ALLOW_' . $Type . '_TO']; + $sKey = $CNF[$sField]; if(!isset($this->aInputs[$sKey]['content'])) $this->aInputs[$sKey]['content'] = ''; diff --git a/modules/boonex/ads/js/entry.js b/modules/boonex/ads/js/entry.js index 5d1f29fede..ba8826ac6d 100644 --- a/modules/boonex/ads/js/entry.js +++ b/modules/boonex/ads/js/entry.js @@ -60,7 +60,7 @@ BxAdsEntry.prototype.onChangeCategory = function(oElement) { if(!sFormId) return; - $('#' + sFormId).replaceWith(oContent); + $('form#' + sFormId).replaceWith(oContent); }, 'json' ); diff --git a/template/scripts/BxBasePrivacy.php b/template/scripts/BxBasePrivacy.php index 6ea0b72964..49c35e5cf3 100644 --- a/template/scripts/BxBasePrivacy.php +++ b/template/scripts/BxBasePrivacy.php @@ -61,7 +61,7 @@ public function getJsScript($bDynamicMode = false) return $this->addCssJs($bDynamicMode) . $this->_oTemplate->_wrapInTagJsCode("if(window['" . $this->_sJsObjName . "'] == undefined) var " . $this->_sJsObjName . " = new " . $this->_sJsObjClass . "(" . json_encode($aParams) . ");"); } - protected function addCssJs($bDynamicMode = false) + public function addCssJs($bDynamicMode = false) { $sInclude = '';