Skip to content
Snippets Groups Projects
Select Git revision
  • 9424a1280525a78a6468036dc6bdafc3183245ec
  • master default protected
  • bugfix/wordpress-review
  • fix/duplicate
  • bugfix/get_current_screen_fail
  • feature/dismiss-nonce
  • replace-dodgy-path
  • bugfix/notice-not-show
  • devel
  • 3.3.0
  • 3.2.5
  • 3.2.4
  • 3.2.3
  • 3.2.2
  • 3.2.1
  • 3.2.0
  • 3.2.0-beta7
  • 3.2.0-beta6
  • 3.2.0-beta5
  • 3.2.0-beta4
  • 3.2.0-beta3
  • 3.2.0-beta2
  • 3.2.0-beta1
  • 3.1.4
  • 3.1.4-beta1
  • 3.1.3
  • 3.1.1
  • 3.1
  • 3.0
29 results

AjaxHandler.php

Blame
  • AjaxHandler.php 2.55 KiB
    <?php
    
    namespace WPDesk\Notice;
    
    use WPDesk\PluginBuilder\Plugin\HookablePluginDependant;
    use WPDesk\PluginBuilder\Plugin\PluginAccess;
    
    /**
     * Class AjaxHandler
     *
     * AjaxHandler for dismissible notices.
     *
     * @package WPDesk\Notice
     */
    class AjaxHandler implements HookablePluginDependant
    {
    
        use PluginAccess;
    
        const POST_FIELD_NOTICE_NAME = 'notice_name';
        const POST_FIELD_SOURCE = 'source';
    
        const SCRIPTS_VERSION = '4';
        const SCRIPT_HANDLE = 'wpdesk_notice';
    
        /**
         * @var string
         */
        private $assetsURL;
    
        /**
         * AjaxHandler constructor.
         *
         * @param string|null $assetsURL Assets URL.
         */
        public function __construct($assetsURL = null)
        {
            $this->assetsURL = $assetsURL;
        }
    
        /**
         * Hooks.
         */
        public function hooks()
        {
            if ($this->assetsURL) {
                add_action('admin_enqueue_scripts', [$this, 'enqueueAdminScripts']);
            } else {
                add_action('admin_head', [$this,'addScriptToAdminHead']);
            }
            add_action('wp_ajax_wpdesk_notice_dismiss', [$this, 'processAjaxNoticeDismiss']);
        }
    
        /**
         * Enqueue admin scripts.
         */
        public function enqueueAdminScripts()
        {
            $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
            wp_register_script(
                self::SCRIPT_HANDLE,
                trailingslashit($this->assetsURL) . 'js/notice' . $suffix . '.js',
                array( 'jquery' ),
                self::SCRIPTS_VERSION
            );
            wp_enqueue_script(self::SCRIPT_HANDLE);
        }
    
        /**
         * Add Java Script to admin header.
         */
        public function addScriptToAdminHead()
        {
            include 'views/admin-head-js.php';
        }
    
        /**
         * Process AJAX notice dismiss.
         *
         * Updates corresponded WordPress option and fires wpdesk_notice_dismissed_notice action with notice name.
         */
        public function processAjaxNoticeDismiss()
        {
            if (isset($_POST[self::POST_FIELD_NOTICE_NAME])) {
                $noticeName = $_POST[self::POST_FIELD_NOTICE_NAME];
    
                if (isset($_POST[self::POST_FIELD_SOURCE])) {
                    $source = $_POST[ self::POST_FIELD_SOURCE ];
                } else {
                    $source = null;
                }
    
                update_option(
                    PermanentDismissibleNotice::OPTION_NAME_PREFIX . $noticeName,
                    PermanentDismissibleNotice::OPTION_VALUE_DISMISSED
                );
                do_action('wpdesk_notice_dismissed_notice', $noticeName, $source);
            }
            if (defined('DOING_AJAX') && DOING_AJAX) {
                die();
            }
        }
    
    }