self::get_trigger_group(), 'code' => self::get_trigger_code(), 'pri' => self::get_current_trigger( 'pri' ), 'reason' => 'maybe_later', ) ); if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'wpdirectorykit_review_action' ) ) { wp_send_json_error(); } try { $user_id = get_current_user_id(); $dismissed_triggers = self::dismissed_triggers(); $dismissed_triggers[ $args['group'] ] = $args['pri']; update_user_meta( $user_id, '_wpdirectorykit_reviews_dismissed_triggers', $dismissed_triggers ); update_user_meta( $user_id, '_wpdirectorykit_reviews_last_dismissed', current_time( 'mysql' ) ); switch ( $args['reason'] ) { case 'maybe_later': update_user_meta( $user_id, '_wpdirectorykit_reviews_last_dismissed', current_time( 'mysql' ) ); break; case 'am_now': case 'already_did': self::already_did( true ); break; case 'improve_suggestion': break; } wp_send_json_success(); } catch ( Exception $e ) { wp_send_json_error( $e ); } } /** * @return int|string */ public static function get_trigger_group() { static $selected; if ( ! isset( $selected ) ) { $dismissed_triggers = self::dismissed_triggers(); $triggers = self::triggers(); foreach ( $triggers as $g => $group ) { foreach ( $group['triggers'] as $t => $trigger ) { if ( ! in_array( false, $trigger['conditions'] ) && ( empty( $dismissed_triggers[ $g ] ) || $dismissed_triggers[ $g ] < $trigger['pri'] ) ) { $selected = $g; break; } } if ( isset( $selected ) ) { break; } } } return $selected; } /** * @return int|string */ public static function get_trigger_code() { static $selected; if ( ! isset( $selected ) ) { $dismissed_triggers = self::dismissed_triggers(); foreach ( self::triggers() as $g => $group ) { foreach ( $group['triggers'] as $t => $trigger ) { if ( ! in_array( false, $trigger['conditions'] ) && ( empty( $dismissed_triggers[ $g ] ) || $dismissed_triggers[ $g ] < $trigger['pri'] ) ) { $selected = $t; break; } } if ( isset( $selected ) ) { break; } } } return $selected; } /** * @param null $key * * @return bool|mixed|void */ public static function get_current_trigger( $key = null ) { $group = self::get_trigger_group(); $code = self::get_trigger_code(); if ( ! $group || ! $code ) { return false; } $trigger = self::triggers( $group, $code ); return empty( $key ) ? $trigger : ( isset( $trigger[ $key ] ) ? $trigger[ $key ] : false ); } /** * Returns an array of dismissed trigger groups. * * Array contains the group key and highest priority trigger that has been shown previously for each group. * * $return = array( * 'group1' => 20 * ); * * @return array|mixed */ public static function dismissed_triggers() { $user_id = get_current_user_id(); $dismissed_triggers = get_user_meta( $user_id, '_wpdirectorykit_reviews_dismissed_triggers', true ); if ( ! $dismissed_triggers ) { $dismissed_triggers = array(); } return $dismissed_triggers; } /** * Returns true if the user has opted to never see this again. Or sets the option. * * @param bool $set If set this will mark the user as having opted to never see this again. * * @return bool */ public static function already_did( $set = false ) { $user_id = get_current_user_id(); if ( $set ) { update_user_meta( $user_id, '_wpdirectorykit_reviews_already_did', true ); return true; } return (bool) get_user_meta( $user_id, '_wpdirectorykit_reviews_already_did', true ); } /** * Gets a list of triggers. * * @param null $group * @param null $code * * @return bool|mixed|void */ public static function triggers( $group = null, $code = null ) { static $triggers; if ( ! isset( $triggers ) ) { $open_message = __( 'Hey, I noticed you recently hit %d popup views on your site – that’s awesome!. I would very much appreciate if you could quickly give it a 5-star rating on WordPress, just to help us spread the word.', 'wpdirectorykit' ); $time_message = __( "Hey, you've been using WP Directory Kit for %s on your site - I hope that its been helpful. I would very much appreciate if you could quickly give it a 5-star rating on WordPress, just to help us spread the word and motivate us to make it even better.", 'wpdirectorykit' ); $triggers = apply_filters( 'wpdirectorykit_reviews_triggers', array( 'time_installed' => array( 'triggers' => array( 'one_week' => array( 'message' => sprintf( $time_message, __( '1 week', 'wpdirectorykit' ) ), 'conditions' => array( strtotime( self::installed_on() . ' +1 week' ) < time(), ), 'link' => 'https://wordpress.org/support/plugin/wpdirectorykit/reviews/?rate=5#rate-response', 'pri' => 10, ), 'one_month' => array( 'message' => sprintf( $time_message, __( '1 month', 'wpdirectorykit' ) ), 'conditions' => array( strtotime( self::installed_on() . ' +1 month' ) < time(), ), 'link' => 'https://wordpress.org/support/plugin/wpdirectorykit/reviews/?rate=5#rate-response', 'pri' => 20, ), 'three_months' => array( 'message' => sprintf( $time_message, __( '3 months', 'wpdirectorykit' ) ), 'conditions' => array( strtotime( self::installed_on() . ' +3 months' ) < time(), ), 'link' => 'https://wordpress.org/support/plugin/wpdirectorykit/reviews/?rate=5#rate-response', 'pri' => 30, ), ), 'pri' => 10, ), 'open_count' => array( 'triggers' => array( '50_opens' => array( 'message' => sprintf( $open_message, 50 ), 'conditions' => array( get_option( 'wpdirectorykit_total_open_count', 0 ) > 50, ), 'link' => 'https://wordpress.org/support/plugin/wpdirectorykit/reviews/?rate=5#rate-response', 'pri' => 10, ), '100_opens' => array( 'message' => sprintf( $open_message, 100 ), 'conditions' => array( get_option( 'wpdirectorykit_total_open_count', 0 ) > 100, ), 'link' => 'https://wordpress.org/support/plugin/wpdirectorykit/reviews/?rate=5#rate-response', 'pri' => 20, ), '500_opens' => array( 'message' => sprintf( $open_message, 500 ), 'conditions' => array( get_option( 'wpdirectorykit_total_open_count', 0 ) > 500, ), 'link' => 'https://wordpress.org/support/plugin/wpdirectorykit/reviews/?rate=5#rate-response', 'pri' => 30, ), ), 'pri' => 50, ), ) ); // Sort Groups uasort( $triggers, array( __CLASS__, 'rsort_by_priority' ) ); // Sort each groups triggers. foreach ( $triggers as $k => $v ) { uasort( $triggers[ $k ]['triggers'], array( __CLASS__, 'rsort_by_priority' ) ); } } if ( isset( $group ) ) { if ( ! isset( $triggers[ $group ] ) ) { return false; } return ! isset( $code ) ? $triggers[ $group ] : (isset( $triggers[ $group ]['triggers'][ $code ] ) ? $triggers[ $group ]['triggers'][ $code ] : false); } return $triggers; } /** * Render admin notices if available. */ public static function admin_notices() { if ( self::hide_notices() ) { return; } $group = self::get_trigger_group(); $code = self::get_trigger_code(); $pri = self::get_current_trigger( 'pri' ); $tigger = self::get_current_trigger(); // Used to anonymously distinguish unique site+user combinations in terms of effectiveness of each trigger. $uuid = wp_hash( home_url() . '-' . get_current_user_id() ); ?>


~ WP Directory Kit

time(), empty( self::get_trigger_code() ), ); return in_array( true, $conditions ); } /** * Gets the last dismissed date. * * @return false|string */ public static function last_dismissed() { $user_id = get_current_user_id(); return get_user_meta( $user_id, '_wpdirectorykit_reviews_last_dismissed', true ); } /** * Sort array by priority value * * @param $a * @param $b * * @return int */ public static function sort_by_priority( $a, $b ) { if ( ! isset( $a['pri'] ) || ! isset( $b['pri'] ) || $a['pri'] === $b['pri'] ) { return 0; } return ( $a['pri'] < $b['pri'] ) ? - 1 : 1; } /** * Sort array in reverse by priority value * * @param $a * @param $b * * @return int */ public static function rsort_by_priority( $a, $b ) { if ( ! isset( $a['pri'] ) || ! isset( $b['pri'] ) || $a['pri'] === $b['pri'] ) { return 0; } return ( $a['pri'] < $b['pri'] ) ? 1 : - 1; } } wpdirectorykit_Modules_Reviews::init(); ?>