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

/**
 * Controller to manage user group promotions.
 */
class XenForo_ControllerAdmin_UserGroupPromotion extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertAdminPermission('userGroup');
    }

    
/**
     * Displays a list of user group promotions.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIndex()
    {
        
$viewParams = array(
            
'promotions' => $this->_getPromotionModel()->getPromotions()
        );
        return 
$this->responseView('XenForo_ViewAdmin_UserGroupPromotion_List''user_group_promotion_list'$viewParams);
    }

    
/**
     * Gets the add/edit form response for a promotion.
     *
     * @param array $promotion
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
protected function _getPromotionAddEditResponse(array $promotion)
    {
        
$userGroupOptions $this->_getUserGroupModel()->getUserGroupOptions(
            
$promotion['extra_user_group_ids']
        );

        
$viewParams = array(
            
'promotion' => $promotion,
            
'userCriteria' => XenForo_Helper_Criteria::prepareCriteriaForSelection($promotion['user_criteria']),
            
'userGroupOptions' => $userGroupOptions,
            
'userCriteriaData' => XenForo_Helper_Criteria::getDataForUserCriteriaSelection()
        );

        return 
$this->responseView('XenForo_ViewAdmin_UserGroupPromotion_Edit''user_group_promotion_edit'$viewParams);
    }

    
/**
     * Displays a form to add a new promotion.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionAdd()
    {
        return 
$this->_getPromotionAddEditResponse(array(
            
'title' => '',
            
'active' => 1,
            
'user_criteria' => array(),
            
'extra_user_group_ids' => ''
        
));
    }

    
/**
     * Displays a form to edit an existing promotion.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionEdit()
    {
        
$promotionId $this->_input->filterSingle('promotion_id'XenForo_Input::UINT);
        
$promotion $this->_getPromotionOrError($promotionId);

        return 
$this->_getPromotionAddEditResponse($promotion);
    }

    
/**
     * Saves a promotion.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSave()
    {
        
$this->_assertPostOnly();

        
$promotionId $this->_input->filterSingle('promotion_id'XenForo_Input::UINT);

        
$dwInput $this->_input->filter(array(
            
'title' => XenForo_Input::STRING,
            
'active' => XenForo_Input::UINT,
            
'extra_user_group_ids' => array(XenForo_Input::UINT'array' => true),
            
'user_criteria' => XenForo_Input::ARRAY_SIMPLE
        
));

        
$dw XenForo_DataWriter::create('XenForo_DataWriter_UserGroupPromotion');
        if (
$promotionId)
        {
            
$dw->setExistingData($promotionId);
        }
        
$dw->bulkSet($dwInput);
        
$dw->save();

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('user-group-promotions') . $this->getLastHash($dw->get('promotion_id'))
        );
    }

    
/**
     * Deletes a promotion.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionDelete()
    {
        if (
$this->isConfirmedPost())
        {
            return 
$this->_deleteData(
                
'XenForo_DataWriter_UserGroupPromotion''promotion_id',
                
XenForo_Link::buildAdminLink('user-group-promotions')
            );
        }
        else
        {
            
$promotionId $this->_input->filterSingle('promotion_id'XenForo_Input::UINT);
            
$promotion $this->_getPromotionOrError($promotionId);

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

            return 
$this->responseView('XenForo_ViewAdmin_UserGroupPromotion_Delete''user_group_promotion_delete'$viewParams);
        }
    }

    
/**
     * Displays a form to do some forms of management on promotions (history, manual adjustment).
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionManage()
    {
        
$viewParams = array(
            
'promotions' => $this->_getPromotionModel()->getPromotions()
        );
        return 
$this->responseView('XenForo_ViewAdmin_UserGroupPromotion_Manage''user_group_promotion_manage'$viewParams);
    }

    
/**
     * Display promotion history information.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionHistory()
    {
        
$input $this->_input->filter(array(
            
'username' => XenForo_Input::STRING,
            
'user_id' => XenForo_Input::UINT,
            
'promotion_id' => XenForo_Input::UINT
        
));

        
$user false;
        
$promotion false;

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

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

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

        if (
$input['promotion_id'])
        {
            
$promotion $this->_getPromotionOrError($input['promotion_id']);
        }

        
$linkParams = array();
        if (
$input['promotion_id'])
        {
            
$linkParams['promotion_id'] = $input['promotion_id'];
        }
        if (
$input['user_id'])
        {
            
$linkParams['user_id'] = $input['user_id'];
        }

        if (
$this->_request->isPost())
        {
            
// redirect to a get request approach
            
return $this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
XenForo_Link::buildAdminLink('user-group-promotions/history'false$linkParams)
            );
        }

        
$promotionModel $this->_getPromotionModel();

        
$page $this->_input->filterSingle('page'XenForo_Input::UINT);
        
$perPage 20;

        
$conditions = array(
            
'promotion_id' => $input['promotion_id'],
            
'user_id' => $input['user_id']
        );

        
$entries $promotionModel->getPromotionLogEntries($conditions, array(
            
'join' => XenForo_Model_UserGroupPromotion::FETCH_USER_NAME XenForo_Model_UserGroupPromotion::FETCH_PROMOTION_TITLE,
            
'page' => $page,
            
'perPage' => $perPage
        
));
        
$totalEntries $promotionModel->countPromotionLogEntries($conditions);

        
$this->canonicalizePageNumber($page$perPage$totalEntries'user-group-promotions/history');

        
$viewParams = array(
            
'entries' => $entries,
            
'totalEntries' => $totalEntries,

            
'page' => $page,
            
'perPage' => $perPage,
            
'linkParams' => $linkParams
        
);
        return 
$this->responseView('XenForo_ViewAdmin_UserGroupPromotion_History''user_group_promotion_history'$viewParams);
    }

    
/**
     * Manually promotes or demotes a user.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionManual()
    {
        
$this->_assertPostOnly();

        
$input $this->_input->filter(array(
            
'username' => XenForo_Input::STRING,
            
'promotion_id' => XenForo_Input::UINT,
            
'action' => XenForo_Input::STRING
        
));

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

        
$promotion $this->_getPromotionOrError($input['promotion_id']);

        if (
$input['action'] == 'promote')
        {
            
$this->_getPromotionModel()->promoteUser($promotion$user['user_id'], 'manual');
        }
        else
        {
            
$this->_getPromotionModel()->demoteUser($promotion$user['user_id'], true);
        }

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('user-group-promotions/manage')
        );
    }

    
/**
     * Demotes a user.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionDemote()
    {
        
$promotion $this->_getPromotionOrError(
            
$this->_input->filterSingle('promotion_id'XenForo_Input::UINT)
        );

        
$user $this->_getUserModel()->getUserById(
            
$this->_input->filterSingle('user_id'XenForo_Input::UINT)
        );
        if (!
$user)
        {
            return 
$this->responseError(new XenForo_Phrase('requested_user_not_found'));
        }

        
$promotionModel $this->_getPromotionModel();

        
$entry $promotionModel->getPromotionLogEntry($promotion['promotion_id'], $user['user_id']);
        
$isDemotion = (!$entry || $entry['promotion_state'] != 'disabled');

        if (
$this->isConfirmedPost())
        {
            if (
$isDemotion)
            {
                
// user has been given this promotion, so demote them and don't allow reapplication
                
$promotionModel->demoteUser($promotion$user['user_id'], true);
            }
            else
            {
                
// removing a disabled limit: "demote" but allow reapplication
                
$promotionModel->demoteUser($promotion$user['user_id'], false);
            }

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
$this->getDynamicRedirect()
            );
        }
        else
        {
            
$viewParams = array(
                
'promotion' => $promotion,
                
'user' => $user,
                
'entry' => $entry,
                
'isDemotion' => $isDemotion,
                
'redirect' => $this->getDynamicRedirect()
            );
            return 
$this->responseView('XenForo_ViewAdmin_UserGroupPromotion_Demote''user_group_promotion_demote'$viewParams);
        }
    }

    
/**
     * Selectively enables or disables specified promotions
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionToggle()
    {
        return 
$this->_getToggleResponse(
            
$this->_getPromotionModel()->getPromotions(),
            
'XenForo_DataWriter_UserGroupPromotion',
            
'user-group-promotions');
    }

    
/**
     * Gets the specified promotion or throws an exception.
     *
     * @param string $id
     *
     * @return array
     */
    
protected function _getPromotionOrError($id)
    {
        return 
$this->getRecordOrError(
            
$id$this->_getPromotionModel(), 'getPromotionById',
            
'requested_promotion_not_found'
        
);
    }

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

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

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