Вход Регистрация
Файл: admin/applications/core/modules_public/modcp/modcp.php
Строк: 315
<?php
/**
 * @file        modcp.php     Moderator control panel
 * $Copyright: (c) 2001 - 2011 Invision Power Services, Inc.$
 * $License: http://www.invisionpower.com/company/standards.php#license$
 * $Author: ips_terabyte $
 * @since        2/14/2011
 * $LastChangedDate: 2012-05-21 16:37:50 -0400 (Mon, 21 May 2012) $
 * @version        v3.3.3
 * $Revision: 10777 $
 */

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        public_core_modcp_modcp
 * @brief        Moderator control panel
 * 
 */
class public_core_modcp_modcp extends ipsCommand
{    
    
/**
     * Main function executed automatically by the controller
     *
     * @param    object        $registry        Registry object
     * @return    @e void
     */
    
public function doExecuteipsRegistry $registry 
    {
        
//-----------------------------------------
        // Load basic things
        //-----------------------------------------

        
$this->registry->class_localization->loadLanguageFile( array( 'public_modcp' ) );
        
        
$this->registry->output->setTitle$this->lang->words['modcp_page_title'] );

        
//-----------------------------------------
        // Which road are we going to take?
        //-----------------------------------------
        
        
switch( $this->request['do'] )
        {
            default:
            case 
'index':
                
$this->_indexPage();
            break;
        }

        
//-----------------------------------------
        // Output
        //-----------------------------------------

        
$this->registry->getClass('output')->addNavigation$this->lang->words['modcp_navbar'], "app=core&amp;module=modcp" );
        
$this->registry->getClass('output')->addContent$this->output );
        
$this->registry->output->sendOutput();
    }
    
    
/**
     * Show the mod CP portal
     *
     * @return    @e void
     */
    
protected function _indexPage()
    {
        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
ipsRegistry::getAppClass('forums');
        
$this->request['tab']     = empty($this->request['tab'])     ? 'index' trim($this->request['tab']);
        
$this->request['fromapp'] = empty($this->request['fromapp']) ? 'index' trim($this->request['fromapp']);
        
        
$_plugins    = array();
        
$_tabs        = array();
        
$_activeNav = array( 'primary' => 'index''secondary' => 'index' );
        
$_output    '';
        
$moderator    $this->registry->class_forums->getModerator();
        
$tab        $this->request['tab'];
        
$app        $this->request['fromapp'];
        
        
/**
         * Loop through all apps and get plugins
         * 
         * @note    When updating this code below remember to update also the core in public_core_reports_reports
         */
        
foreach( IPSLib::getEnabledApplications() as $appDir => $appData )
        {
            if( 
is_dirIPSLib::getAppDir$appDir ) . '/extensions/modcp' ) )
            {
                try
                {
                    foreach( new 
DirectoryIteratorIPSLib::getAppDir$appDir ) . '/extensions/modcp' ) as $file )
                    {
                        if( ! 
$file->isDot() && $file->isFile() )
                        {
                            if( 
preg_match'/^plugin_(.+?).php$/'$file->getFileName(), $matches ) )
                            { 
                                
//-----------------------------------------
                                // We load each plugin so it can determine
                                // if it should show based on permissions
                                //-----------------------------------------
                                
                                
$classToLoad IPSLib::loadLibrary$file->getPathName(), 'plugin_' $appDir '_' $matches[1], $appDir );

                                if( 
class_exists($classToLoad) )
                                {
                                    
$_plugins$appDir ][ $matches[1] ] = new $classToLoad$this->registry );

                                    if( 
$_plugins$appDir ][ $matches[1] ]->canView$moderator ) )
                                    { 
                                        
//-----------------------------------------
                                        // Hacky solution - we want forum plugins to
                                        // come first as they're the most used
                                        //-----------------------------------------
                                        
                                        
if( $appDir == 'forums' AND !empty($_tabs$_plugins$appDir ][ $matches[1] ]->getPrimaryTab() ]) )
                                        {
                                            
array_unshift$_tabs$_plugins$appDir ][ $matches[1] ]->getPrimaryTab() ], array( $_plugins$appDir ][ $matches[1] ]->getSecondaryTab(), $appDir$matches[1] ) );
                                        }
                                        else
                                        {
                                            
$_tabs$_plugins$appDir ][ $matches[1] ]->getPrimaryTab() ][] = array( $_plugins$appDir ][ $matches[1] ]->getSecondaryTab(), $appDir$matches[1] );
                                        }
                                        
                                        
