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

/**
 * Controller for managing admins.
 *
 * @package XenForo_Admin
 */
class XenForo_ControllerAdmin_Admin extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertAdminPermission('user');
        
$this->assertSuperAdmin();
    }

    
/**
     * Displays a list of admins.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIndex()
    {
        if (
$this->_input->filterSingle('user_id'XenForo_Input::UINT))
        {
            return 
$this->responseReroute(__CLASS__'edit');
        }

        
$adminModel $this->_getAdminModel();

        
$viewParams = array(
            
'admins' => $adminModel->prepareAdminRecords($adminModel->getAllAdmins())
        );

        return 
$this->responseView('XenForo_ViewAdmin_Admin_List''admin_list'$viewParams);
    }

    
/**
     * Gets the admin add/edit form controller response.
     *
     * @param array $admin
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
protected function _getAdminAddEditResponse(array $admin)
    {
        
$userGroupOptions $this->getModelFromCache('XenForo_Model_UserGroup')->getUserGroupOptions(
            
$admin['extra_user_group_ids']
        );

        
$viewParams = array(
            
'admin' => $admin,
            
'permissionOptions' => $this->_getAdminModel()->getAdminPermissionOptionsForUser($admin['user_id']),
            
'userGroupOptions' => $userGroupOptions
        
);

        return 
$this->responseView('XenForo_ViewAdmin_Admin_Edit''admin_edit'$viewParams);
    }

    
/**
     * Displays a form to add an admin.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionAdd()
    {
        return 
$this->_getAdminAddEditResponse(array(
            
'user_id' => null,
            
'username' => '',
            
'extra_user_group_ids' => ''
        
));
    }

    
/**
     * Displays a form to edit an admin.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionEdit()
    {
        
$userId $this->_input->filterSingle('user_id'XenForo_Input::UINT);
        
$admin $this->_getAdminOrError($userId);

        return 
$this->_getAdminAddEditResponse($admin);
    }

    
/**
     * Updates or inserts an admin.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSave()
    {
        
$this->_assertPostOnly();

        
$visitorPassword $this->_input->filterSingle('visitor_password'XenForo_Input::STRING);
        
$this->getHelper('Admin')->assertVisitorPasswordCorrect($visitorPassword);

        
$input $this->_input->filter(array(
            
'user_id' => XenForo_Input::UINT,
            
'username' => XenForo_Input::STRING,
            
'extra_user_group_ids' => array(XenForo_Input::UINT'array' => true),
            
'permissions' => array(XenForo_Input::STRING'array' => true)
        ));

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

            
$input['user_id'] = $user['user_id'];
        }

        if (!
$input['user_id'])
        {
            return 
$this->responseError(new XenForo_Phrase('requested_user_not_found'));
        }

        
$admin $this->_getAdminModel()->getAdminById($input['user_id']);

        
$adminDw XenForo_DataWriter::create('XenForo_DataWriter_Admin');
        if (
$admin)
        {
            
$adminDw->setExistingData($admin);
        }
        else
        {
            
$adminDw->set('user_id'$input['user_id']);
        }
        
$adminDw->set('extra_user_group_ids'$input['extra_user_group_ids']);
        
$adminDw->save();

        
$this->_getAdminModel()->updateUserAdminPermissions($input['user_id'], $input['permissions']);

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('admins') . $this->getLastHash($input['user_id'])
        );
    }

    
/**
     * Admin deletion process.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionDelete()
    {
        
$userId $this->_input->filterSingle('user_id'XenForo_Input::UINT);
        
$admin $this->_getAdminOrError($userId);

        if (
$this->isConfirmedPost()) // delete administrator
        
{
            
$visitorPassword $this->_input->filterSingle('visitor_password'XenForo_Input::STRING);
        
$this->getHelper('Admin')->assertVisitorPasswordCorrect($visitorPassword);

            return 
$this->_deleteData(
                
'XenForo_DataWriter_Admin''user_id',
                
XenForo_Link::buildAdminLink('admins')
            );
        }
        else 
// show confirm dialog
        
{
            
$adminDw XenForo_DataWriter::create('XenForo_DataWriter_Admin'XenForo_DataWriter::ERROR_EXCEPTION);
            
$adminDw->setExistingData($admintrue);
            
$adminDw->preDelete();

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

            return 
$this->responseView('XenForo_ViewAdmin_Admin_Delete''admin_delete'$viewParams);
        }
    }

    
/**
     * Gets the specified admin or throws an error.
     *
     * @param integer $id User ID
     *
     * @return array
     */
    
protected function _getAdminOrError($id)
    {
        return 
$this->_getAdminModel()->prepareAdminRecord($this->getRecordOrError(
            
$id$this->_getAdminModel(), 'getAdminById',
            
'requested_admin_not_found'
        
));
    }

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