Вход Регистрация
Файл: admin/applications/forums/extensions/reportPlugins/post.php
Строк: 256
<?php
/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Report Center :: Posts plugin
 * Last Updated: $LastChangedDate: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @author        Based on original "Report Center" by Luke Scott
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @subpackage    Forums
 * @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 'admin.php'.";
    exit();
}

class 
post_plugin
{
    
/**
     * Registry Object Shortcuts
     *
     * @var        $registry
     * @var        $DB
     * @var        $settings
     * @var        $request
     * @var        $lang
     * @var        $member
     * @var        $memberData
     * @var        $cache
     * @var        $caches
     */
    
protected $registry;
    protected 
$DB;
    protected 
$settings;
    protected 
$request;
    protected 
$lang;
    protected 
$member;
    protected 
$memberData;
    protected 
$cache;
    protected 
$caches;
    
    
/**
     * Holds extra data for the plugin
     *
     * @var        array            Data specific to the plugin
     */
    
public $_extra;
    
    
/**
     * Constructor
     *
     * @param    object        $registry        Registry object
     * @return    @e void
     */
    
public function __constructipsRegistry $registry )
    {
        
//-----------------------------------------
        // Make object
        //-----------------------------------------
        
        
$this->registry $registry;
        
$this->DB        $this->registry->DB();
        
$this->settings =& $this->registry->fetchSettings();
        
$this->request  =& $this->registry->fetchRequest();
        
$this->member   $this->registry->member();
        
$this->memberData =& $this->registry->member()->fetchMemberData();
        
$this->cache    $this->registry->cache();
        
$this->caches   =& $this->registry->cache()->fetchCaches();
        
$this->lang        $this->registry->class_localization;
        
        
ipsRegistry::getAppClass'forums' );
    }
    
    
/**
     * Display the form for extra data in the ACP
     *
     * @param    array         Plugin data
     * @param    object        HTML object
     * @return    string        HTML to add to the form
     */
    
public function displayAdminForm$plugin_data, &$html )
    {
        return 
$html->addRow(    $this->lang->words['r_supermod'],
                                
sprintf(  $this->lang->words['r_supermod_info'], $this->settings['_base_url'] ),
                                
$this->registry->output->formYesNo('report_supermod', (!isset( $plugin_data['report_supermod'] )) ? $plugin_data['report_supermod'] )
                            );
    }
    
    
/**
     * Process the plugin's form fields for saving
     *
     * @param    array         Plugin data for save
     * @return    string        Error message
     */
    
public function processAdminForm( &$save_data_array )
    {
        
$save_data_array['report_supermod'] = intval($this->request['report_supermod']);
        
        return 
'';
    }
    
    
/**
     * Update timestamp for report
     *
     * @param    array         New reports
     * @param     array         New members cache
     * @return    boolean
     */
    
public function updateReportsTimestamp$new_reports, &$new_members_cache )
    {
        
$nmc =& $new_members_cache['report_temp']['post_marker'];

        foreach( 
$new_reports as $report )
        {
            if( 
$report['is_new'] == || $report['is_active'] == )
            {
                
$nmc['forum'][ $report['exdat1'] ]['info']    = array( 'id' => $report['id'], 'title' => $report['title'], 'com_id' => $report['com_id'] );
                
$nmc['topic'][ $report['exdat2'] ]['info']    = array( 'id' => $report['id'], 'title' => $report['title'], 'com_id' => $report['com_id'] );
                
$nmc['post'][ $report['exdat3'] ]['info']    = array( 'id' => $report['id'], 'title' => $report['title'], 'com_id' => $report['com_id'] );
            }
            if( 
$report['is_new'] == )
            {
                
$nmc['forum'][ $report['exdat1'] ]['gfx']    = 1;
                
$nmc['topic'][ $report['exdat2'] ]['gfx']    = 1;
                
$nmc['post'][ $report['exdat3'] ]['gfx']    = 1;
            }
            elseif( 
$report['is_active'] == )
            {
                
$nmc['forum'][ $report['exdat1'] ]['gfx']    = 2;
                
$nmc['topic'][ $report['exdat2'] ]['gfx']    = 2;
                
$nmc['post'][ $report['exdat3'] ]['gfx']    = 2;
            }
        }
    }
        
    
/**
     * Get report permissions
     *
     * @param    string         Type of perms to check
     * @param     array         Permissions data
     * @param     array         group ids
     * @param     string        Special permissions
     * @return    boolean
     */
    
