コード例 #1
0
ファイル: index.php プロジェクト: hard990/altocms
 /**
  * Запрос данных администратора и сохранение их в базе данных
  *
  */
 protected function StepAdmin()
 {
     $this->SetSessionVar(self::SESSION_KEY_STEP_NAME, 'Admin');
     $this->SetStep('Admin');
     // * Передаем данные из запроса во вьювер, сохраняя значение в сессии
     $this->Assign('install_admin_login', $this->GetRequest('install_admin_login', 'admin', self::GET_VAR_FROM_SESSION), self::SET_VAR_IN_SESSION);
     $this->Assign('install_admin_mail', $this->GetRequest('install_admin_mail', '*****@*****.**', self::GET_VAR_FROM_SESSION), self::SET_VAR_IN_SESSION);
     // * Если данные формы не были отправлены, передаем значения по умолчанию
     if (!$this->GetRequest('install_admin_params', false)) {
         return $this->Layout('steps/admin.tpl');
     }
     // * Проверяем валидность введенных данных
     list($bResult, $aErrors) = $this->ValidateAdminFields();
     if (!$bResult) {
         foreach ($aErrors as $sError) {
             $this->aMessages[] = array('type' => 'error', 'text' => $sError);
         }
         $this->Layout('steps/admin.tpl');
         return false;
     }
     // * Подключаемся к базе данных и сохраняем новые данные администратора
     $aParams = $this->GetSessionVar('INSTALL_DATABASE_PARAMS');
     $oDb = $this->ValidateDBConnection($aParams);
     if (!$oDb) {
         $this->aMessages[] = array('type' => 'error', 'text' => $this->Lang('error_db_connection_invalid'));
         $this->Layout('steps/admin.tpl');
         return false;
     }
     $this->SelectDatabase($oDb, $aParams['name']);
     $sLocalConfigFile = $this->sConfigDir . '/' . self::LOCAL_CONFIG_FILE_NAME;
     if (!$this->bSkipAdmin) {
         // make and save "salt"
         $aSalt = array();
         $this->SaveConfig('security.salt_sess', $aSalt['sess'] = F::RandomStr(64, false), $sLocalConfigFile);
         $this->SaveConfig('security.salt_pass', $aSalt['pass'] = F::RandomStr(64, false), $sLocalConfigFile);
         $this->SaveConfig('security.salt_auth', $aSalt['auth'] = F::RandomStr(64, false), $sLocalConfigFile);
         // make salted password
         $sPass = F::DoSalt($this->GetRequest('install_admin_pass'), $aSalt['pass']);
         $bUpdated = $this->UpdateDBUser($oDb, $this->GetRequest('install_admin_login'), $sPass, $this->GetRequest('install_admin_mail'), $aParams['prefix']);
         if (!$bUpdated) {
             $this->aMessages[] = array('type' => 'error', 'text' => $this->Lang('error_db_saved') . '<br />' . mysqli_error($oDb));
             $this->Layout('steps/admin.tpl');
             return false;
         }
         // * Обновляем данные о пользовательском блоге
         $this->UpdateUserBlog($oDb, 'Blog by ' . $this->GetRequest('install_admin_login'), $aParams['prefix']);
     }
     // * Передаем управление на следующий шаг
     return $this->StepEnd();
 }
コード例 #2
0
ファイル: ActionLogin.class.php プロジェクト: hard990/altocms
 protected function _eventRecoverySend($sRecoveryCode)
 {
     /** @var ModuleUser_EntityReminder $oReminder */
     if ($oReminder = E::ModuleUser()->GetReminderByCode($sRecoveryCode)) {
         /** @var ModuleUser_EntityUser $oUser */
         if ($oReminder->IsValid() && ($oUser = E::ModuleUser()->GetUserById($oReminder->getUserId()))) {
             $sNewPassword = F::RandomStr(7);
             $oUser->setPassword($sNewPassword, true);
             if (E::ModuleUser()->Update($oUser)) {
                 // Do logout of current user
                 E::ModuleUser()->Logout();
                 // Close all sessions of this user
                 E::ModuleUser()->CloseAllSessions($oUser);
                 $oReminder->setDateUsed(F::Now());
                 $oReminder->setIsUsed(1);
                 E::ModuleUser()->UpdateReminder($oReminder);
                 E::ModuleNotify()->SendReminderPassword($oUser, $sNewPassword);
                 $this->SetTemplateAction('reminder_confirm');
                 if (($sUrl = F::GetPost('return_url')) || ($sUrl = F::GetPost('return-path'))) {
                     E::ModuleViewer()->Assign('return-path', $sUrl);
                 }
                 return true;
             }
         }
     }
     return false;
 }
コード例 #3
0
 /**
  * @param string $sFile
  *
  * @return string|bool
  */
 public function SaveUpload($sFile)
 {
     if ($oImage = $this->GetImage()) {
         if ($sTmpFile = F::File_GetUploadDir() . F::RandomStr() . '.' . pathinfo($sFile, PATHINFO_EXTENSION)) {
             if (F::File_CheckDir(dirname($sTmpFile))) {
                 $oImage->save($sTmpFile);
                 if (E::ModuleUploader()->Move($sTmpFile, $sFile)) {
                     return $sFile;
                 }
             }
         }
     }
     return false;
 }
