Server IP : 15.235.198.142 / Your IP : 216.73.216.190 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/rhodeworks/wp-content/plugins/nextgen-gallery/src/Admin/Notifications/ |
Upload File : |
<?php namespace Imagely\NGG\Admin\Notifications; use Imagely\NGG\Settings\Settings; use Imagely\NGG\Util\URL; class Manager { public $_notifications = []; public $_displayed_notice = false; public $_dismiss_url = null; /** * @var Manager */ static $_instance = null; /** * @return Manager */ static function get_instance() { if ( ! isset( self::$_instance ) ) { self::$_instance = new Manager(); } return self::$_instance; } public function __construct() { $this->_dismiss_url = site_url( '/?ngg_dismiss_notice=1' ); } public function has_displayed_notice() { return $this->_displayed_notice; } public function add( $name, $handler ) { $this->_notifications[ $name ] = $handler; } public function remove( $name ) { unset( $this->_notifications[ $name ] ); } public function render() { $output = []; foreach ( array_keys( $this->_notifications ) as $notice ) { if ( ( $html = $this->render_notice( $notice ) ) ) { $output[] = $html; } } echo implode( "\n", $output ); } public function is_dismissed( $name ) { $retval = false; $settings = Settings::get_instance(); $dismissed = $settings->get( 'dismissed_notifications', [] ); if ( isset( $dismissed[ $name ] ) ) { if ( ( $id = get_current_user_id() ) ) { if ( in_array( $id, $dismissed[ $name ] ) ) { $retval = true; } elseif ( in_array( 'unknown', $dismissed[ $name ] ) ) { $retval = true; } } } return $retval; } public function dismiss( $name, $dismiss_code = 1 ) { $response = []; if ( ( $handler = $this->get_handler_instance( $name ) ) ) { $has_method = method_exists( $handler, 'is_dismissable' ); if ( ( $has_method && $handler->is_dismissable() ) || ! $has_method ) { if ( method_exists( $handler, 'dismiss' ) ) { $response = $handler->dismiss( $dismiss_code ); $response['handled'] = true; } if ( is_bool( $response ) ) { $response = [ 'dismiss' => $response ]; } // Set default key/values if ( ! isset( $response['handled'] ) ) { $response['handled'] = false; } if ( ! isset( $response['dismiss'] ) ) { $response['dismiss'] = true; } if ( ! isset( $response['persist'] ) ) { $response['persist'] = $response['dismiss']; } if ( ! isset( $response['success'] ) ) { $response['success'] = $response['dismiss']; } if ( ! isset( $response['code'] ) ) { $response['code'] = $dismiss_code; } if ( $response['dismiss'] ) { $settings = Settings::get_instance(); $dismissed = $settings->get( 'dismissed_notifications', [] ); if ( ! isset( $dismissed[ $name ] ) ) { $dismissed[ $name ] = []; } $user_id = get_current_user_id(); $dismissed[ $name ][] = ( $user_id ? $user_id : 'unknown' ); $settings->set( 'dismissed_notifications', $dismissed ); if ( $response['persist'] ) { $settings->save(); } } } else { $response['error'] = __( 'Notice is not dismissible', 'nggallery' ); } } else { $response['error'] = __( 'No handler defined for this notice', 'nggallery' ); } return $response; } public function get_handler_instance( $name ) { $retval = null; if ( isset( $this->_notifications[ $name ] ) ) { $handler = $this->_notifications[ $name ]; if ( is_object( $handler ) ) { $retval = $handler; } elseif ( is_array( $handler ) ) { $retval = new Wrapper( $name, $handler ); } elseif ( class_exists( $handler ) ) { $retval = call_user_func( [ $handler, 'get_instance' ], $name ); } } return $retval; } public function enqueue_scripts() { if ( $this->has_displayed_notice() ) { $router = \Imagely\NGG\Util\Router::get_instance(); wp_enqueue_script( 'ngg_admin_notices', $router->get_static_url( 'photocrati-nextgen_admin#admin_notices.js' ), [], NGG_SCRIPT_VERSION, true ); wp_localize_script( 'ngg_admin_notices', 'ngg_notification_dismiss_settings', [ 'url' => $this->_dismiss_url, 'nonce' => \wp_create_nonce( 'ngg_dismiss_notification' ), ] ); } } public function serve_ajax_request() { if ( isset( $_REQUEST['ngg_dismiss_notice'] ) ) { $retval = [ 'failure' => true ]; if ( ! headers_sent() ) { header( 'Content-Type: application/json' ); } ob_start(); if ( ! isset( $_REQUEST['nonce'] ) || ! \wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['nonce'] ) ), 'ngg_dismiss_notification' ) ) { $retval['msg'] = __( 'Invalid security token', 'nggallery' ); } else { if ( ! isset( $_REQUEST['code'] ) ) { $_REQUEST['code'] = 1; } if ( isset( $_REQUEST['name'] ) ) { $retval = $this->dismiss( sanitize_text_field( wp_unslash( $_REQUEST['name'] ) ), intval( sanitize_text_field( wp_unslash( $_REQUEST['code'] ) ) ) ); } else { $retval['msg'] = __( 'Not a valid notice name', 'nggallery' ); } } ob_end_clean(); echo json_encode( $retval ); exit(); } } public function render_notice( $name ) { $retval = ''; if ( ( $handler = $this->get_handler_instance( $name ) ) && ! $this->is_dismissed( $name ) ) { // Does the handler want to render? $has_method = method_exists( $handler, 'is_renderable' ); if ( ( $has_method && $handler->is_renderable() ) || ! $has_method ) { $show_dismiss_button = false; if ( method_exists( $handler, 'show_dismiss_button' ) ) { $show_dismiss_button = $handler->show_dismiss_button(); } elseif ( method_exists( $handler, 'is_dismissable' ) ) { $show_dismiss_button = $handler->is_dismissable(); } $template = method_exists( $handler, 'get_mvc_template' ) ? $handler->get_mvc_template() : 'photocrati-nextgen_admin#admin_notice'; // The 'inline' class is necessary to prevent our notices from being moved in the DOM // see https://core.trac.wordpress.org/ticket/34570 for reference $css_class = 'inline '; $css_class .= ( method_exists( $handler, 'get_css_class' ) ? $handler->get_css_class() : 'updated' ); $view = new \C_MVC_View( $template, [ 'css_class' => $css_class, 'is_dismissable' => ( method_exists( $handler, 'is_dismissable' ) ? $handler->is_dismissable() : false ), 'html' => ( method_exists( $handler, 'render' ) ? $handler->render() : '' ), 'show_dismiss_button' => $show_dismiss_button, 'notice_name' => $name, ] ); $retval = $view->render( true ); if ( method_exists( $handler, 'enqueue_backend_resources' ) ) { $handler->enqueue_backend_resources(); } $this->_displayed_notice = true; } } return $retval; } }