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

abstract class XenForo_ControllerAdmin_TemplateModificationAbstract extends XenForo_ControllerAdmin_Abstract
{
    protected 
$_viewPrefix '';
    protected 
$_templatePrefix '';
    protected 
$_routePrefix '';
    protected 
$_dataWriter '';

    
/**
     * @return XenForo_Model_TemplateModificationAbstract
     */
    
abstract protected function _getModificationModel();

    abstract protected function 
_getTemplatesByIds(array $ids);

    abstract protected function 
_getTestContent(XenForo_DataWriter_TemplateModificationAbstract $dw);

    abstract public function 
actionAutoComplete();

    abstract public function 
actionContents();

    public function 
actionIndex()
    {
        
$modificationModel $this->_getModificationModel();

        
$groupedModifications $modificationModel->groupModificationsByAddon(
            
$modificationModel->getAllModifications()
        );

        
$modificationCount 0;
        foreach (
$groupedModifications AS $addOn => $modifications)
        {
            
$modificationCount += count($modifications);
        }

        
$viewParams = array(
            
'groupedModifications' => $groupedModifications,
            
'modificationCount' => $modificationCount,
            
'logSummary' => $modificationModel->getModificationLogSummary(),
            
'addOns' => $this->_getAddOnModel()->getAllAddOns(),
            
'canCreateModification' => true
        
);

        return 
$this->responseView($this->_viewPrefix 'List'$this->_templatePrefix 'list'$viewParams);
    }

    protected function 
_adjustModificationForEdit(array $modification)
    {
        return 
$modification;
    }

