/** * Инициализация * * @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); } }
/** * Загружает аватар в блог * * @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; }
/** * Формирование процесса смены емайла в профиле пользователя * * @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; }
/** * Загрузка изображений по переданному 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'); } }
/** * 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; }
/** * Загрузить изображение * * @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; }
/** * Гинерирует уникальный идентификатор * * @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()); } }
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); }