コード例 #4
0
ファイル: User.class.php プロジェクト: AntiqS/altocms
 /**
  * Формирование процесса смены емайла в профиле пользователя
  *
  * @param ModuleUser_EntityUser $oUser       Объект пользователя
  * @param string                $sMailNew    Новый емайл
  *
  * @return bool|ModuleUser_EntityChangemail
  */
 public function MakeUserChangemail($oUser, $sMailNew)
 {
     /** @var ModuleUser_EntityChangemail $oChangemail */
     $oChangemail = E::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(F::RandomStr(32));
     $oChangemail->setCodeTo(F::RandomStr(32));
     if ($this->AddUserChangemail($oChangemail)) {
         // * Если у пользователя раньше не было емайла, то сразу шлем подтверждение на новый емайл
         if (!$oChangemail->getMailFrom()) {
             $oChangemail->setConfirmFrom(1);
             E::ModuleUser()->UpdateUserChangemail($oChangemail);
             // * Отправляем уведомление на новый емайл
             E::ModuleNotify()->Send($oChangemail->getMailTo(), 'user_changemail_to.tpl', E::ModuleLang()->Get('notify_subject_user_changemail'), array('oUser' => $oUser, 'oChangemail' => $oChangemail), null, true);
         } else {
             // * Отправляем уведомление на старый емайл
             E::ModuleNotify()->Send($oUser, 'user_changemail_from.tpl', E::ModuleLang()->Get('notify_subject_user_changemail'), array('oUser' => $oUser, 'oChangemail' => $oChangemail), null, true);
         }
         return $oChangemail;
     }
     return false;
 }
コード例 #5
0
ファイル: ActionAdmin.class.php プロジェクト: ZeoNish/altocms
 protected function _eventMenuEdit()
 {
     // * Получаем тип
     $sMenuId = $this->GetParam(1);
     if (!($oMenu = E::ModuleMenu()->GetMenu($sMenuId))) {
         return parent::EventNotFound();
     }
     E::ModuleViewer()->Assign('oMenu', $oMenu);
     if (strpos($oMenu->getId(), 'submenu_') === 0) {
         E::ModuleViewer()->Assign('isSubMenu', E::ModuleLang()->Get('action.admin.menu_manager_submenu'));
     }
     // * Устанавливаем шаблон вывода
     $this->_setTitle(E::ModuleLang()->Get('action.admin.menu_manager_edit_menu'));
     $this->SetTemplateAction('settings/menumanager_edit');
     // * Проверяем отправлена ли форма с данными
     if (getRequestPost('submit_add_new_item')) {
         if (!(($sItemLink = trim(F::GetRequestStr('menu-item-link'))) && ($sItemTitle = trim(F::GetRequestStr('menu-item-title'))))) {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('menu_manager_item_add_error'), E::ModuleLang()->Get('error'));
             return null;
         }
         $sRoot = F::GetRequest('menu-item-place');
         if ($sRoot == 'root_item') {
             $sItemName = F::RandomStr(10);
             // Добавим имя в объявление
             $aAllowedData = array_values(Config::Get("menu.data.{$oMenu->getId()}.init.fill.list"));
             if (count($aAllowedData) > 1 && isset($aAllowedData[0]) && $aAllowedData[0] == '*') {
                 unset($aAllowedData[0]);
             }
             if (is_array($aAllowedData) && isset($aAllowedData[0]) && $aAllowedData[0] == '*') {
                 $aAllowedData = array_keys(Config::Get("menu.data.{$oMenu->getId()}.list"));
             }
             $aNewItems = array_merge($aAllowedData, array($sItemName));
             $sMenuKey = "menu.data.{$oMenu->getId()}";
             $aMenu = C::Get($sMenuKey);
             $aMenu['init']['fill']['list'] = $aNewItems;
             // Добавим имя в список
             $aNewItemConfig = array($sItemName => array('text' => $sItemTitle, 'link' => $sItemLink, 'active' => false));
             $aNewItemConfig = array_merge(Config::Get("menu.data.{$oMenu->getId()}.list"), $aNewItemConfig);
             $aMenu['list'] = $aNewItemConfig;
             Config::WriteCustomConfig(array($sMenuKey => $aMenu), false);
             R::Location("admin/settings-menumanager/edit/{$sMenuId}");
             return null;
         } elseif ($sRoot) {
             // Разрешенные идентификаторы меню
             $aAllowedData = array_values(Config::Get("menu.data.{$oMenu->getId()}.init.fill.list"));
             if (count($aAllowedData) > 1 && isset($aAllowedData[0]) && $aAllowedData[0] == '*') {
                 unset($aAllowedData[0]);
             }
             if (is_array($aAllowedData) && isset($aAllowedData[0]) && $aAllowedData[0] == '*') {
                 $aAllowedData = array_keys(Config::Get("menu.data.{$oMenu->getId()}.list"));
             }
             if (!in_array($sRoot, $aAllowedData)) {
                 E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('menu_manager_item_add_error'), E::ModuleLang()->Get('error'));
                 return null;
             }
             // Проверим есть ли подменю для этого элемента?
             $sSubMenuName = Config::Get("menu.data.{$oMenu->getId()}.list.{$sRoot}.submenu");
             if (!$sSubMenuName) {
                 $sSubMenuName = 'submenu_' . F::RandomStr(10);
                 // Сохраним указатель на подменю
                 $sMenuListKey = "menu.data.{$oMenu->getId()}";
                 $aMenu = C::Get($sMenuListKey);
                 if ($aMenu) {
                     $aMenu['list'][$sRoot]['submenu'] = $sSubMenuName;
                     C::WriteCustomConfig(array($sMenuListKey => $aMenu), false);
                 }
                 // Сохраним само пордменю
                 $aSubmenu = array('init' => array('fill' => array('list' => array('*'))), 'list' => array());
                 Config::WriteCustomConfig(array("menu.data.{$sSubMenuName}" => $aSubmenu), false);
             }
             // Добавим новый элемент в подменю
             $sItemName = F::RandomStr(10);
             // Добавим имя в объявление
             $sMenuKey = "menu.data.{$sSubMenuName}";
             $aMenu = C::Get($sMenuKey);
             $aAllowedData = isset($aMenu['init']['fill']['list']) ? array_values($aMenu['init']['fill']['list']) : array();
             if (is_array($aAllowedData) && isset($aAllowedData[0]) && $aAllowedData[0] == '*') {
                 $aAllowedData = isset($aMenu['list']) ? array_keys($aMenu['list']) : array();
             }
             if (count($aAllowedData) > 1 && isset($aAllowedData[0]) && $aAllowedData[0] == '*') {
                 unset($aAllowedData[0]);
             }
             $aNewItems = array_merge($aAllowedData, array($sItemName));
             $aMenu['init']['fill']['list'] = $aNewItems;
             // Добавим имя в список
             $aNewItemConfig = array($sItemName => array('text' => $sItemTitle, 'link' => $sItemLink, 'active' => false));
             $aNewItemConfig = array_merge(isset($aMenu['list']) ? $aMenu['list'] : array(), $aNewItemConfig);
             $aMenu['list'] = $aNewItemConfig;
             Config::WriteCustomConfig(array($sMenuKey => $aMenu), false);
             R::Location("admin/settings-menumanager/edit/{$sMenuId}");
             return null;
         }
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('menu_manager_item_add_error'), E::ModuleLang()->Get('error'));
         return null;
     }
     return null;
 }
