/** * Renders the checkbox and custom JavaScript needed to ensure that the checkbox performs the way we need it to. * * Note: there was an interesting problem for when the checkbox transitioned through the save processes and the * value of the 'push setting' would be wiped because the checkbox wasn't checked or simply not even posted but WAS * checked... This is the reason for the JavaScript below. */ public static function post_submitbox_misc_actions() { // Get some post data $post_id = get_the_ID(); $post_status = get_post_status($post_id); $post_type = get_post_type($post_id); // Bail if current user cannot edit others posts if (!current_user_can('pushup_push_posts', $post_id)) { return; } // Bail if not an allowed post type if (!self::_is_post_type_allowed($post_type)) { return; } // Get the push setting $value = self::get_push_setting($post_id); ?> <style type="text/css"> .pushup-notification-pushed-icon { margin: 1px 8px 2px 1px; float: left; } .pushup-notification-pushed-time:before { speak: none; display: inline-block; padding: 0 2px 0 0; position: relative; vertical-align: top; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-decoration: none !important background: url('../images/pushup-grey.svg') no-repeat; } </style> <div class="misc-pub-section" id="pushup-notifications-container"> <?php if (!empty($value['time']) && $value['status'] === 'pushed') { ?> <img class="pushup-notification-pushed-icon" src="<?php echo plugin_dir_url(__FILE__); ?> ../images/pushup-grey.svg" width="16" height="16" /> <span class="pushup-notification-pushed-time"><?php printf(__('Pushed on: %s', 'pushup'), '<strong>' . date_i18n('M j, Y @ G:i', $value['time'], false) . '</strong>'); ?> </span> <?php } elseif (PushUp_Notifications_Authentication::is_authenticated() && PushUp_Notifications_JSON_API::is_domain_enabled()) { ?> <?php wp_nonce_field('push_notification_nonce', 'post_nonce_' . $post_id); ?> <input <?php checked(!empty($value['time'])); ?> title="<?php esc_html_e('Push to registered OS X subscribers upon publication', 'pushup'); ?> " type="checkbox" name="pushup-notification-creation" id="pushup-notification-creation" /> <?php if ('error' === $value['status']) { ?> <label title="<?php esc_html_e('Push to registered OS X subscribers upon publication', 'pushup'); ?> " for="pushup-notification-creation"><?php esc_html_e('Push Error. Try again!', 'pushup'); ?> </label> <?php } else { ?> <label title="<?php esc_html_e('Push to registered OS X subscribers upon publication', 'pushup'); ?> " for="pushup-notification-creation"><?php esc_html_e('Push desktop notification', 'pushup'); ?> </label> <?php } ?> <?php if ($post_status === 'published' || $value['time'] === 0) { ?> <input type="hidden" name="pushup-notification-creation" value="<?php echo !empty($value['time']) ? 'on' : 'off'; ?> " id="pushup-notification-hidden-input" /> <?php } ?> <?php } ?> </div> <script type="text/javascript"> ( function( window, $, undefined ) { var $container = $( document.getElementById( 'pushup-notifications-container' ) ); var $checkbox = $( document.getElementById( 'pushup-notification-creation' ) ); function checkBoxChanged( event ) { var $checkboxes = $container.find( 'input[type=checkbox]:checked' ); // check to see if any of these checkboxes match the one we're looking for already var isChecked = false; $checkboxes.each( function( index, element ) { if ( element.getAttribute( 'id' ) === 'pushup-notification-creation' ) { isChecked = true; } } ); if ( isChecked === true ) { removeHiddenInput(); } else { addHiddenInput(); } } function removeHiddenInput() { $( document.getElementById( 'pushup-notification-hidden-input' ) ).remove(); } function addHiddenInput() { var input = document.createElement( 'input' ); input.type = 'hidden'; input.name = 'pushup-notification-creation'; input.value = 'off'; input.id = 'pushup-notification-hidden-input'; $container.append( input ); } $checkbox.on( 'change', checkBoxChanged ); } )( window, jQuery ); </script> <?php }
<?php /** * Plugin Name: PushUp Notifications * Plugin URI: http://pushupnotifications.com * Description: Desktop push notifications for your WordPress powered website, starting with OS X Mavericks. * Version: 1.2.2 * Author: 10up * Author URI: http://10up.com * License: GPLv2 or later */ // Exit if accessed directly if (!defined('ABSPATH')) { exit; } // Include classes require_once plugin_dir_path(__FILE__) . 'includes/class-core.php'; require_once plugin_dir_path(__FILE__) . 'includes/class-json-api.php'; require_once plugin_dir_path(__FILE__) . 'includes/class-authentication.php'; require_once plugin_dir_path(__FILE__) . 'includes/class-push-notifications.php'; // Instantiate objects PushUp_Notifications_Core::instance(); PushUp_Notifications_JSON_API::instance(); PushUp_Notifications_Authentication::instance(); PushUp_Notifications::instance();
/** * Helper function to return the settings fields, their descriptions, and * help setup their callbacks for rendering. * * @return array */ public static function get_settings_fields() { // Authentication settings $settings_fields = array('connectivity' => array('title' => esc_html__('Service Connectivity', 'pushup'), 'callback' => array(__CLASS__, '_render_account_connectivity_field'), 'section' => 'default'), 'username' => array('title' => esc_html__('PushUp Username', 'pushup'), 'callback' => array(__CLASS__, '_render_account_username_field'), 'section' => 'default'), 'api-key' => array('title' => esc_html__('PushUp API Key', 'pushup'), 'callback' => array(__CLASS__, '_render_account_api_key_field'), 'section' => 'default')); // The following fields are only for authenticated users if (PushUp_Notifications_Authentication::is_authenticated() && PushUp_Notifications_JSON_API::is_domain_enabled()) { /** Analytics *****************************************************/ // Skip if we can't get any analytics if (PushUp_Notifications_JSON_API::get_analytics()) { // Subscribers chart $settings_fields['subscribers'] = array('title' => esc_html__('Subscribers', 'pushup'), 'callback' => array(__CLASS__, '_render_analytics_pie_field'), 'section' => 'analytics', 'args' => array('canvas_id' => 'conversion', 'desc' => esc_html__('Number of Subscribers', 'pushup'), 'data_points' => array(esc_html('Declined', 'pushup') => array('color' => '#63bde4', 'path' => array('total_declined')), esc_html('Accepted', 'pushup') => array('color' => 'rgba(74,198,143,1)', 'path' => array('total_granted'))))); // Pushes chart $settings_fields['pushes'] = array('title' => esc_html__('Push Requests', 'pushup'), 'callback' => array(__CLASS__, '_render_analytics_pie_field'), 'section' => 'analytics', 'desc' => '', 'args' => array('canvas_id' => 'requests', 'desc' => esc_html__('Total Number of Posted Items Pushed to Subscribers', 'pushup'), 'data_points' => array(esc_html('This Month', 'pushup') => array('color' => '#63bde4', 'path' => array('total_monthly_pushes', 'total_push_requests')), esc_html('All Time', 'pushup') => array('color' => 'rgba(74,198,143,1)', 'path' => array('total_all_time_pushes', 'total_push_requests'))))); // Notifications chart $settings_fields['notifications'] = array('title' => esc_html__('Notifications', 'pushup'), 'callback' => array(__CLASS__, '_render_analytics_pie_field'), 'section' => 'analytics', 'args' => array('canvas_id' => 'recipients', 'desc' => esc_html__('Total Number of Notifications Sent to Subscribers', 'pushup'), 'data_points' => array(esc_html__('This Month', 'pushup') => array('color' => '#63bde4', 'path' => array('total_monthly_pushes', 'total_push_recipients')), esc_html__('All Time', 'pushup') => array('color' => 'rgba(74,198,143,1)', 'path' => array('total_all_time_pushes', 'total_push_recipients'))))); } /** Display *******************************************************/ // Website Name $settings_fields['website_name'] = array('title' => esc_html__('Website Name', 'pushup'), 'callback' => array(__CLASS__, '_render_display_website_name_field'), 'section' => 'display'); // Notification Title $settings_fields['post_title'] = array('title' => esc_html__('Notification Title', 'pushup'), 'callback' => array(__CLASS__, '_render_display_post_title_field'), 'section' => 'display'); // Icons if (PushUp_Notifications_JSON_API::get_icon_data()) { $settings_fields['icon'] = array('title' => esc_html__('Icon(s)', 'pushup'), 'callback' => array(__CLASS__, '_render_display_icon_field'), 'section' => 'display'); } // Prompt Visitor $settings_fields['prompt'] = array('title' => esc_html__('Offer Notifications', 'pushup'), 'callback' => array(__CLASS__, '_render_display_prompt_field'), 'section' => 'display'); } return $settings_fields; }
/** * Attempt to cache the current successful authentication * * @param bool|null $auth * @return bool|null */ public static function _set_cached_authentication($auth = null) { // Nullifying any existing auths (delete transient and set to null) if (null === $auth) { self::$_is_authenticated = null; delete_transient(self::$_authentication_transient_key); return null; // Auth failed (save transient as false, set to false) } elseif (false === $auth) { self::$_is_authenticated = false; set_transient(self::$_authentication_transient_key, false, 6 * HOUR_IN_SECONDS); return false; // Auth success (save transient as true, set to true) } elseif (true === $auth) { self::$_is_authenticated = true; set_transient(self::$_authentication_transient_key, true, 6 * HOUR_IN_SECONDS); return true; } }