示例#1
0
/**
 * Плагин для смарти
 * Запускает хуки из шаблона на выполнение
 *
 * @param   array  $aParams
 * @param   Smarty $oSmarty
 *
 * @return  string
 */
function smarty_function_hook($aParams, &$oSmarty)
{
    if (empty($aParams['run'])) {
        trigger_error('Hook: missing "run" parametr', E_USER_WARNING);
        return;
    }
    $sReturn = '';
    if (strpos($aParams['run'], ',')) {
        $aHooks = F::Array_Str2Array($aParams['run']);
        unset($aParams['run']);
        foreach ($aHooks as $sHook) {
            $aParams['run'] = $sHook;
            $sReturn .= smarty_function_hook($aParams, $oSmarty);
        }
    } else {
        $sHookName = 'template_' . strtolower($aParams['run']);
        unset($aParams['run']);
        $aResultHook = E::ModuleHook()->Run($sHookName, $aParams);
        if (array_key_exists('template_result', $aResultHook)) {
            $sReturn = join('', $aResultHook['template_result']);
        }
        if (!empty($aParams['assign'])) {
            $oSmarty->assign($aParams['assign'], $sReturn);
            $sReturn = '';
        }
    }
    return $sReturn;
}
示例#2
0
 /**
  * Список опубликованых топиков в открытых блогах (с кешированием)
  *
  * @param int $iPage
  *
  * @return array
  */
 public function getTopicsForSitemap($iPage = 0)
 {
     $sCacheKey = "sitemap_topics_{$iPage}_" . C::Get('plugin.sitemap.items_per_page');
     if (false === ($aData = E::ModuleCache()->Get($sCacheKey))) {
         $aFilter = $this->GetNamedFilter('sitemap');
         $aTopics = E::ModuleTopic()->GetTopicsByFilter($aFilter, $iPage, C::Get('plugin.sitemap.items_per_page'), array('blog' => array('owner' => array())));
         $aData = array();
         $iIndex = 0;
         $aPriority = F::Array_Str2Array(C::Get('plugin.sitemap.type.topics.priority'));
         $nPriority = sizeof($aPriority) ? reset($aPriority) : null;
         $aChangeFreq = F::Array_Str2Array(C::Get('plugin.sitemap.type.topics.changefreq'));
         $sChangeFreq = sizeof($aChangeFreq) ? reset($aChangeFreq) : null;
         /** @var ModuleTopic_EntityTopic $oTopic */
         foreach ($aTopics['collection'] as $oTopic) {
             if ($aPriority) {
                 if (isset($aPriority[$iIndex])) {
                     $nPriority = $aPriority[$iIndex];
                 }
             }
             if ($aChangeFreq) {
                 if (isset($aChangeFreq[$iIndex])) {
                     $sChangeFreq = $aChangeFreq[$iIndex];
                 }
             }
             $aData[] = E::ModuleSitemap()->GetDataForSitemapRow($oTopic->getLink(), $oTopic->getDateLastMod(), $sChangeFreq, $nPriority);
             $iIndex += 1;
         }
         // тег 'blog_update' т.к. при редактировании блога его тип может измениться
         // с открытого на закрытый или наоборот
         E::ModuleCache()->Set($aData, $sCacheKey, array('topic_new', 'topic_update', 'blog_update'), C::Get('plugin.sitemap.type.topics.cache_lifetime'));
     }
     return $aData;
 }
