1: <?php defined('_JOOS_CORE') or exit();
2:
3: /**
4: * Работа с визуальными редакторами
5: *
6: * @version 1.0
7: * @package Core\Libraries
8: * @subpackage Editor
9: * @category Libraries
10: * @author Joostina Team <info@joostina.ru>
11: * @copyright (C) 2007-2012 Joostina Team
12: * @license MIT License http://www.opensource.org/licenses/mit-license.php
13: * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights
14: *
15: * */
16: class joosEditor
17: {
18: /**
19: * Название редактора
20: * Должно совпадать с каталогом plugins/editors/$editor/$editor.php
21: *
22: * @var string
23: */
24: private static $editor = 'none';
25:
26: /**
27: * Массив данных о проинициализированных редакторах
28: * Исключает повторную инициализацию скриптов и подключения файлов
29: *
30: * @var array
31: */
32: private static $init = array();
33:
34: /**
35: * Инициализация визуального редактора
36: * В классе могут быть объявлены подключения JS и CSS файлов, инициализация переменных
37: */
38: public static function init()
39: {
40: }
41:
42: /**
43: * Инициализация редактора
44: *
45: * @param string $field_name название поля с текстом, на котором должен быть инициализирован редактоор
46: * @param string $content текст содержимого редактора
47: * @param array $params массив настроек редактора
48: *
49: * @return mixed возвращает код инициализации редактора, либо полный код инициализации и комплекта необходимого HTML кода
50: */
51: public static function display($field_name, $content, array $params = array())
52: {
53: $hiddenField = isset($params['hiddenField']) ? $params['hiddenField'] : $field_name;
54: $width = isset($params['width']) ? $params['width'] : '100%';
55: $height = isset($params['height']) ? $params['height'] : 300;
56: $col = isset($params['col']) ? $params['col'] : 10;
57: $row = isset($params['row']) ? $params['row'] : 5;
58:
59: // попытаемся переопределить редактор если это указано в параметрах
60: self::$editor = isset($params['editor']) ? $params['editor'] : self::$editor;
61:
62: // файл используемого визуального редактора
63: $editor_file = JPATH_BASE . DS . 'app' . DS . 'plugins' . DS . 'editors' . DS . self::$editor . DS . self::$editor . '.php';
64:
65: if (joosFile::exists($editor_file)) {
66: require_once $editor_file;
67: } else {
68: return sprintf('<!-- %s jooEditor::' . self::$editor . ' -->', 'Не найден редактор:');
69: }
70:
71: $editor_class = 'pluginEditor' . joosInflector::camelize(self::$editor);
72:
73: // инициализация редактора
74: (!isset(self::$init[self::$editor])) ? call_user_func_array("$editor_class::init", array($params)) : null;
75:
76: self::$init[self::$editor] = true;
77:
78: // непосредственно область редактора
79: return call_user_func_array("$editor_class::display", array($field_name, $content, $hiddenField, $width, $height, $col, $row, $params));
80: }
81:
82: /**
83: * Получение содержимого редактора
84: *
85: * @param string $field_name название поля редактора
86: * @param array $params массив дополнительных параметров получения содержимого
87: *
88: * @return mixed js код получения содержмиого, либо js код и комплект необходимого HTML кода
89: */
90: public static function get_content($field_name, array $params = array())
91: {
92: $editor_class = 'pluginEditor' . joosInflector::camelize(self::$editor);
93:
94: return call_user_func_array("$editor_class::get_content", array($field_name, $params));
95: }
96:
97: /**
98: * Установка полного содержимого редактора через JS.
99: * Необходимо для полнойенной работы Ajax функций
100: *
101: * @param string $field_name название поля на котором инициализирован редактор
102: * @param string $content текст, устанавливаемый в редактор
103: *
104: * @return mixed js код получения содержмиого, либо js код и комплект необходимого HTML кода
105: */
106: public static function set_content($field_name, $content)
107: {
108: $editor_class = 'pluginEditor' . joosInflector::camelize(self::$editor);
109:
110: return call_user_func_array("$editor_class::set_content", array($field_name, $content));
111: }
112:
113: /**
114: * Установка содержимого редактора в определённое место (выделеноое или под курсором)
115: *
116: * @param string $field_name название поля на котором инициализирован редактор
117: * @param string $content текст, устанавливаемый в редактор
118: *
119: * @return mixed js код получения содержмиого, либо js код и комплект необходимого HTML кода
120: */
121: public static function insert_content($field_name, $content)
122: {
123: $editor_class = 'pluginEditor' . joosInflector::camelize(self::$editor);
124:
125: return call_user_func_array("$editor_class::set_content", array($field_name, $content));
126: }
127:
128: }
129: