Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/includes/libraries/elxis/helpers/editor.helper.php
<?php
/**
* @version        $Id: editor.helper.php 2341 2020-03-05 17:32:58Z IOS $
* @package        Elxis
* @subpackage    Helpers / Editor
* @copyright    Copyright (c) 2006-2020 Elxis CMS (https://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( https://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class
elxisEditorHelper {

    private
$editor_id = 'editor1';
    private
$type = 'html';
    private
$contentsLang = 'en';
    private
$contentsDir = 'ltr';
    private
$options = array();


   
/***************/
    /* CONSTRUCTOR */
    /***************/
   
public function __construct() {
    }
   

   
/************************/
    /* SET AN EDITOR OPTION */
    /************************/
   
public function setOption($option, $value) {
       
$this->options[$option] = $value;
    }


   
/***************************************/
    /* SET EDITOR MULTIPLE OPTIONS AT ONCE */
    /***************************************/
   
public function setOptions($options) {
        if (
is_array($options) && (count($options) > 0)) {
            foreach (
$options as $option => $value) {
               
$this->setOption($option, $value);
            }
        }
    }


   
/*****************************/
    /* PREPARE EDITOR ENVIROMENT */
    /*****************************/
   
public function prepare($editor_id, $type='html', $clang='', $custom_options=array()) {
       
$elxis = eFactory::getElxis();
       
$eDoc = eFactory::getDocument();

        if (!
is_array($custom_options)) { $custom_options = array(); }
       
$this->editor_id = $editor_id;
       
$type = 'html';//"bbcode" and "text" are no longer supported (Elxis 5.0+)
       
$this->type = $type;

       
$removebuttons = array();
       
$removebuttons[] = 'print';
       
$removebuttons[] = 'about';
       
$alevel = $elxis->acl()->getLevel();
        if (
$alevel < 3) {
           
$removebuttons[] = 'image';
           
$removebuttons[] = 'video';
           
$removebuttons[] = 'source';
        }
        if (
$alevel < 70) {
           
$removebuttons[] = 'file';
           
$removebuttons[] = 'elxisplugin';
        }

       
$this->options = array();

       
$clang = trim($clang);
        if ((
$clang == '') || !file_exists(ELXIS_PATH.'/language/'.$clang.'/'.$clang.'.php')) { $clang = $elxis->getConfig('LANG'); }
       
$this->contentsLang = $clang;
       
$this->contentsDir = 'ltr';
       
$ilangs = eFactory::getLang()->getAllLangs(true);
        if (isset(
$ilangs[$clang])) { $this->contentsDir = $ilangs[$clang]['DIR']; }

       
$this->options['direction'] = $this->contentsDir;
       
$this->options['language'] = 'auto';
       
$this->options['zIndex'] = '1031';
       
$this->options['height'] = '400';
       
$this->options['toolbarAdaptive'] = 'false';
       
$this->options['removeButtons'] = '[\''.implode('\', \'', $removebuttons).'\']';

        if (
$custom_options) {
            if (!isset(
$custom_options['language'])) {
               
$custom_options['language'] = eFactory::getLang()->currentLang();
            }
        } else {
           
$custom_options['language'] = eFactory::getLang()->currentLang();
        }
        if (
$custom_options['language'] == 'zh') { $custom_options['language'] = 'zh_cn'; }
        if (
$custom_options['language'] == 'zt') { $custom_options['language'] = 'zh_cn'; }
        if (
$custom_options['language'] == 'pt') { $custom_options['language'] = 'pt_br'; }

       
$custom_lang_toload = '';
        if (!
in_array($custom_options['language'], array('de', 'fr', 'ru', 'es', 'nl', 'hu', 'pt_br', 'en', 'tr', 'ar', 'zh_cn'))) {//built-in languages
           
if (!file_exists(ELXIS_PATH.'/includes/js/jodit/lang/'.$custom_options['language'].'.js')) {
               
$custom_options['language'] = 'auto';
            } else {
               
$custom_lang_toload = $custom_options['language'];
            }
        }
        unset(
$ilangs);

        if (isset(
$custom_options['forcedir'])) {
            if (
$custom_options['forcedir'] != '') { $this->options['direction'] = $custom_options['forcedir']; }
            unset(
$custom_options['forcedir']);
        }

        foreach (
$custom_options as $k => $v) {//old 4.x/ckeditor config options
           
if (in_array($k, array('contentsCss', 'skin', 'entities_greek', 'entities_latin', 'filebrowserBrowseUrl', 'filebrowserImageWindowWidth', 'filebrowserImageWindowHeight', 'editor', 'contentslang'))) {
                unset(
$custom_options[$k]);
            }
        }

       
$this->setOptions($custom_options);

       
$baselink = $elxis->secureBase().'/includes/js/jodit/';
       
$eDoc->addStyleLink($baselink.'jodit.min.css');
        if (
$custom_lang_toload != '') {
           
$eDoc->addScriptLink($baselink.'lang/'.$custom_lang_toload.'.js');
        }
       
$eDoc->addLibrary('jodit', $baselink.'jodit.min.js', '3.3.24');
    }


   
