Вход Регистрация
Файл: admin/applications/forums/extensions/tags/topics.php
Строк: 214
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Tagging: Forums/Topics Class
 * Matt Mecham
 * Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2011 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @link        http://www.invisionpower.com
 * @since        25 Feb 2011
 * @version        $Revision: 10721 $
 *
 */

if ( ! defined'IN_IPB' ) )
{
    print 
"<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
    exit();
}

class 
tags_forums_topics extends classes_tag_abstract
{
    protected 
$topicCache = array();
        
    
/**
     * CONSTRUCTOR
     *
     * @return    @e void
     */
    
public function __construct()
    {
        
/* Make registry objects */
        
$this->registry   =  ipsRegistry::instance();
        
$this->DB         =  $this->registry->DB();
        
$this->settings   =& $this->registry->fetchSettings();
        
$this->request    =& $this->registry->fetchRequest();
        
$this->lang       =  $this->registry->getClass('class_localization');
        
$this->member     =  $this->registry->member();
        
$this->memberData =& $this->registry->member()->fetchMemberData();
        
$this->cache      =  $this->registry->cache();
        
$this->caches     =& $this->registry->cache()->fetchCaches();
    }
    
    
/**
     * Init
     *
     * @return    @e void
     */
    
public function init()
    {
        if ( ! 
$this->registry->isClassLoaded('class_forums') )
        {
            
$classToLoad IPSLib::loadLibraryIPSLib::getAppDir('forums') . '/sources/classes/forums/class_forums.php''class_forums''forums' );
            
$this->registry->setClass'class_forums', new $classToLoad$this->registry ) );
            
$this->registry->getClass('class_forums')->forumsInit();
        }
        
        if ( ! 
$this->registry->isClassLoaded('topics') )
        {
            
$classToLoad IPSLib::loadLibraryIPSLib::getAppDir'forums' ) . "/sources/classes/topics.php"'app_forums_classes_topics''forums' );
            
$this->registry->setClass'topics', new $classToLoad$this->registry ) );
        }
        
        
parent::init();
    }
    
    
/**
     * Little 'trick' to force preset tags
     *
     * @param    string    view to show
     * @param    array    Where data to show
     */
    
public function render$what$where )
    {
        if ( ! empty( 
$where['meta_parent_id'] ) )
        {
            
$forum $this->registry->class_forums->getForumById$where['meta_parent_id'] );
        }
        
        if ( ! empty( 
$forum['tag_predefined'] ) )
        {
            
/* Turn off open system */
            
$this->settings['tags_open_system'] = false;
        }
        
        return 
parent::render$what$where );
    }
    
    
/**
     * Fetches parent ID
     * @param     array    Where Data
     * @return    int        Id of parent if one exists or 0
     */
    
public function getParentId$where )
    {
        
$topic $this->_getTopic$where['meta_id'] );
        
        return 
intval$topic['forum_id'] );
    }
    
    
/**
     * Fetches permission data
     * @param     array    Where Data
     * @return    string    Comma delimiter or *
     */
    
public function getPermissionData$where )
    {
        if ( isset( 
$where['meta_id'] ) )
        {
            
$topic $this->_getTopic$where['meta_id'] );
            
$forum $this->registry->class_forums->getForumById$topic['forum_id'] );
        }
        else if ( isset( 
$where['meta_parent_id'] ) )
        {
            
$forum $this->registry->class_forums->getForumById$where['meta_parent_id'] );
        }
        
        return 
$forum['perm_view'];
    }
    
    
/**
     * Basic permission check
     * @param    string    $what (add/remove/edit/create/prefix) [ add = add new tags to items, create = create unique tags, use a tag as a prefix for an item ]
     * @param    array    $where data
     */
    
public function can$what$where )
    {
        
/* Check parent */
        
$return parent::can$what$where );

        if ( 
$return === false  )
        {
            return 
$return;
        }
        
        
/* Init some vars */
        
$topic = array();
        
$forum = array();
        
        if ( ! empty( 
$where['meta_id'] ) )
        {
            
$topic $this->_getTopic$where['meta_id'] );
            
$forum $this->registry->class_forums->getForumById$topic['forum_id'] );
        }
        else if ( ! empty( 
$where['meta_parent_id'] ) )
        {
            
$forum $this->registry->class_forums->getForumById$where['meta_parent_id'] );
        }
        
        
/* Forum disabled */
        
if ( $forum['bw_disable_tagging'] )
        {
            return 
false;
        }

        switch ( 
$what )
        {
            case 
'create':
                if ( ! 
$this->_isOpenSystem() )
                {
                    return 
false;
                }
                
                return 
true;
            break;
            case 
'add':
            
                if ( 
$this->registry->class_forums->canStartTopic$forum['id'] ) )
                {
                    return 
true;
                }
                else if( 
defined('IN_CONVERTER') AND IN_CONVERTER == true )
                {
                    return 
true;
                }
            break;
            case 
'edit':
            case 