コード例 #6
0
ファイル: File.php プロジェクト: Azany/altocms
 /**
  * Возвращает уникальное имя файла для конкретной папки
  *
  * @param     $sDir
  * @param     $sExtension
  * @param int $nLength
  *
  * @return string
  */
 public static function Uniqname($sDir, $sExtension, $nLength = 8)
 {
     $sFileName = F::RandomStr($nLength) . ($sExtension ? '.' . trim($sExtension, '.') : '');
     while (static::Exists($sDir . '/' . $sFileName)) {
         $sFileName = static::Uniqname($sDir, $sExtension, $nLength);
     }
     return static::NormPath($sDir . '/' . $sFileName);
 }
コード例 #7
0
 /**
  * Обработка Ajax регистрации
  */
 protected function EventAjaxRegistration()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     E::ModuleSecurity()->ValidateSendForm();
     // * Создаем объект пользователя и устанавливаем сценарий валидации
     /** @var ModuleUser_EntityUser $oUser */
     $oUser = E::GetEntity('ModuleUser_EntityUser');
     $oUser->_setValidateScenario('registration');
     // * Заполняем поля (данные)
     $oUser->setLogin($this->GetPost('login'));
     $oUser->setMail($this->GetPost('mail'));
     $oUser->setPassword($this->GetPost('password'));
     $oUser->setPasswordConfirm($this->GetPost('password_confirm'));
     $oUser->setCaptcha($this->GetPost('captcha'));
     $oUser->setDateRegister(F::Now());
     $oUser->setIpRegister(F::GetUserIp());
     // * Если используется активация, то генерим код активации
     if (Config::Get('general.reg.activation')) {
         $oUser->setActivate(0);
         $oUser->setActivationKey(F::RandomStr());
     } else {
         $oUser->setActivate(1);
         $oUser->setActivationKey(null);
     }
     E::ModuleHook()->Run('registration_validate_before', array('oUser' => $oUser));
     // * Запускаем валидацию
     if ($oUser->_Validate()) {
         // Сбросим капчу // issue#342.
         E::ModuleSession()->Drop(E::ModuleCaptcha()->GetKeyName());
         E::ModuleHook()->Run('registration_validate_after', array('oUser' => $oUser));
         $oUser->setPassword($oUser->getPassword(), true);
         if ($this->_addUser($oUser)) {
             E::ModuleHook()->Run('registration_after', array('oUser' => $oUser));
             // * Подписываем пользователя на дефолтные события в ленте активности
             E::ModuleStream()->SwitchUserEventDefaultTypes($oUser->getId());
             // * Если юзер зарегистрировался по приглашению то обновляем инвайт
             if (Config::Get('general.reg.invite') && ($oInvite = E::ModuleUser()->GetInviteByCode($this->GetInviteRegister()))) {
                 $oInvite->setUserToId($oUser->getId());
                 $oInvite->setDateUsed(F::Now());
                 $oInvite->setUsed(1);
                 E::ModuleUser()->UpdateInvite($oInvite);
             }
             // * Если стоит регистрация с активацией то проводим её
             if (Config::Get('general.reg.activation')) {
                 // * Отправляем на мыло письмо о подтверждении регистрации
                 E::ModuleNotify()->SendRegistrationActivate($oUser, F::GetRequestStr('password'));
                 E::ModuleViewer()->AssignAjax('sUrlRedirect', R::GetPath('registration') . 'confirm/');
             } else {
                 E::ModuleNotify()->SendRegistration($oUser, F::GetRequestStr('password'));
                 $oUser = E::ModuleUser()->GetUserById($oUser->getId());
                 // * Сразу авторизуем
                 E::ModuleUser()->Authorization($oUser, false);
                 $this->DropInviteRegister();
                 // * Определяем URL для редиректа после авторизации
                 $sUrl = Config::Get('module.user.redirect_after_registration');
                 if (F::GetRequestStr('return-path')) {
                     $sUrl = F::GetRequestStr('return-path');
                 }
                 E::ModuleViewer()->AssignAjax('sUrlRedirect', $sUrl ? $sUrl : Config::Get('path.root.url'));
                 E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('registration_ok'));
             }
         } else {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'));
             return;
         }
     } else {
         // * Получаем ошибки
         E::ModuleViewer()->AssignAjax('aErrors', $oUser->_getValidateErrors());
     }
 }
