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" > </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();