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

class XenForo_ControllerAdmin_CodeEventListener extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertDebugMode();

        
$this->assertAdminPermission('dev');
    }

    
/**
     * Displays a list of all event listeners, grouped by the add-on they belong to.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIndex()
    {
        
$listeners $this->_getCodeEventModel()->getEventListenersGroupedByAddOn();

        
// get totals
        
$totalListeners 0;
        foreach (
$listeners AS $addOnListeners)
        {
            
$totalListeners += count($addOnListeners);
        }


        if (isset(
$listeners['']))
        {
            
$customListeners $listeners[''];
            unset(
$listeners['']);
        }
        else
        {
            
$customListeners = array();
        }

        
$viewParams = array(
            
'addOns' => $this->_getAddOnModel()->getAllAddOns(),
            
'listeners' => $listeners,
            
'customListeners' => $customListeners,
            
'totalListeners' => $totalListeners
        
);

        return 
$this->responseView('XenForo_ViewAdmin_CodeEventListener_List''code_event_listener_list'$viewParams);
    }

    
/**
     * Helper to get the code event listener add/edit form controller response.
     *
     * @param array $listener
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
protected function _getListenerAddEditResponse(array $listener)
    {
        
$addOnModel $this->_getAddOnModel();

        
$viewParams = array(
            
'listener' => $listener,
            
'eventOptions' => $this->_getCodeEventModel()->getEventOptions(),
            
'addOnOptions' => $addOnModel->getAddOnOptionsListIfAvailable(truefalse),
            
'addOnSelected' => (isset($listener['addon_id']) ? $listener['addon_id'] : $addOnModel->getDefaultAddOnId())
        );

        return 
$this->responseView('XenForo_ViewAdmin_CodeEventListener_Edit''code_event_listener_edit'$viewParams);
    }

    
/**
     * Displays a form to add a code event listener.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionAdd()
    {
        return 
$this->_getListenerAddEditResponse($this->_getCodeEventModel()->getDefaultEventListener());
    }

    
/**
     * Displays a form to edit a code event listener.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionEdit()
    {
        
$eventListenerId $this->_input->filterSingle('event_listener_id'XenForo_Input::STRING);
        
$listener $this->_getEventListenerOrError($eventListenerId);

        return 
$this->_getListenerAddEditResponse($listener);
    }

    
/**
     * Updates an existing event listener or inserts a new one.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSave()
    {
        
$this->_assertPostOnly();

        
$eventListenerId $this->_input->filterSingle('event_listener_id'XenForo_Input::UINT);
        
$dwInput $this->_input->filter(array(
            
'event_id' => XenForo_Input::STRING,
            
'execute_order' => XenForo_Input::UINT,
            
'description' => XenForo_Input::STRING,
            
'callback_class' => XenForo_Input::STRING,
            
'callback_method' => XenForo_Input::STRING,
            
'active' => XenForo_Input::UINT,
            
'hint' => XenForo_Input::STRING,
            
'addon_id' => XenForo_Input::STRING
        
));

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

        
$eventListenerId $dw->get('event_listener_id');

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('code-event-listeners') . $this->getLastHash($eventListenerId)
        );
    }

    
/**
     * Deletes the specififed code event listener.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionDelete()
    {
        if (
$this->isConfirmedPost())
        {
            return 
$this->_deleteData(
                
'XenForo_DataWriter_CodeEventListener''event_listener_id',
                
XenForo_Link::buildAdminLink('code-event-listeners')
            );
        }
        else 
// show confirmation dialog
        
{
            
$eventListenerId $this->_input->filterSingle('event_listener_id'XenForo_Input::STRING);
            
$listener $this->_getEventListenerOrError($eventListenerId);

            
$viewParams = array(
                
'listener' => $listener,
                
'addOn' => $this->_getAddOnModel()->getAddOnById($listener['addon_id'])
            );

            return 
$this->responseView('XenForo_ViewAdmin_CodeEventListener_Delete''code_event_listener_delete'$viewParams);
        }
    }

    
/**
     * Selectively enables or disables specified code event listeners
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionToggle()
    {
        return 
$this->_getToggleResponse(
            
$this->_getCodeEventModel()->getAllEventListeners(),
            
'XenForo_DataWriter_CodeEventListener',
            
'code-event-listeners'
        
);
    }

    
/**
     * Gets a valid code event listener or throws an exception.
     *
     * @param string $id
     *
     * @return array
     */
    
protected function _getEventListenerOrError($id)
    {
        
$info $this->_getCodeEventModel()->getEventListenerById($id);
        if (!
$info)
        {
            throw 
$this->responseException($this->responseError(new XenForo_Phrase('requested_code_event_listener_not_found'), 404));
        }

        return 
$info;
    }

    
/**
     * Gets the code event model.
     *
     * @return XenForo_Model_CodeEvent
     */
    
protected function _getCodeEventModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_CodeEvent');
    }

    
/**
     * Get the add-on model.
     *
     * @return XenForo_Model_AddOn
     */
    
protected function _getAddOnModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_AddOn');
    }
}
Онлайн: 0
Реклама