/* Sort active tab */
                                        
if ( $appDir == $app && $tab == $matches[1] )
                                        {
                                            
$_activeNav = array( 'primary' => $_plugins$appDir ][ $matches[1] ]->getPrimaryTab(), 'secondary' => $_plugins$appDir ][ $matches[1] ]->getSecondaryTab() );
                                        }
                                    }
                                }
                            }
                        }
                    }
                } catch ( 
Exception $e ) {}
            }
        }
        
        
// Move trash can to the bottom - if available
        
if ( isset($_tabs['deleted_content']) )
        {
            
$trashCan $_tabs['deleted_content'];
            unset( 
$_tabs['deleted_content'] );
            
$_tabs['deleted_content'] = $trashCan;
        }
        
        
//-----------------------------------------
        // If we can't view any tabs, show an error
        //-----------------------------------------
        
        
if( !count($_tabs) )
        {
            
$this->registry->output->showError$this->lang->words['modcp_no_access'], 10194.12falsenull403 );
        }
        
        
//-----------------------------------------
        // Pass the necessary template variables into the plugin
        //-----------------------------------------

        
$this->registry->output->getTemplate('modcp')->templateVars['tabs'] = $_tabs;
        
$this->registry->output->getTemplate('modcp')->templateVars['activeNav'] = $_activeNav;

        
//-----------------------------------------
        // Get appropriate content to show
        //-----------------------------------------

        
if( $tab AND $app AND isset($_plugins$app ][ $tab ]) )
        {
            
$_output $_plugins$app ][ $tab ]->executePlugin$moderator );
        }
        else
        {
            switch ( 
$this->request['do'] )
            {
                case 
'editmember':
                    
$_output $this->_editMember();
                    break;
                    
                case 
'doeditmember':
                    
$this->_doEditMember();
                    break;
                    
                case 
'setAsSpammer':
                    
$this->_setAsSpammer();
                    break;
                    
                default:
                    
$_output $this->registry->output->getTemplate('modcp')->memberLookup();
                    break;
            }
        }

        
//-----------------------------------------
        // Output
        //-----------------------------------------
        
        
$this->output .= $this->registry->output->getTemplate('modcp')->portalPage$_output$_tabs$_activeNav );
    }
    
    
/**
     * Load all necessary properties
     *
     * @return    @e void
     */
    
public function loadData()
    {

        
//-----------------------------------------
        // Get forum libraries
        //-----------------------------------------
        
        
ipsRegistry::getAppClass'forums' );

        
//-----------------------------------------
        // Make sure we're a moderator...
        //-----------------------------------------
        
        
$pass 0;

        if( 
$this->memberData['member_id'] )
        {
            if( 
$this->memberData['g_is_supmod'] == )
            {
                
$pass                        1;
            }
            else if( 
$this->memberData['is_mod'] )
            {
                
$other_mgroups    = array();
                
$_other_mgroups    IPSText::cleanPermString$this->memberData['mgroup_others'] );
                
                if( 
$_other_mgroups )
                {
                    
$other_mgroups    explode","$_other_mgroups );
                }
                
                
$other_mgroups[] = $this->memberData['member_group_id'];

                
$this->DB->build( array( 
                                        
'select' => '*',
                                        
'from'   => 'moderators',
                                        
'where'  => "(member_id='" $this->memberData['member_id'] . "' OR (is_group=1 AND group_id IN(" implode","$other_mgroups ) . ")))" 
                                
)    );
                                              
                
$this->DB->execute();
                
                while ( 
$this->moderator $this->DB->fetch() )
                {
                    if ( 
$this->moderator['allow_warn'] )
                    {
                        
$pass                        1;
                    }
                }
            }            
        }
            
        if ( !
$pass )
        {
            
$this->registry->output->showError'warn_no_access'2025nullnull403 );
        }

        
