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/wpDiscuzSmile.php
<?php
/*
 * Plugin Name: wpDiscuz - Emoticons
 * Description:
 * Version: 1.2.6
 * Author: gVectors Team (A. Chakhoyan, G. Zakaryan, H. Martirosyan)
 * Author URI: https://gvectors.com/
 * Plugin URI: https://gvectors.com/product/wpdiscuz-emoticons
 * Text Domain: wpdiscuz-sm
 * Domain Path: /languages/
 */

if (!defined('WPDISCUZ_BOTTOM_TOOLBAR'))
    define('WPDISCUZ_BOTTOM_TOOLBAR', true);
include_once 'includes/gvt-api-manager.php';
include_once 'wpDiscuzSmileOptions.php';
include_once 'includes/wpdiscuzSmileUtils.php';

class wpDiscuzSmile {

    private $options;
    private $smilesSearch;
    private $postTypes;
    private $pVersion;

    public function __construct() {
        add_action('plugins_loaded', array(&$this, 'pluginsLoaded'), 165);
    }

    public function pluginsLoaded() {
        if (function_exists('wpDiscuz')) {
            new GVT_API_Manager(__FILE__, 'wpdiscuz_options_page', 'wpdiscuz_option_page');
            $wpdiscuz_version = get_option('wc_plugin_version');
            if (!version_compare($wpdiscuz_version, '7.0.0', '>=')) {
                $this->options = new wpDiscuzSmileOptions();
                $this->initSmilesSearch();
                $this->initPluginVersion();
                load_plugin_textdomain('wpdiscuz-sm', false, basename(dirname(__FILE__)) . '/languages/');
                remove_filter('comment_text', 'convert_smilies');
                remove_filter('post_content', 'convert_smilies');
                add_filter('post_content', array(&$this, 'convertSmilies'), 5);
                add_filter('wpdiscuz_custom_field_text', array(&$this, 'convertSmilies'), 10);
                add_filter('wpdiscuz_custom_field_textarea', array(&$this, 'convertSmilies'), 10);
                if ($this->options->options['post_smiles']) {
                    remove_filter('the_content', 'convert_smilies');
                    add_filter('the_content', array(&$this, 'convertSmilies'), 5);
                }
                add_filter('comment_text', array(&$this, 'convertSmilies'), 5);
                add_action('wp_enqueue_scripts', array(&$this, 'frontendScripts'));
                add_action('admin_enqueue_scripts', array(&$this, 'adminScripts'), 2385);
                add_action('wpdiscuz_addon_tab_title', array($this->options, 'optionTabName'), 3);
                add_action('wpdiscuz_addon_tab_content', array($this->options, 'optionTabContent'), 3);
                add_action('wpdiscuz_save_options', array($this->options, 'saveOptions'));
                add_action('wpdiscuz_button', array($this, 'smileHtml'), 513);
                add_action('wp_print_footer_scripts', array(&$this, 'customStyleScript'));
                add_action('admin_init', array(&$this, 'pluginNewVersion'), 1);

                if ($this->options->options['post_smiles']) {
                    add_action('add_meta_boxes', array(&$this, 'addSmilesMetabox'));
                    if (version_compare(get_option('wc_plugin_version', '1.0.0'), '4.0.0', '<')) {
                        add_action('wpdiscuz_init_options', array(&$this, 'initPostTypes'));
                    } else {
                        $this->initPostTypes(null);
                    }
                }

                add_action('wp_ajax_enable_or_disable_smile', array($this->options, 'enableOrDisableSmile'));
                add_action('wp_ajax_add_custom_smile', array($this->options, 'addCustomSmile'));
                add_action('wp_ajax_delete_custom_smile', array($this->options, 'deleteCustomSmile'));
            }
        } else {
            add_action('admin_notices', array(&$this, 'smRequirements'), 1);
        }
    }

    public function smRequirements() {
        if (current_user_can('manage_options')) {
            echo "<div class='error'><p>" . __('wpDiscuz Emoticons requires wpDiscuz to be installed!', 'wpdiscuz-sm') . "</p></div>";
        }
    }