示例#3
0
 /**
  * Проверяет логин на корректность
  *
  * @param string $sLogin    Логин пользователя
  * @param int    $nError    Ошибка (если есть)
  *
  * @return bool
  */
 public function CheckLogin($sLogin, &$nError)
 {
     // проверка на допустимость логина
     $aDisabledLogins = F::Array_Str2Array(Config::Get('module.user.login.disabled'));
     if (F::Array_StrInArray($sLogin, $aDisabledLogins)) {
         $nError = self::USER_LOGIN_ERR_DISABLED;
         return false;
     } elseif (strpos(strtolower($sLogin), 'id-') === 0 || strpos(strtolower($sLogin), 'login-') === 0) {
         $nError = self::USER_LOGIN_ERR_DISABLED;
         return false;
     }
     $sCharset = Config::Get('module.user.login.charset');
     $nMin = intval(Config::Get('module.user.login.min_size'));
     $nMax = intval(Config::Get('module.user.login.max_size'));
     // Логин не может быть меньше 1
     if ($nMin < 1) {
         $nMin = 1;
     }
     $nError = 0;
     // поверка на длину логина
     if (!$nMax) {
         $bOk = mb_strlen($sLogin, 'UTF-8') >= $nMin;
         if (!$bOk) {
             $nError = self::USER_LOGIN_ERR_MIN;
         }
     } else {
         $bOk = mb_strlen($sLogin, 'UTF-8') >= $nMin && mb_strlen($sLogin, 'UTF-8') <= $nMax;
         if (!$bOk) {
             $nError = self::USER_LOGIN_ERR_LEN;
         }
     }
     if ($bOk && $sCharset) {
         // поверка на набор символов
         if (!preg_match('/^([' . $sCharset . ']+)$/iu', $sLogin)) {
             $nError = self::USER_LOGIN_ERR_CHARS;
             $bOk = false;
         }
     }
     return $bOk;
 }
示例#4
0
文件: Main.php 项目: hard990/altocms
 /**
  * @param string $sStr
  * @param string $sSeparator
  * @param bool   $bSkipEmpty
  *
  * @return array
  */
 public static function Str2Array($sStr, $sSeparator = ',', $bSkipEmpty = false)
 {
     return F::Array_Str2Array($sStr, $sSeparator, $bSkipEmpty);
 }
示例#5
0
 public function EventAjaxUserList()
 {
     E::ModuleViewer()->SetResponseAjax('json');
     if ($this->IsPost()) {
         $sList = trim($this->GetPost('invite_listmail'));
         if ($aList = F::Array_Str2Array($sList, "\n", true)) {
             $iSentCount = 0;
             foreach ($aList as $iKey => $sMail) {
                 if (F::CheckVal($sMail, 'mail')) {
                     $oInvite = E::ModuleUser()->GenerateInvite($this->oUserCurrent);
                     if (E::ModuleNotify()->SendInvite($this->oUserCurrent, $sMail, $oInvite)) {
                         unset($aList[$iKey]);
                         $iSentCount++;
                     }
                 }
             }
             E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.invaite_mail_done', array('num' => $iSentCount)), null, true);
             if ($aList) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.invaite_mail_err', array('num' => count($aList))), null, true);
             }
         }
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'));
     }
 }
示例#6
0
 /**
  * Формирует из REQUEST массива фильтр для отбора писем
  *
  * @return array
  */
 protected function BuildFilter()
 {
     // * Текущий пользователь
     $aFilter = array('user_id' => $this->oUserCurrent->getId());
     // * Дата старта поиска
     if ($start = F::GetRequestStr('start')) {
         if (F::CheckVal($start, 'text', 6, 10) && substr_count($start, '.') == 2) {
             list($d, $m, $y) = explode('.', $start);
             if (@checkdate($m, $d, $y)) {
                 $aFilter['date_min'] = "{$y}-{$m}-{$d}";
             } else {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error'));
                 unset($_REQUEST['start']);
             }
         } else {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error'));
             unset($_REQUEST['start']);
         }
     }
     // * Дата окончания поиска
     if ($end = F::GetRequestStr('end')) {
         if (F::CheckVal($end, 'text', 6, 10) && substr_count($end, '.') == 2) {
             list($d, $m, $y) = explode('.', $end);
             if (@checkdate($m, $d, $y)) {
                 $aFilter['date_max'] = "{$y}-{$m}-{$d} 23:59:59";
             } else {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error'));
                 unset($_REQUEST['end']);
             }
         } else {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_filter_error_date_format'), E::ModuleLang()->Get('talk_filter_error'));
             unset($_REQUEST['end']);
         }
     }
     // * Ключевые слова в теме сообщения
     if (($sKeyRequest = F::GetRequest('keyword')) && is_string($sKeyRequest)) {
         $sKeyRequest = urldecode($sKeyRequest);
         preg_match_all('~(\\S+)~u', $sKeyRequest, $aWords);
         if (is_array($aWords[1]) && isset($aWords[1]) && count($aWords[1])) {
             $aFilter['keyword'] = '%' . implode('%', $aWords[1]) . '%';
         } else {
             unset($_REQUEST['keyword']);
         }
     }
     // * Ключевые слова в тексте сообщения
     if (($sKeyRequest = F::GetRequest('keyword_text')) && is_string($sKeyRequest)) {
         $sKeyRequest = urldecode($sKeyRequest);
         preg_match_all('~(\\S+)~u', $sKeyRequest, $aWords);
         if (is_array($aWords[1]) && isset($aWords[1]) && count($aWords[1])) {
             $aFilter['text_like'] = '%' . implode('%', $aWords[1]) . '%';
         } else {
             unset($_REQUEST['keyword_text']);
         }
     }
     // * Отправитель
     if (($sSender = F::GetRequest('sender')) && is_string($sSender)) {
         $aFilter['user_login'] = F::Array_Str2Array(urldecode($sSender), ',', true);
     }
     // * Адресат
     if (($sAddressee = F::GetRequest('addressee')) && is_string($sAddressee)) {
         $aFilter['user_login'] = F::Array_Str2Array(urldecode($sAddressee), ',', true);
     }
     // * Искать только в избранных письмах
     if (F::GetRequest('favourite')) {
         $aTalkIdResult = E::ModuleFavourite()->GetFavouritesByUserId($this->oUserCurrent->getId(), 'talk', 1, 500);
         // ограничиваем
         $aFilter['id'] = $aTalkIdResult['collection'];
         $_REQUEST['favourite'] = 1;
     } else {
         unset($_REQUEST['favourite']);
     }
     return $aFilter;
 }
