/**
  * Инициализация
  *
  * @param string $sFileName Путь до файла лога профайлера
  * @param bool $bEnable Статус активности
  */
 protected function __construct($sFileName, $bEnable)
 {
     $this->bEnable = $bEnable;
     $this->sFileName = $sFileName;
     $this->sRequestId = func_generator(32);
     $this->iTimeId = 0;
 }
 protected function EventReceptiondeskAdd()
 {
     $this->Lang_AddLangJs(array('topic_photoset_photo_delete', 'topic_photoset_mark_as_preview', 'topic_photoset_photo_delete_confirm', 'topic_photoset_is_preview', 'topic_photoset_upload_choose', 'plugin.receptiondesk.receptiondesk_admin_question_create_author_files_remove', 'plugin.receptiondesk.receptiondesk_admin_question_create_author_files_remove_confirm'));
     $this->Viewer_AddHtmlTitle($this->Lang_Get('plugin.receptiondesk.receptiondesk_admin_question_create_title'));
     $this->sMenuItemSelect = 'receptiondesk_create';
     if (empty($_COOKIE['ls_receptiondesk_file_target_tmp'])) {
         setcookie('ls_receptiondesk_file_target_tmp', func_generator(), time() + 24 * 3600, Config::Get('sys.cookie.path'), Config::Get('sys.cookie.host'));
     } else {
         setcookie('ls_receptiondesk_file_target_tmp', $_COOKIE['ls_receptiondesk_file_target_tmp'], time() + 24 * 3600, Config::Get('sys.cookie.path'), Config::Get('sys.cookie.host'));
         $this->Viewer_Assign('aQuestionFiles', $this->PluginReceptiondesk_Tools_getFilesByTargetTmp($_COOKIE['ls_receptiondesk_file_target_tmp']));
     }
     $this->SetTemplateAction('create');
 }
 protected function EventSubscriptionAjaxSetSubscription()
 {
     $this->Viewer_SetResponseAjax('json');
     require_once Config::Get('path.root.engine') . '/lib/external/XXTEA/encrypt.php';
     if (!($sSubscriptionMail = getRequestStr('subscription_mail'))) {
         $this->Message_AddErrorSingle($this->Lang_Get('plugin.subscription.subscription_mail_error_empty'), $this->Lang_Get('error'));
         return;
     }
     $oSubscription = Engine::GetEntity('PluginSubscription_ModuleSubscription_EntitySubscription');
     $oSubscription->_setValidateScenario('subscription_mail');
     $oSubscription->setMail($sSubscriptionMail);
     $oSubscription->_Validate();
     if ($oSubscription->_hasValidateErrors()) {
         $this->Message_AddErrorSingle($oSubscription->_getValidateError());
         return false;
     }
     if ($oSubscription = $this->PluginSubscription_Subscription_GetSubscriptionByMail($sSubscriptionMail)) {
         if ($oSubscription->getUnsubscribeHash()) {
             $sUnsubscribeCode = $oSubscription->getUnsubscribeHash();
             $sUnsubscribeCode .= base64_encode(xxtea_encrypt($oSubscription->getMail(), $oSubscription->getUnsubscribeHash()));
             $sUnsubscribeCode = str_replace(array('/', '+'), array('{', '}'), $sUnsubscribeCode);
             $this->Notify_Send($oSubscription->getMail(), 'notify.subscription_unsubscription.tpl', $this->Lang_Get('plugin.subscription.subscription_mail_message_subject'), array('sUnsubscribeCode' => $sUnsubscribeCode), 'subscription');
             $this->Viewer_AssignAjax('sText', $this->Lang_Get('plugin.subscription.subscription_block_subscription_submit_unsubscrib_ok'));
         } else {
             if ($oSubscription->getSubscribeDate()) {
                 $this->Viewer_AssignAjax('sText', $this->Lang_Get('plugin.subscription.subscription_mail_error_used'));
             } else {
                 $sSubscribeCode = $oSubscription->getSubscribeHash();
                 $sSubscribeCode .= base64_encode(xxtea_encrypt($oSubscription->getMail(), $oSubscription->getSubscribeHash()));
                 $sSubscribeCode = str_replace(array('/', '+'), array('{', '}'), $sSubscribeCode);
                 $this->Notify_Send($oSubscription->getMail(), 'notify.subscription_subscription.tpl', $this->Lang_Get('plugin.subscription.subscription_mail_message_subject'), array('sSubscribeCode' => $sSubscribeCode), 'subscription');
                 $this->Viewer_AssignAjax('sText', $this->Lang_Get('plugin.subscription.subscription_block_subscription_submit_repeatedly_ok'));
             }
         }
     } else {
         $oSubscription = Engine::GetEntity('PluginSubscription_ModuleSubscription_EntitySubscription');
         $oSubscription->setMail($sSubscriptionMail);
         $oSubscription->setSubscribeHash(func_generator());
         if ($this->PluginSubscription_Subscription_AddSubscription($oSubscription)) {
             $sSubscribeCode = $oSubscription->getSubscribeHash();
             $sSubscribeCode .= base64_encode(xxtea_encrypt($oSubscription->getMail(), $oSubscription->getSubscribeHash()));
             $sSubscribeCode = str_replace(array('/', '+'), array('{', '}'), $sSubscribeCode);
             $this->Notify_Send($oSubscription->getMail(), 'notify.subscription_subscription.tpl', $this->Lang_Get('plugin.subscription.subscription_mail_message_subject'), array('sSubscribeCode' => $sSubscribeCode), 'subscription');
             $this->Viewer_AssignAjax('sText', $this->Lang_Get('plugin.subscription.subscription_block_subscription_submit_ok'));
         } else {
             $this->Viewer_AssignAjax('sText', $this->Lang_Get('system_error'));
         }
     }
     return true;
 }
 protected function EventSubscriptionNewsSubscribe()
 {
     if (!($sString = $this->GetParamEventMatch(1, 0))) {
         return parent::EventNotFound();
     }
     $sString = str_replace(array('{', '}'), array('/', '+'), $sString);
     $sHash = substr($sString, 0, 10);
     require_once Config::Get('path.root.engine') . '/lib/external/XXTEA/encrypt.php';
     $sMail = xxtea_decrypt(base64_decode(substr($sString, 10)), $sHash);
     if (!($oSubscription = $this->PluginSubscription_Subscription_GetSubscriptionByMail($sMail, $sHash))) {
         return parent::EventNotFound();
     }
     $oSubscription->setUnsubscribeHash(func_generator());
     $oSubscription->setSubscribeDate(date("Y-m-d H:i:s"));
     if (!$this->PluginSubscription_Subscription_UpdateSubscription($oSubscription)) {
         return parent::EventNotFound();
     }
     $this->SetTemplateAction('news_subscribe');
 }
 /**
  * Создает превью у файла для определенного типа
  *
  * @param $oMedia
  * @param $oTarget
  *
  * @return bool|string
  */
 public function CreateFilePreview($oMedia, $oTarget)
 {
     if (!$this->GetTargetTypeParam($oTarget->getTargetType(), 'allow_preview')) {
         return false;
     }
     /**
      * Нужно удалить прошлое превью (если оно есть)
      */
     $this->RemoveFilePreview($oMedia, $oTarget);
     if ($oMedia->getType() == self::MEDIA_TYPE_IMAGE) {
         $aParams = $this->Image_BuildParams('media.preview_' . $oTarget->getTargetType());
         if (!($oImage = $this->Image_OpenFrom($oMedia->getFilePath(), $aParams))) {
             return $this->Image_GetLastError();
         }
         /**
          * Сохраняем во временный файл
          */
         if (!($sFileTmp = $oImage->saveTmp())) {
             return $this->Image_GetLastError();
         }
         unset($oImage);
         /**
          * Получаем список необходимых размеров превью
          */
         $aSizes = $this->GetConfigParam('image.preview.sizes', $oTarget->getTargetType());
         /**
          * Каталог для сохранения превью
          */
         $sPath = $this->GetSaveDir($oTarget->getTargetType(), $oTarget->getTargetId(), 'preview');
         /**
          * Уникальное имя файла
          */
         $sFileName = func_generator(20);
         /**
          * Генерируем варианты с необходимыми размерами
          */
         $sFileLast = $this->GenerateImageBySizes($sFileTmp, $sPath, $sFileName, $aSizes, $aParams);
         $aSizeLast = end($aSizes);
         $sReplaceSize = '_' . $aSizeLast['w'] . 'x' . $aSizeLast['h'];
         if ($aSizeLast['crop']) {
             $sReplaceSize .= 'crop';
         }
         $sFileLast = str_replace($sReplaceSize, '', $sFileLast);
         /**
          * Теперь можно удалить временный файл
          */
         $this->Fs_RemoveFileLocal($sFileTmp);
         /**
          * Сохраняем данные во связи
          */
         $oTarget->setDataOne('image_preview_sizes', $aSizes);
         $oTarget->setDataOne('image_preview', $sFileLast);
         $oTarget->setIsPreview(1);
         $oTarget->Update();
         /**
          * Уведомляем объект о создании нового превью
          */
         if ($oTarget->getTargetId()) {
             $this->NotifyCreatePreviewTarget($oTarget->getTargetType(), $oTarget->getTargetId(), $oTarget);
         }
         return true;
     }
 }
 /**
  * Добавление ссылки
  *
  * @return unknown
  */
 protected function EventAdd()
 {
     /**
      * Проверяем авторизован ли юзер
      */
     if (!$this->User_IsAuthorization()) {
         $this->Message_AddErrorSingle($this->Lang_Get('not_access'), $this->Lang_Get('error'));
         return Router::Action('error');
     }
     /**
      * Меню
      */
     $this->sMenuSubItemSelect = 'add';
     /**
      * Загружаем переменные в шаблон
      */
     $this->Viewer_Assign('aBlogsAllow', $this->Blog_GetBlogsAllowByUser($this->oUserCurrent));
     $this->Viewer_AddHtmlTitle($this->Lang_Get('topic_photoset_title_create'));
     // Если нет временного ключа для нового топика, то генерируеи. если есть, то загружаем фото по этому ключу
     if (empty($_COOKIE['ls_photoset_target_tmp'])) {
         setcookie('ls_photoset_target_tmp', func_generator(), time() + 24 * 3600, Config::Get('sys.cookie.path'), Config::Get('sys.cookie.host'));
     } else {
         setcookie('ls_photoset_target_tmp', $_COOKIE['ls_photoset_target_tmp'], time() + 24 * 3600, Config::Get('sys.cookie.path'), Config::Get('sys.cookie.host'));
         $this->Viewer_Assign('aPhotos', $this->Topic_getPhotosByTargetTmp($_COOKIE['ls_photoset_target_tmp']));
     }
     /**
      * Обрабатываем отправку формы
      */
     return $this->SubmitAdd();
 }
 /**
  * Загрузка аватара в блог
  */
 protected function EventAjaxUploadAvatar()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('json');
     if (!isset($_FILES['photo']['tmp_name'])) {
         return $this->EventErrorDebug();
     }
     if (!($oBlog = $this->Blog_GetBlogById(getRequestStr('target_id')))) {
         return $this->EventErrorDebug();
     }
     if (!$oBlog->isAllowEdit()) {
         return $this->EventErrorDebug();
     }
     /**
      * Копируем загруженный файл
      */
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($_FILES['photo']['tmp_name'], $sFileTmp)) {
         return false;
     }
     /**
      * Если объект изображения не создан, возвращаем ошибку
      */
     if (!($oImage = $this->Image_Open($sFileTmp))) {
         $this->Fs_RemoveFileLocal($sFileTmp);
         $this->Message_AddError($this->Image_GetLastError());
         return;
     }
     /**
      * Ресайзим и сохраняем именьшенную копию
      * Храним две копии - мелкую для показа пользователю и крупную в качестве исходной для ресайза
      */
     $sDir = Config::Get('path.uploads.images') . "/tmp/blog/{$oBlog->getId()}";
     if ($sFileOriginal = $oImage->resize(1000, null)->saveSmart($sDir, 'original')) {
         if ($sFilePreview = $oImage->resize(350, null)->saveSmart($sDir, 'preview')) {
             list($iOriginalWidth, $iOriginalHeight) = @getimagesize($this->Fs_GetPathServer($sFileOriginal));
             list($iWidth, $iHeight) = @getimagesize($this->Fs_GetPathServer($sFilePreview));
             /**
              * Сохраняем в сессии временный файл с изображением
              */
             $this->Session_Set('sBlogAvatarFileTmp', $sFileOriginal);
             $this->Session_Set('sBlogAvatarFilePreviewTmp', $sFilePreview);
             $this->Viewer_AssignAjax('path', $this->Fs_GetPathWeb($sFilePreview));
             $this->Viewer_AssignAjax('original_width', $iOriginalWidth);
             $this->Viewer_AssignAjax('original_height', $iOriginalHeight);
             $this->Viewer_AssignAjax('width', $iWidth);
             $this->Viewer_AssignAjax('height', $iHeight);
             $this->Fs_RemoveFileLocal($sFileTmp);
             return;
         }
     }
     $this->Message_AddError($this->Image_GetLastError());
     $this->Fs_RemoveFileLocal($sFileTmp);
 }
 /**
  * Обработка напоминания пароля
  *
  */
 protected function EventReminder()
 {
     $this->Viewer_AddHtmlTitle($this->Lang_Get('password_reminder'));
     if ($this->GetParam(0) == 'send') {
         $this->SetTemplateAction('reminder_send');
         return;
     }
     /**
      * Проверка кода на восстановление пароля и генерация нового пароля
      */
     if (func_check($this->GetParam(0), 'md5')) {
         if ($oReminder = $this->User_GetReminderByCode($this->GetParam(0))) {
             if (!$oReminder->getIsUsed() and strtotime($oReminder->getDateExpire()) > time() and $oUser = $this->User_GetUserById($oReminder->getUserId())) {
                 $sNewPassword = func_generator(7);
                 $oUser->setPassword(func_encrypt($sNewPassword));
                 if ($this->User_Update($oUser)) {
                     $oReminder->setDateUsed(date("Y-m-d H:i:s"));
                     $oReminder->setIsUsed(1);
                     $this->User_UpdateReminder($oReminder);
                     $this->Notify_SendReminderPassword($oUser, $sNewPassword);
                     $this->SetTemplateAction('reminder_confirm');
                     return;
                 }
             }
         }
         $this->Message_AddErrorSingle($this->Lang_Get('password_reminder_bad_code'), $this->Lang_Get('error'));
         return Router::Action('error');
     }
     /**
      * Обрабатываем запрос на смену пароля
      */
     if (isPost('submit_reminder')) {
         if (func_check(getRequest('mail'), 'mail') and $oUser = $this->User_GetUserByMail(getRequest('mail'))) {
             /**
              * Формируем и отправляем ссылку на смену пароля
              */
             $oReminder = Engine::GetEntity('User_Reminder');
             $oReminder->setCode(func_generator(32));
             $oReminder->setDateAdd(date("Y-m-d H:i:s"));
             $oReminder->setDateExpire(date("Y-m-d H:i:s", time() + 60 * 60 * 24 * 7));
             $oReminder->setDateUsed(null);
             $oReminder->setIsUsed(0);
             $oReminder->setUserId($oUser->getId());
             if ($this->User_AddReminder($oReminder)) {
                 $this->Notify_SendReminderCode($oUser, $oReminder);
                 Router::Location(Router::GetPath('login') . 'reminder/send/');
             }
         } else {
             $this->Message_AddError($this->Lang_Get('password_reminder_bad_email'), $this->Lang_Get('error'));
         }
     }
 }
 /**
  * Сохраняет изображения в файл
  *
  * @param string $sDir	Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
  * @param string $sFile	Имя файла для сохранения, без расширения (расширение подставляется автоматически в зависимости от типа изображения)
  *
  * @return bool | string	При успешном сохранении возвращает полный путь до файла
  */
 public function saveSmart($sDir, $sFile)
 {
     if (!($oImage = $this->getImage())) {
         return false;
     }
     try {
         $sFormat = $this->getParam('format_auto') && $this->getFormat() ? $this->getFormat() : $this->getParam('format');
         $sFileTmp = Config::Get('path.tmp.server') . DIRECTORY_SEPARATOR . func_generator(20);
         $oImage->save($sFileTmp, array('format' => $sFormat, 'quality' => $this->getParam('quality')));
         $sFile .= '.' . $sFormat;
         return $this->Image_SaveFileSmart($sFileTmp, $sDir, $sFile, 0666, true);
     } catch (Exception $e) {
         $this->setLastError($e->getMessage());
         // TODO: fix exception for Gd driver
         if (strpos($e->getFile(), 'Imagine' . DIRECTORY_SEPARATOR . 'Gd')) {
             restore_error_handler();
         }
     }
     return false;
 }
 /**
  * Загрузка временной картинки для аватара
  */
 protected function EventUploadAvatar()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('jsonIframe', false);
     if (!isset($_FILES['avatar']['tmp_name'])) {
         return false;
     }
     /**
      * Копируем загруженный файл
      */
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($_FILES['avatar']['tmp_name'], $sFileTmp)) {
         return false;
     }
     /**
      * Ресайзим и сохраняем уменьшенную копию
      */
     $sDir = Config::Get('path.uploads.images') . "/tmp/avatars/{$this->oUserCurrent->getId()}";
     if ($sFileAvatar = $this->Image_Resize($sFileTmp, $sDir, 'original', Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), 200, null, true)) {
         /**
          * Зписываем в сессию
          */
         $this->Session_Set('sAvatarFileTmp', $sFileAvatar);
         $this->Viewer_AssignAjax('sTmpFile', $this->Image_GetWebPath($sFileAvatar));
     } else {
         $this->Message_AddError($this->Image_GetLastError(), $this->Lang_Get('error'));
     }
     unlink($sFileTmp);
 }
 /**
  * Сохраняет изображение в файл
  *
  * @param string $sDir Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
  * @param string $sFile Имя файла для сохранения, без расширения (расширение подставляется автоматически в зависимости от типа изображения)
  * @param array $aParamsSave Дополнительные опции сохранения, например, не делать вотермарк
  *
  * @return bool | string    При успешном сохранении возвращает полный путь до файла
  */
 public function saveSmart($sDir, $sFile, $aParamsSave = array())
 {
     $_this = $this;
     return $this->callExceptionMethod(function ($oImage) use($_this, $sDir, $sFile, $aParamsSave) {
         $sFormat = $_this->getParam('format_auto') && $_this->getFormat() ? $_this->getFormat() : $_this->getParam('format');
         $sFileTmp = Config::Get('path.tmp.server') . DIRECTORY_SEPARATOR . func_generator(20);
         $_this->internalSave($sFileTmp, $sFormat, $aParamsSave);
         $sFile .= '.' . $sFormat;
         return $_this->Image_SaveFileSmart($sFileTmp, $sDir, $sFile, 0666, true);
     });
 }
 /**
  * Resize,copy image,
  * make rounded corners and add watermark
  *
  * @param  string $sFileSrc Исходный файл изображения
  * @param  string $sDirDest Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
  * @param  string $sFileDest Имя файла для сохранения, без расширения
  * @param  int $iWidthMax Максимально допустимая ширина изображения
  * @param  int $iHeightMax Максимало допустимая высота изображения
  * @param  int|null $iWidthDest Ширина необходимого изображения на выходе
  * @param  int|null $iHeightDest Высота необходимого изображения на выходе
  * @param  bool $bForcedMinSize Растягивать изображение по ширине или нет, если исходное меньше. При false - изображение будет растянуто
  * @param  array|null $aParams Параметры
  * @param  LiveImage|null $oImage Объект изображения, если null то будет содано автоматически
  * @return string|bool  Полный серверный путь до сохраненного изображения
  */
 public function Resize($sFileSrc, $sDirDest, $sFileDest, $iWidthMax, $iHeightMax, $iWidthDest = null, $iHeightDest = null, $bForcedMinSize = true, $aParams = null, $oImage = null)
 {
     $this->ClearLastError();
     /**
      * Если параметры не переданы, устанавливаем действия по умолчанию
      */
     if (!is_array($aParams)) {
         $aParams = $this->aParamsDefault;
     }
     /**
      * Если объект не передан как параметр,
      * создаем новый
      */
     if (!$oImage) {
         $oImage = $this->CreateImageObject($sFileSrc);
     }
     if ($oImage->get_last_error()) {
         $this->SetLastError($oImage->get_last_error());
         return false;
     }
     $sFileDest .= '.' . $oImage->get_image_params('format');
     if ($oImage->get_image_params('width') > $iWidthMax or $oImage->get_image_params('height') > $iHeightMax) {
         return false;
     }
     if ($iWidthDest) {
         if ($bForcedMinSize and $iWidthDest > $oImage->get_image_params('width')) {
             $iWidthDest = $oImage->get_image_params('width');
         }
         /**
          * Ресайзим и выводим результат в файл.
          * Если не задана новая высота, то применяем масштабирование.
          * Если нужно добавить Watermark, то запрещаем ручное управление alfa-каналом
          */
         $oImage->resize($iWidthDest, $iHeightDest, !$iHeightDest, !$aParams['watermark_use']);
         /**
          * Добавляем watermark согласно в конфигурации заданым параметрам
          */
         if ($aParams['watermark_use']) {
             if ($oImage->get_image_params('width') > $aParams['watermark_min_width'] and $oImage->get_image_params('height') > $aParams['watermark_min_height']) {
                 switch ($aParams['watermark_type']) {
                     default:
                     case 'text':
                         $oImage->set_font($aParams['watermark_font_size'], 0, $aParams['path']['fonts'] . $aParams['watermark_font'] . '.ttf');
                         $oImage->watermark($aParams['watermark_text'], explode(',', $aParams['watermark_position'], 2), explode(',', $aParams['watermark_font_color']), explode(',', $aParams['watermark_back_color']), $aParams['watermark_font_alfa'], $aParams['watermark_back_alfa']);
                         break;
                     case 'image':
                         $oImage->paste_image($aParams['path']['watermarks'] . $aParams['watermark_image'], false, explode(',', $aParams['watermark_position'], 2));
                         break;
                 }
             }
         }
         /**
          * Скругляем углы
          */
         if ($aParams['round_corner']) {
             $oImage->round_corners($aParams['round_corner_radius'], $aParams['round_corner_rate']);
         }
         /**
          * Для JPG формата устанавливаем output quality, если это предусмотрено в конфигурации
          */
         if (isset($aParams['jpg_quality']) and $oImage->get_image_params('format') == 'jpg') {
             $oImage->set_jpg_quality($aParams['jpg_quality']);
         }
         $sFileTmp = Config::Get('sys.cache.dir') . func_generator(20);
         $oImage->output(null, $sFileTmp);
         return $this->SaveFile($sFileTmp, $sDirDest, $sFileDest, 0666, true);
     } else {
         return $this->SaveFile($sFileSrc, $sDirDest, $sFileDest, 0666, false);
     }
     return false;
 }
 /**
  * Дополнительная обработка перед сохранением значения
  * Здесь нужно выполнять основную загрузку файла
  */
 public function beforeSaveValue()
 {
     $oValue = $this->getValueObject();
     $oProperty = $oValue->getProperty();
     if (!($aFile = $oValue->getDataOne('file_raw'))) {
         return true;
     }
     $oValue->setDataOne('file_raw', null);
     /**
      * Удаляем предыдущий файл
      */
     if (isset($aFile['remove']) or isset($aFile['name'])) {
         if ($aFilePrev = $oValue->getDataOne('file')) {
             $this->RemoveFile($aFilePrev['path']);
             $oValue->setDataOne('file', array());
             $oValue->setValueVarchar(null);
         }
     }
     if (isset($aFile['name'])) {
         /**
          * Выполняем загрузку файла
          */
         $aPathInfo = pathinfo($aFile['name']);
         $sExtension = isset($aPathInfo['extension']) ? $aPathInfo['extension'] : 'unknown';
         $sFileName = func_generator(20) . '.' . $sExtension;
         /**
          * Копируем загруженный файл
          */
         $sDirTmp = Config::Get('path.tmp.server') . '/property/';
         if (!is_dir($sDirTmp)) {
             @mkdir($sDirTmp, 0777, true);
         }
         $sFileTmp = $sDirTmp . $sFileName;
         if (move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
             $sDirSave = Config::Get('path.root.server') . $oProperty->getSaveFileDir();
             if (!is_dir($sDirSave)) {
                 @mkdir($sDirSave, 0777, true);
             }
             $sFilePath = $sDirSave . $sFileName;
             /**
              * Сохраняем файл
              */
             if ($sFilePathNew = $this->SaveFile($sFileTmp, $sFilePath, null, true)) {
                 /**
                  * Сохраняем данные о файле
                  */
                 $oValue->setDataOne('file', array('path' => $sFilePathNew, 'size' => filesize($sFilePath), 'name' => htmlspecialchars($aPathInfo['filename']), 'extension' => htmlspecialchars($aPathInfo['extension'])));
                 /**
                  * Сохраняем уникальный ключ для доступа к файлу
                  */
                 $oValue->setValueVarchar(func_generator(32));
                 return true;
             }
         }
     }
 }
 /**
  * Показывает страничку регистрации и обрабатывает её
  *
  * @return unknown
  */
 protected function EventIndex()
 {
     /**
      * Если нажали кнопку "Зарегистрироваться"
      */
     if (isPost('submit_register')) {
         //Проверяем  входные данные
         $bError = false;
         /**
          * Проверка логина
          */
         if (!func_check(getRequest('login'), 'login', 3, 30)) {
             $this->Message_AddError($this->Lang_Get('registration_login_error'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * Проверка мыла
          */
         if (!func_check(getRequest('mail'), 'mail')) {
             $this->Message_AddError($this->Lang_Get('registration_mail_error'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * Проверка пароля
          */
         if (!func_check(getRequest('password'), 'password', 5)) {
             $this->Message_AddError($this->Lang_Get('registration_password_error'), $this->Lang_Get('error'));
             $bError = true;
         } elseif (getRequest('password') != getRequest('password_confirm')) {
             $this->Message_AddError($this->Lang_Get('registration_password_error_different'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * Проверка капчи(циферки с картинки)
          */
         if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring'] != strtolower(getRequest('captcha'))) {
             $this->Message_AddError($this->Lang_Get('registration_captcha_error'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * А не занят ли логин?
          */
         if ($this->User_GetUserByLogin(getRequest('login'))) {
             $this->Message_AddError($this->Lang_Get('registration_login_error_used'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * А не занято ли мыло?
          */
         if ($this->User_GetUserByMail(getRequest('mail'))) {
             $this->Message_AddError($this->Lang_Get('registration_mail_error_used'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * Если всё то пробуем зарегить
          */
         if (!$bError) {
             /**
              * Создаем юзера
              */
             $oUser = Engine::GetEntity('User');
             $oUser->setLogin(getRequest('login'));
             $oUser->setMail(getRequest('mail'));
             $oUser->setPassword(func_encrypt(getRequest('password')));
             $oUser->setDateRegister(date("Y-m-d H:i:s"));
             $oUser->setIpRegister(func_getIp());
             /**
              * Если используется активация, то генерим код активации
              */
             if (Config::Get('general.reg.activation')) {
                 $oUser->setActivate(0);
                 $oUser->setActivateKey(md5(func_generator() . time()));
             } else {
                 $oUser->setActivate(1);
                 $oUser->setActivateKey(null);
             }
             /**
              * Регистрируем
              */
             if ($this->User_Add($oUser)) {
                 /**
                  * Убиваем каптчу
                  */
                 unset($_SESSION['captcha_keystring']);
                 /**
                  * Создаем персональный блог
                  */
                 $this->Blog_CreatePersonalBlog($oUser);
                 /**
                  * Если юзер зарегистрировался по приглашению то обновляем инвайт
                  */
                 if (Config::Get('general.reg.invite') and $oInvite = $this->User_GetInviteByCode($this->GetInviteRegister())) {
                     $oInvite->setUserToId($oUser->getId());
                     $oInvite->setDateUsed(date("Y-m-d H:i:s"));
                     $oInvite->setUsed(1);
                     $this->User_UpdateInvite($oInvite);
                 }
                 /**
                  * Если стоит регистрация с активацией то проводим её
                  */
                 if (Config::Get('general.reg.activation')) {
                     /**
                      * Отправляем на мыло письмо о подтверждении регистрации						 
                      */
                     $this->Notify_SendRegistrationActivate($oUser, getRequest('password'));
                     Router::Location(Router::GetPath('registration') . 'confirm/');
                 } else {
                     $this->Notify_SendRegistration($oUser, getRequest('password'));
                     $this->Viewer_Assign('bRefreshToHome', true);
                     $oUser = $this->User_GetUserById($oUser->getId());
                     $this->User_Authorization($oUser, false);
                     $this->SetTemplateAction('ok');
                     $this->DropInviteRegister();
                 }
             } else {
                 $this->Message_AddErrorSingle($this->Lang_Get('system_error'));
                 return Router::Action('error');
             }
         }
     }
 }
 protected function EventMediaGenerateTargetTmp()
 {
     $sType = getRequestStr('type');
     if ($this->Media_IsAllowTargetType($sType)) {
         $sTmp = func_generator();
         $this->Session_SetCookie('media_target_tmp_' . $sType, $sTmp, time() + 24 * 3600);
         $this->Viewer_AssignAjax('sTmpKey', $sTmp);
     }
 }
Exemple #16
0
 /**
  * Загружает аватар в блог
  *
  * @param array $aFile	Массив $_FILES при загрузке аватара
  * @param ModuleBlog_EntityBlog $oBlog	Блог
  * @return bool
  */
 public function UploadBlogAvatar($aFile, $oBlog)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $sPath = $this->Image_GetIdDir($oBlog->getOwnerId()) . "blogs/" . $oBlog->getId() . "/";
     $aParams = $this->Image_BuildParams('avatar');
     $oImage = $this->Image_CreateImageObject($sFileTmp);
     /**
      * Если объект изображения не создан,
      * возвращаем ошибку
      */
     if ($sError = $oImage->get_last_error()) {
         // Вывод сообщения об ошибки, произошедшей при создании объекта изображения
         // $this->Message_AddError($sError,$this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     /**
      * Срезаем квадрат
      */
     $oImage = $this->Image_CropSquare($oImage);
     $aSize = Config::Get('module.blog.avatar_size');
     rsort($aSize, SORT_NUMERIC);
     $sSizeBig = array_shift($aSize);
     if ($oImage && ($sFileAvatar = $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}_{$sSizeBig}x{$sSizeBig}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $sSizeBig, $sSizeBig, false, $aParams, $oImage))) {
         foreach ($aSize as $iSize) {
             if ($iSize == 0) {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), null, null, false, $aParams, $oImage);
             } else {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}_{$iSize}x{$iSize}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $iSize, $iSize, false, $aParams, $oImage);
             }
         }
         @unlink($sFileTmp);
         /**
          * Если все нормально, возвращаем расширение загруженного аватара
          */
         return $this->Image_GetWebPath($sFileAvatar);
     }
     @unlink($sFileTmp);
     /**
      * В случае ошибки, возвращаем false
      */
     return false;
 }
Exemple #17
0
 /**
  * Формирование процесса смены емайла в профиле пользователя
  *
  * @param ModuleUser_EntityUser $oUser	Объект пользователя
  * @param string $sMailNew	Новый емайл
  * @return bool|ModuleUser_EntityChangemail
  */
 public function MakeUserChangemail($oUser, $sMailNew)
 {
     $oChangemail = Engine::GetEntity('ModuleUser_EntityChangemail');
     $oChangemail->setUserId($oUser->getId());
     $oChangemail->setDateAdd(date("Y-m-d H:i:s"));
     $oChangemail->setDateExpired(date("Y-m-d H:i:s", time() + 3 * 24 * 60 * 60));
     // 3 дня для смены емайла
     $oChangemail->setMailFrom($oUser->getMail() ? $oUser->getMail() : '');
     $oChangemail->setMailTo($sMailNew);
     $oChangemail->setCodeFrom(func_generator(32));
     $oChangemail->setCodeTo(func_generator(32));
     if ($this->AddUserChangemail($oChangemail)) {
         /**
          * Если у пользователя раньше не было емайла, то сразу шлем подтверждение на новый емайл
          */
         if (!$oChangemail->getMailFrom()) {
             $oChangemail->setConfirmFrom(1);
             $this->User_UpdateUserChangemail($oChangemail);
             /**
              * Отправляем уведомление на новый емайл
              */
             $this->Notify_Send($oChangemail->getMailTo(), 'notify.user_changemail_to.tpl', $this->Lang_Get('notify_subject_user_changemail'), array('oUser' => $oUser, 'oChangemail' => $oChangemail));
         } else {
             /**
              * Отправляем уведомление на старый емайл
              */
             $this->Notify_Send($oUser, 'notify.user_changemail_from.tpl', $this->Lang_Get('notify_subject_user_changemail'), array('oUser' => $oUser, 'oChangemail' => $oChangemail));
         }
         return $oChangemail;
     }
     return false;
 }
Exemple #18
0
 /**
  * Загрузка изображений по переданному URL
  *
  * @param  string          $sUrl
  * @param  ModuleUser_EntityUser $oUser
  * @return (string|bool)
  */
 public function UploadTopicImageUrl($sUrl, $oUser)
 {
     /**
      * Проверяем, является ли файл изображением
      */
     if (!@getimagesize($sUrl)) {
         return ModuleImage::UPLOAD_IMAGE_ERROR_TYPE;
     }
     /**
      * Открываем файловый поток и считываем файл поблочно,
      * контролируя максимальный размер изображения
      */
     $oFile = fopen($sUrl, 'r');
     if (!$oFile) {
         return ModuleImage::UPLOAD_IMAGE_ERROR_READ;
     }
     $iMaxSizeKb = 500;
     $iSizeKb = 0;
     $sContent = '';
     while (!feof($oFile) and $iSizeKb < $iMaxSizeKb) {
         $sContent .= fread($oFile, 1024 * 1);
         $iSizeKb++;
     }
     /**
      * Если конец файла не достигнут,
      * значит файл имеет недопустимый размер
      */
     if (!feof($oFile)) {
         return ModuleImage::UPLOAD_IMAGE_ERROR_SIZE;
     }
     fclose($oFile);
     /**
      * Создаем tmp-файл, для временного хранения изображения
      */
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     $fp = fopen($sFileTmp, 'w');
     fwrite($fp, $sContent);
     fclose($fp);
     $sDirSave = $this->Image_GetIdDir($oUser->getId());
     $aParams = $this->Image_BuildParams('topic');
     /**
      * Передаем изображение на обработку
      */
     if ($sFileImg = $this->Image_Resize($sFileTmp, $sDirSave, func_generator(), Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), Config::Get('view.img_resize_width'), null, true, $aParams)) {
         @unlink($sFileTmp);
         return $this->Image_GetWebPath($sFileImg);
     }
     @unlink($sFileTmp);
     return ModuleImage::UPLOAD_IMAGE_ERROR;
 }
 public function copyUploadFile()
 {
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     copy($_FILES['img_file']['tmp_name'], $sFileTmp);
     $_SESSION['tmp_upload_file'] = $sFileTmp;
 }
 /**
  * Генерирует случайный код
  *
  * @return string
  */
 protected function GenerateRandomCode()
 {
     return func_generator(10);
 }
 /**
  * Обработка напоминания пароля, подтверждение смены пароля
  *
  */
 protected function EventReminder()
 {
     /**
      * Устанавливаем title страницы
      */
     $this->Viewer_AddHtmlTitle($this->Lang_Get('password_reminder'));
     /**
      * Проверка кода на восстановление пароля и генерация нового пароля
      */
     if (func_check($this->GetParam(0), 'md5')) {
         /**
          * Проверка кода подтверждения
          */
         if ($oReminder = $this->User_GetReminderByCode($this->GetParam(0))) {
             if (!$oReminder->getIsUsed() and strtotime($oReminder->getDateExpire()) > time() and $oUser = $this->User_GetUserById($oReminder->getUserId())) {
                 $sNewPassword = func_generator(7);
                 $oUser->setPassword(func_encrypt($sNewPassword));
                 if ($this->User_Update($oUser)) {
                     $oReminder->setDateUsed(date("Y-m-d H:i:s"));
                     $oReminder->setIsUsed(1);
                     $this->User_UpdateReminder($oReminder);
                     $this->Notify_SendReminderPassword($oUser, $sNewPassword);
                     $this->SetTemplateAction('reminder_confirm');
                     return;
                 }
             }
         }
         $this->Message_AddErrorSingle($this->Lang_Get('password_reminder_bad_code'), $this->Lang_Get('error'));
         return Router::Action('error');
     }
 }
Exemple #22
0
 /**
  * Upload user foto
  *
  * @param  array           $aFile
  * @param  ModuleUser_EntityUser $oUser
  * @return string
  */
 public function UploadFoto($aFile, $oUser)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $sDirUpload = $this->Image_GetIdDir($oUser->getId());
     $aParams = $this->Image_BuildParams('foto');
     if ($sFileFoto = $this->Image_Resize($sFileTmp, $sDirUpload, func_generator(6), Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), 250, null, true, $aParams)) {
         @unlink($sFileTmp);
         /**
          * удаляем старое фото
          */
         $this->DeleteFoto($oUser);
         return $this->Image_GetWebPath($sFileFoto);
     }
     @unlink($sFileTmp);
     return false;
 }
 /**
  * Upload banner image
  *
  * @return boolean
  */
 public function UploadImage($aImageFile, $oBanner)
 {
     $sFileTmp = $aImageFile['tmp_name'];
     if (is_uploaded_file($sFileTmp)) {
         if (strlen(@$oBanner->getBannerImage())) {
             //remove old image file
             @unlink(Config::Get("plugin.banneroid.upload_dir") . $oBanner->getBannerImage());
         }
         $sFileName = func_generator();
         //gen new file name
         $aFileInfo = pathinfo($aImageFile['name']);
         $sFileName .= "." . $aFileInfo['extension'];
         if (!@move_uploaded_file($sFileTmp, Config::Get("plugin.banneroid.upload_dir") . $sFileName)) {
             return false;
         }
         $oBanner->setBannerImage($sFileName);
         return true;
     }
     return false;
 }
 /**
  * Создает подписку, если уже есть, то возвращает существующую
  *
  * @param string $sTargetType Тип
  * @param string $sTargetId ID владельца
  * @param string $sMail Емайл
  * @return ModuleSubscribe_EntitySubscribe|bool
  */
 public function AddSubscribeSimple($sTargetType, $sTargetId, $sMail, $sUserId = null)
 {
     if (!$sMail) {
         return false;
     }
     if (!($oSubscribe = $this->Subscribe_GetSubscribeByTargetAndMail($sTargetType, $sTargetId, $sMail))) {
         $oSubscribe = Engine::GetEntity('Subscribe');
         $oSubscribe->setTargetType($sTargetType);
         $oSubscribe->setTargetId($sTargetId);
         $oSubscribe->setMail($sMail);
         $oSubscribe->setDateAdd(date("Y-m-d H:i:s"));
         $oSubscribe->setKey(func_generator(32));
         $oSubscribe->setIp(func_getIp());
         $oSubscribe->setStatus(1);
         /**
          * Если только для авторизованных, то добавляем user_id
          */
         if ($sUserId and !$this->IsAllowTargetForGuest($sTargetType)) {
             $oSubscribe->setUserId($sUserId);
         }
         $this->Subscribe_AddSubscribe($oSubscribe);
     }
     return $oSubscribe;
 }
Exemple #25
0
 /**
  * Загрузить изображение
  *
  * @param array $aFile	Массив $_FILES
  * @return string|bool
  */
 public function UploadTopicPhoto($aFile)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileName = func_generator(10);
     $sPath = Config::Get('path.uploads.images') . '/topic/' . date('Y/m/d') . '/';
     if (!is_dir(Config::Get('path.root.server') . $sPath)) {
         mkdir(Config::Get('path.root.server') . $sPath, 0755, true);
     }
     $sFileTmp = Config::Get('path.root.server') . $sPath . $sFileName;
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $aParams = $this->Image_BuildParams('photoset');
     $oImage = $this->Image_CreateImageObject($sFileTmp);
     /**
      * Если объект изображения не создан,
      * возвращаем ошибку
      */
     if ($sError = $oImage->get_last_error()) {
         // Вывод сообщения об ошибки, произошедшей при создании объекта изображения
         $this->Message_AddError($sError, $this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     /**
      * Превышает максимальные размеры из конфига
      */
     if ($oImage->get_image_params('width') > Config::Get('view.img_max_width') or $oImage->get_image_params('height') > Config::Get('view.img_max_height')) {
         $this->Message_AddError($this->Lang_Get('topic_photoset_error_size'), $this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     /**
      * Добавляем к загруженному файлу расширение
      */
     $sFile = $sFileTmp . '.' . $oImage->get_image_params('format');
     rename($sFileTmp, $sFile);
     $aSizes = Config::Get('module.topic.photoset.size');
     foreach ($aSizes as $aSize) {
         /**
          * Для каждого указанного в конфиге размера генерируем картинку
          */
         $sNewFileName = $sFileName . '_' . $aSize['w'];
         $oImage = $this->Image_CreateImageObject($sFile);
         if ($aSize['crop']) {
             $this->Image_CropProportion($oImage, $aSize['w'], $aSize['h'], true);
             $sNewFileName .= 'crop';
         }
         $this->Image_Resize($sFile, $sPath, $sNewFileName, Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $aSize['w'], $aSize['h'], true, $aParams, $oImage);
     }
     return $this->Image_GetWebPath($sFile);
 }
 /**
  * Создает подписку, если уже есть, то возвращает существующую
  *
  * @param string $sTargetType	Тип
  * @param string $sTargetId	ID владельца
  * @param string $sMail	Емайл
  * @return ModuleSubscribe_EntitySubscribe|bool
  */
 public function AddSubscribeSimple($sTargetType, $sTargetId, $sMail)
 {
     if (!$sMail) {
         return false;
     }
     if (!($oSubscribe = $this->Subscribe_GetSubscribeByTargetAndMail($sTargetType, $sTargetId, $sMail))) {
         $oSubscribe = Engine::GetEntity('Subscribe');
         $oSubscribe->setTargetType($sTargetType);
         $oSubscribe->setTargetId($sTargetId);
         $oSubscribe->setMail($sMail);
         $oSubscribe->setDateAdd(date("Y-m-d H:i:s"));
         $oSubscribe->setKey(func_generator(32));
         $oSubscribe->setIp(func_getIp());
         $oSubscribe->setStatus(1);
         $this->Subscribe_AddSubscribe($oSubscribe);
     }
     return $oSubscribe;
 }
Exemple #27
0
 /**
  * Гинерирует уникальный идентификатор
  *
  * @return unknown
  */
 protected function GenerateId()
 {
     return md5(func_generator() . time());
 }
 /**
  * Обработка Ajax регистрации
  */
 protected function EventAjaxRegistration()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('json');
     /**
      * Создаем объект пользователя и устанавливаем сценарий валидации
      */
     $oUser = Engine::GetEntity('ModuleUser_EntityUser');
     $oUser->_setValidateScenario('registration');
     /**
      * Заполняем поля (данные)
      */
     $oUser->setLogin(getRequestStr('login'));
     $oUser->setMail(getRequestStr('mail'));
     $oUser->setPassword(getRequestStr('password'));
     $oUser->setPasswordConfirm(getRequestStr('password_confirm'));
     $oUser->setCaptcha(getRequestStr('captcha'));
     $oUser->setDateRegister(date("Y-m-d H:i:s"));
     $oUser->setIpRegister(func_getIp());
     /**
      * Если используется активация, то генерим код активации
      */
     if (Config::Get('general.reg.activation')) {
         $oUser->setActivate(0);
         $oUser->setActivateKey(md5(func_generator() . time()));
     } else {
         $oUser->setActivate(1);
         $oUser->setActivateKey(null);
     }
     $this->Hook_Run('registration_validate_before', array('oUser' => $oUser));
     /**
      * Запускаем валидацию
      */
     if ($oUser->_Validate()) {
         $this->Hook_Run('registration_validate_after', array('oUser' => $oUser));
         $oUser->setPassword(md5($oUser->getPassword()));
         if ($this->User_Add($oUser)) {
             $this->Hook_Run('registration_after', array('oUser' => $oUser));
             /**
              * Убиваем каптчу
              */
             unset($_SESSION['captcha_keystring']);
             /**
              * Подписываем пользователя на дефолтные события в ленте активности
              */
             $this->Stream_switchUserEventDefaultTypes($oUser->getId());
             /**
              * Если юзер зарегистрировался по приглашению то обновляем инвайт
              */
             if (Config::Get('general.reg.invite') and $oInvite = $this->User_GetInviteByCode($this->GetInviteRegister())) {
                 $oInvite->setUserToId($oUser->getId());
                 $oInvite->setDateUsed(date("Y-m-d H:i:s"));
                 $oInvite->setUsed(1);
                 $this->User_UpdateInvite($oInvite);
             }
             /**
              * Если стоит регистрация с активацией то проводим её
              */
             if (Config::Get('general.reg.activation')) {
                 /**
                  * Отправляем на мыло письмо о подтверждении регистрации
                  */
                 $this->Notify_SendRegistrationActivate($oUser, getRequestStr('password'));
                 $this->Viewer_AssignAjax('sUrlRedirect', Router::GetPath('registration') . 'confirm/');
             } else {
                 $this->Notify_SendRegistration($oUser, getRequestStr('password'));
                 $oUser = $this->User_GetUserById($oUser->getId());
                 /**
                  * Сразу авторизуем
                  */
                 $this->User_Authorization($oUser, false);
                 $this->DropInviteRegister();
                 /**
                  * Определяем URL для редиректа после авторизации
                  */
                 $sUrl = Config::Get('module.user.redirect_after_registration');
                 if (getRequestStr('return-path')) {
                     $sUrl = getRequestStr('return-path');
                 }
                 $this->Viewer_AssignAjax('sUrlRedirect', $sUrl ? $sUrl : Config::Get('path.root.web'));
                 $this->Message_AddNoticeSingle($this->Lang_Get('registration_ok'));
             }
         } else {
             $this->Message_AddErrorSingle($this->Lang_Get('system_error'));
             return;
         }
     } else {
         /**
          * Получаем ошибки
          */
         $this->Viewer_AssignAjax('aErrors', $oUser->_getValidateErrors());
     }
 }
Exemple #29
0
 public function UploadFile($aFile)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileName = func_generator();
     $sPath = Config::Get('plugin.receptiondesk.receptiondesk_create_file_path_uploads') . date('Y/m/d/H/i/s') . '/';
     if (!is_dir(Config::Get('path.root.server') . $sPath)) {
         mkdir(Config::Get('path.root.server') . $sPath, 0755, true);
     }
     $sFileTmp = Config::Get('path.root.server') . $sPath . $sFileName;
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $aParams = $this->Image_BuildParams('receptiondesk');
     $oImage = $this->Image_CreateImageObject($sFileTmp);
     if ($sError = $oImage->get_last_error()) {
         $this->Message_AddError($sError, $this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     if ($oImage->get_image_params('width') > Config::Get('plugin.receptiondesk.receptiondesk_create_file_max_width') || $oImage->get_image_params('height') > Config::Get('plugin.receptiondesk.receptiondesk_create_file_max_height')) {
         $this->Message_AddError($this->Lang_Get('plugin.receptiondesk.receptiondesk_admin_question_create_author_files_error_size'), $this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     $aFileInfo = pathinfo($aFile['name']);
     $sFileRealName = $this->GetTranslit($aFileInfo['filename']);
     $sFile = $sFileRealName . '.' . $oImage->get_image_params('format');
     rename($sFileTmp, $sFile);
     if ($sFileImage = $this->Image_Resize($sFile, $sPath, $sFileRealName, Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), Config::Get('view.img_resize_width'), null, true, $aParams)) {
         foreach (Config::Get('plugin.receptiondesk.receptiondesk_create_file_array_size') as $aSize) {
             $sNewFileName = $sFileRealName . '_' . $aSize['w'];
             $oImage = $this->Image_CreateImageObject($sFile);
             if ($aSize['crop']) {
                 $this->Image_CropProportion($oImage, $aSize['w'], $aSize['h'], true);
                 $sNewFileName .= 'crop';
             }
             $this->Image_Resize($sFile, $sPath, $sNewFileName, Config::Get('plugin.receptiondesk.receptiondesk_create_file_max_width'), Config::Get('plugin.receptiondesk.receptiondesk_create_file_max_height'), $aSize['w'], $aSize['h'], true, $aParams, $oImage);
         }
     }
     $oFile = Engine::GetEntity('PluginReceptiondesk_ModuleTools_EntityFile');
     $oFile->setPath($this->Image_GetWebPath($sFileImage));
     $oFile->setName($sFile);
     @unlink($sFile);
     return $oFile;
 }
 /**
  * Загружает файл на сервер
  *
  * @param	array	$aFile
  * @return	string
  */
 public function UploadAttach($aFile)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     /**
      * Генерируем случайное имя
      */
     $sFileName = func_generator(16);
     /**
      * TODO: Проверка типов файла
      */
     $sFullPath = Config::Get('plugin.forum.path_uploads_files') . '/' . date('Y/m/d') . '/';
     if (!is_dir($sFullPath)) {
         mkdir($sFullPath, 0755, true);
     }
     $sFilePath = $sFullPath . $sFileName;
     if (!move_uploaded_file($aFile['tmp_name'], $sFilePath)) {
         return false;
     }
     /**
      * TODO:
      * Вырезать путь 'plugin.forum.path_uploads_files'
      */
     return $this->Image_GetWebPath($sFilePath);
 }