public function getReportPermissions$check$com_dat$group_ids, &$to_return )
    {
        if( ( 
$this->memberData['g_is_supmod'] == && ( ! isset($this->_extra['report_supermod']) || $this->_extra['report_supermod'] == ) ) )
        {
            return 
true;
        }
        else
        {
            if ( ! 
is_array$this->caches['moderators'] ) )
            {
                return 
false;
            }
            
            
$forum_ids = array();

            foreach( 
$this->caches['moderators'] as $mod )
            {
                if( 
$this->memberData['member_id'] AND $mod['member_id'] == $this->memberData['member_id'] )
                {
                    
$these_forums explode','IPSText::cleanPermString$mod['forum_id'] ) );
                    
                    foreach( 
$these_forums as $forum_id )
                    {
                        
$forum_ids['exdat1'][] = $forum_id;
                    }
                }
                elseif( 
$mod['is_group'] == && in_array$mod['group_id'], $group_ids ) == true )
                {
                    
$these_forums explode','IPSText::cleanPermString$mod['forum_id'] ) );
                    
                    foreach( 
$these_forums as $forum_id )
                    {
                        
$forum_ids['exdat1'][] = $forum_id;
                    }
                }
            }
            if( 
count$forum_ids ) > )
            {
                
$to_return $forum_ids;
                return 
true;
            }
            else
            {
                return 
false;
            }
        }    
    }
    
    
/**
     * Show the report form for this module
     *
     * @param     array         Application data
     * @return    string        HTML form information
     */
    
public function reportForm$com_dat )
    {        
        
$this->lang->words['report_basic_title']        = $this->lang->words['report_post_title'];
        
$this->lang->words['report_basic_url_title']    = $this->lang->words['report_post_url_title'];
        
$this->lang->words['report_basic_enter']        = $this->lang->words['report_post_enter'];
        
        
$this->registry->output->setTitle$this->lang->words['report_basic_title'] );
        
$this->registry->output->addNavigation$this->lang->words['report_basic_title'], '' );
    
        
$topic_id intval($this->request['tid']);
        
$this->_checkAccess$topic_id );
        
        
$extra_data = array(
                            
'topic_id'    => intval($topic_id),
                            
'post_id'    => intval($this->request['pid']),
                            
'forum_id'    => intval($this->topic['forum_id']),
                            );
        
        
$url $this->registry->output->buildSEOUrl"showtopic={$extra_data['topic_id']}&amp;view=findpost&amp;p={$extra_data['post_id']}"'public'$this->topic['title_seo'], 'showtopic' );
        
        
//-----------------------------------------
        // Title, URL Extra Data (Array)
        //-----------------------------------------
        
        
return $this->registry->getClass('reportLibrary')->showReportForm$this->topic['title'], $url$extra_data );
    }
    
    
/**
     * Get section and link
     *
     * @param     array         Report data
     * @return    array         Section/link
     */
    
public function giveSectionLinkTitle$report_row )
    {
        return array(
                    
'title'            => $this->registry->class_forums->forum_by_id$report_row['exdat1'] ]['name'],
                    
'url'            => '/index.php?showforum=' $report_row['exdat1'],
                    
'seo_title'        => $this->registry->class_forums->forum_by_id$report_row['exdat1'] ]['name_seo'],
                    
'seo_template'    => 'showforum',
                    );
    }
    
    
/**
     * Process a report and save the data appropriate
     *
     * @param     array         Report data
     * @return    array         Data from saving the report
     */
    
public function processReport$com_dat )
    {
        
$topic_id    intval($this->request['topic_id']);
        
$post_id    intval($this->request['post_id']);
        
$forum_id    intval($this->request['forum_id']);
        
        if( ! 
$topic_id || ! $post_id )
        {
            
$this->registry->output->showError'reports_missing_tidpid'10168 );
        }
        
        
$uid md5'topic_' $topic_id '_' $post_id '_' $forum_id '_' $com_dat['com_id'] );
        
        
$url        'showtopic=' intval($topic_id) . '&view=findpost&p=' intval($post_id);
        
$save_url    str_replace'&''&amp;'$url);
        
        
$status = array();
        
        
$this->DB->build( array( 'select'     => 'status, is_new, is_complete'
                                         
'from'        => 'rc_status'
                                         
'where'    => "is_new=1 OR is_complete=1",
                                )         );
        