コード例 #8
0
ファイル: Subscribe.class.php プロジェクト: hard990/altocms
 /**
  * Создает подписку, если уже есть, то возвращает существующую
  *
  * @param string $sTargetType    Тип
  * @param string $sTargetId      ID владельца
  * @param string $sUserId        ID юзера
  *
  * @return ModuleSubscribe_EntityTrack|bool
  */
 public function AddTrackSimple($sTargetType, $sTargetId, $sUserId)
 {
     if (!$sUserId) {
         return false;
     }
     if (!($oTrack = E::ModuleSubscribe()->GetTrackByTargetAndUser($sTargetType, $sTargetId, $sUserId))) {
         $oTrack = E::GetEntity('ModuleSubscribe_EntityTrack');
         $oTrack->setTargetType($sTargetType);
         $oTrack->setTargetId($sTargetId);
         $oTrack->setUserId($sUserId);
         $oTrack->setDateAdd(date('Y-m-d H:i:s'));
         $oTrack->setKey(F::RandomStr(32));
         $oTrack->setIp(F::GetUserIp());
         $oTrack->setStatus(1);
         E::ModuleSubscribe()->AddTrack($oTrack);
     }
     return $oTrack;
 }
コード例 #9
0
ファイル: Security.class.php プロジェクト: ZeoNish/altocms
 /**
  * Generates security key for the current session
  *
  * @return string
  */
 protected function _generateSecurityKey()
 {
     // Сохраняем текущий ключ для ajax-запросов
     if (F::AjaxRequest() && ($sKey = E::ModuleSession()->Get($this->sSecurityKeyName))) {
         return $sKey;
     }
     if (Config::Get('module.security.randomkey')) {
         return F::RandomStr($this->sSecurityKeyLen);
     } else {
         //return md5(E::ModuleSession()->GetId().Config::Get('module.security.hash'));
         return md5($this->GetUniqKey() . $this->GetClientHash() . Config::Get('module.security.hash'));
     }
 }
コード例 #10
0
 /**
  * Добавление топика
  *
  * @return mixed
  */
 protected function EventAdd()
 {
     // * Устанавливаем шаблон вывода
     $this->SetTemplateAction('add');
     E::ModuleViewer()->Assign('sMode', 'add');
     // * Вызов хуков
     E::ModuleHook()->Run('topic_add_show');
     // * Получаем тип контента
     if (!($this->oContentType = E::ModuleTopic()->GetContentTypeByUrl($this->sCurrentEvent))) {
         if (!($this->oContentType = E::ModuleTopic()->GetContentTypeDefault())) {
             return parent::EventNotFound();
         }
     }
     E::ModuleViewer()->Assign('oContentType', $this->oContentType);
     $this->sMenuSubItemSelect = $this->oContentType->getContentUrl();
     // * Если тип контента не доступен текущему юзеру
     if (!$this->oContentType->isAccessible()) {
         return parent::EventNotFound();
     }
     $aBlogFilter = array('user' => $this->oUserCurrent, 'content_type' => $this->oContentType);
     $aBlogsAllow = $this->_getAllowBlogs($aBlogFilter);
     // Такой тип контента не разрешен для пользователя ни в одном из типов блогов
     if (!$aBlogsAllow) {
         return parent::EventNotFound();
     }
     // Проверим можно ли писать в персональный блог такой тип контента
     /** @var ModuleBlog_EntityBlog $oAllowedBlog */
     $this->bPersonalBlogEnabled = FALSE;
     foreach ($aBlogsAllow as $oAllowedBlog) {
         // Нашли среди разрешенных персональный блог
         if ($oAllowedBlog->getType() == 'personal') {
             if (!$oAllowedBlog->getBlogType()->getContentTypes()) {
                 // типы контента не определены, значит, разрешен любой
                 $this->bPersonalBlogEnabled = TRUE;
             } else {
                 foreach ($oAllowedBlog->getBlogType()->getContentTypes() as $oContentType) {
                     if ($oContentType->getId() == $this->oContentType->getId()) {
                         $this->bPersonalBlogEnabled = TRUE;
                         break;
                     }
                 }
             }
             break;
         }
     }
     // * Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('bPersonalBlog', $this->bPersonalBlogEnabled);
     E::ModuleViewer()->Assign('aBlogsAllow', $aBlogsAllow);
     E::ModuleViewer()->Assign('bEditDisabled', false);
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('topic_topic_create') . ' ' . mb_strtolower($this->oContentType->getContentTitle(), 'UTF-8'));
     if (!is_numeric(F::GetRequest('topic_id'))) {
         $_REQUEST['topic_id'] = '';
     }
     $_REQUEST['topic_show_photoset'] = 1;
     // * Если нет временного ключа для нового топика, то генерируем; если есть, то загружаем фото по этому ключу
     if ($sTargetTmp = E::ModuleSession()->GetCookie('ls_photoset_target_tmp')) {
         E::ModuleSession()->SetCookie('ls_photoset_target_tmp', $sTargetTmp, 'P1D', false);
         E::ModuleViewer()->Assign('aPhotos', E::ModuleTopic()->GetPhotosByTargetTmp($sTargetTmp));
     } else {
         E::ModuleSession()->SetCookie('ls_photoset_target_tmp', F::RandomStr(), 'P1D', false);
     }
     // Если POST-запрос, то обрабатываем отправку формы
     if ($this->IsPost()) {
         return $this->SubmitAdd();
     }
     return null;
 }
