Вход Регистрация
Файл: admin/applications/core/extensions/comments/reports.php
Строк: 287
<?php
/**
 * Report center comments class
 *
 * @author         $author$
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Downloads
 * @link        http://www.invisionpower.com
 * @version        $Rev: 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 
comments_core_reports extends classes_comments_renderer
{
    
/**
     * Internal remap array
     *
     * @param    array
     */
    
protected $_remap = array(    'comment_id'            => 'id',
                                
'comment_author_id'        => 'comment_by',
                                
'comment_author_name'    => 'author_name',
                                
'comment_text'            => 'comment',
                                
'comment_ip_address'    => 'ip_address',
                                
'comment_edit_date'        => 'edit_date',
                                
'comment_date'            => 'comment_date',
                                
'comment_approved'        => 'approved',
                                
'comment_parent_id'        => 'rid' );
                     
    
/**
     * Internal parent remap array
     *
     * @param    array
     */
    
protected $_parentRemap = array(    'parent_id'            => 'id',
                                        
'parent_owner_id'    => 'updated_by',
                                        
'parent_parent_id'    => 'uid',
                                        
'parent_title'        => 'title',
                                        
'parent_seo_title'    => 'seoname',
                                        
'parent_date'        => 'date_created' );
    
    
/**
     * Who am I?
     *
     * @return    string
     */
    
public function whoAmI()
    {
        return 
'core-reports';
    }
    
    
/**
     * Comment table
     *
     * @return    string
     */
    
public function table()
    {
        return 
'rc_comments';
    }

    
/**
     * Enable reputation?
     *
     * @return    string
     */
    
public function reputationEnabled()
    {
        return 
false;
    }
    
    
/**
     * Fetch parent
     *
     * @return    array
     */
    
public function fetchParent$id )
    {
        static 
$cachedReports    = array();
        
        if( !isset(
$cachedReports$id ]) )
        {
            
$cachedReports$id ]    = $this->DB->buildAndFetch( array(
                                                                    
'select'    => 'i.*',
                                                                    
'from'        => array( 'rc_reports_index' => 'i' ),
                                                                    
'where'        => "i.id=" intval($id),
                                                                    
'add_join'    => array(
                                                                                        array(
                                                                                            
'select'    => 'c.*',
                                                                                            
'from'        => array( 'rc_classes' => 'c' ),
                                                                                            
'where'        => 'c.com_id=i.rc_class',
                                                                                            
'type'        => 'left',
                                                                                            )
                                                                                        )
                                                                )        );
        }
        
        return 
$cachedReports$id ];
    }
    
    
/**
     * Fetch settings
     *
     * @return    array
     */
    
public function settings()
    {
        return array( 
'urls-showParent' => "app=core&amp;module=reports&amp;do=show_report&amp;rid=%s",
                      
'urls-report'        => '' );
    }
    
    
/**
     * Number of items per page
     *
     * @return    int
     */
    
public function perPage()
    {
        return 
100;
    }
    
    
/**
     * Pre save
     * Accepts an array of GENERIC data and allows manipulation before it's added to DB
     *
     * @param    string        $type            Type of save (edit/add)
     * @param    array        $array            Array of GENERIC data (comment_xxxx)
     * @param    integer        $commentId        Comment ID (only for edits)
     * @param    integer        $parentId        Parent content ID
     * @return    @e array    Array of GENERIC data
     */
    
public function preSave$type, array $array$commentId=0$parentId=)
    {
        
/**
         * Always approve comments in report center
         * 
         * @link    http://community.invisionpower.com/tracker/issue-36632-report-comments-cant-be-approved/
         */
        
$array['comment_approved'] = 1;
        
        return 
$array;
    }
    
    
/**
     * Post save
     * Accepts an array of GENERIC data and allows manipulation after it's added to DB
     *
     * @param    string    Type of action (edit/add)
     * @param    array    Array of GENERIC data (comment_xxxx)
     * @param    int        Comment id (if available)
     * @param    int        Parent id
     * @return     array    Array of GENERIC data
     */
    
public function postSave$type, array $array$commentId=0$parentId=)
    {
        
$_cnt    $this->DB->buildAndFetch( array( 'select' => 'count(*) as total''from' => 'rc_comments''where' => 'rid=' $parentId ) );
        
$this->DB->update'rc_reports_index', array( 'num_comments' => intval($_cnt['total']), 'date_updated' => IPS_UNIX_TIME_NOW'updated_by' => $array['comment_author_id'] ), "id=" $parentId );
        
        
//-----------------------------------------
        // Notify other moderators
        //-----------------------------------------
        
        
$report            $this->fetchParent$parentId );

        
$this->registry->class_localization->loadLanguageFile( array( 'public_reports' ) );

        
$this->DB->loadCacheFileIPSLib::getAppDir('core') . '/sql/' ips_DBRegistry::getDriverType() . '_report_queries.php''report_sql_queries' );
        
        
$classToLoad IPSLib::loadLibraryIPSLib::getAppDir('core') .'/sources/classes/reportLibrary.php''reportLibrary' );
        