    public function convertSmilies($text) {
        $output = '';
        if (!empty($this->smilesSearch)) {
            $textarr = preg_split('/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
            $stop = count($textarr);
            $tags_to_ignore = 'code|pre';
            $ignore_block_element = '';
            for ($i = 0; $i < $stop; $i++) {
                $content = $textarr[$i];
                if ('' == $ignore_block_element && preg_match('/^<(' . $tags_to_ignore . ')>/', $content, $matches)) {
                    $ignore_block_element = $matches[1];
                }
                if ('' == $ignore_block_element && strlen($content) > 0 && '<' != $content[0]) {
                    $content = preg_replace_callback($this->smilesSearch, array(&$this, 'translateSmiley'), $content);
                }
                if ('' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content) {
                    $ignore_block_element = '';
                }
                $output .= $content;
            }
        } else {
            $output = $text;
        }
        return $output;
    }

    private function initSmilesSearch() {
        $allSmiles = array_merge($this->options->wpsmiliestrans, $this->options->symbols);
        krsort($allSmiles);
        $spaces = wp_spaces_regexp();
        $this->smilesSearch = '/(?<=' . $spaces . '|^)';
        $subchar = '';
        foreach ((array) $allSmiles as $smiley => $img) {
            $firstchar = substr($smiley, 0, 1);
            $rest = substr($smiley, 1);
            if ($firstchar != $subchar) {
                if ($subchar != '') {
                    $this->smilesSearch .= ')(?=' . $spaces . '|$)';  // End previous "subpattern"
                    $this->smilesSearch .= '|(?<=' . $spaces . '|^)'; // Begin another "subpattern"
                }
                $subchar = $firstchar;
                $this->smilesSearch .= preg_quote($firstchar, '/') . '(?:';
            } else {
                $this->smilesSearch .= '|';
            }
            $this->smilesSearch .= preg_quote($rest, '/');
        }
        $this->smilesSearch .= ')(?=' . $spaces . '|$)/m';
    }

    public function translateSmiley($matches) {
        if (count($matches) == 0)
            return '';
        $smiley = trim(reset($matches));
        if (array_key_exists($smiley, $this->options->symbols)) {
            $smiley = $this->options->symbols[$smiley];
        }
        $imgData = $this->options->wpsmiliestrans[$smiley];
        $srcUrl = $this->options->detectUrl($imgData['file']);
        $title = trim($imgData['title']);
        $width = '';
        $height = '';
        wpdiscuzSmileUtils::smileDimensions($width, $height, $smiley, $this->options->options);
        //$style = 'style="width:' . $width . 'px;max-width:' . $width . 'px;height:' . $height . 'px;max-height:' . $height . 'px;"';
        return sprintf('<img src="%s" alt="%s" class="wpdiscuz-smile" ' . $style . ' />', esc_url($srcUrl), $title, $width, $height);
    }

    public function frontendScripts() {
        $wpdiscuz = wpDiscuz();
        wp_register_script('wpdiscuz-smile-js', plugins_url('/assets/js/wpdiscuz-smile.js', __FILE__), array('jquery'), $this->pVersion, $wpdiscuz->optionsSerialized->isLoadScriptsInFooter);
        wp_enqueue_script('wpdiscuz-smile-js');
        wp_localize_script('wpdiscuz-smile-js', 'wpdiscuz_smile_obj', array('smile_container' => $this->options->options['smile_container']));
        wp_register_style('wpdiscuz-smile-css', plugins_url('/assets/css/wpdiscuz-smile.css', __FILE__), null, $this->pVersion);
        wp_enqueue_style('wpdiscuz-smile-css');
    }

    public function adminScripts() {
        wp_register_script('wpdiscuz-admin-smile-js', plugins_url('/assets/js/wpdiscuz-smile-option.js', __FILE__), array('jquery'), $this->pVersion, true);
        wp_enqueue_script('wpdiscuz-admin-smile-js');
        wp_localize_script('wpdiscuz-admin-smile-js', 'wpdiscuz_smile_obj', array('wpdiscuz_smile_options' => array('fill_required' => __('Please fill code and url', 'wpdiscuz_sm'))));
        wp_register_style('wpdiscuz-admin-smile-css', plugins_url('/assets/css/wpdiscuz-admin-smile.css', __FILE__), null, $this->pVersion);
        wp_enqueue_style('wpdiscuz-admin-smile-css');
    }

    public function smileHtml($uniqueId) {
        ?><span id="wpdiscuz_smil_icon-<?php echo $uniqueId; ?>" class="wpdiscuz-button wpdiscuz-smil-icon" >&nbsp;</span>
        <?php
        $class = $this->options->options['smile_container'] == 1 ? '-tooltip' : '';
        $dialog = $this->options->smileDialog($uniqueId);
        ?>
        <div id="wpdiscuz_smil-<?php echo $uniqueId; ?>" class="wpdiscuz_smil<?php echo $class; ?>-contain" style=""> 
            <span class="wpdiscuz-smile-tooltip-arrow wpdiscuz-smile-top-arrow" style=""></span>
            <span class="wpdiscuz-smile-tooltip-arrow wpdiscuz-smile-bottom-arrow" style=""></span>
            <div class="wpdiscuz-slile<?php echo $class; ?>-body" style=""><?php echo $dialog; ?></div>
        </div>    
        <?php
    }

    public function addSmilesMetabox($post_type) {
        $post_types = apply_filters('acp_metabox_post_types', $this->postTypes);
        if (in_array($post_type, $post_types)) {
            add_meta_box(
                    'wpdiscuz_smiles_metabox', __('wpDiscuz Emoticons', 'wpdiscuz_sm'), array(&$this, 'drowSmiles'), $post_type, 'side', 'default'
            );
        }
    }

    public function drowSmiles() {
        echo $this->options->smileDialog('metabox');
    }

    public function initPostTypes($options) {
        if ($options) {
            $this->postTypes = $options->postTypes;
        } else {
            $formRel = get_option('wpdiscuz_form_content_type_rel', array());
            $this->postTypes = array();
            foreach ($formRel as $postType => $args) {
                if ($args) {
                    $this->postTypes[] = $postType;
                }
            }
        }
    }

    private function initPluginVersion() {
        if (!function_exists('get_plugins')) {
            require_once ABSPATH . 'wp-admin/includes/plugin.php';
        }
        $plugin_folder = get_plugins('/' . plugin_basename(dirname(__FILE__)));
        $plugin_file = basename(( __FILE__));
        $this->pVersion = $plugin_folder[$plugin_file]['Version'];
    }

    public function customStyleScript() {
        ?>
        <style>
            .wpdiscuz_smil-tooltip-contain .wpdiscuz-slile-tooltip-body{
                background: <?php echo isset($this->options->options['dialog_background']) ? $this->options->options['dialog_background'] : '#4C4C4C'; ?>;
                border: 2px solid <?php echo isset($this->options->options['dialog_border_color']) ? $this->options->options['dialog_border_color'] : '#000000'; ?>; 
            }
            .wpdiscuz_smil-tooltip-contain .wpdiscuz-smile-top-arrow{
                border-bottom: 11px solid <?php echo isset($this->options->options['dialog_border_color']) ? $this->options->options['dialog_border_color'] : '#000000'; ?>;
            }
            .wpdiscuz_smil-tooltip-contain .wpdiscuz-smile-bottom-arrow{
                border-bottom: 11px solid  <?php echo isset($this->options->options['dialog_background']) ? $this->options->options['dialog_background'] : '#4C4C4C'; ?>;
            }
        </style>
        <?php
        if (wp_script_is('quicktags', 'enqueued') && !wp_script_is('wpdiscuz-ajax-js', 'enqueued')) {
            echo '<div id="wpdiscuz-smile-bbp" style="display:none;">';
            $this->smileHtml('quicktags');
            echo '</div>';
        }
    }

    public function pluginNewVersion() {
        $oldVersion = get_option('wpdiscuz_emoticons_version', '1.0.0');
        if (version_compare($this->pVersion, $oldVersion, '>')) {
            if ($oldVersion == '1.0.0') {
                $this->options->replaceCustomSmiles();
            }
            update_option('wpdiscuz_emoticons_version', $this->pVersion);
        }
    }

}

$wpDiscuzSmile = new wpDiscuzSmile();