コード例 #11
0
ファイル: function.imgs.php プロジェクト: ZeoNish/altocms
/**
 * Выводит изображение и прикрепляет его ко временному объекту
 *
 * @param $aParams
 * @param Smarty $oSmarty
 * @return string
 */
function smarty_function_imgs($aParams, &$oSmarty = NULL)
{
    // Пропущен тип объекта
    if (!isset($aParams['target-type'])) {
        trigger_error("img: missing 'target-type' parameter", E_USER_WARNING);
        return '';
    }
    // Пропущен идентификатор объекта
    if (!isset($aParams['target-id'])) {
        trigger_error("img: missing 'target-id' parameter", E_USER_WARNING);
        return '';
    }
    // Получим тип объекта
    $sTargetType = $aParams['target-type'];
    unset($aParams['target-type']);
    // Получим ид объекта
    $iTargetId = intval($aParams['target-id']);
    unset($aParams['target-id']);
    // Получим параметры обрезки объекта
    $sCrop = isset($aParams['crop']) ? $aParams['crop'] : FALSE;
    unset($aParams['crop']);
    // Получим ид объекта
    $sTemplate = isset($aParams['template']) ? $aParams['template'] : FALSE;
    unset($aParams['template']);
    // Получим изображение по временному ключу, или создадим этот ключ
    $aParams['src'] = array();
    if (($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) && E::IsUser()) {
        // Продлим куку
        E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, $sTargetTmp, 'P1D', FALSE);
    } else {
        // Куки нет, это значит, что пользователь первый раз создает этот тип
        // и старой картинки просто нет
        if ($iTargetId == '0') {
            E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, F::RandomStr(), 'P1D', FALSE);
        } else {
            E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
        }
    }
    // Получим предыдущее изображение и если оно было, установим в качестве текущего
    // Получим и удалим все ресурсы
    $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
    if ($aMresourceRel && is_array($aMresourceRel)) {
        /** @var ModuleMresource_EntityMresource $oResource */
        foreach ($aMresourceRel as $oMresource) {
            if ($sCrop) {
                $aParams['src'][$oMresource->getMresourceId()] = array('url' => E::ModuleUploader()->ResizeTargetImage($oMresource->GetUrl(), $sCrop), 'cover' => $oMresource->IsCover());
            } else {
                $aParams['src'][$oMresource->getMresourceId()] = array('url' => $oMresource->GetUrl(), 'cover' => $oMresource->IsCover());
            }
            $oSmarty->assign("bHasImage", TRUE);
        }
    }
    // Создадим массив картинок
    $sItems = '';
    if ($aParams['src']) {
        foreach ($aParams['src'] as $sID => $aData) {
            $sItems .= str_replace(array('ID', 'uploader_item_SRC', 'MARK_AS_PREVIEW'), array($sID, $aData['url'], $aData['cover'] ? E::ModuleLang()->Get('topic_photoset_is_preview') : E::ModuleLang()->Get('topic_photoset_mark_as_preview')), $sTemplate);
        }
    }
    return $sItems;
}
コード例 #12
0
ファイル: function.php プロジェクト: AntiqS/altocms
/**
 * генерирует случайную последовательность символов
 *
 * @param int $iLength
 *
 * @return string
 */
function func_generator($iLength = 10)
{
    if ($iLength > 32) {
        $iLength = 32;
    }
    return F::RandomStr($iLength);
}
コード例 #13
0
ファイル: Session.class.php プロジェクト: hard990/altocms
 /**
  * Гинерирует уникальный идентификатор
  *
  * @return string
  */
 protected function GenerateId()
 {
     return md5(F::RandomStr() . time());
 }
コード例 #14
0
ファイル: function.img.php プロジェクト: AntiqS/altocms
/**
 * Выводит изображение и прикрепляет его ко временному объекту
 *
 * @param $aParams
 * @param Smarty $oSmarty
 * @return string
 */
