donors
7 years ago
emails
7 years ago
forms
7 years ago
payments
7 years ago
reports
7 years ago
settings
7 years ago
shortcodes
7 years ago
tools
7 years ago
upgrades
7 years ago
views
7 years ago
EDD_SL_Plugin_Updater.php
7 years ago
abstract-admin-settings-page.php
7 years ago
add-ons.php
7 years ago
admin-actions.php
7 years ago
admin-filters.php
7 years ago
admin-footer.php
7 years ago
admin-pages.php
7 years ago
class-addon-activation-banner.php
7 years ago
class-admin-settings.php
7 years ago
class-api-keys-table.php
7 years ago
class-blank-slate.php
7 years ago
class-give-settings.php
7 years ago
class-i18n-module.php
7 years ago
dashboard-widgets.php
7 years ago
give-metabox-functions.php
7 years ago
plugins.php
7 years ago
welcome.php
7 years ago
class-addon-activation-banner.php
373 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Give Activation Banner |
| 4 | * |
| 5 | * @author WordImpress |
| 6 | * @version 1.0 |
| 7 | * https://github.com/WordImpress/plugin-activation-banner-demo |
| 8 | */ |
| 9 | |
| 10 | // Exit if accessed directly. |
| 11 | if ( ! defined( 'ABSPATH' ) ) { |
| 12 | exit; |
| 13 | } |
| 14 | |
| 15 | /** |
| 16 | * Class Give_Addon_Activation_Banner |
| 17 | */ |
| 18 | class Give_Addon_Activation_Banner { |
| 19 | |
| 20 | /** |
| 21 | * Class constructor. |
| 22 | * |
| 23 | * @since 1.0 |
| 24 | * @access public |
| 25 | * |
| 26 | * @param array $_banner_details { |
| 27 | * 'file' => __FILE__, // (required) Directory path to the main plugin file |
| 28 | * 'name' => __( 'Authorize.net Gateway', 'give-authorize' ), // (required) Name of the Add-on |
| 29 | * 'version' => GIVE_AUTHORIZE_VERSION, // (required)The most current version |
| 30 | * 'documentation_url' => 'http://docs.givewp.com/addon-authorize',// (required) |
| 31 | * 'support_url' => 'https://givewp.com/support/', // (required)Location of Add-on settings page, leave blank to hide |
| 32 | * 'testing' => false, // (required) Never leave as "true" in production!!! |
| 33 | * } |
| 34 | */ |
| 35 | function __construct( $_banner_details ) { |
| 36 | $current_user = wp_get_current_user(); |
| 37 | |
| 38 | $this->plugin_activate_by = 0; |
| 39 | $this->banner_details = $_banner_details; |
| 40 | $this->test_mode = ( $this->banner_details['testing'] == 'true' ) ? true : false; |
| 41 | $this->nag_meta_key = 'give_addon_activation_ignore_' . sanitize_title( $this->banner_details['name'] ); |
| 42 | $this->activate_by_meta_key = 'give_addon_' . sanitize_title( $this->banner_details['name'] ) . '_active_by_user'; |
| 43 | |
| 44 | //Get current user |
| 45 | $this->user_id = $current_user->ID; |
| 46 | |
| 47 | // Set up hooks. |
| 48 | $this->init(); |
| 49 | |
| 50 | // Store user id who activate plugin. |
| 51 | $this->add_addon_activate_meta(); |
| 52 | } |
| 53 | |
| 54 | /** |
| 55 | * Set up WordPress filters to hook into WP's update process. |
| 56 | * |
| 57 | * @since 1.0 |
| 58 | * @access public |
| 59 | * |
| 60 | * @return void |
| 61 | */ |
| 62 | public function init() { |
| 63 | |
| 64 | //Testing? |
| 65 | if ( $this->test_mode ) { |
| 66 | delete_user_meta( $this->user_id, $this->nag_meta_key ); |
| 67 | } |
| 68 | |
| 69 | //Get the current page to add the notice to |
| 70 | add_action( 'current_screen', array( $this, 'give_addon_notice_ignore' ) ); |
| 71 | add_action( 'admin_notices', array( $this, 'give_addon_activation_admin_notice' ) ); |
| 72 | |
| 73 | // File path of addon must be included in banner detail other addon activate meta will not delete. |
| 74 | $file_name = $this->get_plugin_file_name(); |
| 75 | |
| 76 | if ( ! empty( $file_name ) ) { |
| 77 | add_action( 'deactivate_' . $file_name, array( $this, 'remove_addon_activate_meta' ) ); |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | |
| 82 | /** |
| 83 | * Check if current page is plugin page or not. |
| 84 | * |
| 85 | * @since 1.8 |
| 86 | * @access private |
| 87 | * @return bool |
| 88 | */ |
| 89 | private function is_plugin_page() { |
| 90 | $screen = get_current_screen(); |
| 91 | |
| 92 | return ( $screen->parent_file === 'plugins.php' ); |
| 93 | } |
| 94 | |
| 95 | |
| 96 | /** |
| 97 | * Give Addon Activation Banner |
| 98 | * |
| 99 | * @since 1.0 |
| 100 | * @access public |
| 101 | */ |
| 102 | public function give_addon_activation_admin_notice() { |
| 103 | |
| 104 | // Bailout. |
| 105 | if ( ! $this->is_plugin_page() || $this->user_id !== $this->plugin_activate_by ) { |
| 106 | return; |
| 107 | } |
| 108 | |
| 109 | // If the user hasn't already dismissed the alert, output activation banner. |
| 110 | if ( ! get_user_meta( $this->user_id, $this->nag_meta_key ) ) { |
| 111 | |
| 112 | $this->print_css(); |
| 113 | |
| 114 | // Output inline styles here because there's no reason |
| 115 | // to enqueued them after the alert is dismissed. |
| 116 | |
| 117 | ob_start(); |
| 118 | ?> |
| 119 | |
| 120 | <div class="updated give-addon-alert give-notice" style="display: none"> |
| 121 | |
| 122 | <img src="<?php echo GIVE_PLUGIN_URL; ?>assets/images/svg/give-icon-full-circle.svg" class="give-logo"/> |
| 123 | |
| 124 | <div class="give-alert-message"> |
| 125 | <h3><?php |
| 126 | printf( |
| 127 | /* translators: %s: Add-on name */ |
| 128 | esc_html__( "Thank you for installing Give's %s Add-on!", 'give' ), |
| 129 | '<span>' . $this->banner_details['name'] . '</span>' |
| 130 | ); |
| 131 | ?></h3> |
| 132 | |
| 133 | <a href="<?php |
| 134 | //The Dismiss Button. |
| 135 | $nag_admin_dismiss_url = 'plugins.php?' . $this->nag_meta_key . '=0'; |
| 136 | echo admin_url( $nag_admin_dismiss_url ); ?>" class="dismiss"><span |
| 137 | class="dashicons dashicons-dismiss"></span></a> |
| 138 | |
| 139 | <div class="alert-actions"> |
| 140 | |
| 141 | <?php //Point them to your settings page. |
| 142 | if ( isset( $this->banner_details['settings_url'] ) ) { ?> |
| 143 | <a href="<?php echo $this->banner_details['settings_url']; ?>"> |
| 144 | <span class="dashicons dashicons-admin-settings"></span><?php esc_html_e( 'Go to Settings', 'give' ); ?> |
| 145 | </a> |
| 146 | <?php } ?> |
| 147 | |
| 148 | <?php |
| 149 | // Show them how to configure the Addon. |
| 150 | if ( isset( $this->banner_details['documentation_url'] ) ) { ?> |
| 151 | <a href="<?php echo $this->banner_details['documentation_url'] ?>" target="_blank"> |
| 152 | <span class="dashicons dashicons-media-text"></span><?php |
| 153 | printf( |
| 154 | /* translators: %s: Add-on name */ |
| 155 | esc_html__( 'Documentation: %s Add-on', 'give' ), |
| 156 | $this->banner_details['name'] |
| 157 | ); |
| 158 | ?></a> |
| 159 | <?php } ?> |
| 160 | <?php |
| 161 | //Let them signup for plugin updates |
| 162 | if ( isset( $this->banner_details['support_url'] ) ) { ?> |
| 163 | |
| 164 | <a href="<?php echo $this->banner_details['support_url'] ?>" target="_blank"> |
| 165 | <span class="dashicons dashicons-sos"></span><?php esc_html_e( 'Get Support', 'give' ); ?> |
| 166 | </a> |
| 167 | |
| 168 | <?php } ?> |
| 169 | |
| 170 | </div> |
| 171 | </div> |
| 172 | </div> |
| 173 | <?php |
| 174 | |
| 175 | $notice_html = ob_get_clean(); |
| 176 | |
| 177 | |
| 178 | // Register notice. |
| 179 | Give()->notices->register_notice( array( |
| 180 | 'id' => 'give_' . sanitize_title( $this->banner_details['name'] ) . '_notice', |
| 181 | 'type' => 'updated', |
| 182 | 'description_html' => $notice_html, |
| 183 | 'show' => true, |
| 184 | ) ); |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | |
| 189 | /** |
| 190 | * Add activation banner css. |
| 191 | * |
| 192 | * @since 1.8.16 |
| 193 | * @access private |
| 194 | */ |
| 195 | private function print_css(){ |
| 196 | ?> |
| 197 | <style> |
| 198 | div.give-addon-alert.updated { |
| 199 | padding: 20px; |
| 200 | position: relative; |
| 201 | border-color: #66BB6A; |
| 202 | } |
| 203 | |
| 204 | div.give-alert-message { |
| 205 | margin-left: 70px; |
| 206 | } |
| 207 | |
| 208 | div.give-addon-alert img.give-logo { |
| 209 | max-width: 50px; |
| 210 | float: left; |
| 211 | } |
| 212 | |
| 213 | div.give-addon-alert h3 { |
| 214 | margin: -5px 0 10px; |
| 215 | font-size: 22px; |
| 216 | font-weight: 300; |
| 217 | line-height: 30px; |
| 218 | } |
| 219 | |
| 220 | div.give-addon-alert h3 span { |
| 221 | font-weight: 700; |
| 222 | color: #66BB6A; |
| 223 | } |
| 224 | |
| 225 | div.give-addon-alert .alert-actions { |
| 226 | } |
| 227 | |
| 228 | div.give-addon-alert a { |
| 229 | color: #66BB6A; |
| 230 | } |
| 231 | |
| 232 | div.give-addon-alert .alert-actions a { |
| 233 | margin-right: 2em; |
| 234 | } |
| 235 | |
| 236 | div.give-addon-alert .alert-actions a { |
| 237 | text-decoration: underline; |
| 238 | } |
| 239 | |
| 240 | div.give-addon-alert .alert-actions a:hover { |
| 241 | color: #555555; |
| 242 | } |
| 243 | |
| 244 | div.give-addon-alert .alert-actions a span { |
| 245 | text-decoration: none; |
| 246 | margin-right: 5px; |
| 247 | } |
| 248 | |
| 249 | div.give-addon-alert .dismiss { |
| 250 | position: absolute; |
| 251 | right: 20px; |
| 252 | height: 100%; |
| 253 | top: 50%; |
| 254 | margin-top: -10px; |
| 255 | outline: none; |
| 256 | box-shadow: none; |
| 257 | text-decoration: none; |
| 258 | color: #AAA; |
| 259 | } |
| 260 | |
| 261 | div.give-addon-alert .dismiss:hover { |
| 262 | color: #333; |
| 263 | } |
| 264 | </style> |
| 265 | <?php |
| 266 | } |
| 267 | |
| 268 | |
| 269 | /** |
| 270 | * Ignore Nag. |
| 271 | * |
| 272 | * This is the action that allows the user to dismiss the banner it basically sets a tag to their user meta data |
| 273 | * |
| 274 | * @since 1.0 |
| 275 | * @access public |
| 276 | */ |
| 277 | public function give_addon_notice_ignore() { |
| 278 | |
| 279 | /** |
| 280 | * If user clicks to ignore the notice, add that to their user meta the banner then checks whether this tag exists already or not. |
| 281 | * See here: http://codex.wordpress.org/Function_Reference/add_user_meta |
| 282 | */ |
| 283 | if ( isset( $_GET[ $this->nag_meta_key ] ) && '0' == $_GET[ $this->nag_meta_key ] ) { |
| 284 | |
| 285 | //Get the global user |
| 286 | $current_user = wp_get_current_user(); |
| 287 | $user_id = $current_user->ID; |
| 288 | |
| 289 | add_user_meta( $user_id, $this->nag_meta_key, 'true', true ); |
| 290 | } |
| 291 | } |
| 292 | |
| 293 | /** |
| 294 | * Setup user id to option |
| 295 | * |
| 296 | * @since 1.8 |
| 297 | * @access private |
| 298 | */ |
| 299 | private function add_addon_activate_meta() { |
| 300 | $user_id = get_option( $this->activate_by_meta_key ); |
| 301 | $this->plugin_activate_by = (int) $user_id; |
| 302 | |
| 303 | if ( ! $user_id ) { |
| 304 | add_option( $this->activate_by_meta_key, $this->user_id, '', 'no' ); |
| 305 | $this->plugin_activate_by = (int) $this->user_id; |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | |
| 310 | /** |
| 311 | * Delete user id from option if plugin deactivated. |
| 312 | * |
| 313 | * @since 1.8 |
| 314 | * @access public |
| 315 | */ |
| 316 | public function remove_addon_activate_meta() { |
| 317 | $user_id = get_option( $this->activate_by_meta_key ); |
| 318 | |
| 319 | if ( $user_id ) { |
| 320 | delete_option( $this->activate_by_meta_key ); |
| 321 | } |
| 322 | } |
| 323 | |
| 324 | |
| 325 | /** |
| 326 | * Get plugin file name. |
| 327 | * |
| 328 | * @since 1.8 |
| 329 | * @access private |
| 330 | * @return mixed |
| 331 | */ |
| 332 | private function get_plugin_file_name() { |
| 333 | $active_plugins = get_option( 'active_plugins' ); |
| 334 | $file_name = ''; |
| 335 | |
| 336 | try { |
| 337 | |
| 338 | // Check addon file path. |
| 339 | if ( ! empty( $this->banner_details['file'] ) ) { |
| 340 | $file_name = ''; |
| 341 | if ( $file_path = explode( '/plugins/', $this->banner_details['file'] ) ) { |
| 342 | $file_path = array_pop( $file_path ); |
| 343 | $file_name = current( explode( '/', $file_path ) ); |
| 344 | } |
| 345 | |
| 346 | if ( empty( $file_name ) ) { |
| 347 | return false; |
| 348 | } |
| 349 | |
| 350 | foreach ( $active_plugins as $plugin ) { |
| 351 | if ( false !== strpos( $plugin, $file_name ) ) { |
| 352 | $file_name = $plugin; |
| 353 | break; |
| 354 | } |
| 355 | } |
| 356 | } elseif ( WP_DEBUG ) { |
| 357 | throw new Exception( __( "File path must be added within the {$this->banner_details['name']} add-on in the banner details.", 'give' ) ); |
| 358 | } |
| 359 | |
| 360 | // Check plugin path calculated by addon file path. |
| 361 | if ( empty( $file_name ) && WP_DEBUG ) { |
| 362 | throw new Exception( __( "Empty add-on plugin path for {$this->banner_details['name']} add-on.", 'give' ) ); |
| 363 | } |
| 364 | |
| 365 | } catch ( Exception $e ) { |
| 366 | echo $e->getMessage(); |
| 367 | } |
| 368 | |
| 369 | return $file_name; |
| 370 | } |
| 371 | |
| 372 | } |
| 373 |