'remove':
                if ( 
$this->memberData['member_id'] == $topic['starter_id'] or $this->memberData['g_is_supmod'] or ( $this->memberData['is_mod'] and isset( $this->memberData['forumsModeratorData'][ $forum['id'] ] ) and $this->memberData['forumsModeratorData'][ $forum['id'] ]['edit_post'] ) )
                {
                    return 
true;
                }
            break;
            case 
'prefix':
                if ( 
$this->registry->class_forums->canStartTopic$forum['id'] ) )
                {
                    return 
true;
                }
                else if( 
defined('IN_CONVERTER') AND IN_CONVERTER == true )
                {
                    return 
true;
                }
            break;
        }
        
        return 
false;
    }
    
    
/**
     * DEFAULT: returns true and should be defined in your own class
     * @param     array    Where Data
     * @return    int        If meta item is visible (not unapproved, etc)
     */
    
public function getIsVisible$where )
    {
        
$topic    $this->_getTopic$where['meta_id'] );
        
$approved $this->registry->class_forums->fetchHiddenTopicType$topic );
        
        return ( 
$approved == 'visible' ) ? 0;
    }
    
    
/**
     * Search for tags
     * @param mixed $tags    Array or string
     * @param array $options    Array( 'meta_id' (array), 'meta_parent_id' (array), 'olderThan' (int), 'youngerThan' (int), 'limit' (int), 'sortKey' (string) 'sortOrder' (string) )
     */
    
public function search$tags$options )
    {
        
$ok = array();
        
        
/* Fix up forum IDs */
        
if ( isset( $options['meta_parent_id'] ) )
        {
            if ( 
is_array$options['meta_parent_id'] ) )
            {
                foreach( 
$options['meta_parent_id'] as $id )
                {
                    if ( 
$this->_canSearchForum$id ) === true )
                    {
                        
$ok[] = $id;
                    }
                }
            }
            else
            {
                if ( 
$this->_canSearchForum$options['meta_parent_id'] ) === true )
                {
                    
$ok[] = $options['meta_parent_id'];
                }
            }
        }
        else
        {
            
/* Fetch forum IDs */
            
$allForums $this->registry->class_forums->fetchSearchableForumIds();
            
            foreach( 
$allForums as $id )
            {
                if ( 
$this->_canSearchForum$id ) === true )
                {
                    
$ok[] = $id;
                }
            }
        }
        
        
$options['meta_parent_id'] = $ok;
        
        return 
parent::search$tags$options );
    }
    
    
/**
     * Fetch a list of pre-defined tags
     * 
     * @param     array    Where Data
     * @return    Array of pre-defined tags or null
     */
    
protected function _getPreDefinedTags$where=array() )
    {
        if ( ! empty( 
$where['meta_parent_id'] ) )
        {
            
$forum $this->registry->class_forums->getForumById$where['meta_parent_id'] );
        }
        
        
$this->settings['tags_predefined'] = ( ! empty( $forum['tag_predefined'] ) ) ? $forum['tag_predefined'] : $this->settings['tags_predefined'];
        
        return 
parent::_getPreDefinedTags$where );
    }
    
    
/**
     * Can set an item as a topic prefix
     * 
     * @param     array        $where        Where Data
     * @return     @e boolean
     */
    
protected function _prefixesEnabled$where )
    {
        if ( ! empty( 
$where['meta_parent_id'] ) )
        {
            
$forum $this->registry->class_forums->getForumById$where['meta_parent_id'] );
        }
        
        if ( 
$forum['bw_disable_prefixes'] )
        {
            return 
false;
        }
        else
        {
            return 
parent::_prefixesEnabled$where );
        }
    }
    
    
/**
     * Check a forum for tag searching
     * 
     * @param    id        $id        Forum ID
     * @return    @e boolean    True if it can be searched
     */
    
protected function _canSearchForum$id )
    {
        
$data $this->registry->class_forums->getForumById$id );
                    
        if ( ! 
$this->registry->permissions->check'read'$data ) )
        {
            return 
false;
        }
        
        
/* Can read, but is it password protected, etc? */
        
if ( ! $this->registry->class_forums->forumsCheckAccess$id0'forum', array(), true ) )
        {
            return 
false;
        }

        if ( ! 
$data['sub_can_post'] OR ! $data['can_view_others'] )
        {
            return 
false;
        }
        
        
/* Tagging disabled */
        
if ( $data['bw_disable_tagging'] )
        {
            return 
false;
        }
        
        return 
true;
    }
    
    
    
/**
     * Fetch a topic
     * 
     * @param    integer        $tid    Topic ID
     * @return    @e array    Topic data
     */
    
protected function _getTopic$tid )
    {
        if ( ! isset( 
$this->topicCache$tid ] ) )
        {
            
$this->topicCache$tid ] = $this->registry->getClass('topics')->getTopicById$tid );
        }
        
        return 
$this->topicCache$tid ];
    }
}
Онлайн: 1
Реклама