script_version; } /** * Get current directory path * * @return string */ public function get_script_location() { return __FILE__; } public function set_plugin($link_title, $weblink = 'https://wpmet.com/') { $this->plugin_link[] = [ $link_title, $weblink ]; return $this; } public function call() { add_action('wp_dashboard_setup', [$this, 'show_story_widget'], 111); } private function in_whitelist($conf, $list) { $match = $conf->data->whitelist; if (empty($match)) { return true; }; $match_arr = explode(',', $match); foreach ($list as $word) { if (in_array($word, $match_arr)) { return true; } } return false; } private function in_blacklist($conf, $list) { $match = $conf->data->blacklist; if (empty($match)) { return false; }; $match_arr = explode(',', $match); foreach ($match_arr as $idx => $item) { $match_arr[$idx] = trim($item); } foreach ($list as $word) { if (in_array($word, $match_arr)) { return true; } } return false; } public function set_title($title = '') { $this->title = $title; return $this; } public function is_test($is_test = false) { if ($is_test === true) { $this->check_interval = 1; } return $this; } public function set_text_domain($text_domain) { $this->text_domain = $text_domain; return $this; } public function set_filter($filter_string) { $this->filter_string = $filter_string; return $this; } public function set_api_url($url) { $this->api_url = $url; return $this; } public function set_plugin_screens($screen) { $this->plugin_screens[] = $screen; return $this; } private function set_stories($story) { $filter = [$this->text_domain]; foreach (get_option('active_plugins') as $plugin) { $temp = pathinfo($plugin); if(!empty($temp)) { $filter[] = trim($temp['filename']); } } if (isset($this->stories[$story->id])) { return; } // if start and endtime is set, check current time is inside the timeframe if ((!empty($story->start) && !empty($story->end)) && (intval($story->start) > time() || intval($story->end) < time())) { return; } if(empty(array_intersect($filter, $story->plugins))) { return; } $this->stories[$story->id] = [ 'id' => $story->id, 'title' => $story->title, 'description' => $story->description, 'type' => $story->type, 'priority' => $story->priority, 'story_link' => $story->data->story_link, 'story_image' => $story->data->story_image, ]; } private function get_stories() { $this->data = get_option($this->text_domain . '__stories_data'); $this->data = $this->data == '' ? [] : $this->data; $this->last_check = get_option($this->text_domain . '__stories_last_check'); $this->last_check = empty($this->last_check) ? 0 : $this->last_check; if (($this->check_interval + $this->last_check) < time()) { $response = wp_remote_get($this->api_url . 'cache/stories.json?nocache=' . time(), [ 'timeout' => 10, 'httpversion' => '1.1', ] ); if (!is_wp_error($response) && isset($response['body']) && $response['body'] != '') { $response = json_decode($response['body']); if (!empty($response)) { $this->data = $response; update_option($this->text_domain . '__stories_last_check', time()); update_option($this->text_domain . '__stories_data', $this->data); } return; } } } public function show_story_widget() { $this->get_stories(); if (!empty($this->data->error)) { return; } if (empty($this->data)) { return; } $list = []; if (!empty($this->filter_string)) { $list = explode(',', $this->filter_string); foreach ($list as $idx => $item) { $list[$idx] = trim($item); } $list = array_filter($list); } foreach ($this->data as $story) { if (!empty($list) && $this->in_blacklist($story, $list)) { continue; } $this->set_stories($story); } if(empty($this->stories)) { return; } $this->title = (isset($this->title) && !empty($this->title) ? $this->title . ' ' : '') . 'Stories'; wp_add_dashboard_widget( 'wpmet-stories', __( 'Wpmet Stories', 'metform' ), [ $this, 'show' ], null, null, 'normal', 'high' ); // Move our widget to top. global $wp_meta_boxes; $dashboard = $wp_meta_boxes['dashboard']['normal']['high']; $ours = [ 'wpmet-stories' => $dashboard['wpmet-stories'], ]; $wp_meta_boxes['dashboard']['normal']['high'] = array_merge( $ours, $dashboard ); } public function show() { usort($this->stories, function ($a, $b) { if ($a['priority']==$b['priority']) { return 0; } return ($a['priority'] < $b['priority']) ? -1 : 1; }); include_once 'views/template.php'; } /** * Crosscheck if Story library will be shown at current WP admin page or not * * @param string $b_screen * @param string $screen_id * * @return boolean */ public function is_correct_screen_to_show($b_screen, $screen_id) { if (in_array($b_screen, [$screen_id, 'all_page'])) { return true; } if ($b_screen == 'plugin_page') { return in_array($screen_id, $this->plugin_screens); } return false; } /** * Define singleton instance * * @var [type] */ private static $instance; public static function instance($text_domain = '') { if(!self::$instance) { self::$instance = new static(); } return self::$instance->set_text_domain($text_domain); } } endif;