示例#7
0
 /**
  * Returns uploader config section for file by config key
  *
  * @param string $sFile
  * @param string $sConfigKey
  *
  * @return array
  */
 public function GetConfig($sFile, $sConfigKey = 'default')
 {
     if (!$sConfigKey) {
         $sConfigKey = 'default';
     }
     $sExtension = $this->_extensionMime($sFile);
     if (!$sExtension) {
         $sExtension = '*';
     }
     $sTmpConfigKey = '-' . str_replace('.', '-', $sConfigKey) . '-' . $sExtension;
     $aConfig = $this->aModConfig[$sTmpConfigKey];
     if (is_null($aConfig)) {
         $aConfig = array();
         $aImageExtensions = array();
         // Gets local config
         if ($sConfigKey) {
             if (isset($this->aModConfig[$sConfigKey])) {
                 $aConfig = $this->aModConfig[$sConfigKey];
                 $aImageExtensions = (array) $aConfig['image_extensions'];
             } elseif (strpos($sConfigKey, '.')) {
                 if (strpos($sConfigKey, 'images.') === 0) {
                     $aConfig = $this->aModConfig['images.default'];
                     $aImageExtensions = (array) $aConfig['image_extensions'];
                 } else {
                     $sConfigKey = 'default';
                 }
             }
         }
         if (!$aConfig && $sConfigKey != 'default') {
             // Checks key 'images.<type>' and valid image extension
             if ($aConfig = $this->aModConfig['images.' . $sConfigKey]) {
                 if ($sExtension != '*') {
                     $aImageExtensions = (array) $aConfig['image_extensions'];
                     if (!$aImageExtensions || !in_array($sExtension, $aImageExtensions)) {
                         $aConfig = array();
                     }
                 }
             }
             // If this is not image then checks config for file specified type
             if (!$aConfig) {
                 $aConfig = $this->aModConfig['files.' . $sConfigKey];
             }
         }
         if (!$aConfig) {
             // Config section not found, sets default
             $aImageExtensions = (array) $this->aModConfig['images.default.image_extensions'];
             if ($aImageExtensions && in_array($sExtension, $aImageExtensions)) {
                 $aConfig = $this->aModConfig['images.default'];
             } else {
                 $aConfig = $this->aModConfig['files.default'];
             }
         }
         /* Copy MIME specified config into 'transform' section
          * INPUT:
          * $aConfig = array(
          *     'transform' => array(
          *         '@mime(jpeg,other)' => array(
          *             'quality' => 80,
          *         ),
          *     ),
          * );
          * $aImageExtensions = 'jpg';
          *
          * OUTPUT:
          * $aConfig = array(
          *     'transform' => array(
          *         'quality' => 80,
          *         'mime-jpeg,mime-jpg' => array(
          *             'quality' => 80,
          *         ),
          *     ),
          * );
          */
         if ($sExtension != '*' && $aImageExtensions && !empty($aConfig['transform'])) {
             foreach ($aConfig['transform'] as $sKey => $aVal) {
                 if (strpos($sKey, '@mime(') === 0) {
                     $sMimeFound = null;
                     if (preg_match('/@mime\\s*\\(([\\w,]+)\\)/', $sKey, $aM)) {
                         $aKeys = F::Array_Str2Array($aM[1]);
                         foreach ($aKeys as $sMimeKey) {
                             $sMime = $this->_extensionMime($sMimeKey);
                             if ($sMime == $sExtension) {
                                 $sMimeFound = $sMime;
                                 break;
                             }
                         }
                     }
                     if ($sMimeFound) {
                         if (in_array($sMimeFound, $aImageExtensions)) {
                             foreach ($aVal as $sMimeCfgKey => $sMimeCfgVal) {
                                 $aConfig['transform'][$sMimeCfgKey] = $sMimeCfgVal;
                             }
                         }
                         break;
                     }
                 }
             }
         }
         $this->aModConfig[$sTmpConfigKey] = new DataArray($aConfig);
     }
     return $aConfig;
 }