function smarty_function_img($aParams, &$oSmarty = NULL)
{
    // Пропущен тип объекта
    if (!isset($aParams['attr']['target-type'])) {
        trigger_error("img: missing 'target-type' parameter", E_USER_WARNING);
        return '';
    }
    // Пропущен идентификатор объекта
    if (!isset($aParams['attr']['target-id'])) {
        trigger_error("img: missing 'target-id' parameter", E_USER_WARNING);
        return '';
    }
    // Получим тип объекта
    $sTargetType = $aParams['attr']['target-type'];
    unset($aParams['attr']['target-type']);
    // Получим ид объекта
    $iTargetId = intval($aParams['attr']['target-id']);
    unset($aParams['attr']['target-id']);
    // Получим ид объекта
    $sCrop = isset($aParams['attr']['crop']) ? $aParams['attr']['crop'] : FALSE;
    unset($aParams['attr']['crop']);
    // Получим изображение по временному ключу, или создадим этот ключ
    if (($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) && E::IsUser()) {
        // Продлим куку
        E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, $sTargetTmp, 'P1D', FALSE);
        // Получим предыдущее изображение и если оно было, установим в качестве текущего
        // Получим и удалим все ресурсы
        $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
        if ($aMresourceRel) {
            /** @var ModuleMresource_EntityMresource $oResource */
            $oMresource = array_shift($aMresourceRel);
            if ($oMresource) {
                if ($sCrop) {
                    $aParams['attr']['src'] = E::ModuleUploader()->ResizeTargetImage($oMresource->GetUrl(), $sCrop);
                } else {
                    $aParams['attr']['src'] = $oMresource->GetUrl();
                }
                $oSmarty->assign("bImageIsTemporary", TRUE);
            }
        }
    } else {
        // Куки нет, это значит, что пользователь первый раз создает этот тип
        // и старой картинки просто нет
        if ($iTargetId == '0') {
            E::ModuleSession()->SetCookie(ModuleUploader::COOKIE_TARGET_TMP, F::RandomStr(), 'P1D', FALSE);
        } else {
            E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
            $sImage = E::ModuleUploader()->GetTargetImageUrl($sTargetType, $iTargetId, $sCrop);
            if ($sImage) {
                $aParams['attr']['src'] = $sImage;
                $oSmarty->assign("bImageIsTemporary", TRUE);
            }
        }
    }
    // Формируем строку атрибутов изображения
    $sAttr = '';
    if (isset($aParams['attr']) && is_array($aParams['attr'])) {
        foreach ($aParams['attr'] as $sAttrName => $sAttrValue) {
            $sAttr .= ' ' . $sAttrName . '="' . $sAttrValue . '"';
        }
    }
    // Сформируем тег изображения
    $sImageTag = '<img ' . $sAttr . '/>';
    return $sImageTag;
}
コード例 #15
0
ファイル: Image.class.php プロジェクト: AntiqS/altocms
 /**
  * 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-каналом
          */
         $bWatermark = isset($aParams['watermark_use']) ? $aParams['watermark_use'] : false;
         $oImage->resize($iWidthDest, $iHeightDest, !$iHeightDest, !$bWatermark);
         /**
          * Добавляем watermark согласно в конфигурации заданым параметрам
          */
         if ($bWatermark) {
             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 (!empty($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') . F::RandomStr(20);
         $oImage->output(null, $sFileTmp);
         return $this->SaveFile($sFileTmp, $sDirDest, $sFileDest, 0666, true);
     } else {
         return $this->SaveFile($sFileSrc, $sDirDest, $sFileDest, 0666, false);
     }
     return false;
 }
コード例 #16
0
ファイル: Topic.class.php プロジェクト: AlexSSN/altocms
 /**
  * Обработка дополнительных полей топика
  *
  * @param ModuleTopic_EntityTopic $oTopic
  * @param string $sType
  *
  * @return bool
  */
 public function processTopicFields($oTopic, $sType = 'add')
 {
     /** @var ModuleTopic_EntityContentValues $aValues */
     $aValues = array();
     if ($sType == 'update') {
         // * Получаем существующие значения
         if ($aData = $this->GetTopicValuesByArrayId(array($oTopic->getId()))) {
             $aValues = $aData[$oTopic->getId()];
         }
         // * Чистим существующие значения
         E::ModuleTopic()->DeleteTopicValuesByTopicId($oTopic->getId());
     }
     if ($oType = E::ModuleTopic()->GetContentTypeByUrl($oTopic->getType())) {
         //получаем поля для данного типа
         if ($aFields = $oType->getFields()) {
             foreach ($aFields as $oField) {
                 $sData = null;
                 if (isset($_REQUEST['fields'][$oField->getFieldId()]) || isset($_FILES['fields_' . $oField->getFieldId()]) || $oField->getFieldType() == 'single-image-uploader') {
                     //текстовые поля
                     if (in_array($oField->getFieldType(), array('input', 'textarea', 'select'))) {
                         $sData = E::ModuleText()->Parser($_REQUEST['fields'][$oField->getFieldId()]);
                     }
                     //поле ссылки
                     if ($oField->getFieldType() == 'link') {
                         $sData = $_REQUEST['fields'][$oField->getFieldId()];
                     }
                     //поле даты
                     if ($oField->getFieldType() == 'date') {
                         if (isset($_REQUEST['fields'][$oField->getFieldId()])) {
                             if (F::CheckVal($_REQUEST['fields'][$oField->getFieldId()], 'text', 6, 10) && substr_count($_REQUEST['fields'][$oField->getFieldId()], '.') == 2) {
                                 list($d, $m, $y) = explode('.', $_REQUEST['fields'][$oField->getFieldId()]);
                                 if (@checkdate($m, $d, $y)) {
                                     $sData = $_REQUEST['fields'][$oField->getFieldId()];
                                 }
                             }
                         }
                     }
                     //поле с файлом
                     if ($oField->getFieldType() == 'file') {
                         //если указано удаление файла
                         if (F::GetRequest('topic_delete_file_' . $oField->getFieldId())) {
                             if ($oTopic->getFieldFile($oField->getFieldId())) {
                                 @unlink(Config::Get('path.root.dir') . $oTopic->getFieldFile($oField->getFieldId())->getFileUrl());
                                 //$oTopic->setValueField($oField->getFieldId(),'');
                                 $sData = null;
                             }
                         } else {
                             //если удаление файла не указано, уже ранее залит файл^ и нового файла не загружалось
                             if ($sType == 'update' && isset($aValues[$oField->getFieldId()])) {
                                 $sData = $aValues[$oField->getFieldId()]->getValueSource();
                             }
                         }
                         if (isset($_FILES['fields_' . $oField->getFieldId()]) && is_uploaded_file($_FILES['fields_' . $oField->getFieldId()]['tmp_name'])) {
                             $iMaxFileSize = F::MemSize2Int(Config::Get('module.uploader.files.default.file_maxsize'));
                             $aFileExtensions = Config::Get('module.uploader.files.default.file_extensions');
                             if (!$iMaxFileSize || filesize($_FILES['fields_' . $oField->getFieldId()]['tmp_name']) <= $iMaxFileSize) {
                                 $aPathInfo = pathinfo($_FILES['fields_' . $oField->getFieldId()]['name']);
                                 if (!$aFileExtensions || in_array(strtolower($aPathInfo['extension']), $aFileExtensions)) {
                                     $sFileTmp = $_FILES['fields_' . $oField->getFieldId()]['tmp_name'];
                                     $sDirSave = Config::Get('path.uploads.root') . '/files/' . E::ModuleUser()->GetUserCurrent()->getId() . '/' . F::RandomStr(16);
                                     mkdir(Config::Get('path.root.dir') . $sDirSave, 0777, true);
                                     if (is_dir(Config::Get('path.root.dir') . $sDirSave)) {
                                         $sFile = $sDirSave . '/' . F::RandomStr(10) . '.' . strtolower($aPathInfo['extension']);
                                         $sFileFullPath = Config::Get('path.root.dir') . $sFile;
                                         if (copy($sFileTmp, $sFileFullPath)) {
                                             //удаляем старый файл
                                             if ($oTopic->getFieldFile($oField->getFieldId())) {
                                                 $sOldFile = Config::Get('path.root.dir') . $oTopic->getFieldFile($oField->getFieldId())->getFileUrl();
                                                 F::File_Delete($sOldFile);
                                             }
                                             $aFileObj = array();
                                             $aFileObj['file_hash'] = F::RandomStr(32);
                                             $aFileObj['file_name'] = E::ModuleText()->Parser($_FILES['fields_' . $oField->getFieldId()]['name']);
                                             $aFileObj['file_url'] = $sFile;
                                             $aFileObj['file_size'] = $_FILES['fields_' . $oField->getFieldId()]['size'];
                                             $aFileObj['file_extension'] = $aPathInfo['extension'];
                                             $aFileObj['file_downloads'] = 0;
                                             $sData = serialize($aFileObj);
                                             F::File_Delete($sFileTmp);
                                         }
                                     }
                                 } else {
                                     $sTypes = implode(', ', $aFileExtensions);
                                     E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_field_file_upload_err_type', array('types' => $sTypes)), null, true);
                                 }
                             } else {
                                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('topic_field_file_upload_err_size', array('size' => $iMaxFileSize)), null, true);
                             }
                             F::File_Delete($_FILES['fields_' . $oField->getFieldId()]['tmp_name']);
                         }
                     }
                     // Поле с изображением
                     if ($oField->getFieldType() == 'single-image-uploader') {
                         $sTargetType = $oField->getFieldType() . '-' . $oField->getFieldId();
                         $iTargetId = $oTopic->getId();
                         // 1. Удалить значение target_tmp
                         // Нужно затереть временный ключ в ресурсах, что бы в дальнейшем картнка не
                         // воспринималась как временная.
                         if ($sTargetTmp = E::ModuleSession()->GetCookie(ModuleUploader::COOKIE_TARGET_TMP)) {
                             // 2. Удалить куку.
                             // Если прозошло сохранение вновь созданного топика, то нужно
                             // удалить куку временной картинки. Если же сохранялся уже существующий топик,
                             // то удаление куки ни на что влиять не будет.
                             E::ModuleSession()->DelCookie(ModuleUploader::COOKIE_TARGET_TMP);
                             // 3. Переместить фото
                             $sNewPath = E::ModuleUploader()->GetUserImageDir(E::UserId(), true, false);
                             $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, 0, E::UserId());
                             if ($aMresourceRel) {
                                 $oResource = array_shift($aMresourceRel);
                                 $sOldPath = $oResource->GetFile();
                                 $oStoredFile = E::ModuleUploader()->Store($sOldPath, $sNewPath);
                                 /** @var ModuleMresource_EntityMresource $oResource */
                                 $oResource = E::ModuleMresource()->GetMresourcesByUuid($oStoredFile->getUuid());
                                 if ($oResource) {
                                     $oResource->setUrl(E::ModuleMresource()->NormalizeUrl(E::ModuleUploader()->GetTargetUrl($sTargetType, $iTargetId)));
                                     $oResource->setType($sTargetType);
                                     $oResource->setUserId(E::UserId());
                                     // 4. В свойство поля записать адрес картинки
                                     $sData = $oResource->getMresourceId();
                                     $oResource = array($oResource);
                                     E::ModuleMresource()->UnlinkFile($sTargetType, 0, $oTopic->getUserId());
                                     E::ModuleMresource()->AddTargetRel($oResource, $sTargetType, $iTargetId);
                                 }
                             }
                         } else {
                             // Топик редактируется, просто обновим поле
                             $aMresourceRel = E::ModuleMresource()->GetMresourcesRelByTargetAndUser($sTargetType, $iTargetId, E::UserId());
                             if ($aMresourceRel) {
                                 $oResource = array_shift($aMresourceRel);
                                 $sData = $oResource->getMresourceId();
                             } else {
                                 $sData = false;
                                 //                                    $this->DeleteField($oField);
                             }
                         }
                     }
                     E::ModuleHook()->Run('content_field_proccess', array('sData' => &$sData, 'oField' => $oField, 'oTopic' => $oTopic, 'aValues' => $aValues, 'sType' => &$sType));
                     //Добавляем поле к топику.
                     if ($sData) {
                         /** @var ModuleTopic_EntityContentValues $oValue */
                         $oValue = E::GetEntity('Topic_ContentValues');
                         $oValue->setTargetId($oTopic->getId());
                         $oValue->setTargetType('topic');
                         $oValue->setFieldId($oField->getFieldId());
                         $oValue->setFieldType($oField->getFieldType());
                         $oValue->setValue($sData);
                         $oValue->setValueSource(in_array($oField->getFieldType(), array('file', 'single-image-uploader')) ? $sData : $_REQUEST['fields'][$oField->getFieldId()]);
                         $this->AddTopicValue($oValue);
                     }
                 }
             }
         }
     }
     return true;
 }