$this->DB->execute();

        while( 
$row $this->DB->fetch() )
        {
            if( 
$row['is_new'] == )
            {
                
$status['new'] = $row['status'];
            }
            elseif( 
$row['is_complete'] == )
            {
                
$status['complete'] = $row['status'];
            }
        }
        
        
$data $this->DB->buildAndFetch( array(
                                                
'select'    => 'p.post',
                                                
'from'        => array( 'posts' => 'p' ),
                                                
'where'        => 'p.pid=' $post_id,
                                                
'add_join'    => array(
                                                                    array(
                                                                        
'select'    => 't.title_seo',
                                                                        
'from'        => array( 'topics' => 't' ),
                                                                        
'where'        => 't.tid=p.topic_id',
                                                                        
'type'        => 'left',
                                                                        ),
                                                                    array(
                                                                        
'select'    => 'mem.member_id, mem.members_display_name',
                                                                        
'from'        => array( 'members' => 'mem' ),
                                                                        
'where'        => 'mem.member_id=p.author_id',
                                                                        
'type'        => 'left',
                                                                        ),
                                                                    )
                                        )        );

        
IPSText::getTextClass('bbcode')->parse_bbcode        1;
        
IPSText::getTextClass('bbcode')->parse_html            0;
        
IPSText::getTextClass('bbcode')->parse_emoticons    1;
        
IPSText::getTextClass('bbcode')->parse_nl2br        0;
        
IPSText::getTextClass('bbcode')->parsing_section    'global';
        
        
$message    "[quote name='" IPSText::getTextClass('bbcode')->makeQuoteSafe$data['members_display_name'] ) . "']";
        
$message    .= IPSText::getTextClass('bbcode')->preEditParse$data['post'] );
        
$message    .= "[/quote]nn";
        
$message    .= $this->request['message'];
        
        
$this->DB->build( array( 'select' => 'id''from' => 'rc_reports_index''where' => "uid='{$uid}'" ) );
        
$this->DB->execute();
        
        if( 
$this->DB->getTotalRows() == )
        {            
            
$this->_checkAccess$topic_id );
            
            
$built_report_main = array(
                                        
'uid'            => $uid,
                                        
'title'            => $this->topic['title'],
                                        
'status'        => $status['new'],
                                        
'url'            => '/index.php?' $save_url,
                                        
'seoname'        => $data['title_seo'],
                                        
'seotemplate'    => 'showtopic',
                                        
'rc_class'        => $com_dat['com_id'],
                                        
'updated_by'    => $this->memberData['member_id'],
                                        
'date_updated'    => time(),
                                        
'date_created'    => time(),
                                        
'exdat1'        => $forum_id,
                                        
'exdat2'        => $topic_id,
                                        
'exdat3'        => $post_id,
                                    );
            
            
$this->DB->insert'rc_reports_index'$built_report_main );
            
$rid $this->DB->getInsertId();
        }
        else
        {
            
$the_report    $this->DB->fetch();
            
$rid        $the_report['id'];
            
$this->DB->update'rc_reports_index', array( 'date_updated' => time(), 'status' => $status['new'], 'seoname' => $data['title_seo'], 'seotemplate' => 'showtopic' ), "id='{$rid}'" );
        }
        
        
IPSText::getTextClass('bbcode')->parse_bbcode        1;
        
IPSText::getTextClass('bbcode')->parse_html            0;
        
IPSText::getTextClass('bbcode')->parse_emoticons    1;
        
IPSText::getTextClass('bbcode')->parse_nl2br        1;
        
IPSText::getTextClass('bbcode')->parsing_section    'reports';
        
        
$build_report = array(
                            
'rid'            => $rid,
                            
'report'        => IPSText::getTextClass('bbcode')->preDbParse$message ),
                            
'report_by'        => $this->memberData['member_id'],
                            
'date_reported'    => time(),
                            );
        
$this->DB->insert'rc_reports'$build_report );
        
        
$reports $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as total''from' => 'rc_reports''where' => "rid='{$rid}'" ) );
        
        
$this->DB->update'rc_reports_index', array( 'num_reports' => $reports['total'] ), "id='{$rid}'" );
        
        
$return_data = array(
                            
'REDIRECT_URL'    => $url,
                            
'FORUM_ID'        => $forum_id,
                            
'REPORT_INDEX'    => $rid,
                            
'SAVED_URL'        => '/index.php?' $save_url,
                            
'REPORT'        => $build_report['report'],
                            
'SEOTITLE'        => $data['title_seo'],
                            
'TEMPLATE'        => 'showtopic',
                            );
        
        return 
