File: //opt/plugins/wpdiscuz-emoticons/wpDiscuzSmileOptions.php
<?php
class wpDiscuzSmileOptions {
private $optionSlug = 'wpdiscuz_smiles';
public $options;
private $themeDir;
public $wpsmiliestrans;
public $patern;
public $srcUrl;
public $packs;
public $symbols = array(
'8-)' => ":cool:",
'8-O' => ":shock:",
':-(' => ':sad:',
':-)' => ':smile:',
':-?' => ":???:",
':-D' => ":grin:",
':-P' => ":razz:",
':-o' => ":eek:",
':-x' => ":mad:",
':-|' => ":neutral:",
';-)' => ":wink:",
'8O' => ":shock:",
':(' => ':sad:',
':)' => ':smile:',
':?' => ":???:",
':D' => ":grin:",
':P' => ":razz:",
':o' => ":eek:",
':x' => ":mad:",
':|' => ":neutral:",
';)' => ":wink:"
);
public function __construct() {
$this->addOption();
$this->initOption();
$this->smilesPackExists();
$this->initSmiles();
}
private function initSmiles() {
if ($this->options['theme'] == 'default') {
include_once 'emoticons' . DIRECTORY_SEPARATOR . 'wpsmiliestrans.php';
$this->srcUrl = plugins_url('/emoticons', __FILE__);
} else {
include_once $this->themeDir . DIRECTORY_SEPARATOR . $this->options['theme'] . DIRECTORY_SEPARATOR . 'wpsmiliestrans.php';
$this->supportOldTemplate();
$this->srcUrl = WP_CONTENT_URL . '/wpdiscuz/emoticons/' . $this->options['theme'];
}
if ($this->options['custom_smiles'] && is_array($this->options['custom_smiles'])) {
$this->wpsmiliestrans = array_merge($this->wpsmiliestrans, $this->options['custom_smiles']);
}
$this->patern = $this->initSmiliesSearch();
}
private function supportOldTemplate() {
$isOldTemplate = false;
if ($this->wpsmiliestrans && is_array($this->wpsmiliestrans)) {
foreach ($this->wpsmiliestrans as $smile) {
if ($smile && !is_array($smile)) {
$isOldTemplate = true;
break;
}
}
}
if ($isOldTemplate) {
$tmp = array();
foreach ($this->wpsmiliestrans as $key => $value) {
$tmp[$key] = array('file' => $value, 'title' => trim($key, ':'));
}
$this->wpsmiliestrans = $tmp;
}
}
private function initSmiliesSearch() {
$array = array_merge($this->symbols, $this->wpsmiliestrans);
$keys = array();
foreach ($array as $k => $v) {
$keys[] = preg_quote($k);
}
return '#' . implode('|', $keys) . '#m';
}
public function enableOrDisableSmile() {
if (current_user_can('manage_options')) {
$options = get_option($this->optionSlug);
$code = ':' . trim($_POST['key']) . ':';
$status = trim($_POST['status']);
if ($status == 'disable') {
$options['desabled_smiles'][] = $code;
} else {
if (($k = array_search($code, $options['desabled_smiles'])) !== false) {
unset($options['desabled_smiles'][$k]);
}
}
update_option($this->optionSlug, $options);
wp_die('1');
}
wp_die('0');
}
public function addCustomSmile() {
if (current_user_can('manage_options')) {
$options = get_option($this->optionSlug);
$title = trim($_POST['code'], ' :');
$code = ':' . $title . ':';
$url = trim($_POST['iconurl']);
$options['custom_smiles'][$code] = array('file' => $url, 'title' => $title);
update_option($this->optionSlug, $options);
$id = uniqid();
wp_die("<div id='custom_smile_container_$id' class='custom-smile'><code>$code</code><img id='smile_$id' src='$url' alt='$title' title='$title' /><span id='$id' class='button delete-custom-smile'>" . __('Delete', 'wpdiscuz_sm') . "</span></div>");
}
wp_die('0');
}
public function deleteCustomSmile() {
if (current_user_can('manage_options')) {
$options = get_option($this->optionSlug);
$code = ':' . trim($_POST['code']) . ':';
unset($options['custom_smiles'][$code]);
if (($k = array_search($code, $options['desabled_smiles'])) !== false) {
unset($options['desabled_smiles'][$k]);
}
update_option($this->optionSlug, $options);
wp_die('1');
}
wp_die('0');
}
public function optionTabName() {
echo '<li>' . __('Emoticons', 'wpdiscuz_sm') . '</li>';
}
public function optionTabContent() {
include_once 'options-html.php';
}
private function smilesPackExists() {
$this->packs = array();
$dirs = $this->dirNames($this->themeDir);
foreach ($dirs as $k => $v) {
if (file_exists($this->themeDir . DIRECTORY_SEPARATOR . $v . DIRECTORY_SEPARATOR . 'wpsmiliestrans.php')) {
$this->packs[] = $v;
}
}
}
private function dirNames($path) {
$dirs = array();
if (file_exists($path) && $dirs = scandir($path)) {
foreach ($dirs as $k => $v) {
if ($v == '.' || $v == '..') {
unset($dirs[$k]);
}
}
}
return $dirs;
}
public function smileDialog($uniqueId) {
$wpsmiliestrans = $this->filterSmiles($this->wpsmiliestrans);
$html = "<div id='wpdiscuz-smile-container-$uniqueId' class='wpdiscuz-smile-container'>";
foreach ($wpsmiliestrans as $code => $imageData) {
$eCode = trim($code, ':');
$width = '';
$height = '';
wpdiscuzSmileUtils::smileDimensions($width, $height, $code, $this->options, 'dialog');
$style = 'style="width:' . $width . 'px;max-width:' . $width . 'px;height:' . $height . 'px;max-height:' . $height . 'px;"';
$title = isset($imageData['title']) ? trim($imageData['title']) : '';
$file = isset($imageData['file']) ? trim($imageData['file']) : '';
if (!$title || !$file) {
continue;
}
$url = $this->detectUrl($file);
$html .= "<img src='$url' alt='$title' title='$title' data-emoticon-code='$eCode' class='wpdiscuz-dialog-smile' />";
}
return $html . '</div>';
}
private function filterSmiles($wpsmiliestrans) {
if ($this->options['desabled_smiles'] && is_array($this->options['desabled_smiles'])) {
foreach ($this->options['desabled_smiles'] as $kod) {
unset($wpsmiliestrans[$kod]);
}
}
return $wpsmiliestrans;
}
public function detectUrl($url) {
if (!strstr($url, 'http://') && !strstr($url, 'https://')) {
$url = $this->srcUrl . '/img/' . $url;
}
return $url;
}
private function initOption() {
$this->options = get_option($this->optionSlug);
if(!isset($this->options['smile_container'])){
$this->options['smile_container'] = 1;
}
$this->themeDir = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'wpdiscuz' . DIRECTORY_SEPARATOR . 'emoticons';
}
private function addOption() {
$options = $this->getDefaultOptions();
add_option($this->optionSlug, $options);
}
public function saveOptions($args) {
$this->options['smile_container'] = isset($args['smile_container']) ? intval($args['smile_container']) : 1;
$this->options['post_smiles'] = isset($args['wpdiscuz_replace_post_smile']) ? intval($args['wpdiscuz_replace_post_smile']) : 0;
$this->options['theme'] = isset($args['wpdiscuz_smile_theme']) ? trim($args['wpdiscuz_smile_theme']) : 'default';
$this->options['size'] = isset($args['wpdiscuz_smile_size']) && $args['wpdiscuz_smile_size'] ? intval($args['wpdiscuz_smile_size']) : 20;
$this->options['dialog_background'] = isset($args['wpdiscuz_smile_dialog_bg']) ? trim($args['wpdiscuz_smile_dialog_bg']) : '#4C4C4C';
$this->options['dialog_border_color'] = isset($args['wpdiscuz_smile_dialog_border_color']) ? trim($args['wpdiscuz_smile_dialog_border_color']) : '#000';
update_option($this->optionSlug, $this->options);
}
private function getDefaultOptions() {
return array(
'smile_container' => 1,
'post_smiles' => 0,
'theme' => 'default',
'size' => '20',
'dialog_background' => '#4C4C4C',
'dialog_border_color' => '#000',
'desabled_smiles' => array(),
'custom_smiles' => array()
);
}
public function replaceCustomSmiles() {
$options = get_option($this->optionSlug);
$customSmiles = isset($options['custom_smiles']) ? $options['custom_smiles'] : '';
$newCustomSmiles = array();
if ($customSmiles) {
foreach ($customSmiles as $key => $file) {
$newCustomSmiles[$key] = array('file' => $file, 'title' => trim($key, ':'));
}
$options['custom_smiles'] = $newCustomSmiles;
update_option($this->optionSlug, $options);
}
}
}