//-----------------------------------------
        // Ensure we have a valid member
        //-----------------------------------------
        
        
$mid    intval($this->request['mid']);
        
        if ( 
$mid )
        {
            
$this->registry->output->showError'warn_no_user'10249nullnull404 );
        }
        
        
$this->warn_member    IPSMember::load$mid'all' );

        if ( ! 
$this->warn_member['member_id'] )
        {
            
$this->registry->output->showError'warn_no_user'10250nullnull404 );
        }
        
        
//-----------------------------------------
        // Get editor
        //-----------------------------------------
        
        
$classToLoad IPSLib::loadLibraryIPS_ROOT_PATH 'sources/classes/editor/composite.php''classes_editor_composite' );
        
$this->editor    = new $classToLoad();
    }
    
    
/**
     * Get the moderator library and return it
     *
     * @return    @e object
     */
    
protected function getModLibrary()
    {
        static 
$modLibrary    null;
        
        if( !
$modLibrary )
        {
            
$classToLoad    IPSLib::loadLibraryIPSLib::getAppDir'forums' ) . '/sources/classes/moderate.php''moderatorLibrary''forums' );
            
$modLibrary        = new $classToLoad$this->registry );
            
$modLibrary->init( array() );
        }
        
        return 
$modLibrary;
    }
    
    
/**
     * Form to edit a member
     *
     * @return    @e void
     * @todo     [Future] Determine what items should be editable and allow moderators to edit them
     */
    
protected function _editMember()
    {
        
$this->loadData();
    
        
//-----------------------------------------
        // Check permissions
        //-----------------------------------------

        
if ( ! $this->memberData['g_is_supmod'] )
        {
            return 
$this->registry->getClass('output')->getTemplate('modcp')->modcpMessage();
        }

        if ( ! 
$this->memberData['g_access_cp'] AND $this->warn_member['g_access_cp'] )
        {
            return 
$this->registry->getClass('output')->getTemplate('modcp')->modcpMessage$this->lang->words['mod_cannot_edit_admin'] );
        }
        
        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
$editable    = array();
        
        
//-----------------------------------------
        // Show about me and signature editors
        //-----------------------------------------
        
        
$this->editor->setAllowBbcodetrue );
        
$this->editor->setAllowSmiliesfalse );
        
$this->editor->setAllowHtml$this->caches['group_cache'][ $this->warn_member['member_group_id'] ]['g_dohtml'] );
        
$this->editor->setContent$this->warn_member['signature'], 'signatures' );
        
$editable['signature']    = $this->editor->show'Post', array( 'noSmilies' => true'height' => 100 ) );

        
$this->editor->setAllowBbcodetrue );
        
$this->editor->setAllowSmiliestrue );
        
$this->editor->setAllowHtml$this->caches['group_cache'][ $this->warn_member['member_group_id'] ]['g_dohtml'] );
        
$this->editor->setContent$this->warn_member['pp_about_me'], 'aboutme' );
        
$editable['aboutme']    = $this->editor->show'aboutme', array( 'height' => 100 ) );

        
//-----------------------------------------
        // Other fields
        //-----------------------------------------
        
        
$editable['member_id']                = $this->warn_member['member_id'];
        
$editable['members_display_name']    = $this->warn_member['members_display_name'];
        
$editable['title']                    = $this->warn_member['title'];

        
//-----------------------------------------
        // Profile fields
        //-----------------------------------------

        
$classToLoad            IPSLib::loadLibraryIPS_ROOT_PATH 'sources/classes/customfields/profileFields.php''customProfileFields' );
        
$fields                    = new $classToLoad();
        
$fields->member_data    $this->warn_member;
        
$fields->initData'edit' );
        
$fields->parseToEdit();
        
        
$editable['_parsedMember']    = IPSMember::buildDisplayData$this->warn_member );

        
//-----------------------------------------
        // Return the HTML
        //-----------------------------------------
        
        
return $this->registry->getClass('output')->getTemplate('modcp')->editUserForm$editable$fields );
    }
    
    
