Horriblesubs/fansub/class-fansub-tinymce.php

117 lines
3.8 KiB
PHP

<?php
if(!function_exists('add_filter')) exit;
class FANSUB_TinyMCE {
private $mce_buttons;
private $mce_buttons_2;
private $mce_buttons_3;
private $mce_buttons_4;
public function __construct() {
$this->init_properties();
}
public function init() {
add_action('init', array($this, 'init_button'));
}
private function init_properties() {
$this->mce_buttons = array();
$this->mce_buttons_2 = array();
$this->mce_buttons_3 = array();
$this->mce_buttons_4 = array();
}
public function init_button() {
if(!fansub_current_user_can_use_rich_editor()) {
return;
}
add_filter('mce_external_plugins', array($this, 'mce_external_plugins'));
add_filter('mce_buttons', array($this, 'mce_buttons'));
add_filter('mce_buttons_2', array($this, 'mce_buttons_2'));
add_filter('mce_buttons_3', array($this, 'mce_buttons_3'));
add_filter('mce_buttons_4', array($this, 'mce_buttons_4'));
}
public function add_item($args, $toolbar = 1) {
switch($toolbar) {
case 2:
array_push($this->mce_buttons_2, $args);
break;
case 3:
array_push($this->mce_buttons_3, $args);
break;
case 4:
array_push($this->mce_buttons_4, $args);
break;
default:
array_push($this->mce_buttons, $args);
}
}
public function mce_external_plugins($plugin_array) {
$plugin_array = $this->add_mce_button_script($this->mce_buttons, $plugin_array);
$plugin_array = $this->add_mce_button_script($this->mce_buttons_2, $plugin_array);
$plugin_array = $this->add_mce_button_script($this->mce_buttons_3, $plugin_array);
$plugin_array = $this->add_mce_button_script($this->mce_buttons_4, $plugin_array);
return $plugin_array;
}
private function add_mce_plugin_script($plugin_array, $name, $script) {
$plugin_array[$name] = $script;
return $plugin_array;
}
private function add_mce_button_script($mce_buttons, $plugin_array) {
foreach($mce_buttons as $args) {
$name = fansub_get_value_by_key($args, 'name');
$script = fansub_get_value_by_key($args, 'script');
if(!empty($name) && !empty($script)) {
$plugin_array = $this->add_mce_plugin_script($plugin_array, $name, $script);
}
}
return $plugin_array;
}
private function add_to_mce_list_button($buttons, $button, $type = 'button') {
if('button' == $type) {
$backup = array_pop($buttons);
$buttons[] = $button;
$buttons[] = $backup;
} else {
array_unshift($buttons, $button);
}
return $buttons;
}
private function loop_list_mce_buttons($mce_buttons, $buttons) {
foreach($mce_buttons as $args) {
$name = fansub_get_value_by_key($args, 'name');
$type = fansub_get_value_by_key($args, 'type', 'button');
if(!empty($name)) {
$buttons = $this->add_to_mce_list_button($buttons, $name, $type);
}
}
return $buttons;
}
public function mce_buttons($buttons) {
$buttons = $this->loop_list_mce_buttons($this->mce_buttons, $buttons);
return $buttons;
}
public function mce_buttons_2($buttons) {
$buttons = $this->loop_list_mce_buttons($this->mce_buttons_2, $buttons);
return $buttons;
}
public function mce_buttons_3($buttons) {
$buttons = $this->loop_list_mce_buttons($this->mce_buttons_3, $buttons);
return $buttons;
}
public function mce_buttons_4($buttons) {
$buttons = $this->loop_list_mce_buttons($this->mce_buttons_4, $buttons);
return $buttons;
}
}