self::get_trigger_group(), 'code' => self::get_trigger_code(), 'pri' => self::get_current_trigger('pri'), 'reason' => 'maybe_later', ]); if (!wp_verify_nonce($_REQUEST['nonce'], 'taxopress_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, '_taxopress_reviews_dismissed_triggers', $dismissed_triggers); update_user_meta($user_id, '_taxopress_reviews_last_dismissed', current_time('mysql')); switch($args['reason']) { case 'maybe_later': update_user_meta($user_id, '_taxopress_reviews_last_dismissed', current_time('mysql')); break; case 'am_now': case 'already_did': self::already_did(true); 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); if(empty($key)){ $return = $trigger; }elseif(isset($trigger[$key])){ $return = $trigger[$key]; }else { $return = false; } return $return; } /** * 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, '_taxopress_reviews_dismissed_triggers', true); if (!$dismissed_triggers) { $dismissed_triggers = []; } 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, '_taxopress_reviews_already_did', true); return true; } return (bool)get_user_meta($user_id, '_taxopress_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)) { $time_message = __("Hey, you've been using TaxoPress for %s on your site. We hope the plugin has been useful. Please could you quickly leave a 5-star rating on WordPress.org? It really does help to keep TaxoPress growing.", 'simple-tags'); $triggers = apply_filters('taxopress_reviews_triggers', [ 'time_installed' => [ 'triggers' => [ 'one_week' => [ 'message' => sprintf($time_message, __('1 week', 'simple-tags')), 'conditions' => [ strtotime(self::installed_on() . ' +1 week') < time(), ], 'link' => 'https://wordpress.org/support/plugin/simple-tags/reviews/?rate=5#rate-response', 'pri' => 10, ], 'one_month' => [ 'message' => sprintf($time_message, __('1 month', 'simple-tags')), 'conditions' => [ strtotime(self::installed_on() . ' +1 month') < time(), ], 'link' => 'https://wordpress.org/support/plugin/simple-tags/reviews/?rate=5#rate-response', 'pri' => 20, ], 'three_months' => [ 'message' => sprintf($time_message, __('3 months', 'simple-tags')), 'conditions' => [ strtotime(self::installed_on() . ' +3 months') < time(), ], 'link' => 'https://wordpress.org/support/plugin/simple-tags/reviews/?rate=5#rate-response', 'pri' => 30, ], ], 'pri' => 10, ] ]); // Sort Groups uasort($triggers, [__CLASS__, 'rsort_by_priority']); // Sort each groups triggers. foreach ($triggers as $k => $v) { uasort($triggers[$k]['triggers'], [__CLASS__, 'rsort_by_priority']); } } if (isset($group)) { if (!isset($triggers[$group])) { return false; } if (!isset($code)) { $return = $triggers[$group]; } elseif (isset($triggers[$group]['triggers'][$code])) { $return = $triggers[$group]['triggers'][$code]; } else { $return = false; } return $return; } return $triggers; } /** * Render admin notices if available. */ public static function admin_notices() { if (self::hide_notices()) { return; } $tigger = self::get_current_trigger(); ?>
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, '_taxopress_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; } } } Taxopress_Modules_Reviews::init();