$return_data;
    }
    
    
/**
     * Accepts an array of data from rc_reports_index and returns an array formatted nearly identical to processReport()
     *
     * @param     array         Report data
     * @return    array         Formatted report data
     */
    
public function formatReportData$report_data )
    {
        return array(
                    
'REDIRECT_URL'    => $report_data['url'],
                    
'FORUM_ID'        => $report_data['exdat1'],
                    
'REPORT_INDEX'    => $report_data['id'],
                    
'SAVED_URL'        => str_replace'&amp;''&'$report_data['url'] ),
                    
'REPORT'        => '',
                    
'SEOTITLE'        => $report_data['seoname'],
                    
'TEMPLATE'        => 'showtopic',
                    );
    }
    
    
/**
     * Where to send user after report is submitted
     *
     * @param     array         Report data
     * @return    @e void
     */
    
public function reportRedirect$report_data )
    {
        
$this->registry->output->redirectScreen$this->lang->words['report_sending'], $this->settings['base_url'] . $report_data['REDIRECT_URL'], $report_data['SEOTITLE'], $report_data['TEMPLATE'] );
    }
    
    
/**
     * Retrieve list of users to send notifications to
     *
     * @param     string         Group ids
     * @param     array         Report data
     * @return    array         Array of users to PM/Email
     */
    
public function getNotificationList$group_ids$report_data )
    {
        
//-----------------------------------------
        // Build where for secondary member groups
        //-----------------------------------------
        
        
$secondaryWhere    = array();
        
        if( 
is_array($group_ids) AND count($group_ids) )
        {
            foreach( 
$group_ids as $group_id )
            {
                
$secondaryWhere[]    = "m.mgroup_others LIKE '%,{$group_id},%'";
            }
        }
        
        
$this->DB->build( array(
                                
'select'    => 'm.member_id as real_member_id, m.members_display_name as name, m.language, m.members_disable_pm, m.email, m.member_group_id',
                                
'from'        => array( 'members' => 'm' ),
                                
'where'        => "(m.member_group_id IN(" $group_ids ") " . ( count($secondaryWhere) ? "OR " implode' OR '$secondaryWhere ) : '' ) . ") AND (g.g_is_supmod=1 OR g.g_access_cp=1 OR moderator.forum_id LIKE '%,{$report_data['FORUM_ID']},%')",
                                
'add_join'    => array(
                                                    array(
                                                        
'select'    => 'moderator.member_id, moderator.group_id',
                                                        
'from'        => array( 'moderators' => 'moderator' ),
                                                        
'where'        => 'moderator.member_id=m.member_id OR moderator.group_id=m.member_group_id',
                                                        ),
                                                    array(
                                                        
'from'        => array( 'groups' => 'g' ),
                                                        
'where'        => 'g.g_id=m.member_group_id',
                                                        
'type'        => 'left',
                                                        ),
                                                    )
                            )        );
        
$this->DB->execute();

        
$notify        = array();

        if ( 
$this->DB->getTotalRows() )
        {
            while( 
$r $this->DB->fetch() )
            {
                
$r['member_id']    = $r['real_member_id'];
                
                
$notify$r['member_id'] ] = $r;
            }
        }

        return 
$notify;
    }
    
    
/**
     * Check access to report the topic
     *
     * @param     integer     Topic id
     * @return    @e void
     */
    
protected function _checkAccess$tid )
    {
        if ( ! 
$this->memberData['member_id'] )
        {
            
$this->registry->output->showError'reports_must_be_member'10169 );
        }
        
        
//-----------------------------------------
        // Needs silly a. alias to keep oracle
        // happy
        //-----------------------------------------
        
        
$this->topic $this->DB->buildAndFetch( array( 'select' => 'a.*,a.title as topic_title''from' => 'topics a''where' => "a.tid=" $tid ) );
        
        if( 
ipsRegistry::isClassLoaded('class_forums') !== TRUE )
        {
            
$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();
        }
        
        
$this->registry->getClass('class_forums')->forumsCheckAccess$this->topic['forum_id'], 0'topic'$this->topic );
    }
}
Онлайн: 1
Реклама