$this->registry->setClass'reportLibrary', new $classToLoad$this->registry ) );
        
        
$classToLoad    IPSLib::loadLibraryIPSLib::getAppDir('core') . '/sources/classes/reportNotifications.php''reportNotifications' );
        
$notify            = new $classToLoad$this->registry );
        
        
$this->registry->getClass('reportLibrary')->loadPlugin$report['my_class'], $report['app'] );
        
        if( 
is_object($this->registry->getClass('reportLibrary')->plugins$report['my_class'] ]) )
        {
            if( 
$report['extra_data'] && $report['extra_data'] != 'N;' )
            {
                
$this->registry->getClass('reportLibrary')->plugins$report['my_class'] ]->_extra unserialize$report['extra_data'] );
            }
            else
            {
                
$this->registry->getClass('reportLibrary')->plugins$report['my_class'] ]->_extra = array();
            }
            
            
$report_data    $this->registry->getClass('reportLibrary')->plugins$report['my_class'] ]->formatReportData$report );

            
$notify->initNotify$this->registry->getClass('reportLibrary')->plugins$report['my_class'] ]->getNotificationListIPSText::cleanPermString$report['mod_group_perm'] ), $report_data ), $report_data );
            
$notify->sendReplyNotifications$array['comment_text'] );
        }
            
        return 
$array;
    }
    
    
/**
     * Post delete. Can do stuff and that
     *
     * @param    array    Array of comment IDs to be deleted
     * @param    int        Parent ID
     * @return     void
     */
    
public function postDelete$commentIds$parentId )
    {
        
/* Determine most recent comment or report... */
        
$_comment    $this->DB->buildAndFetch( array( 'select' => 'comment_by, comment_date''from' => 'rc_comments''where' => 'approved=1 AND rid=' $parentId'order' => 'comment_date DESC''limit' => array( ) ) );
        
$_report    $this->DB->buildAndFetch( array( 'select' => 'report_by, date_reported''from' => 'rc_reports''where' => 'rid=' $parentId'order' => 'date_reported DESC''limit' => array( ) ) );
        
        
$_date_updated    0;
        
$_updated_by    0;
        
        if( 
$_comment['comment_date'] )
        {
            
$_date_updated    $_comment['comment_date'];
            
$_updated_by    $_comment['comment_by'];
        }
        
        if( 
$_report['date_reported'] > $_date_updated )
        {
            
$_date_updated    $_report['date_reported'];
            
$_updated_by    $_report['report_by'];
        }
        
        
$_cnt    $this->DB->buildAndFetch( array( 'select' => 'count(*) as total''from' => 'rc_comments''where' => 'rid=' $parentId ) );
        
$this->DB->update'rc_reports_index', array( 'num_comments' => intval($_cnt['total']), 'date_updated' => $_date_updated'updated_by' => $_updated_by ), "id=" $parentId );
    }

    
/**
     * Fetch a total count of comments we can see
     *
     * @param    mixed    parent Id or parent array
     * @return    int
     */
    
public function count$parent )
    {
        
/* Get parent */
        
if ( is_numeric$parent ) )
        {
            
$parent    $this->fetchParent$parent );
        }

        return 
intval($parent['num_comments']);
    }
    
    
/**
     * Perform a permission check
     *
     * @param    string    Type of check (add/edit/delete/editall/deleteall/approve all)
     * @param    array     Array of GENERIC data
     * @return    true or string to be used in exception
     */
    
public function can$type, array $array )
    { 
        
/* Init */
        
$comment = array();
        
        
/* Got data? */
        
if ( empty( $array['comment_parent_id'] ) )
        {
            
trigger_error"No parent ID passed to " __FILE__E_USER_WARNING );
        }
        
        
/* Get the file */
        
$event    $this->fetchParent$array['comment_parent_id'] );

        
/* Fetch comment */
        
if ( $array['comment_id'] )
        { 
            
$comment    $this->fetchById$array['comment_id'] );
        }

        
/* Check permissions */
        
switch( $type )
        {
            case 
'view':
                return 
true;
            break;
            
            case 
'edit':
                if( 
$this->memberData['g_is_supmod'] OR $this->memberData['member_id'] != $comment['comment_mid'] )
                {
                    return 
true;
                }

                return 
'NO_PERMISSION';
            break;
            
            case 
'add':
                return 
true;
            break;
            
            case 
'delete':
                return 
$this->memberData['g_is_supmod'] ? true 'NO_PERMISSION';
            break;
            
            case 
'visibility':
            case 
'moderate':
                return 
'NO_PERMISSION';
            break;
        }
    }

    
/**
     * Returns remap keys (generic => local)
     *
     * @return    array
     */
    
public function remapKeys$type='comment' )
    {
        return ( 
$type == 'comment' ) ? $this->_remap $this->_parentRemap;
    }
}
Онлайн: 1
Реклама