Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Editor/RedactorEditor.php
Строк: 254
<?php
namespace ConcreteCoreEditor;
use 
ConcreteCoreHttpRequest;
use 
ConcreteCoreHttpResponseAssetGroup;
use 
ConcreteCoreLegacyFilePermissions;
use 
ConcreteCoreLegacyTaskPermission;
use 
ConcreteCoreUtilityServiceIdentifier;
use 
Core;

class 
RedactorEditor implements EditorInterface
{
    protected 
$assets;
    protected 
$identifier;
    protected 
$token;
    protected 
$allowFileManager;
    protected 
$allowSitemap;
    protected 
$pluginManager;

    public function 
__construct()
    {
        
$fp FilePermissions::getGlobal();
        
$tp = new TaskPermission();

        
$this->assets ResponseAssetGroup::get();
        
$this->token Core::make("token")->generate('editor');
        
$this->allowFileManager Config::get('concrete.editor.concrete.enable_filemanager') && $fp->canAccessFileManager();
        
$this->allowSitemap Config::get('concrete.editor.concrete.enable_sitemap') && $tp->canAccessSitemap();
        
$this->pluginManager = new PluginManager();

        
$this->pluginManager->register('undoredo't('Undo/Redo'));
        
$this->pluginManager->register('underline't('Underline'));
        
$this->pluginManager->register('concrete5lightbox't('Lightbox'));
        
$this->pluginManager->register('specialcharacters't('Special Characters Palette'));
        
$this->pluginManager->register('table't('Table'));
        
$this->pluginManager->register('fontfamily't('Font Family'));
        
$this->pluginManager->register('fontsize't('Font Size'));
        
$this->pluginManager->register('fontcolor't('Font Color'));

        
$this->pluginManager->selectMultiple(Config::get('concrete.editor.plugins.selected'));

    }

    public function 
allowFileManager()
    {
        return 
$this->allowFileManager;
    }

    public function 
allowSitemap()
    {
        return 
$this->allowSitemap;
    }

    public function 
setAllowFileManager($allow)
    {
        
$this->allowFileManager $allow;
    }

    public function 
setAllowSitemap($allow)
    {
        
$this->allowSitemap $allow;
    }

    protected function 
getEditor($key$content null$options = array())
    {
        
$this->requireEditorAssets();
        
$concrete5 = array(
            
'filemanager' => $this->allowFileManager(),
            
'sitemap' => $this->allowSitemap()
        );
        if (isset(
$options['concrete5'])) {
            
$options['concrete5'] = array_merge($options['concrete5'], $concrete5);
        } else {
            
$options['concrete5'] = $concrete5;
        }
        
$options json_encode($options);
        
$identifier id(new Identifier())->getString(32);
        
$html sprintf('<textarea data-redactor-editor="%s" name="%s">%s</textarea>'$identifier$key$content);
        
$html .= <<<EOL
        <script type="text/javascript">
        var CCM_EDITOR_SECURITY_TOKEN = "
{$this->token}";
        $(function() {
            $('textarea[data-redactor-editor=
{$identifier}]').redactor({$options}).on('remove', function(){
                $(this).redactor('core.destroy');
            })
        });
        </script>
EOL;
        return 
$html;
    }

    public function 
outputPageInlineEditor($key$content null)
    {
        
$plugins $this->pluginManager->getSelectedPlugins();
        
$plugins[] = 'concrete5magic';
        
$plugins[] = 'concrete5inline';
        return 
$this->getEditor($key$content, array('plugins' => $plugins'minHeight' => 300));
    }

    public function 
outputBlockEditModeEditor($key$content)
    {
        
$plugins $this->pluginManager->getSelectedPlugins();
        
$plugins[] = 'concrete5magic';
        return 
$this->getEditor($key$content, array('plugins' => $plugins'minHeight' => 300));
    }

    public function 
outputPageComposerEditor($key$content)
    {
        return 
$this->outputBlockEditModeEditor($key$content);
    }

    public function 
outputStandardEditor($key$content null)
    {
        
$plugins $this->pluginManager->getSelectedPlugins();
        return 
$this->getEditor($key$content, array('plugins' => $plugins'minHeight' => 300));
    }

    public function 
getPluginManager()
    {
        return 
$this->pluginManager;
    }

    public function 
setPluginManager(PluginManager $pluginManager)
    {
        
$this->pluginManager $pluginManager;
    }

    public function 
saveOptionsForm(Request $request)
    {
        
Config::save('concrete.editor.concrete.enable_filemanager'$request->request->get('enable_filemanager'));
        
Config::save('concrete.editor.concrete.enable_sitemap'$request->request->get('enable_sitemap'));

        
$plugins = array();
        
$post $request->request->get('plugin');
        if (
is_array($post)) {
            foreach(
$post as $plugin) {
                if (
$this->pluginManager->isAvailable($plugin)) {
                    
$plugins[] = $plugin;
                }
            }
        }

        
Config::save('concrete.editor.plugins.selected'$plugins);
    }

    public function 
requireEditorAssets()
    {
        
$this->assets->requireAsset('core/file-manager');
        
$this->assets->requireAsset('redactor');
        
$plugins $this->pluginManager->getSelectedPluginObjects();
        foreach (
$plugins as $plugin) {
            
$group $plugin->getRequiredAssets();
            
$this->assets->requireAsset($group);
        }


    }
}
Онлайн: 2
Реклама