/**
     * Save the member updates
     *
     * @return    @e void
     * @todo     [Future] Determine what items should be editable and allow moderators to edit them
     */
    
protected function _doEditMember()
    {
        
$this->loadData();
        
        
//-----------------------------------------
        // Check permissions
        //-----------------------------------------
        
        
if ( ! $this->memberData['g_is_supmod'] )
        {
            
$this->registry->output->showError'mod_only_supermods'10370truenull403 );
        }

        if ( ! 
$this->memberData['g_access_cp'] AND $this->warn_member['g_access_cp'] )
        {
            
$this->registry->output->showError'mod_admin_edit'3032truenull403 );
        }

        if ( 
$this->request['auth_key'] != $this->member->form_hash )
        {
            
$this->registry->output->showError'no_permission'3032.1nullnull403 );
        }
        
        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
$editable    = array();

        
//-----------------------------------------
        // Signature and about me
        //-----------------------------------------
        
        
$signature    $this->editor->process$_POST['Post'] );
        
$aboutme    $this->editor->process$_POST['aboutme'] );

        
//-----------------------------------------
        // Parse signature
        //-----------------------------------------
        
        
IPSText::getTextClass('bbcode')->parse_smilies            0;
        
IPSText::getTextClass('bbcode')->parse_html                $this->caches['group_cache'][ $this->warn_member['member_group_id'] ]['g_dohtml'];
        
IPSText::getTextClass('bbcode')->parse_bbcode            1;
        
IPSText::getTextClass('bbcode')->parsing_section        'signatures';
        
IPSText::getTextClass('bbcode')->parsing_mgroup            $this->warn_member['member_group_id'];
        
IPSText::getTextClass('bbcode')->parsing_mgroup_others    $this->warn_member['mgroup_others'];

        
$signature        IPSText::getTextClass('bbcode')->preDbParse$signature );
        
$signatureCache    IPSText::getTextClass('bbcode')->preDisplayParse$signature );
        
        
//-----------------------------------------
        // Parse about me
        //-----------------------------------------
        
        
IPSText::getTextClass('bbcode')->parse_smilies            1;
        
IPSText::getTextClass('bbcode')->parse_html                $this->caches['group_cache'][ $this->warn_member['member_group_id'] ]['g_dohtml'];
        
IPSText::getTextClass('bbcode')->parse_bbcode            1;
        
IPSText::getTextClass('bbcode')->parsing_section        'aboutme';
        
IPSText::getTextClass('bbcode')->parsing_mgroup            $this->warn_member['member_group_id'];
        
IPSText::getTextClass('bbcode')->parsing_mgroup_others    $this->warn_member['mgroup_others'];

        
$aboutme    IPSText::getTextClass('bbcode')->preDbParse$aboutme );    
        
        
//-----------------------------------------
        // Add to array to save
        //-----------------------------------------
        
        
$save['extendedProfile']    = array( 'signature' => $signature'pp_about_me' => $aboutme );
        
$save['members']            = array( 'title' => $this->request['title'] );

        if ( 
$this->request['photo'] == )
        {
            
$classToLoad    IPSLib::loadLibraryIPS_ROOT_PATH 'sources/classes/member/photo.php''classes_member_photo' );
            
$photos            = new $classToLoad$this->registry );
            
$photos->remove$this->warn_member['member_id'] );
        }
        
        
//-----------------------------------------
        // Profile fields
        //-----------------------------------------

        
$classToLoad            IPSLib::loadLibraryIPS_ROOT_PATH 'sources/classes/customfields/profileFields.php''customProfileFields' );
        
$fields                    = new $classToLoad();
        
$fields->member_data    $this->warn_member;
        
$fields->initData'edit' );
        
$fields->parseToSave$_POST );
        
        if ( 
count$fields->out_fields ) )
        {
            
$save['customFields']    = $fields->out_fields;
        }
        
        
//-----------------------------------------
        // Bitwise
        //-----------------------------------------

        
$bw IPSBWOptions::thaw$this->warn_member['members_bitoptions'], 'members' );
        
