PluginProbe
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance / 2.2.11
WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance v2.2.11
4.6.1 4.6.0 4.5.5 4.5.4 4.5.3 4.5.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.5 3.2.6 3.2.7 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.7.0 3.7.1 3.8.0 All 110 releases
wp-optimize / includes / updraft-notices.php

updraft-notices.php in WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance 2.2.11, at includes/updraft-notices.php

154 lines 5.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!defined('ABSPATH')) die('No direct access allowed');
4
5 /**
6 * If we ever change the API of the Updraft_Notices class, then we'll need to rename and version it, e.g. Updraft_Notices_1_0, because otherwise a plugin may find that it's loaded an older instance than it wanted from another plugin.
7 */
8 abstract class Updraft_Notices_1_0 {
9
10 protected $notices_content;
11
12 /**
13 * These variables are just short-hands to be used in advert content.
14 *
15 * @var array
16 */
17 protected $dashboard_top = array('top');
18
19 protected $dashboard_top_or_report = array('top', 'report', 'report-plain');
20
21 protected $dashboard_bottom_or_report = array('bottom', 'report', 'report-plain');
22
23 protected $anywhere = array('top', 'bottom', 'report', 'report-plain');
24
25 protected $autobackup = array('autobackup');
26
27 protected $autobackup_bottom_or_report = array('autobackup', 'bottom', 'report', 'report-plain');
28
29 protected function populate_notices_content() {
30 // Global adverts that appear in all products will be returned to the child to display.
31 return array();
32 }
33
34 /**
35 * Call this method to setup the notices.
36 */
37 abstract protected function notices_init();
38
39 public function is_plugin_installed($product = null, $also_require_active = false) {
40 if ($also_require_active) return class_exists($product);
41 if (!function_exists('get_plugins')) include_once(ABSPATH.'wp-admin/includes/plugin.php');
42 $plugins = get_plugins();
43 $product_file = false;
44 foreach ($plugins as $key => $value) {
45 if ($value['TextDomain'] == $product) {
46 // We have found the plugin so return false so that we do not display this advert.
47 return false;
48 }
49 }
50 return true;
51 }
52
53 protected function translation_needed($plugin_base_dir, $product_name) {
54 $wplang = get_locale();
55 if (strlen($wplang) < 1 || 'en_US' == $wplang || 'en_GB' == $wplang) return false;
56 if (defined('WP_LANG_DIR') && is_file(WP_LANG_DIR.'/plugins/'.$product_name.'-'.$wplang.'.mo')) return false;
57 if (is_file($plugin_base_dir.'/languages/'.$product_name.'-'.$wplang.'.mo')) return false;
58 return true;
59 }
60
61 protected function url_start($html_allowed = false, $url, $https = false, $website_home = null) {
62 $proto = ($https) ? 'https' : 'http';
63 if (strpos($url, $website_home) !== false) {
64 return (($html_allowed) ? "<a href=".apply_filters(str_replace('.', '_', $website_home).'_link', $proto.'://'.$url).">" : "");
65 } else {
66 return (($html_allowed) ? '<a href="'.$proto.'://'.$url.'">' : "");
67 }
68 }
69
70 protected function url_end($html_allowed, $url, $https = false) {
71 $proto = (($https) ? 'https' : 'http');
72 return (($html_allowed) ? '</a>' : " (".$proto."://".$url.")");
73 }
74
75 public function do_notice($notice = false, $position = 'top', $return_instead_of_echo = false) {
76
77 $this->notices_init();
78
79 if (false === $notice) $notice = apply_filters('updraft_notices_force_id', false, $this);
80
81 $notice_content = $this->get_notice_data($notice, $position);
82
83 if (false != $notice_content) {
84 return $this->render_specified_notice($notice_content, $return_instead_of_echo, $position);
85 }
86 }
87
88 /**
89 * This method will return a notice ready for display.
90 *
91 * @param boolean $notice Sends True or False if there are notices to show.
92 * @param string $position Which screen position the notice is.
93 * @return array Returns Notice data.
94 */
95 protected function get_notice_data($notice = false, $position = 'top') {
96
97 // If a specific notice has been passed to this method then return that notice.
98 if ($notice) {
99 if (!isset($this->notices_content[$notice])) return false;
100
101 // Does the notice support the position specified?
102 if (isset($this->notices_content[$notice]['supported_positions']) && !in_array($position, $this->notices_content[$notice]['supported_positions'])) return false;
103
104 // First check if the advert passed can be displayed and hasn't been dismissed, we do this by checking what dismissed value we should be checking.
105 $dismiss_time = $this->notices_content[$notice]['dismiss_time'];
106
107 $dismiss = $this->check_notice_dismissed($dismiss_time);
108
109 if ($dismiss) return false;
110
111 return $this->notices_content[$notice];
112 }
113
114 // Create an array to add non-seasonal adverts to so that if a seasonal advert can't be returned we can choose a random advert from this array.
115 $available_notices = array();
116
117 // If Advert wasn't passed then next we should check to see if a seasonal advert can be returned.
118 foreach ($this->notices_content as $notice_id => $notice_data) {
119 // Does the notice support the position specified?
120 if (isset($this->notices_content[$notice_id]['supported_positions']) && !in_array($position, $this->notices_content[$notice_id]['supported_positions'])) continue;
121
122 // If the advert has a validity function, then require the advert to be valid.
123 if (!empty($notice_data['validity_function']) && !call_user_func(array($this, $notice_data['validity_function']))) continue;
124
125
126 if (isset($notice_data['valid_from']) && isset($notice_data['valid_to'])) {
127 if ($this->skip_seasonal_notices($notice_data)) return $notice_data;
128 } else {
129 $dismiss_time = $this->notices_content[$notice_id]['dismiss_time'];
130 $dismiss = $this->check_notice_dismissed($dismiss_time);
131
132 if (!$dismiss) $available_notices[$notice_id] = $notice_data;
133 }
134 }
135
136 if (empty($available_notices)) return false;
137
138 // If a seasonal advert can't be returned then we will return a random advert.
139 // Using shuffle here as something like rand which produces a random number and uses that as the array index fails, this is because in future an advert may not be numbered and could have a string as its key which will then cause errors.
140 shuffle($available_notices);
141 return $available_notices[0];
142 }
143
144 protected function skip_seasonal_notices($notice_data) {
145 return false;
146 }
147
148 public function get_affiliate_id() {
149 return $this->self_affiliate_id;
150 }
151
152 abstract protected function check_notice_dismissed($dismiss_time);
153 }
154