/****************************/
    /* GET EDITOR INSTANCE HTML */
    /****************************/
   
public function editor($name, $value='', $attributes=array()) {
        if (!
is_array($attributes)) { $attributes = array(); }
       
$attributes['dir'] = $this->contentsDir;
        if (!isset(
$attributes['class'])) { $attributes['class'] = 'elx5_textarea'; }
        if (!isset(
$attributes['cols'])) { $attributes['cols'] = 80; } else { $attributes['cols'] = (int)$attributes['cols']; }
        if (!isset(
$attributes['rows'])) { $attributes['rows'] = 8; } else { $attributes['rows'] = (int)$attributes['rows']; }

       
$attr = '';
        foreach (
$attributes as $key => $val) { $attr .= ' '.$key.' = "'.$val.'"'; }

       
$out = '<textarea name="'.$name.'" id="'.$this->editor_id.'"'.$attr.'>'.htmlspecialchars($value)."</textarea>\n";
       
$out .= $this->getJS();

        return
$out;
    }


   
/***************************************/
    /* MAKE AND RETURN REQUIRED JAVASCRIPT */
    /***************************************/
   
public function getJS() {
       
$elxis = eFactory::getElxis();

       
$js = '<script>'."\n";
       
$js .= 'var ed5'.$this->editor_id.' = new Jodit(\'#'.$this->editor_id.'\', {'."\n";
        if (
count($this->options) > 0) {
            foreach (
$this->options as $option => $value) {
                if ((
$value == 'true') || ($value == 'false')) {
                   
$v = $value;
                } else if (
is_numeric($value)) {
                   
$v = $value;
                } else if (
is_bool($value)) {
                   
$v = ($value === true) ? 'true' : 'false';
                } else if (
strpos($value, '[') === 0) {
                   
$v = $value;
                } else {
                   
$v = '\''.$value.'\'';
                }
               
$js .= $option.': '.$v.",\n";
            }
        }

        if (
defined('ELXIS_ADMIN')) {
           
$connectorlink = $elxis->makeAURL('emedia:editor/', 'inner.php');
           
$js .= 'uploader: { url: \''.$connectorlink.'?action=fileUpload\' },'."\n";
           
$js .= 'filebrowser: { ajax: { url: \''.$connectorlink.'\' } },'."\n";
           
$js .= 'extraButtons: [{'."\n";
           
$js .= 'name: \'elxisplugin\','."\n";
           
$js .= 'iconURL: \''.$elxis->getConfig('URL').'/includes/js/jodit/elxis.png\','."\n";
           
$js .= 'exec: function (editor) { '."\n";
           
$js .= 'var elximportURL = \''.$elxis->makeAURL('content:plugin/', 'inner.php').'\'+\'?fn=\'+editor.element.id;'."\n";
           
$js .= 'elxPopup(elximportURL, 950, 700, \'pluginhelper\', \'yes\');'."\n";
           
$js .= '},'."\n";
           
$js .= 'tooltip: \'Elxis plugin\','."\n";
           
$js .= '}],'."\n";
        }
       
$js .= '});'."\n";
       
$js .= "</script>\n";
        return
$js;

    }

}

?>