$bw['bw_no_status_update'] = ( $this->request['status_updates'] ) ? 1;
        
$save['core']['members_bitoptions'] = IPSBWOptions::freeze$bw'members' );

        
//-----------------------------------------
        // Write it to the DB.
        //-----------------------------------------
        
        
IPSMember::save$this->warn_member['member_id'], $save );
        
        
//-----------------------------------------
        // Update signature content cache
        //-----------------------------------------
        
        
IPSContentCache::update$this->warn_member['member_id'], 'sig'$signatureCache );

        
//-----------------------------------------
        // Add a mod log entry and redirect
        //-----------------------------------------
        
        
$this->getModLibrary()->addModerateLog0000$this->lang->words['acp_edited_profile'] . " " $this->warn_member['members_display_name'] );

        
$this->_redirect$this->lang->words['acp_edited_profile'] . " " $this->warn_member['members_display_name'] );
    }
    
    
/**
     * Flag a user account as a spammer
     *
     * @return    @e void
     */
    
protected function _setAsSpammer()
    {
        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
$member_id    intval$this->request['member_id'] );
        
$toSave        = array( 'core' => array( 'bw_is_spammer' => ) );
        
$topicId    intval($this->request['t']);
        
$topic        = array();
        
        if( 
$topicId )
        {
            
$topic    $this->DB->buildAndFetch( array( 'select' => 'tid, title_seo, forum_id''from' => 'topics''where' => 'tid=' $topicId ) );
        }
        
        
//-----------------------------------------
        // Load member
        //-----------------------------------------
        
        
$member    IPSMember::load$member_id );
        
        if ( ! 
$member['member_id'] )
        {
            
$this->registry->output->showError'moderate_no_permission'10311900truenull404 );
        }
        
        
//-----------------------------------------
        // Check permissions
        //-----------------------------------------
        
        
if( !$this->memberData['g_is_supmod'] AND !$this->memberData['forumsModeratorData'][ $topic['forum_id'] ]['bw_flag_spammers'] )
        {
            
$this->registry->output->showError'moderate_no_permission'103119truenull403 );
        }

        if ( 
IPSMember::isInGroup$memberexplode','$this->settings['warn_protected'] ) ) )
        {
            
$this->registry->output->showError'moderate_no_permission'10311901truenull403 );
        }
        
        
//-----------------------------------------
        // Do it
        //-----------------------------------------

        
IPSMember::flagMemberAsSpammer$member$this->memberData );
        
        
//-----------------------------------------
        // Redirect
        //-----------------------------------------
        
        
if( $topicId )
        {
            
$this->registry->output->redirectScreen$this->lang->words['flag_spam_done'], $this->settings['base_url'] . "showtopic=" $topic['tid'] . "&amp;st=" intval($this->request['st']), $topic['title_seo'], 'showtopic' );
        }
        else
        {
            
$this->registry->output->redirectScreen$this->lang->words['flag_spam_done'], $this->settings['base_url'] . "showuser=" $member['member_id'], $member['members_seo_name'], 'showuser' );
        }
    }
    
    
/**
     * Redirect back to where we came from
     *
     * @param    string    $message    Redirect message
     * @return    @e void
     */
    
protected function _redirect$message )
    {
        if( 
$this->request['pf'] )
        {
            
$this->registry->output->redirectScreen$message$this->settings['base_url'] . "showuser=" $this->warn_member['member_id'], $this->warn_member['members_seo_name'], 'showuser' );
        }
        else if( 
$this->request['t'] )
        {
            
$topic    $this->DB->buildAndFetch( array( 'select' => 'tid, title_seo''from' => 'topics''where' => 'tid=' intval($this->request['t']) ) );

            
$this->registry->output->redirectScreen$message$this->settings['base_url'] . "showtopic=" $topic['tid'] . '&amp;st=' $this->request['_st'], $topic['title_seo'], 'showtopic' );
        }
        else
        {
            
$this->registry->output->redirectScreen$message$this->settings['base_url'] . "app=core&amp;module=modcp&amp;do=editmember&amp;mid={$this->warn_member['member_id']});
        }
    }
}
Онлайн: 4
Реклама