示例#8
0
 /**
  * Отображение списка блогов
  */
 protected function EventShowBlogs()
 {
     // * По какому полю сортировать
     $sOrder = F::GetRequestStr('order', 'blog_rating');
     // * В каком направлении сортировать
     $sOrderWay = F::GetRequestStr('order_way', 'desc');
     $aAllowBlogTypes = E::ModuleBlog()->GetAllowBlogTypes(E::User(), 'list', true);
     // * Фильтр выборки блогов
     $aFilter = array();
     if ($sIncludeType = F::GetRequestStr('include_type')) {
         $aFilter['include_type'] = array_intersect(array_merge($aAllowBlogTypes, ['personal']), F::Array_Str2Array($sIncludeType));
     }
     if ($sExcludeType = F::GetRequestStr('exclude_type')) {
         $aFilter['exclude_type'] = F::Array_Str2Array($sExcludeType);
     }
     if (!$aFilter) {
         $aFilter = array('include_type' => $aAllowBlogTypes);
     }
     if ($sOrder == 'blog_title') {
         $aFilter['order'] = array('blog_title' => $sOrderWay);
     } else {
         $aFilter['order'] = array($sOrder => $sOrderWay, 'blog_title' => 'asc');
     }
     // * Передан ли номер страницы
     $iPage = preg_match('/^\\d+$/i', $this->GetEventMatch(2)) ? $this->GetEventMatch(2) : 1;
     // * Получаем список блогов
     $aResult = E::ModuleBlog()->GetBlogsByFilter($aFilter, $iPage, Config::Get('module.blog.per_page'));
     $aBlogs = $aResult['collection'];
     // * Формируем постраничность
     $aPaging = E::ModuleViewer()->MakePaging($aResult['count'], $iPage, Config::Get('module.blog.per_page'), Config::Get('pagination.pages.count'), R::GetPath('blogs'), array('order' => $sOrder, 'order_way' => $sOrderWay));
     //  * Загружаем переменные в шаблон
     E::ModuleViewer()->Assign('aPaging', $aPaging);
     E::ModuleViewer()->Assign('aBlogs', $aBlogs);
     E::ModuleViewer()->Assign('sBlogOrder', htmlspecialchars($sOrder));
     E::ModuleViewer()->Assign('sBlogOrderWay', htmlspecialchars($sOrderWay));
     E::ModuleViewer()->Assign('sBlogOrderWayNext', $sOrderWay == 'desc' ? 'asc' : 'desc');
     E::ModuleViewer()->Assign('sShow', 'collective');
     E::ModuleViewer()->Assign('sBlogsRootPage', R::GetPath('blogs'));
     // * Устанавливаем title страницы
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('blog_menu_all_list'));
     // * Устанавливаем шаблон вывода
     $this->SetTemplateAction('index');
 }