/mambots/editors/spaw/class/theme.class.php

https://github.com/Arkadiy-Sedelnikov/joostina-1.4 · PHP · 524 lines · 227 code · 55 blank · 242 comment · 30 complexity · 6b6541650cab60076919dfa736feefa3 MD5 · raw file

  1. <?php
  2. /**
  3. * SPAW Editor v.2 Theme classes
  4. * Theme (skin) related classes
  5. * @package spaw2
  6. * @subpackage Theme
  7. * @author Alan Mendelevich <alan@solmetra.lt>
  8. * @copyright UAB Solmetra
  9. */
  10. require_once(str_replace('\\\\', '/', dirname(__FILE__)) . '/config.class.php');
  11. /**
  12. * Theme (skin) class
  13. * Stores and retrieves data related to editor themes (skins)
  14. * @package spaw2
  15. * @subpackage Theme
  16. */
  17. class SpawTheme{
  18. /**
  19. * Name of the theme
  20. * @access private
  21. * @var string
  22. */
  23. var $name;
  24. /**
  25. * Returns the name of the theme
  26. * @returns string
  27. */
  28. function getName(){
  29. return $this->name;
  30. }
  31. /**
  32. * Initializes Theme object
  33. * @param string @name Theme name
  34. */
  35. function SpawTheme($name){
  36. $this->name = $name;
  37. }
  38. /**
  39. * Returns Theme object
  40. * @param string $name Theme name
  41. * @returns SpawTheme SpawTheme object
  42. * @static
  43. */
  44. public static function getTheme($name){
  45. if(strpos($name, '/') || strpos($name, "\\")) die("illegal theme name");
  46. $theme = new SpawTheme($name);
  47. $theme->loadData();
  48. return $theme;
  49. }
  50. /**
  51. * Default toolbar button style
  52. * @access private
  53. * @var string
  54. */
  55. var $default_tb_button_style;
  56. /**
  57. * Sets default toolbar button style
  58. * @param string $style Style string
  59. */
  60. function setDefaultTbButtonStyle($style){
  61. $this->default_tb_button_style = $style;
  62. }
  63. /**
  64. * Returns default toolbar button style
  65. * @returns string
  66. */
  67. function getDefaultTbButtonStyle(){
  68. return $this->default_tb_button_style;
  69. }
  70. /**
  71. * Default toolbar image style
  72. * @var string
  73. */
  74. var $default_tb_image_style;
  75. /**
  76. * Sets default toolbar image style
  77. * @param string $style Style string
  78. */
  79. function setDefaultTbImageStyle($style){
  80. $this->default_tb_image_style = $style;
  81. }
  82. /**
  83. * Returns default toolbar image style
  84. * @returns string
  85. */
  86. function getDefaultTbImageStyle(){
  87. return $this->default_tb_image_style;
  88. }
  89. /**
  90. * Default toolbar dropdown style
  91. * @var string
  92. */
  93. var $default_tb_dropdown_style;
  94. /**
  95. * Sets default toolbar dropdown style
  96. * @param string $style Style string
  97. */
  98. function setDefaultTbDropdownStyle($style){
  99. $this->default_tb_dropdown_style = $style;
  100. }
  101. /**
  102. * Returns default toolbar dropdown style
  103. * @returns string
  104. */
  105. function getDefaultTbDropdownStyle(){
  106. return $this->default_tb_dropdown_style;
  107. }
  108. /**
  109. * Stores custom styles for specific toolbar items
  110. * @access private
  111. * @var array
  112. */
  113. var $custom_tbi_styles = array();
  114. /**
  115. * Returns true if specified toolbar item has custom style
  116. * @param string $name Toolbar item name
  117. * @returns bool
  118. */
  119. function isCustomStyleTbi($name){
  120. if(isset($this->custom_tbi_styles[$name]))
  121. return true;
  122. else
  123. return false;
  124. }
  125. /**
  126. * Returns custom style for specified toolbar item
  127. * @param string $name Toolbar item name
  128. * @returns string
  129. */
  130. function getCustomTbiStyle($name){
  131. if(isset($this->custom_tbi_styles[$name]))
  132. return $this->custom_tbi_styles[$name];
  133. else
  134. return NULL;
  135. }
  136. /**
  137. * Default toolbar button CSS class
  138. * @access private
  139. * @var string
  140. */
  141. var $default_tb_button_css_class;
  142. /**
  143. * Sets default toolbar button CSS class
  144. * @param string $css_class CssClass string
  145. */
  146. function setDefaultTbButtonCssClass($css_class){
  147. $this->default_tb_button_css_class = $css_class;
  148. }
  149. /**
  150. * Returns default toolbar button CSS class
  151. * @returns string
  152. */
  153. function getDefaultTbButtonCssClass(){
  154. return $this->default_tb_button_css_class;
  155. }
  156. /**
  157. * Default toolbar image CSS class
  158. * @var string
  159. */
  160. var $default_tb_image_css_class;
  161. /**
  162. * Sets default toolbar image CSS class
  163. * @param string $css_class CssClass string
  164. */
  165. function setDefaultTbImageCssClass($css_class){
  166. $this->default_tb_image_css_class = $css_class;
  167. }
  168. /**
  169. * Returns default toolbar image CSS class
  170. * @returns string
  171. */
  172. function getDefaultTbImageCssClass(){
  173. return $this->default_tb_image_css_class;
  174. }
  175. /**
  176. * Default toolbar dropdown CSS class
  177. * @var string
  178. */
  179. var $default_tb_dropdown_css_class;
  180. /**
  181. * Sets default toolbar dropdown CSS class
  182. * @param string $css_class CssClass string
  183. */
  184. function setDefaultTbDropdownCssClass($css_class){
  185. $this->default_tb_dropdown_css_class = $css_class;
  186. }
  187. /**
  188. * Returns default toolbar dropdown CSS class
  189. * @returns string
  190. */
  191. function getDefaultTbDropdownCssClass(){
  192. return $this->default_tb_dropdown_css_class;
  193. }
  194. /**
  195. * Stores custom CSS classs for specific toolbar items
  196. * @access private
  197. * @var array
  198. */
  199. var $custom_tbi_css_classes = array();
  200. /**
  201. * Returns true if specified toolbar item has custom CSS class
  202. * @param string $name Toolbar item name
  203. * @returns bool
  204. */
  205. function isCustomCssClassTbi($name){
  206. if(isset($this->custom_tbi_css_classes[$name]))
  207. return true;
  208. else
  209. return false;
  210. }
  211. /**
  212. * Returns custom CSS class for specified toolbar item
  213. * @param string $name Toolbar item name
  214. * @returns string
  215. */
  216. function getCustomTbiCssClass($name){
  217. if(isset($this->custom_tbi_css_classes[$name]))
  218. return $this->custom_tbi_css_classes[$name];
  219. else
  220. return NULL;
  221. }
  222. /**
  223. * Default toolbar button events
  224. * @access private
  225. * @var array
  226. */
  227. var $default_tb_button_events;
  228. /**
  229. * Sets default toolbar button events
  230. * @param array $events array representing events (key) and their respective handler functions (value)
  231. */
  232. function setDefaultTbButtonEvents($events){
  233. $this->default_tb_button_events = $events;
  234. }
  235. /**
  236. * Returns default toolbar button events
  237. * @returns array
  238. */
  239. function getDefaultTbButtonEvents(){
  240. return $this->default_tb_button_events;
  241. }
  242. /**
  243. * Stores custom events for specific toolbar items
  244. * @access private
  245. * @var array
  246. */
  247. var $custom_tbi_events = array();
  248. /**
  249. * Returns true if specified toolbar item has custom events
  250. * @param string $name Toolbar item name
  251. * @returns bool
  252. */
  253. function isCustomEventsTbi($name){
  254. if(isset($this->custom_tbi_events[$name]))
  255. return true;
  256. else
  257. return false;
  258. }
  259. /**
  260. * Returns custom events for specified toolbar item
  261. * @param string $name Toolbar item name
  262. * @returns string
  263. */
  264. function getCustomTbiEvents($name){
  265. if(isset($this->custom_tbi_events[$name]))
  266. return $this->custom_tbi_events[$name];
  267. else
  268. return NULL;
  269. }
  270. /**
  271. * Holds editor layout template
  272. * @var string
  273. * @access private
  274. */
  275. var $template;
  276. /**
  277. * Sets template variable
  278. * @param string $template Template code
  279. */
  280. function setTemplate($template){
  281. $this->template = $template;
  282. }
  283. /**
  284. * Returns layout template
  285. * @returns string
  286. */
  287. function getTemplate(){
  288. return $this->template;
  289. }
  290. /**
  291. * Holds editor layout template when in floating mode
  292. * @var string
  293. * @access private
  294. */
  295. var $template_floating;
  296. /**
  297. * Sets editor template variable for floating mode
  298. * @param string $template Template code
  299. */
  300. function setTemplateFloating($template){
  301. $this->template_floating = $template;
  302. }
  303. /**
  304. * Returns editor layout template for floating toolbar mode
  305. * @returns string
  306. */
  307. function getTemplateFloating(){
  308. return $this->template_floating;
  309. }
  310. /**
  311. * Holds toolbar layout template when in floating mode
  312. * @var string
  313. * @access private
  314. */
  315. var $template_toolbar;
  316. /**
  317. * Sets toolbar template variable for floating mode
  318. * @param string $template Template code
  319. */
  320. function setTemplateToolbar($template){
  321. $this->template_toolbar = $template;
  322. }
  323. /**
  324. * Returns toolbar layout template for floating toolbar mode
  325. * @returns string
  326. */
  327. function getTemplateToolbar(){
  328. return $this->template_toolbar;
  329. }
  330. /**
  331. * Holds standard template for dialog header
  332. * @var string
  333. * @access private
  334. */
  335. var $template_dialog_header;
  336. /**
  337. * Sets standard template for dialog header
  338. * @param string $template Template code
  339. */
  340. function setTemplateDialogHeader($template){
  341. $this->template_dialog_header = $template;
  342. }
  343. /**
  344. * Returns standard template for dialog header
  345. * @returns string
  346. */
  347. function getTemplateDialogHeader(){
  348. return $this->template_dialog_header;
  349. }
  350. /**
  351. * Holds standard template for dialog footer
  352. * @var string
  353. * @access private
  354. */
  355. var $template_dialog_footer;
  356. /**
  357. * Sets standard template for dialog footer
  358. * @param string $template Template code
  359. */
  360. function setTemplateDialogFooter($template){
  361. $this->template_dialog_footer = $template;
  362. }
  363. /**
  364. * Returns standard template for dialog footer
  365. * @returns string
  366. */
  367. function getTemplateDialogFooter(){
  368. return $this->template_dialog_footer;
  369. }
  370. /**
  371. * Loads theme data
  372. * @access private
  373. */
  374. function loadData(){
  375. if(strpos($this->name, '/') || strpos($this->name, "\\")) die("illegal theme name");
  376. $pgdir = SpawConfig::getStaticConfigValue("SPAW_ROOT") . 'plugins/';
  377. if(is_dir($pgdir)){
  378. // load theme settings
  379. if($dh = opendir($pgdir)){
  380. while(($pg = readdir($dh)) !== false){
  381. if(file_exists($pgdir . $pg . '/lib/theme/' . $this->name . '/config/theme.config.php')){
  382. // load theme config file for each plugin
  383. include($pgdir . $pg . '/lib/theme/' . $this->name . '/config/theme.config.php');
  384. // load default styles for "core" only
  385. if($pg == "core"){
  386. if(isset($default_tb_button_style)){
  387. $this->default_tb_button_style = $default_tb_button_style;
  388. unset($default_tb_button_style);
  389. }
  390. if(isset($default_tb_image_style)){
  391. $this->default_tb_image_style = $default_tb_image_style;
  392. unset($default_tb_image_style);
  393. }
  394. if(isset($default_tb_dropdown_style)){
  395. $this->default_tb_dropdown_style = $default_tb_dropdown_style;
  396. unset($default_tb_dropdown_style);
  397. }
  398. if(isset($default_tb_button_css_class)){
  399. $this->default_tb_button_css_class = $default_tb_button_css_class;
  400. unset($default_tb_button_css_class);
  401. }
  402. if(isset($default_tb_image_css_class)){
  403. $this->default_tb_image_css_class = $default_tb_image_css_class;
  404. unset($default_tb_image_css_class);
  405. }
  406. if(isset($default_tb_dropdown_css_class)){
  407. $this->default_tb_dropdown_css_class = $default_tb_dropdown_css_class;
  408. unset($default_tb_dropdown_css_class);
  409. }
  410. if(isset($default_tb_button_events)){
  411. $this->default_tb_button_events = $default_tb_button_events;
  412. unset($default_tb_button_events);
  413. }
  414. }
  415. if(isset($custom_tbi_styles)){
  416. $this->custom_tbi_styles = array_merge($this->custom_tbi_styles, $custom_tbi_styles);
  417. unset($custom_tbi_styles);
  418. }
  419. if(isset($custom_tbi_css_classes)){
  420. $this->custom_tbi_css_classes = array_merge($this->custom_tbi_css_classes, $custom_tbi_css_classes);
  421. unset($custom_tbi_css_classes);
  422. }
  423. if(isset($custom_tbi_events)){
  424. $this->custom_tbi_events = array_merge($this->custom_tbi_events, $custom_tbi_events);
  425. unset($custom_tbi_events);
  426. }
  427. }
  428. }
  429. closedir($dh);
  430. }
  431. // load template
  432. if(file_exists($pgdir . "core/lib/theme/" . $this->name . "/templates/editor.tpl")){
  433. $fn = $pgdir . "core/lib/theme/" . $this->name . "/templates/editor.tpl";
  434. $handle = fopen($fn, "r");
  435. $this->template = fread($handle, filesize($fn));
  436. fclose($handle);
  437. }
  438. // load editor template for floating toolbar mode
  439. if(file_exists($pgdir . "core/lib/theme/" . $this->name . "/templates/editor_floating.tpl")){
  440. $fn = $pgdir . "core/lib/theme/" . $this->name . "/templates/editor_floating.tpl";
  441. $handle = fopen($fn, "r");
  442. $this->template_floating = fread($handle, filesize($fn));
  443. fclose($handle);
  444. }
  445. // load toolbar template for floating toolbar mode
  446. if(file_exists($pgdir . "core/lib/theme/" . $this->name . "/templates/toolbar_floating.tpl")){
  447. $fn = $pgdir . "core/lib/theme/" . $this->name . "/templates/toolbar_floating.tpl";
  448. $handle = fopen($fn, "r");
  449. $this->template_toolbar = fread($handle, filesize($fn));
  450. fclose($handle);
  451. }
  452. // load template for standard dialog header
  453. if(file_exists($pgdir . "core/lib/theme/" . $this->name . "/templates/dialog_header.tpl")){
  454. $fn = $pgdir . "core/lib/theme/" . $this->name . "/templates/dialog_header.tpl";
  455. $handle = fopen($fn, "r");
  456. $this->template_dialog_header = fread($handle, filesize($fn));
  457. fclose($handle);
  458. }
  459. // load template for standard dialog footer
  460. if(file_exists($pgdir . "core/lib/theme/" . $this->name . "/templates/dialog_footer.tpl")){
  461. $fn = $pgdir . "core/lib/theme/" . $this->name . "/templates/dialog_footer.tpl";
  462. $handle = fopen($fn, "r");
  463. $this->template_dialog_footer = fread($handle, filesize($fn));
  464. fclose($handle);
  465. }
  466. }
  467. }
  468. }
  469. ?>