HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.2.34
System: Linux atalantini.com 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 15:46:38 UTC 2020 x86_64
User: root (0)
PHP: 7.2.34
Disabled: NONE
Upload Files
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);
        }
    }

}