コード例 #17
0
ファイル: ActionAdmin.class.php プロジェクト: anp135/altocms
 /**
  * @return null|string
  */
 protected function _eventMenuEdit()
 {
     // * Получаем тип
     $sMenuId = $this->GetParam(1);
     if (!($oMenu = E::ModuleMenu()->GetMenu($sMenuId))) {
         return parent::EventNotFound();
     }
     E::ModuleViewer()->Assign('oMenu', $oMenu);
     if (strpos($oMenu->getId(), 'submenu_') === 0) {
         E::ModuleViewer()->Assign('isSubMenu', E::ModuleLang()->Get('action.admin.menu_manager_submenu'));
     }
     // * Устанавливаем шаблон вывода
     $this->_setTitle(E::ModuleLang()->Get('action.admin.menu_manager_edit_menu'));
     $this->SetTemplateAction('settings/menumanager_edit');
     // * Проверяем отправлена ли форма с данными
     if (F::GetPost('submit_add_new_item')) {
         $sItemTitle = '';
         if (!(($sItemLink = trim(F::GetRequestStr('menu-item-link'))) && ($sItemTitle = trim(F::GetRequestStr('menu-item-title'))))) {
             E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('menu_manager_item_add_error'), E::ModuleLang()->Get('error'));
             return null;
         }
         $sRoot = F::GetRequest('menu-item-place');
         if ($sRoot == 'root_item') {
             // Add new item in root of menu
             $sItemName = F::RandomStr(10);
             $oMenuItem = E::ModuleMenu()->CreateMenuItem($sItemName, array('text' => $sItemTitle, 'link' => $sItemLink, 'active' => false));
             // Добавим в меню
             $oMenu->AddItem($oMenuItem);
             E::ModuleMenu()->SaveMenu($oMenu);
             R::Location("admin/settings-menumanager/edit/{$sMenuId}");
             return null;
         } elseif ($sRoot) {
             // Разрешенные идентификаторы меню
             $aAllowedData = $oMenu->getFillList();
             if (!empty($aAllowedData) && !in_array($sRoot, $aAllowedData)) {
                 E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('menu_manager_item_add_error'), E::ModuleLang()->Get('error'));
                 return null;
             }
             // Проверим, есть ли подменю для этого элемента?
             $sSubMenuName = Config::Get("menu.data.{$oMenu->getId()}.list.{$sRoot}.submenu");
             if (!$sSubMenuName) {
                 $sSubMenuName = 'submenu_' . F::RandomStr(10);
                 // Сохраним указатель на подменю
                 $oMenu->SetConfigItem($sRoot, 'submenu', $sSubMenuName);
                 E::ModuleMenu()->SaveMenu($oMenu);
                 // Сохраним само подменю (пока пустое)
                 $oSubMenu = E::ModuleMenu()->CreateMenu($sSubMenuName);
                 E::ModuleMenu()->SaveMenu($oSubMenu);
             } else {
                 $oSubMenu = E::ModuleMenu()->GetMenu($sSubMenuName);
             }
             // Добавим новый элемент в подменю
             $sItemName = F::RandomStr(10);
             $oMenuItem = E::ModuleMenu()->CreateMenuItem($sItemName, array('text' => $sItemTitle, 'link' => $sItemLink, 'active' => false));
             // Добавим в меню
             $oSubMenu->AddItem($oMenuItem);
             E::ModuleMenu()->SaveMenu($oSubMenu);
             R::Location("admin/settings-menumanager/edit/{$sMenuId}");
             return null;
         }
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('menu_manager_item_add_error'), E::ModuleLang()->Get('error'));
         return null;
     }
     return null;
 }