    protected function 
_getModificationAddEditResponse(array $modification)
    {
        
$addOnModel $this->_getAddOnModel();

        
$modification $this->_adjustModificationForEdit($modification);

        
$viewParams = array(
            
'modification' => $modification,
            
'addOnOptions' => XenForo_Application::debugMode() ? $addOnModel->getAddOnOptionsListIfAvailable() : array(),
            
'addOnSelected' => (isset($modification['addon_id']) ? $modification['addon_id'] : $addOnModel->getDefaultAddOnId()),
            
'canEdit' => $this->_getModificationModel()->canEditModification($modification)
        );

        return 
$this->responseView($this->_viewPrefix 'Edit'$this->_templatePrefix 'edit'$viewParams);
    }

    
/**
     * Displays a form to add a new template mod.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionAdd()
    {
        return 
$this->_getModificationAddEditResponse(array(
            
'action' => 'str_replace',
            
'execution_order' => 10,
            
'enabled' => 1
        
));
    }

    
/**
     * Displays a form to edit an existing template mod.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionEdit()
    {
        
$modificationId $this->_input->filterSingle('modification_id'XenForo_Input::UINT);
        
$modification $this->_getModificationOrError($modificationId);

        return 
$this->_getModificationAddEditResponse($modification);
    }

    
/**
     * Inserts a new template mod or updates an existing one.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSave()
    {
        if (
$this->_input->filterSingle('test'XenForo_Input::STRING))
        {
            return 
$this->responseReroute($this'test');
        }

        
$this->_assertPostOnly();

        
$dw $this->_getUpdatedModificationDwFromInput();
        
$dw->save();

        
$modificationId $dw->get('modification_id');

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink($this->_routePrefix) . $this->getLastHash($modificationId)
        );
    }

    protected function 
_modifyModificationDwData(array &$dwData$modificationId)
    {
    }

    public function 
actionDelete()
    {
        if (
$this->isConfirmedPost())
        {
            return 
$this->_deleteData(
                
$this->_dataWriter'modification_id',
                
XenForo_Link::buildAdminLink($this->_routePrefix)
            );
        }
        else
        {
            
$modificationId $this->_input->filterSingle('modification_id'XenForo_Input::UINT);

            
$viewParams = array(
                
'modification' => $this->_getModificationOrError($modificationId)
            );

            return 
$this->responseView($this->_viewPrefix 'Delete'$this->_templatePrefix 'delete'$viewParams);
        }
    }

    public function 
actionLog()
    {
        
$modificationId $this->_input->filterSingle('modification_id'XenForo_Input::UINT);
        
$modification $this->_getModificationOrError($modificationId);

        
$logs $this->_getModificationModel()->getModificationLogsForModification($modificationId);
        
$templates $this->_getTemplatesByIds(array_keys($logs));

        
$viewParams = array(
            
'modification' => $modification,
            
'logs' => $logs,
            
'templates' => $templates
        
);

        return 
$this->responseView($this->_viewPrefix 'Log'$this->_templatePrefix 'log'$viewParams);
    }


    protected function 
_adjustTemplateContentForDisplay($content)
    {
        return 
$content;
    }

    public function 
actionTest()
    {
        
$dw $this->_getUpdatedModificationDwFromInput();
        
$dw->preSave();

        if (
$dw->getError('template'))
        {
            return 
$this->responseError($dw->getError('template'));
        }
        else if (
$dw->getError('find'))
        {
            return 
$this->responseError($dw->getError('find'));
        }

        
$content $this->_getTestContent($dw);
        if (!
is_string($content))
        {
            return 
$this->responseError(new XenForo_Phrase('requested_template_not_found'));
        }

        
$modification $dw->getMergedData();
        if (empty(
$modification['modification_id']))
        {
            
$modification['modification_id'] = 1;
        }

        
$contentModified $this->_getModificationModel()->applyTemplateModifications($content, array($modification));

        
$content $this->_adjustTemplateContentForDisplay($content);
        
$contentModified $this->_adjustTemplateContentForDisplay($contentModified);

        
$diff = new XenForo_Diff();
        
$diffs $diff->findDifferences($content$contentModified);

        
$viewParams = array(
            
'modification' => $modification,
            
'content' => $content,
            
'contentModified' => $contentModified,
            
'diffs' => $diffs
        
);

        return 
$this->responseView($this->_viewPrefix 'Test'$this->_templatePrefix 'test'$viewParams);
    }

    protected function 
_getUpdatedModificationDwFromInput($modificationId null)
    {
        if (
$modificationId === null)
        {
            
$modificationId $this->_input->filterSingle('modification_id'XenForo_Input::UINT);
        }

        
$dwData $this->_input->filter(array(
            
'template' => XenForo_Input::STRING,
            
'modification_key' => XenForo_Input::STRING,
            
'description' => XenForo_Input::STRING,
            
'action' => XenForo_Input::STRING,
            
'find' => XenForo_Input::STRING,
            
'replace' => XenForo_Input::STRING,
            
'execution_order' => XenForo_Input::UINT,
            
'enabled' => XenForo_Input::UINT,
            
'addon_id' => XenForo_Input::STRING
        
));
        
$this->_modifyModificationDwData($dwData$modificationId);

        
$dw XenForo_DataWriter::create($this->_dataWriter);
        if (
$modificationId)
        {
            
$dw->setExistingData($modificationId);
            if (
$this->_getModificationModel()->canEditModification($dw->getMergedData()))
            {
                
$dw->bulkSet($dwData);
            }
            else
            {
                
$dw->set('enabled'$dwData['enabled']);
            }
        }
        else
        {
            
$dw->bulkSet($dwData);
        }

        return 
$dw;
    }

    
/**
     * Selectively enables or disables specified modifications
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionToggle()
    {
        return 
$this->_getToggleResponse(
            
$this->_getModificationModel()->getAllModifications(),
            
$this->_dataWriter,
            
$this->_routePrefix,
            
'enabled'
        
);
    }

    
/**
     * Gets the specified template modification or throws an exception.
     *
     * @param string $id
     *
     * @return array
     */
    
protected function _getModificationOrError($id)
    {
        
$modificationModel $this->_getModificationModel();

        return 
$this->getRecordOrError(
            
$id$modificationModel'getModificationById',
            
'requested_template_modification_not_found'
        
);
    }

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