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

class XenForo_ControllerAdmin_Language extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertAdminPermission('language');
    }

    public function 
actionIndex()
    {
        
$languageModel $this->_getLanguageModel();

        
$languages $languageModel->getAllLanguagesAsFlattenedTree();

        
$masterLanguage $languageModel->showMasterLanguage() ? $languageModel->getLanguageById(0true) : array();

        if (
$masterLanguage)
        {
            foreach (
$languages AS &$language)
            {
                
$language['depth']++;
            }
        }

        
$viewParams = array(
            
'languages' => $languages,
            
'masterLanguage' => $masterLanguage,
            
'totalLanguages' => count($languages) + ($languageModel->showMasterLanguage() ? 0)
        );

        return 
$this->responseView('XenForo_ViewAdmin_Language_List''language_list'$viewParams);
    }

    protected function 
_getLanguageAddEditResponse(array $language)
    {
        
$languageModel $this->_getLanguageModel();

        list(
$dateFormats$timeFormats) = $languageModel->getLanguageFormatExamples();

        
$viewParams = array(
            
'languages' => $languageModel->getAllLanguagesAsFlattenedTree(),
            
'language' => $language,
            
'locales' => XenForo_Helper_Language::getLocaleList(),
            
'dateFormats' => $dateFormats,
            
'timeFormats' => $timeFormats
        
);

        return 
$this->responseView('XenForo_ViewAdmin_Language_Edit''language_edit'$viewParams);
    }

    public function 
actionAdd()
    {
        
$language $this->_getLanguageModel()->getDefaultLanguage();

        return 
$this->_getLanguageAddEditResponse($language);
    }

    public function 
actionEdit()
    {
        
$languageId $this->_input->filterSingle('language_id'XenForo_Input::UINT);
        
$language $this->_getLanguageOrError($languageId);

        return 
$this->_getLanguageAddEditResponse($language);
    }

    public function 
