Вход Регистрация
Файл: plugins/p_hidetext/plugin.php
Строк: 141
<?php
/******************************************************************************/
//                                                                            //
//                             InstantCMS v1.10                               //
//                        http://www.instantcms.ru/                           //
//                                                                            //
//                   written by InstantCMS Team, 2007-2012                    //
//                produced by InstantSoft, (www.instantsoft.ru)               //
//                                                                            //
//                        LICENSED BY GNU/GPL v2                              //
//                                                                            //
/******************************************************************************/

class p_hidetext extends cmsPlugin {

// ==================================================================== //

    
public function __construct(){

        
parent::__construct();

        
// Информация о плагине

        
$this->info['plugin']           = 'p_hidetext';
        
$this->info['title']            = 'Скрытый текст';
        
$this->info['description']      = 'Скрывает содержимое тега [hide] от незарегистрированных';
        
$this->info['author']           = 'InstantCMS Team';
        
$this->info['version']          = '1.12';

        
// События, которые будут отлавливаться плагином

        
$this->events[]                 = 'GET_POSTS';
        
$this->events[]                 = 'GET_POSTS_MODULE';
        
$this->events[]                 = 'GET_POST';
        
$this->events[]                 = 'GET_COMMENTS';
        
$this->events[]                 = 'GET_COMMENTS_MODULE';
        
$this->events[]                 = 'GET_COMMENT';
        
$this->events[]                 = 'GET_FORUM_POST';
        
$this->events[]                 = 'GET_FORUM_POSTS';
        
$this->events[]                 = 'GET_FORUM_POSTS_MODULE';
        
$this->events[]                 = 'GET_WALL_POSTS';

    }

// ==================================================================== //

    /**
     * Процедура установки плагина
     * @return bool
     */
    
public function install(){

        return 
parent::install();

    }

// ==================================================================== //

    /**
     * Процедура обновления плагина
     * @return bool
     */
    
public function upgrade(){

        return 
parent::upgrade();

    }

// ==================================================================== //

    /**
     * Обработка событий
     * @param string $event
     * @param mixed $item
     * @return mixed
     */
    
public function execute($event$item){

        
parent::execute();

        switch (
$event){
            case 
'GET_POST'$item $this->eventGetPost($item); break;
            case 
'GET_POSTS'$item $this->eventGetPosts($item); break;
            case 
'GET_POSTS_MODULE'$item $this->eventGetPosts($itemtrue); break;
            case 
'GET_COMMENT'$item $this->eventGetComment($item); break;
            case 
'GET_COMMENTS'$item $this->eventGetComments($item); break;
            case 
'GET_COMMENTS_MODULE'$item $this->eventGetComments($itemtrue); break;
            case 
'GET_FORUM_POST'$item $this->eventGetPost($item); break;
            case 
'GET_FORUM_POSTS'$item $this->eventGetPosts($item); break;
            case 
'GET_FORUM_POSTS_MODULE'$item $this->eventGetPosts($itemtrue); break;
            case 
'GET_WALL_POSTS'$item $this->eventGetComments($item); break;
        }

        return 
$item;

    }

// ==================================================================== //

    
private function parseHide($text$hidden false){

        
$inUser cmsUser::getInstance();

        
$pattern '/[hide(?:=?)([0-9]*)](.*?)[/hide]/sui';

        
preg_match($pattern$text$matches);

        if(!
$matches){ return $text; }

        if(
$hidden){
            
$replacement '';
        } else if (!
$inUser->id){
            
$replacement '<div class="bb_tag_hide">Скрытый текст виден только <a href="/registration">зарегистрированным</a> пользователям</div>';
        } else {

            if(!
$matches[1]){
                
$replacement '<div class="bb_tag_hide">${2}</div>';
            } elseif(
$inUser->rating $matches[1] || $inUser->is_admin) {
                
$replacement '<div class="bb_tag_hide">${2}</div>';
        } else {
                
$replacement '<div class="bb_tag_hide">Пользователи с рейтингом более '.cmsCore::spellCount($matches[1], 'пункт''пункта''пунктов').' могут просмотреть скрытый текст.</div>';
            }

        }

        return 
preg_replace($pattern$replacement$text);

    }

    private function 
eventGetPost($item) {

        if (!
is_array($item)){ return $item; }

        
$item['content_html'] = $this->parseHide($item['content_html']);

        return 
$item;

    }

    private function 
eventGetPosts($items$hidden false){

        if (!
is_array($items)){ return $items; }

        foreach(
$items as $i=>$item){
            
$items[$i]['content_html'] = $this->parseHide($item['content_html'], $hidden);
        }

        return 
$items;
    }

    private function 
eventGetComments($items$hidden false){

        if (!
is_array($items)){ return $items; }

        foreach(
$items as $i=>$item){
            
$items[$i]['content'] = $this->parseHide($item['content'], $hidden);
        }

        return 
$items;
    }

    private function 
eventGetComment($item){

        if (!
is_array($item)){ return $item; }

        
$item['content'] = $this->parseHide($item['content']);

        return 
$item;

    }

// ==================================================================== //

}

?>
Онлайн: 0
Реклама