本文整理汇总了PHP中E::ModuleHook方法的典型用法代码示例。如果您正苦于以下问题:PHP E::ModuleHook方法的具体用法?PHP E::ModuleHook怎么用?PHP E::ModuleHook使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类E
的用法示例。
在下文中一共展示了E::ModuleHook方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: Init
/**
* Инициализация модуля
*
*/
public function Init()
{
E::ModuleHook()->Run('lang_init_start');
$this->sDefaultLang = Config::Get('lang.default');
$this->aLangPaths = F::File_NormPath(Config::Get('lang.paths'));
// Проверку на языки делаем, только если сайт мультиязычный
if (Config::Get('lang.multilang')) {
// Время хранение языка в куках
$nSavePeriod = F::ToSeconds(Config::Get('lang.save'));
$sLangKey = is_string(Config::Get('lang.in_get')) ? Config::Get('lang.in_get') : 'lang';
// Получаем язык, если он был задан в URL
$this->sCurrentLang = R::GetLang();
// Проверка куки, если требуется
if (!$this->sCurrentLang && $nSavePeriod) {
$sLang = (string) E::ModuleSession()->GetCookie($sLangKey);
if ($sLang) {
$this->sCurrentLang = $sLang;
}
}
if (!$this->sCurrentLang) {
$this->sCurrentLang = Config::Get('lang.current');
}
} else {
$this->sCurrentLang = Config::Get('lang.current');
}
// Проверяем на случай старого обозначения языков
$this->sDefaultLang = $this->_checkLang($this->sDefaultLang);
$this->sCurrentLang = $this->_checkLang($this->sCurrentLang);
if ($this->sCurrentLang && Config::Get('lang.multilang') && $nSavePeriod) {
// Пишем в куки, если требуется
E::ModuleSession()->SetCookie($sLangKey, $this->sCurrentLang, $nSavePeriod);
}
$this->InitLang();
}
示例2: smarty_function_hook
/**
* Плагин для смарти
* Запускает хуки из шаблона на выполнение
*
* @param array $aParams
* @param Smarty $oSmarty
*
* @return string
*/
function smarty_function_hook($aParams, &$oSmarty)
{
if (empty($aParams['run'])) {
trigger_error('Hook: missing "run" parametr', E_USER_WARNING);
return;
}
$sReturn = '';
if (strpos($aParams['run'], ',')) {
$aHooks = F::Array_Str2Array($aParams['run']);
unset($aParams['run']);
foreach ($aHooks as $sHook) {
$aParams['run'] = $sHook;
$sReturn .= smarty_function_hook($aParams, $oSmarty);
}
} else {
$sHookName = 'template_' . strtolower($aParams['run']);
unset($aParams['run']);
$aResultHook = E::ModuleHook()->Run($sHookName, $aParams);
if (array_key_exists('template_result', $aResultHook)) {
$sReturn = join('', $aResultHook['template_result']);
}
if (!empty($aParams['assign'])) {
$oSmarty->assign($aParams['assign'], $sReturn);
$sReturn = '';
}
}
return $sReturn;
}
示例3: Init
/**
* Инициализация модуля
*
*/
public function Init()
{
E::ModuleHook()->Run('lang_init_start');
$this->sDefaultLang = Config::Get('lang.default');
$this->aLangPaths = F::File_NormPath(Config::Get('lang.paths'));
$this->bDeleteUndefinedVars = Config::Get('module.lang.delete_undefined');
// Allowed languages
$aLangsAllow = (array) Config::Get('lang.allow');
// Проверку на языки делаем, только если сайт мультиязычный
if (Config::Get('lang.multilang')) {
// Время хранение языка в куках
$iSavePeriod = F::ToSeconds(Config::Get('lang.save'));
$sLangKey = is_string(Config::Get('lang.in_get')) ? Config::Get('lang.in_get') : 'lang';
// Получаем язык, если он был задан в URL
$this->sCurrentLang = R::GetLang();
// Проверка куки, если требуется
if (!$this->sCurrentLang && $iSavePeriod) {
$sLang = (string) E::ModuleSession()->GetCookie($sLangKey);
if ($sLang) {
$this->sCurrentLang = $sLang;
}
}
if (!$this->sCurrentLang) {
$this->sCurrentLang = Config::Get('lang.current');
}
} else {
$this->sCurrentLang = Config::Get('lang.current');
$iSavePeriod = 0;
$sLangKey = null;
}
// Current language must be in allowed languages
if (!in_array($this->sCurrentLang, $aLangsAllow)) {
$this->sCurrentLang = reset($aLangsAllow);
}
// Проверяем на случай старого обозначения языков
$this->sDefaultLang = $this->_checkLang($this->sDefaultLang);
$this->sCurrentLang = $this->_checkLang($this->sCurrentLang);
if ($this->sCurrentLang && Config::Get('lang.multilang') && $iSavePeriod) {
// Пишем в куки, если требуется
E::ModuleSession()->SetCookie($sLangKey, $this->sCurrentLang, $iSavePeriod);
}
$this->InitLang();
}
示例4: EventSandbox
public function EventSandbox()
{
// * Меню
$this->sMenuSubItemSelect = 'sandbox';
// * Передан ли номер страницы
$iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
// * Получаем список топиков
$aResult = E::ModuleTopic()->GetTopicsNewAll($iPage, Config::Get('module.topic.per_page'));
$aTopics = $aResult['collection'];
// * Вызов хуков
E::ModuleHook()->Run('topics_list_show', array('aTopics' => $aTopics));
// * Формируем постраничность
$aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), R::GetPath('index/sandbox'));
E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('plugin.sandbox.menu_text') . ($iPage > 1 ? ' (' . $iPage . ')' : ''));
// * Загружаем переменные в шаблон
E::ModuleViewer()->Assign('aTopics', $aTopics);
E::ModuleViewer()->Assign('aPaging', $aPaging);
// * Устанавливаем шаблон вывода
$this->SetTemplateAction('index');
}
示例5: EventCreatedDrafts
/**
* Список черновиков пользователя
*/
protected function EventCreatedDrafts()
{
if (!$this->CheckUserProfile()) {
return parent::EventNotFound();
}
if (!E::IsAdmin()) {
return parent::EventNotFound();
}
$this->sMenuSubItemSelect = 'draft';
/**
* Передан ли номер страницы
*/
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
/**
* Получаем список топиков
*/
$aResult = E::ModuleTopic()->GetDraftsPersonalByUser($this->oUserProfile->getId(), $iPage, Config::Get('module.topic.per_page'));
$aTopics = $aResult['collection'];
/**
* Вызов хуков
*/
E::ModuleHook()->Run('topics_list_show', array('aTopics' => $aTopics));
/**
* Формируем постраничность
*/
$aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), $this->oUserProfile->getUserUrl() . 'created/draft');
/**
* Загружаем переменные в шаблон
*/
E::ModuleViewer()->Assign('aPaging', $aPaging);
E::ModuleViewer()->Assign('aTopics', $aTopics);
E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('user_menu_publication') . ' ' . $this->oUserProfile->getLogin());
E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('user_menu_publication_blog'));
E::ModuleViewer()->SetHtmlRssAlternate(Router::GetPath('rss') . 'personal_blog/' . $this->oUserProfile->getLogin() . '/', $this->oUserProfile->getLogin());
/**
* Устанавливаем шаблон вывода
*/
$this->SetTemplateAction('created_topics');
}
示例6: EventTags
/**
* Отображение топиков
*
*/
protected function EventTags()
{
// * Gets tag from URL
$sTag = F::UrlDecode(R::Url('event'), true);
// * Check page number
$iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
// * Gets topics list
$aResult = E::ModuleTopic()->GetTopicsByTag($sTag, $iPage, Config::Get('module.topic.per_page'));
$aTopics = $aResult['collection'];
// * Calls hooks
E::ModuleHook()->Run('topics_list_show', array('aTopics' => $aTopics));
// * Makes pages
$aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), R::GetPath('tag') . htmlspecialchars($sTag));
// * Loads variables to template
E::ModuleViewer()->Assign('aPaging', $aPaging);
E::ModuleViewer()->Assign('aTopics', $aTopics);
E::ModuleViewer()->Assign('sTag', $sTag);
E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('tag_title'));
E::ModuleViewer()->AddHtmlTitle($sTag);
E::ModuleViewer()->SetHtmlRssAlternate(R::GetPath('rss') . 'tag/' . $sTag . '/', $sTag);
// * Sets template for display
$this->SetTemplateAction('index');
}
示例7: EventCreatedSandbox
public function EventCreatedSandbox()
{
if (!$this->CheckUserProfile()) {
return parent::EventNotFound();
}
$this->sMenuSubItemSelect = 'sandbox';
// * Передан ли номер страницы
$iPage = $this->GetParamEventMatch(2, 2) ? $this->GetParamEventMatch(2, 2) : 1;
// * Получаем список топиков
$aResult = E::ModuleTopic()->GetTopicsSandboxByUser($this->oUserProfile->getId(), $iPage, Config::Get('module.topic.per_page'));
$aTopics = $aResult['collection'];
// * Вызов хуков
E::ModuleHook()->Run('topics_list_show', array('aTopics' => $aTopics));
// * Формируем постраничность
$aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), $this->oUserProfile->getUserUrl() . 'created/sandbox');
// * Загружаем переменные в шаблон
E::ModuleViewer()->Assign('aPaging', $aPaging);
E::ModuleViewer()->Assign('aTopics', $aTopics);
E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('user_menu_publication') . ' ' . $this->oUserProfile->getLogin());
E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('plugin.sandbox.menu_text'));
// * Устанавливаем шаблон вывода
$this->SetTemplateAction('created_topics');
}
示例8: EventDraft
/**
* Вывод всех черновиков
*/
protected function EventDraft()
{
if (!E::IsAdmin()) {
return parent::EventNotFound();
}
E::ModuleViewer()->SetHtmlRssAlternate(Router::GetPath('rss') . 'draft/', Config::Get('view.name'));
/**
* Меню
*/
$this->sMenuSubItemSelect = 'draft';
/**
* Передан ли номер страницы
*/
$iPage = $this->GetParamEventMatch(0, 2) ? $this->GetParamEventMatch(0, 2) : 1;
/**
* Получаем список топиков
*/
$aResult = E::ModuleTopic()->GetTopicsDraftAll($iPage, Config::Get('module.topic.per_page'));
$aTopics = $aResult['collection'];
/**
* Вызов хуков
*/
E::ModuleHook()->Run('topics_list_show', array('aTopics' => $aTopics));
/**
* Формируем постраничность
*/
$aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.topic.per_page'), Config::Get('pagination.pages.count'), Router::GetPath('index') . 'draft');
/**
* Загружаем переменные в шаблон
*/
E::ModuleViewer()->Assign('aTopics', $aTopics);
E::ModuleViewer()->Assign('aPaging', $aPaging);
/**
* Устанавливаем шаблон вывода
*/
$this->SetTemplateAction('index');
}
示例9: GetSourceResult
public function GetSourceResult()
{
return E::ModuleHook()->GetSourceResult();
}
示例10: SnippetParser
/**
* Разбирает текст и анализирует его на наличие сниппетов.
* Если они найдены, то запускает хуки для их обработки.
*
* @version 0.1 Базовый функционал
* @version 0.2 Добавлены блочный и шаблонный сниппеты
*
* @param string $sText
*
* @return string
*/
public function SnippetParser($sText)
{
// Массив регулярки для поиска сниппетов
$aSnippetRegexp = array('~<alto:(\\w+)((?:\\s+\\w+(?:\\s*=\\s*(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>\\s]+))?)*)\\s*>([.\\s\\S\\r\\n]*)</alto:\\1>~Ui', '~<alto:(\\w+)((?:\\s+\\w+(?:\\s*=\\s*(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>\\s]+))?)*)\\s*\\/*>~Ui');
// Получим массив: сниппетов, их имён и параметров по каждой регклярке
// Здесь получаем в $aMatches три/четыре массива из которых первым идет массив найденных сниппетов,
// который позже будет заменён на результат полученный от хука. Вторым массивом идут имена
// найденных сниппетов, которые будут использоваться для формирвоания имени хука.
// Третим массивом будут идти параметры сниппетов. Если сниппет блочный, то четвертым параметром
// будет текст-содержимое блока.
foreach ($aSnippetRegexp as $sRegExp) {
if (preg_match_all($sRegExp, $sText, $aMatches)) {
// Данные для замены сниппетов на полученный код.
$aReplaceData = array();
/**
* @var int $k Порядковый номер найденного сниппета
* @var string $sSnippetName Имя (идентификатор) сниппета
*/
foreach ($aMatches[1] as $k => $sSnippetName) {
// Получим параметры в виде массива. Вообще-то их может и не быть воовсе,
// но мы всё-таки попробуем это сделать...
$aParams = array();
if (preg_match_all('~([a-zA-Z]+)\\s*=\\s*[\'"]([^\'"]+)[\'"]~Ui', $aMatches[2][$k], $aMatchesParams)) {
foreach ($aMatchesParams[1] as $pk => $sParamName) {
$aParams[$sParamName] = @$aMatchesParams[2][$pk];
}
}
// Добавим в параметры текст, который был в топике, вдруг какой-нибудь сниппет
// захочет с ним поработать.
$aParams['target_text'] = $sText;
// Если это блочный сниппет, то добавим в параметры еще и текст блока
$aParams['snippet_text'] = isset($aMatches[3][$k]) ? $aMatches[3][$k] : '';
// Добавим в параметры имя сниппета
$aParams['snippet_name'] = $sSnippetName;
// Попытаемся получить результат от обработчика
// Может сниппет уже был в обработке, тогда просто возьмем его из кэша
$sCacheKey = $sSnippetName . md5(serialize($aParams));
if (FALSE === ($sResult = E::ModuleCache()->GetTmp($sCacheKey))) {
// Определим тип сниппета, может быть шаблонным, а может и исполняемым
// по умолчанию сниппет ссчитаем исполняемым. Если шаблонный, то его
// обрабатывает предопределенный хук snippet_template_type
$sHookName = 'snippet_' . $sSnippetName;
$sHookName = E::ModuleHook()->IsEnabled($sHookName) ? 'snippet_' . $sSnippetName : 'snippet_template_type';
// Установим хук
E::ModuleHook()->Run($sHookName, array('params' => &$aParams, 'result' => &$sResult));
// Запишем результат обработки в кэш
E::ModuleCache()->SetTmp($sResult, $sCacheKey);
}
$aReplaceData[$k] = is_string($sResult) ? $sResult : '';
}
// Произведем замену. Если обработчиков не было, то сниппеты
// будут заменены на пустую строку.
$sText = str_replace(array_values($aMatches[0]), array_values($aReplaceData), $sText);
}
}
return $sText;
}
示例11: _initRender
/**
* Initialization of render before Fetch() or Display()
*/
protected function _initRender()
{
E::ModuleHook()->Run('render_init_start', array('bLocal' => $this->bLocal));
// If skin not initialized (or it was changed) then init one
if ($this->sViewSkin != $this->GetConfigSkin()) {
$this->_initSkin($this->bLocal);
} else {
// Level could be changed after skin initialization
Config::SetLevel(Config::LEVEL_SKIN);
}
// init templator if not yet
$this->_initTemplator();
// Loads localized texts
$this->Assign('aLang', E::ModuleLang()->GetLangMsg());
$this->Assign('oLang', E::ModuleLang()->Dictionary());
if (!$this->bLocal && !$this->GetResponseAjax()) {
// Initialization of assets (JS-, CSS-files)
$this->InitAssetFiles();
}
E::ModuleHook()->Run('render_init_done', array('bLocal' => $this->bLocal));
}
示例12: checkTopicFields
/**
* Проверка полей формы
*
* @param $oTopic
*
* @return bool
*/
protected function checkTopicFields($oTopic)
{
E::ModuleSecurity()->ValidateSendForm();
$bOk = true;
/**
* Валидируем топик
*/
if (!$oTopic->_Validate()) {
E::ModuleMessage()->AddError($oTopic->_getValidateError(), E::ModuleLang()->Get('error'));
$bOk = false;
}
/**
* Выполнение хуков
*/
E::ModuleHook()->Run('check_topic_fields', array('bOk' => &$bOk));
return $bOk;
}
示例13: EventMultiUpload
/**
* Загружаем картинку
*/
public function EventMultiUpload()
{
// Устанавливаем формат Ajax ответа
E::ModuleViewer()->SetResponseAjax('json', FALSE);
E::ModuleSecurity()->ValidateSendForm();
// Проверяем, загружен ли файл
if (!($aUploadedFile = $this->GetUploadedFile('uploader-upload-image'))) {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('error_upload_image'), E::ModuleLang()->Get('error'));
return false;
}
$sTarget = F::GetRequest('target', FALSE);
$sTargetId = F::GetRequest('target_id', FALSE);
$oTarget = E::ModuleUploader()->CheckAccessAndGetTarget($sTarget, $sTargetId);
$bTmp = F::GetRequest('tmp', FALSE);
$bTmp = $bTmp == 'true' ? true : false;
// Проверяем, целевой объект и права на его редактирование
if (!$oTarget) {
// Здесь два варианта, либо редактировать нельзя, либо можно, но топика еще нет
if ($oTarget === TRUE) {
// Будем делать временную картинку
} else {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
return false;
}
}
// Ошибок пока нет
$sError = '';
// Сделаем временный файд
$sTmpFile = E::ModuleUploader()->UploadLocal($aUploadedFile);
// Вызовем хук перед началом загрузки картинки
E::ModuleHook()->Run('uploader_upload_before', array('oTarget' => $oTarget, 'sTmpFile' => $sTmpFile, 'sTarget' => $sTarget));
// Если все ок, и по миме проходит, то
if ($sTmpFile && E::ModuleImg()->MimeType($sTmpFile)) {
// Проверим, проходит ли по количеству
if (!E::ModuleUploader()->GetAllowedCount($sTarget = F::GetRequest('target', FALSE), $sTargetId = F::GetRequest('target_id', FALSE))) {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('uploader_photoset_error_count_photos', array('MAX' => Config::Get('module.topic.photoset.count_photos_max'))), E::ModuleLang()->Get('error'));
return FALSE;
}
// Определим, существует ли объект или он будет создан позже
if (!($sTmpKey = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) && $sTargetId == '0' && $bTmp) {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('error_upload_image'), E::ModuleLang()->Get('error'));
return FALSE;
}
// Пересохраним файл из кэша
// Сохраняем фото во временный файл
$oImg = E::ModuleImg()->Read($sTmpFile);
$sExtension = strtolower(pathinfo($sTmpFile, PATHINFO_EXTENSION));
if (!($sTmpFile = $oImg->Save(F::File_UploadUniqname($sExtension)))) {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('error_upload_image'), E::ModuleLang()->Get('error'));
return FALSE;
}
// Окончательная запись файла только через модуль Uploader
if ($oStoredFile = E::ModuleUploader()->StoreImage($sTmpFile, $sTarget, $sTargetId, null, true)) {
/** @var ModuleMresource_EntityMresource $oResource */
//$oResource = $this->AddUploadedFileRelationInfo($oStoredFile, $sTarget, $sTargetId, TRUE);
$oResource = E::ModuleMresource()->GetMresourcesByUuid($oStoredFile->getUuid());
$sFile = $oStoredFile->GetUrl();
if ($oResource) {
$oResource->setType(ModuleMresource::TYPE_PHOTO);
E::ModuleMresource()->UpdateType($oResource);
}
$sFilePreview = $sFile;
if ($sSize = F::GetRequest('crop_size', FALSE)) {
$sFilePreview = E::ModuleUploader()->ResizeTargetImage($sFile, $sSize);
}
// Запускаем хук на действия после загрузки картинки
E::ModuleHook()->Run('uploader_upload_image_after', array('sFile' => $sFile, 'sFilePreview' => $sFilePreview, 'sTargetId' => $sTargetId, 'sTarget' => $sTarget, 'oTarget' => $oTarget));
E::ModuleViewer()->AssignAjax('file', $sFilePreview);
E::ModuleViewer()->AssignAjax('id', $oResource->getMresourceId());
// Чистим
E::ModuleImg()->Delete($sTmpFile);
return TRUE;
}
} else {
// Ошибки загрузки картинки
$sError = E::ModuleUploader()->GetErrorMsg();
if (!$sError) {
$sError = E::ModuleLang()->Get('error_upload_image');
}
}
// Выведем ошибки пользователю
E::ModuleMessage()->AddError($sError, E::ModuleLang()->Get('error'));
// Удалим ранее загруженый файл
F::File_Delete($sTmpFile);
}
示例14: evaluate
/**
* hook:hook_name
* text:just_a_text
* func:func_name
* conf:some.config.key
*
* @param mixed $xExpression
* @param array $aParams
*
* @return mixed
*/
public static function evaluate($xExpression, $aParams = array())
{
if (is_bool($xExpression)) {
return $xExpression;
} elseif (is_numeric($xExpression)) {
return (int) $xExpression;
} elseif (is_object($xExpression)) {
return $xExpression();
} elseif (is_string($xExpression) && strpos($xExpression, ':')) {
list($sType, $sName) = explode(':', $xExpression, 2);
if ($sType === 'hook') {
return E::ModuleHook()->Run($sName, $aParams, false);
} elseif ($sType === 'text') {
return $sName;
} elseif ($sType === 'func') {
return call_user_func($sName, $aParams);
} elseif ($sType === 'call') {
return call_user_func($sName, $aParams);
} elseif ($sType === 'conf') {
return C::Get($sName);
}
}
return $xExpression;
}
示例15: processTopicFields
//.........这里部分代码省略.........
if (!$iMaxFileSize || filesize($_FILES['fields_' . $oField->getFieldId()]['tmp_name']) <= $iMaxFileSize) {
$aPathInfo = pathinfo($_FILES['fields_' . $oField->getFieldId()]['name']);
if (!$aFileExtensions || in_array(strtolower($aPathInfo['extension']), $aFileExtensions)) {
$sFileTmp = $_FILES['fields_' . $oField->getFieldId()]['tmp_name'];
$sDirSave = Config::Get('path.uploads.root') . '/files/' . E::ModuleUser()->GetUserCurrent()->getId() . '/' . F::RandomStr(16);
mkdir(Config::Get('path.root.dir') . $sDirSave, 0777, true);
if (is_dir(Config::Get('path.root.dir') . $sDirSave)) {
$sFile = $sDirSave . '/' . F::RandomStr(10) . '.' . strtolower($aPathInfo['extension']);
$sFileFullPath = Config::Get('path.root.dir') . $sFile;
if (copy($sFileTmp, $sFileFullPath)) {
//удаляем старый файл
if ($oTopic->getFieldFile($oField->getFieldId())) {
$sOldFile = Config::Get('path.root.dir') . $oTopic->getFieldFile($oField->getFieldId())->getFileUrl();
F::File_Delete($sOldFile);
}
$aFileObj = array();
$aFileObj['file_hash'] = F::RandomStr(32);
$aFileObj['file_name'] = E::ModuleText()->Parser($_FILES['fields_' . $oField->getFieldId()]['name']);
$aFileObj['file_url'] = $sFile;
$aFileObj['file_size'] = $_FILES['fields_' . $oField->getFieldId()]['size'];
$aFileObj['file_extension'] = $aPathInfo['extension'];
$aFileObj['file_downloads'] = 0;
$sData = serialize($aFileObj);
F::File_Delete($sFileTmp);
}
}
} else {
$sTypes = implode(', ', $aFileExtensions);
E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_field_file_upload_err_type', array('types' => $sTypes)), null, true);
}
} else {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_field_file_upload_err_size', array('size' => $iMaxFileSize)), null, true);
}
F::File_Delete($_FILES['fields_' . $oField->getFieldId()]['tmp_name']);
}
}
// Поле с изображением
if ($oField->getFieldType() == 'single-image-uploader') {
$sTargetType = $oField->getFieldType() . '-' . $oField->getFieldId();
$iTargetId = $oTopic->getId();
// 1. Удалить значение target_tmp
// Нужно затереть временный ключ в ресурсах, что бы в дальнейшем картнка не
// воспринималась как временная.
if ($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) {
// 2. Удалить куку.
// Если прозошло сохранение вновь созданного топика, то нужно
// удалить куку временной картинки. Если же сохранялся уже существующий топик,
// то удаление куки ни на что влиять не будет.
E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
// 3. Переместить фото
$sNewPath = E::ModuleUploader()->GetUserImageDir(E::UserId(), true, false);
$aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, 0, E::UserId());
if ($aMresourceRel) {
$oResource = array_shift($aMresourceRel);
$sOldPath = $oResource->GetFile();
$oStoredFile = E::ModuleUploader()->Store($sOldPath, $sNewPath);
/** @var ModuleMresource_EntityMresource $oResource */
$oResource = E::ModuleMresource()->GetMresourcesByUuid($oStoredFile->getUuid());
if ($oResource) {
$oResource->setUrl(E::ModuleMresource()->NormalizeUrl(E::ModuleUploader()->GetTargetUrl($sTargetType, $iTargetId)));
$oResource->setType($sTargetType);
$oResource->setUserId(E::UserId());
// 4. В свойство поля записать адрес картинки
$sData = $oResource->getMresourceId();
$oResource = array($oResource);
E::ModuleMresource()->UnlinkFile($sTargetType, 0, $oTopic->getUserId());
E::ModuleMresource()->AddTargetRel($oResource, $sTargetType, $iTargetId);
}
}
} else {
// Топик редактируется, просто обновим поле
$aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
if ($aMresourceRel) {
$oResource = array_shift($aMresourceRel);
$sData = $oResource->getMresourceId();
} else {
$sData = false;
// $this->DeleteField($oField);
}
}
}
E::ModuleHook()->Run('content_field_proccess', array('sData' => &$sData, 'oField' => $oField, 'oTopic' => $oTopic, 'aValues' => $aValues, 'sType' => &$sType));
//Добавляем поле к топику.
if ($sData) {
/** @var ModuleTopic_EntityContentValues $oValue */
$oValue = E::GetEntity('Topic_ContentValues');
$oValue->setTargetId($oTopic->getId());
$oValue->setTargetType('topic');
$oValue->setFieldId($oField->getFieldId());
$oValue->setFieldType($oField->getFieldType());
$oValue->setValue($sData);
$oValue->setValueSource(in_array($oField->getFieldType(), array('file', 'single-image-uploader')) ? $sData : $_REQUEST['fields'][$oField->getFieldId()]);
$this->AddTopicValue($oValue);
}
}
}
}
}
return true;
}