BxDolEditor.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaCore UNA Core
  7. * @{
  8. */
  9. /**
  10. * Standard WYSIWYG editor view.
  11. * @see BxDolEditor::attachEditor
  12. */
  13. define('BX_EDITOR_STANDARD', 1);
  14. /**
  15. * Full WYSIWYG editor view. If not supported by editor, standard view is used.
  16. * @see BxDolEditor::attachEditor
  17. */
  18. define('BX_EDITOR_FULL', 2);
  19. /**
  20. * Mini WYSIWYG editor view. If not supported by editor, standard view is used.
  21. * @see BxDolEditor::attachEditor
  22. */
  23. define('BX_EDITOR_MINI', 3);
  24. /**
  25. * WYSIWYG editors.
  26. *
  27. * Site owner can choose which visual editor can be user on the site.
  28. *
  29. * Default visual editor is stored in 'sys_editor_default' setting option.
  30. *
  31. * @section editor_create Creating the Editor object:
  32. *
  33. *
  34. * Add record to 'sys_objects_editor' table:
  35. *
  36. * - object: name of the editor object, in the format: vendor prefix, underscore, module prefix, underscore, internal identifier or nothing; for example: bx_blogs - custom editor in blogs module.
  37. * - title: title of the editor, displayed in the studio.
  38. * - skin: editor skin, if editor suports custom/multiple skins.
  39. * - override_class_name: user defined class name which is derived from one of base editor classes.
  40. * - override_class_file: the location of the user defined class, leave it empty if class is located in system folders.
  41. *
  42. *
  43. * @section example Example of usage
  44. *
  45. * Apply visual editor to textarea:
  46. *
  47. * @code
  48. * echo '<textarea id="my_textarea" rows="20" cols="80">some text here</textarea>'; // print text area element
  49. *
  50. * $oEditor = BxDolEditor::getObjectInstance(); // get default editor object instance
  51. * if ($oEditor) // check if editor is available for using
  52. * echo $oEditor->attachEditor ('#my_textarea', BX_EDITOR_STANDARD); // output HTML which will automatically apply editor to textarea element by its id
  53. * @endcode
  54. *
  55. */
  56. class BxDolEditor extends BxDolFactory implements iBxDolFactoryObject
  57. {
  58. protected $_sObject;
  59. protected $_aObject;
  60. protected $_sConfCustom = '';
  61. protected $_sButtonsCustom = false;
  62. protected $_sPluginsCustom = false;
  63. protected $_sSkin;
  64. protected $_aSkins;
  65. /**
  66. * Constructor
  67. * @param $aObject array of editor options
  68. */
  69. protected function __construct($aObject)
  70. {
  71. parent::__construct();
  72. $this->_sObject = $aObject['object'];
  73. $this->_aObject = $aObject;
  74. $this->_sSkin = !empty($aObject['skin']) ? $aObject['skin']: '';
  75. $this->_aSkins = array();
  76. }
  77. /**
  78. * Get editor object instance by object name
  79. * @param $sObject object name
  80. * @return object instance or false on error
  81. */
  82. static public function getObjectInstance($sObject = false, $oTemplate = false)
  83. {
  84. if (!$sObject)
  85. $sObject = getParam('sys_editor_default');
  86. if (isset($GLOBALS['bxDolClasses']['BxDolEditor!'.$sObject]))
  87. return $GLOBALS['bxDolClasses']['BxDolEditor!'.$sObject];
  88. $aObject = BxDolEditorQuery::getEditorObject($sObject);
  89. if (!$aObject || !is_array($aObject))
  90. return false;
  91. if (empty($aObject['override_class_name']))
  92. return false;
  93. $sClass = $aObject['override_class_name'];
  94. if (!empty($aObject['override_class_file']))
  95. require_once(BX_DIRECTORY_PATH_ROOT . $aObject['override_class_file']);
  96. $o = new $sClass($aObject, $oTemplate);
  97. return ($GLOBALS['bxDolClasses']['BxDolEditor!'.$sObject] = $o);
  98. }
  99. /**
  100. * Get object name
  101. */
  102. public function getObjectName ()
  103. {
  104. return $this->_sObject;
  105. }
  106. /**
  107. * Set custom editor configuration options
  108. */
  109. public function setCustomConf ($s)
  110. {
  111. $this->_sConfCustom = $s;
  112. }
  113. /**
  114. * Set custom plugins
  115. */
  116. public function setCustomPlugins ($sPlugins)
  117. {
  118. $this->_sPluginsCustom = $sPlugins;
  119. }
  120. /**
  121. * Set custom toolbar
  122. */
  123. public function setCustomToolbarButtons ($sButtons)
  124. {
  125. $this->_sButtonsCustom = $sButtons;
  126. }
  127. /**
  128. * Get minimal width which is neede for editor for the provided view mode
  129. */
  130. public function getWidth ($iViewMode)
  131. {
  132. // override this function in particular editor class
  133. }
  134. /**
  135. * Get a list of available skins.
  136. */
  137. public function getSkins($bFullInfo = false)
  138. {
  139. if($bFullInfo)
  140. return $this->_aSkins;
  141. $aResults = array();
  142. foreach($this->_aSkins as $aSkin)
  143. $aResults[] = array('key' => $aSkin['name'], 'value' => _t($aSkin['title']));
  144. return $aResults;
  145. }
  146. public function setSkin($sSkin)
  147. {
  148. if(!in_array($sSkin, array_keys($this->_aSkins)))
  149. return;
  150. $this->_sSkin = $sSkin;
  151. }
  152. /**
  153. * Attach editor to HTML element, in most cases - textarea.
  154. * @param $sSelector - jQuery selector to attach editor to.
  155. * @param $iViewMode - editor view mode: BX_EDITOR_STANDARD, BX_EDITOR_MINI, BX_EDITOR_FULL
  156. * @param $bDynamicMode - is AJAX mode or not, the HTML with editor area is loaded synamically.
  157. */
  158. public function attachEditor ($sSelector, $iViewMode, $bDynamicMode = false)
  159. {
  160. // override this function in particular editor class
  161. }
  162. /**
  163. * Add css/js files which are needed for editor display and functionality.
  164. */
  165. protected function _addJsCss ($bDynamicMode = false)
  166. {
  167. // override this function in particular editor class
  168. }
  169. /**
  170. * Replace provided markers string.
  171. * @param $s - string to replace markers in
  172. * @param $a - markers array
  173. * @return string with replaces markers
  174. */
  175. protected function _replaceMarkers ($s, $a)
  176. {
  177. if (empty($s) || empty($a) || !is_array($a))
  178. return $s;
  179. return bx_replace_markers($s, $a);
  180. }
  181. }
  182. /** @} */