From c57923d6182cdbfadb7a2ba88e670375d700b521 Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Wed, 2 Sep 2015 16:06:50 +0700 Subject: [PATCH] fix media #708 --- .../classes/actions/ActionAjax.class.php | 10 ++++----- .../classes/modules/media/Media.class.php | 21 ++++++++++++++++++- application/config/config.php | 1 + application/frontend/i18n/ru.php | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/application/classes/actions/ActionAjax.class.php b/application/classes/actions/ActionAjax.class.php index b6cc775f..74d1e286 100644 --- a/application/classes/actions/ActionAjax.class.php +++ b/application/classes/actions/ActionAjax.class.php @@ -145,7 +145,7 @@ class ActionAjax extends Action $oViewer = $this->Viewer_GetLocalViewer(); // Получаем переменные - $bSelectable = (bool) getRequest('selectable'); + $bSelectable = (bool)getRequest('selectable'); // Получаем список друзей $aUsersFriend = $this->User_GetUsersFriend($this->oUserCurrent->getId()); @@ -547,7 +547,7 @@ class ActionAjax extends Action return $this->EventErrorDebug(); } if (true !== $res = $this->Media_CheckTarget($sTargetType, null, ModuleMedia::TYPE_CHECK_ALLOW_ADD, - array('user' => $this->oUserCurrent)) + array('user' => $this->oUserCurrent), $sTargetTmp) ) { $this->Message_AddError(is_string($res) ? $res : $this->Lang_Get('common.error.system.base'), $this->Lang_Get('common.error.error')); @@ -932,7 +932,7 @@ class ActionAjax extends Action return $this->EventErrorDebug(); } if (true !== $res = $this->Media_CheckTarget($sTargetType, null, ModuleMedia::TYPE_CHECK_ALLOW_ADD, - array('user' => $this->oUserCurrent)) + array('user' => $this->oUserCurrent), $sTargetTmp) ) { $this->Message_AddError(is_string($res) ? $res : $this->Lang_Get('common.error.system.base'), $this->Lang_Get('common.error.error')); @@ -1772,7 +1772,7 @@ class ActionAjax extends Action if (!($sValue = getRequest('value', null, 'post')) or !is_string($sValue)) { return; } - $bReturnExtended=getRequest('extended') ?: false; + $bReturnExtended = getRequest('extended') ?: false; $aItems = array(); /** * Формируем список пользователей @@ -1782,7 +1782,7 @@ class ActionAjax extends Action if ($bReturnExtended) { $aItems[] = array( 'value' => $oUser->getId(), - 'text' => $oUser->getLogin(), + 'text' => $oUser->getLogin(), ); } else { $aItems[] = $oUser->getLogin(); diff --git a/application/classes/modules/media/Media.class.php b/application/classes/modules/media/Media.class.php index 305b58c0..881dfb19 100644 --- a/application/classes/modules/media/Media.class.php +++ b/application/classes/modules/media/Media.class.php @@ -214,13 +214,32 @@ class ModuleMedia extends ModuleORM * @param int $iTargetId ID владельца * @param string $sAllowType * @param array $aParams + * @param string|null $sTargetTmp * @return bool */ - public function CheckTarget($sTargetType, $iTargetId = null, $sAllowType = null, $aParams = array()) + public function CheckTarget($sTargetType, $iTargetId = null, $sAllowType = null, $aParams = array(), $sTargetTmp = null) { if (!$this->IsAllowTargetType($sTargetType)) { return false; } + /** + * Проверка на максимальное количество файлов + */ + if ($sAllowType == self::TYPE_CHECK_ALLOW_ADD and ($iTargetId or $sTargetTmp)) { + $iCountAllow = $this->GetConfigParam('max_count_files', $sTargetType); + if (is_numeric($iCountAllow)) { + $aFilterCount = array('target_type' => $sTargetType); + if ($iTargetId) { + $aFilterCount['target_id'] = $iTargetId; + } else { + $aFilterCount['target_tmp'] = $sTargetTmp; + } + $iCount = $this->getCountFromTargetByFilter($aFilterCount); + if ($iCount >= $iCountAllow) { + return $this->Lang_Get('media.error.max_count_files'); + } + } + } $sMethod = 'CheckTarget' . func_camelize($sTargetType); if (method_exists($this, $sMethod)) { if (!array_key_exists('user', $aParams)) { diff --git a/application/config/config.php b/application/config/config.php index 2d99c33e..4cca939f 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -282,6 +282,7 @@ $config['module']['image']['params']['blog_avatar']['size_max_height'] = 1000; * Модуль Media */ $config['module']['media']['max_size'] = 3*1024; // Максимальный размер файла в kB +$config['module']['media']['max_count_files'] = 30; // Максимальное количество файлов медиа у одного объекта $config['module']['media']['image']['max_size'] = 5*1024; // Максимальный размер файла изображения в kB $config['module']['media']['image']['autoresize'] = true; // Разрешает автоматическое создание изображений нужного размера при их запросе $config['module']['media']['image']['original'] = '1500x'; // Размер для хранения оригинала. Если true, то будет сохраняться исходный оригинал без ресайза. Если false, то оригинал сохраняться не будет diff --git a/application/frontend/i18n/ru.php b/application/frontend/i18n/ru.php index 7328578e..bfe48404 100644 --- a/application/frontend/i18n/ru.php +++ b/application/frontend/i18n/ru.php @@ -1550,6 +1550,7 @@ return array( 'not_image' => 'Файл не является изображением', 'too_large' => 'Превышен максимальный размер файла: %%size%%Кб', 'incorrect_type' => 'Неверный тип файла', + 'max_count_files' => 'Превышено максимальное число файлов', ), 'nav' => array( 'insert' => 'Вставить',