Вход Регистрация
Файл: library/XenForo/ControllerAdmin/Moderator.php
Строк: 507
<?php

/**
 * Controller for managing moderators.
 *
 * @package XenForo_Moderator
 */
class XenForo_ControllerAdmin_Moderator extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertAdminPermission('user');
    }

    
/**
     * A list of all moderators: super moderators and content-specific mods.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIndex()
    {
        
$moderatorModel $this->_getModeratorModel();

        
$contentModeratorInfo = array();
        
$contentModData $moderatorModel->addContentTitlesToModerators(
            
$moderatorModel->getContentModerators()
        );

        foreach (
$contentModData AS $moderator)
        {
            
$contentModeratorInfo[$moderator['user_id']][] = $moderator;
        }

        
$superModerators = array();
        
$contentModerators = array();
        foreach (
$moderatorModel->getAllGeneralModerators() AS $moderator)
        {
            if (
$moderator['is_super_moderator'])
            {
                
$superModerators[$moderator['user_id']] = $moderator;
            }

            if (isset(
$contentModeratorInfo[$moderator['user_id']]))
            {
                
$moderator['content'] = $contentModeratorInfo[$moderator['user_id']];
                
$contentModerators[$moderator['user_id']] = $moderator;
            }
        }

        
// get total content moderators
        
$totalContentModerators 0;
        foreach (
$contentModerators AS $user)
        {
            
$totalContentModerators += count($user['content']);
        }

        
$viewParams = array(
            
'superModerators' => $superModerators,
            
'contentModerators' => $contentModerators,
            
'totalContentModerators' => $totalContentModerators,
        );

        return 
$this->responseView('XenForo_ViewAdmin_Moderator_List''moderator_list'$viewParams);
    }

    
/**
     * Gets the moderator add/edit controller response. This handles both super
     * and content moderators.
     *
     * @param array $moderator Info about the moderator; a content or super mod record
     * @param boolean $allowDelete If true, shows the necessary delete button
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
protected function _moderatorAddEditResponse(array $moderator$allowDelete true)
    {
        
$moderatorModel $this->_getModeratorModel();

        
$isContentModerator = (!empty($moderator['content_type']));
        
$isSuperModerator = (!empty($moderator['is_super_moderator']));

        
$existingPermissions unserialize($moderator['moderator_permissions']);

        if (
$isContentModerator)
        {
            
$generalModerator $moderatorModel->getGeneralModeratorByUserId($moderator['user_id']);
            if (
$generalModerator)
            {
                
$moderator['extra_user_group_ids'] = $generalModerator['extra_user_group_ids'];
                
$moderator['is_super_moderator'] = $generalModerator['is_super_moderator'];
                
$moderator['exists'] = true;

                
$existingPermissions $moderatorModel->mergeGeneralModeratorPermissions(
                    
$existingPermissionsunserialize($generalModerator['moderator_permissions'])
                );
            }
            else
            {
                
$moderator['extra_user_group_ids'] = '';
                
$moderator['is_super_moderator'] = 0;
            }
        }

        
$generalInterfaceGroupIds $moderatorModel->getGeneralModeratorInterfaceGroupIds();
        
$moderatorInterfaceGroupIds $moderatorModel->getModeratorInterfaceGroupIds($moderator);

        
$interfaceGroups $moderatorModel->getModeratorPermissionsForInterface($moderatorInterfaceGroupIds$existingPermissions);

        
$generalInterfaceGroups = array();
        foreach (
$generalInterfaceGroupIds AS $generalInterfaceGroupId)
        {
            
$generalInterfaceGroups[$generalInterfaceGroupId] = $interfaceGroups[$generalInterfaceGroupId];
            unset(
$interfaceGroups[$generalInterfaceGroupId]);
        }

        
$userGroups $moderatorModel->getExtraUserGroupOptions($moderator['extra_user_group_ids']);

        if (
$isContentModerator)
        {
            
$handler $moderatorModel->getContentModeratorHandlers($moderator['content_type']);
            
$contentTitle $handler->getContentTitle($moderator['content_id']);
        }
        else
        {
            
$contentTitle '';
        }

        
$user $this->_getUserModel()->getUserById($moderator['user_id']);
        if (empty(
$moderator['username'])) {
            
$moderator['username'] = $user['username'];
        }

        
$exists = isset($moderator['exists']) ? $moderator['exists'] : true;
        
$isStaff = ($exists $user['is_staff'] : true);

        
$viewParams = array(
            
'user' => $user,
            
'moderator' => $moderator,
            
'contentTitle' => $contentTitle,
            
'allowDelete' => $allowDelete,
            
'isStaff' => $isStaff,

            
'interfaceGroups' => $interfaceGroups,
            
'generalInterfaceGroups' => $generalInterfaceGroups,

            
'userGroups' => $userGroups,
        );

        return 
$this->responseView('XenForo_ViewAdmin_Moderator_Edit''moderator_edit'$viewParams);
    }

    
/**
     * Either displays a form to allow choice of moderator and type, or displays a
     * form to explicitly add a moderator.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionAdd()
    {
        
$input $this->_input->filter(array(
            
'username' => XenForo_Input::STRING,
            
'type' => XenForo_Input::STRING,
            
'type_id' => array(XenForo_Input::UINT'array' => true)
        ));

        if (
$input['username'] === '' || $input['type'] === '')
        {
            
$viewParams = array(
                
'username' => $input['username'],
                
'type' => $input['type'],
                
'typeId' => $input['type_id'],
                
'typeHandlers' => $this->_getModeratorModel()->getContentModeratorHandlers()
            );

            return 
$this->responseView('XenForo_ViewAdmin_Moderator_AddChoice''moderator_add_choice'$viewParams);
        }

        
$user $this->_getUserModel()->getUserByName($input['username']);
        if (!
$user)
        {
            return 
$this->responseError(new XenForo_Phrase('requested_user_not_found'), 404);
        }

        
$moderatorModel $this->_getModeratorModel();

        if (
$input['type'] == '_super')
        {
            
$moderator $moderatorModel->getGeneralModeratorByUserId($user['user_id']);
            if (!
$moderator)
            {
                
$moderator = array(
                    
'user_id' => $user['user_id'],
                    
'content_type' => '',
                    
'content_id' => 0,
                    
'is_super_moderator' => 1,
                    
'extra_user_group_ids' => '',
                    
'moderator_permissions' => serialize(array()),
                    
'exists' => false
                
);
            }
            else
            {
                
$moderator['is_super_moderator'] = 1;
            }
        }
        else
        {
            
$handler $moderatorModel->getContentModeratorHandlers($input['type']);
            
$contentId = isset($input['type_id'][$input['type']]) ? $input['type_id'][$input['type']] : 0;

            if (!
$handler->getContentTitle($contentId))
            {
                return 
$this->responseError(new XenForo_Phrase('please_select_a_valid_type_of_moderator'), 404);
            }

            
$moderator $moderatorModel->getContentModeratorByContentAndUserId($input['type'], $contentId$user['user_id']);
            if (!
$moderator)
            {
                
$moderator = array(
                    
'user_id' => $user['user_id'],
                    
'content_type' => $input['type'],
                    
'content_id' => $contentId,
                    
'is_super_moderator' => 0,
                    
'extra_user_group_ids' => '',
                    
'moderator_permissions' => serialize(array()),
                    
'exists' => false
                
);
            }
        }

        return 
$this->_moderatorAddEditResponse($moderatorfalse);
    }

    
/**
     * Saves a moderator (super or content). This handles both inserts and updates.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSave()
    {
        
$this->_assertPostOnly();

        
$input $this->_input->filter(array(
            
'moderator_id' => XenForo_Input::UINT,
            
'user_id' => XenForo_Input::UINT,
            
'content_type' => XenForo_Input::STRING,
            
'content_id' => XenForo_Input::UINT,
            
'is_super_moderator' => XenForo_Input::UINT,
            
'is_staff' => XenForo_Input::UINT,
            
'extra_user_group_ids' => array(XenForo_Input::UINT'array' => true),
            
'general_moderator_permissions' => XenForo_Input::ARRAY_SIMPLE,
            
'moderator_permissions' => XenForo_Input::ARRAY_SIMPLE
        
));

        if (
$input['content_type'])
        {
            
$moderatorId $this->_getModeratorModel()->insertOrUpdateContentModerator(
                
$input['user_id'], $input['content_type'], $input['content_id'], $input['moderator_permissions'],
                array(
                    
'general_moderator_permissions' => $input['general_moderator_permissions'],
                    
'extra_user_group_ids' => $input['extra_user_group_ids'],
                    
'is_staff' => $input['is_staff']
                )
            );
        }
        else
        {
            
$userId $this->_getModeratorModel()->insertOrUpdateGeneralModerator(
                
$input['user_id'], $input['general_moderator_permissions'], $input['is_super_moderator'],
                array(
                    
'super_moderator_permissions' => $input['moderator_permissions'],
                    
'extra_user_group_ids' => $input['extra_user_group_ids'],
                    
'is_staff' => $input['is_staff']
                )
            );

            
$moderatorId "supermod_{$userId}";
        }

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('moderators') . $this->getLastHash($moderatorId)
        );
    }

    
/**
     * Displays a form to edit a super moderator.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSuperEdit()
    {
        
$userId $this->_input->filterSingle('user_id'XenForo_Input::UINT);
        
$moderator $this->_getModeratorModel()->getGeneralModeratorByUserId($userId);
        if (!
$moderator || !$moderator['is_super_moderator'])
        {
            return 
$this->responseError(new XenForo_Phrase('requested_moderator_not_found'), 404);
        }

        return 
$this->_moderatorAddEditResponse($moderator);
    }

    
/**
     * Deletes a super moderator.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSuperDelete()
    {
        if (
$this->isConfirmedPost())
        {
            return 
$this->_deleteData(
                
'XenForo_DataWriter_Moderator''user_id',
                
XenForo_Link::buildAdminLink('moderators'), null,
                array(
XenForo_DataWriter_Moderator::OPTION_SET_IS_STAFF => true)
            );
        }
        else 
// show confirmation dialog
        
{
            
$userId $this->_input->filterSingle('user_id'XenForo_Input::UINT);
            
$moderator $this->_getModeratorModel()->getGeneralModeratorByUserId($userId);
            if (!
$moderator || !$moderator['is_super_moderator'])
            {
                return 
$this->responseError(new XenForo_Phrase('requested_moderator_not_found'), 404);
            }

            
$viewParams = array(
                
'moderator' => $moderator
            
);

            return 
$this->responseView('XenForo_ViewAdmin_Moderator_SuperDelete''moderator_super_delete'$viewParams);
        }
    }

    
/**
     * Displays a form to edit a content moderator.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionContentEdit()
    {
        
$moderatorId $this->_input->filterSingle('moderator_id'XenForo_Input::UINT);
        
$moderator $this->_getModeratorModel()->getContentModeratorById($moderatorId);
        if (!
$moderator)
        {
            return 
$this->responseError(new XenForo_Phrase('requested_moderator_not_found'), 404);
        }

        return 
$this->_moderatorAddEditResponse($moderator);
    }

    
/**
     * Deletes a content moderator.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionContentDelete()
    {
        if (
$this->isConfirmedPost())
        {
            return 
$this->_deleteData(
                
'XenForo_DataWriter_ModeratorContent''moderator_id',
                
XenForo_Link::buildAdminLink('moderators'), null,
                array(
XenForo_DataWriter_ModeratorContent::OPTION_SET_IS_STAFF => true)
            );
        }
        else 
// show confirmation dialog
        
{
            
$moderatorModel $this->_getModeratorModel();

            
$moderatorId $this->_input->filterSingle('moderator_id'XenForo_Input::UINT);
            
$moderator $moderatorModel->getContentModeratorById($moderatorId);
            if (!
$moderator)
            {
                return 
$this->responseError(new XenForo_Phrase('requested_moderator_not_found'), 404);
            }

            
$handler $moderatorModel->getContentModeratorHandlers($moderator['content_type']);
            
$contentTitle $handler->getContentTitle($moderator['content_id']);

            
$viewParams = array(
                
'moderator' => $moderator,
                
'contentTitle' => $contentTitle
            
);

            return 
$this->responseView('XenForo_ViewAdmin_Moderator_ContentDelete''moderator_content_delete'$viewParams);
        }
    }

    
/**
     * @return XenForo_Model_Moderator
     */
    
protected function _getModeratorModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Moderator');
    }

    
/**
     * @return XenForo_Model_User
     */
    
protected function _getUserModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_User');
    }
}
Онлайн: 0
Реклама