actionSave()
    {
        
$this->_assertPostOnly();

        if (
$this->_input->filterSingle('delete'XenForo_Input::STRING))
        {
            
// user clicked delete
            
return $this->responseReroute('XenForo_ControllerAdmin_Language''deleteConfirm');
        }

        
$input $this->_input->filter(array(
            
'title' => XenForo_Input::STRING,
            
'parent_id' => XenForo_Input::UINT,
            
'date_format' => XenForo_Input::STRING,
            
'time_format' => XenForo_Input::STRING,
            
'decimal_point' => array(XenForo_Input::STRING'noTrim' => true),
            
'thousands_separator' => array(XenForo_Input::STRING'noTrim' => true),
            
'language_code' => XenForo_Input::STRING,
            
'text_direction' => XenForo_Input::STRING,
        ));
        
$languageId $this->_input->filterSingle('language_id'XenForo_Input::UINT);

        if (
$input['date_format'] === '')
        {
            
$input['date_format'] = $this->_input->filterSingle('date_format_other'XenForo_Input::STRING);
        }
        if (
$input['time_format'] === '')
        {
            
$input['time_format'] = $this->_input->filterSingle('time_format_other'XenForo_Input::STRING);
        }

        
$writer XenForo_DataWriter::create('XenForo_DataWriter_Language');
        if (
$languageId)
        {
            
$writer->setExistingData($languageId);
        }

        
$writer->bulkSet($input);
        
$writer->save();

        
$languageId $writer->get('language_id');

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

    
/**
     * Deletes a language.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionDelete()
    {
        if (
$this->isConfirmedPost())
        {
            
$dw XenForo_DataWriter::create('XenForo_DataWriter_Language');
            
$dw->setExistingData($this->_input->filterSingle('language_id'XenForo_Input::UINT));
            
$dw->delete();

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
XenForo_Link::buildAdminLink('languages')
            );
        }
        else
        {
            
$languageId $this->_input->filterSingle('language_id'XenForo_Input::UINT);
            
$language $this->_getLanguageOrError($languageId);

            
$writer XenForo_DataWriter::create('XenForo_DataWriter_Language'XenForo_DataWriter::ERROR_EXCEPTION);
            
$writer->setExistingData($language);
            
$writer->preDelete();

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

            return 
$this->responseView('XenForo_ViewAdmin_Language_Delete''language_delete'$viewParams);
        }
    }

    
/**
    * Displays the list of phrases in the specified language.
    *
    * @return XenForo_ControllerResponse_Abstract
    */
    
public function actionPhrases()
    {
        
$languageId $this->_input->filterSingle('language_id'XenForo_Input::UINT);
        
$language $this->_getLanguageOrError($languageIdtrue);

        
$languageModel $this->_getLanguageModel();
        
$phraseModel $this->_getPhraseModel();

        if (!
$phraseModel->canModifyPhraseInLanguage($languageId))
        {
            return 
$this->responseError(new XenForo_Phrase('phrases_in_this_language_can_not_be_modified'));
        }

        
// set an edit_language_id cookie so we can switch to another area and maintain the current style selection
        
XenForo_Helper_Cookie::setCookie('edit_language_id'$languageId);

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

        
$conditions = array();

        
$filter $this->_input->filterSingle('_filter'XenForo_Input::ARRAY_SIMPLE);
        if (
$filter && isset($filter['value']))
        {
            
$conditions['title'] = array($filter['value'], empty($filter['prefix']) ? 'lr' 'r');
            
$filterView true;
        }
        else
        {
            
$filterView false;
        }

        
$fetchOptions = array(
            
'page' => $page,
            
'perPage' => $perPage
        
);

        
$totalPhrases $phraseModel->countEffectivePhrasesInLanguage($languageId$conditions$fetchOptions);

        
$viewParams = array(
            
'phrases' => $phraseModel->getEffectivePhraseListForLanguage($languageId$conditions$fetchOptions),
            
'languages' => $languageModel->getAllLanguagesAsFlattenedTree($languageModel->showMasterLanguage() ? 0),
            
'masterLanguage' => $languageModel->showMasterLanguage() ? $languageModel->getLanguageById(0true) : array(),
            
'language' => $languageModel->getLanguageById($languageIdtrue),

            
'page' => $page,
            
'perPage' => $perPage,
            
'totalPhrases' => $totalPhrases,

            
'filterView' => $filterView,
            
'filterMore' => ($filterView && $totalPhrases $perPage)
        );

        return 
$this->responseView('XenForo_ViewAdmin_Phrase_List''phrase_list'$viewParams);
    }

    public function 
actionExport()
    {
        
$languageId $this->_input->filterSingle('language_id'XenForo_Input::UINT);
        
$language $this->_getLanguageOrError($languageIdtrue);

        if (
$this->isConfirmedPost())
        {
            
$input $this->_input->filter(array(
                
'addon_id' => XenForo_Input::STRING,
                
'untranslated' => XenForo_Input::UINT
            
));

            
$this->_routeMatch->setResponseType('xml');

            
$addOnId = ($input['addon_id'] ? $input['addon_id'] : null);

            
$viewParams = array(
                
'language' => $language,
                
'xml' => $this->_getLanguageModel()->getLanguageXml($language$addOnId$input['untranslated'])
            );

            return 
$this->responseView('XenForo_ViewAdmin_Language_ExportXml'''$viewParams);
        }
        else
        {
            
$viewParams = array(
                
'language' => $language,
                
'addOnOptions' => $this->getModelFromCache('XenForo_Model_AddOn')->getAddOnOptionsList(falsetrue)
            );

            return 
$this->responseView('XenForo_ViewAdmin_Language_Export''language_export'$viewParams);
        }
    }

    public function 
actionImport()
    {
        
$languageModel $this->_getLanguageModel();

        if (
$this->isConfirmedPost())
        {
            
$input $this->_input->filter(array(
                
'target' => XenForo_Input::STRING,
                
'parent_language_id' => XenForo_Input::UINT,
                
'overwrite_language_id' => XenForo_Input::UINT
            
));

            
$upload XenForo_Upload::getUploadedFile('upload');
            if (!
$upload)
            {
                return 
$this->responseError(new XenForo_Phrase('please_upload_valid_language_xml_file'));
            }

            if (
$input['target'] == 'overwrite')
            {
                
$this->_getLanguageOrError($input['overwrite_language_id']);
                
$input['parent_language_id'] = 0;
            }
            else
            {
                
$input['overwrite_language_id'] = 0;
            }

            
$document $this->getHelper('Xml')->getXmlFromFile($upload);
            
$languageModel->importLanguageXml($document$input['parent_language_id'], $input['overwrite_language_id']);

            return 
$this->responseRedirect(
                
XenForo_ControllerResponse_Redirect::SUCCESS,
                
XenForo_Link::buildAdminLink('languages')
            );
        }
        else
        {
            
$viewParams = array(
                
'languages' => $languageModel->getAllLanguagesAsFlattenedTree()
            );

            return 
$this->responseView('XenForo_ViewAdmin_Language_Import''language_import'$viewParams);
        }
    }

    
/**
     * Gets the specified language or throws an error.
     *
     * @param integer $languageId
     * @param boolean $allowMaster Allow the master language (0) to be fetched
     *
     * @return array
     */
    
protected function _getLanguageOrError($languageId$allowMaster false)
    {
        
$language $this->_getLanguageModel()->getLanguageById($languageId$allowMaster);
        if (!
$language)
        {
            throw 
$this->responseException($this->responseError(new XenForo_Phrase('requested_language_not_found'), 404));
        }

        return 
$language;
    }

    
/**
     * Lazy load the phrase model object.
     *
     * @return  XenForo_Model_Phrase
     */
    
protected function _getPhraseModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Phrase');
    }

    
/**
     * Lazy load the language model object.
     *
     * @return  XenForo_Model_Language
     */
    
protected function _getLanguageModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_Language');
    }
}
Онлайн: 0
Реклама