PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Models / Page.php
independent-analytics / IAWP / Models Last commit date
Campaign.php 10 months ago Campaign_Landing_Page.php 9 months ago Campaign_UTM_Campaign.php 9 months ago Campaign_UTM_Medium.php 9 months ago Campaign_UTM_Source.php 9 months ago ClickWhale_Link_Page.php 1 year ago Device.php 10 months ago Form.php 1 year ago Geo.php 10 months ago Journey.php 5 months ago Link.php 8 months ago Link_Pattern.php 10 months ago Model.php 6 months ago Page.php 4 days ago Page_Author_Archive.php 2 years ago Page_Date_Archive.php 2 years ago Page_Home.php 2 years ago Page_Not_Found.php 4 days ago Page_Post_Type_Archive.php 1 year ago Page_Search.php 2 years ago Page_Singular.php 4 days ago Page_Term_Archive.php 2 years ago Page_Virtual.php 1 year ago Referrer.php 6 months ago Referrer_Type.php 9 months ago Universal_Model_Columns.php 1 year ago Visitor.php 9 months ago
Page.php
285 lines
1 <?php
2
3 namespace IAWP\Models;
4
5 use IAWP\Illuminate_Builder;
6 use IAWP\Query;
7 use IAWP\Tables;
8 use IAWP\Utils\Request;
9 use IAWPSCOPED\Illuminate\Support\Str;
10 /** @internal */
11 abstract class Page extends \IAWP\Models\Model
12 {
13 use \IAWP\Models\Universal_Model_Columns;
14 protected $row;
15 private $id;
16 private $resource;
17 private $entrances;
18 private $exits;
19 private $exit_percent;
20 private $is_deleted;
21 private $cache;
22 private $cached_title;
23 private $cached_type;
24 private $cached_type_label;
25 private $cached_icon;
26 private $cached_author_id;
27 private $cached_author;
28 private $cached_avatar;
29 private $cached_date;
30 private $cached_category;
31 public function __construct($row)
32 {
33 $this->row = $row;
34 $this->id = $row->id ?? null;
35 $this->resource = $row->resource ?? null;
36 $this->entrances = $row->entrances ?? 0;
37 $this->exits = $row->exits ?? 0;
38 $this->exit_percent = $row->exit_percent ?? 0;
39 // If $row is a full row from the database, use that for the cache
40 // Eventually, I'd like to avoid selecting resources.* and just get the cached_.*
41 // fields for the rows that are going to be shown.
42 if (\is_string($row->cached_title ?? null)) {
43 $this->cache = $row;
44 }
45 }
46 protected abstract function resource_key();
47 protected abstract function resource_value();
48 protected abstract function calculate_is_deleted() : bool;
49 protected abstract function calculate_url();
50 protected abstract function calculate_title();
51 protected abstract function calculate_type();
52 protected abstract function calculate_type_label();
53 protected abstract function calculate_icon();
54 protected abstract function calculate_author();
55 protected abstract function calculate_author_id();
56 protected abstract function calculate_avatar();
57 protected abstract function calculate_date();
58 protected abstract function calculate_category();
59 public function id() : int
60 {
61 return $this->id;
62 }
63 public function table_type() : string
64 {
65 return 'views';
66 }
67 public function entrances() : int
68 {
69 return $this->entrances;
70 }
71 public function exits() : int
72 {
73 return $this->exits;
74 }
75 public function exit_percent() : float
76 {
77 return $this->exit_percent;
78 }
79 /**
80 * By default, pages don't have the ability to have comments.
81 * This can be overridden by a subclass to return an actual comments value.
82 *
83 * @return int|null
84 */
85 public function comments() : ?int
86 {
87 return null;
88 }
89 public function get_singular_id() : ?int
90 {
91 if ($this->resource_key() !== 'singular_id') {
92 return null;
93 }
94 return $this->resource_value();
95 }
96 public final function is_deleted() : bool
97 {
98 if (!\is_null($this->is_deleted)) {
99 return $this->is_deleted;
100 }
101 $this->is_deleted = $this->calculate_is_deleted();
102 return $this->is_deleted;
103 }
104 public final function update_cache() : void
105 {
106 $url = $this->calculate_url();
107 $cache = ['cached_title' => $this->calculate_title(), 'cached_url' => \is_string($url) ? Str::limit($url, 2083) : $url, 'cached_type' => $this->calculate_type(), 'cached_type_label' => $this->calculate_type_label(), 'cached_author_id' => $this->calculate_author_id(), 'cached_author' => $this->calculate_author(), 'cached_date' => $this->calculate_date(), 'cached_category' => !empty($this->calculate_category()) ? \implode(', ', $this->calculate_category()) : null];
108 if ($this instanceof \IAWP\Models\Page_Virtual) {
109 // Allow site owners to override page values such as the title, author, etc
110 $modified_cache = \apply_filters('iawp_override_virtual_page_details', $cache, $this->resource_value());
111 if (\is_array($modified_cache)) {
112 $cache = $modified_cache;
113 }
114 }
115 try {
116 Illuminate_Builder::new()->from(Tables::resources())->where($this->resource_key(), '=', $this->resource_value())->update($cache);
117 } catch (\PDOException $e) {
118 // Do nothing
119 }
120 }
121 public final function url($full_url = \false)
122 {
123 if ($this->use_cache()) {
124 $url = $this->cache->cached_url;
125 } else {
126 $url = $this->calculate_url();
127 }
128 if (\is_null($url)) {
129 return null;
130 }
131 if ($full_url) {
132 return $url;
133 } else {
134 return Request::path_relative_to_site_url($url);
135 }
136 }
137 public final function title()
138 {
139 if ($this->use_cache()) {
140 return $this->cache->cached_title;
141 }
142 if (\is_null($this->cached_title)) {
143 $this->cached_title = $this->calculate_title();
144 }
145 return \strlen($this->cached_title) > 0 ? $this->cached_title : '(no title)';
146 }
147 public final function type($raw = \false)
148 {
149 if ($raw) {
150 if ($this->use_cache()) {
151 return $this->cache->cached_type;
152 }
153 if (\is_null($this->cached_type)) {
154 $this->cached_type = $this->calculate_type();
155 }
156 return $this->cached_type;
157 } else {
158 if ($this->use_cache()) {
159 return $this->cache->cached_type_label;
160 }
161 if (\is_null($this->cached_type_label)) {
162 $this->cached_type_label = $this->calculate_type_label();
163 }
164 return $this->cached_type_label;
165 }
166 }
167 public final function icon()
168 {
169 if (\is_null($this->cached_icon)) {
170 $this->cached_icon = $this->calculate_icon();
171 }
172 return $this->cached_icon;
173 }
174 public final function author()
175 {
176 if ($this->use_cache()) {
177 return $this->cache->cached_author;
178 }
179 if (\is_null($this->cached_author)) {
180 $this->cached_author = $this->calculate_author();
181 }
182 return $this->cached_author;
183 }
184 public final function author_id()
185 {
186 if ($this->use_cache()) {
187 return $this->cache->cached_author_id;
188 }
189 if (\is_null($this->cached_author_id)) {
190 $this->cached_author_id = $this->calculate_author_id();
191 }
192 return $this->cached_author_id;
193 }
194 public final function avatar()
195 {
196 if (\is_null($this->cached_avatar)) {
197 $this->cached_avatar = $this->calculate_avatar();
198 }
199 return $this->cached_avatar;
200 }
201 public final function date()
202 {
203 if (\is_null($this->cached_date)) {
204 $this->cached_date = $this->calculate_date();
205 }
206 return $this->cached_date;
207 }
208 public final function formatted_category() : ?string
209 {
210 $categories = $this->category(\false);
211 $category_names = [];
212 if (\count($categories) === 0) {
213 return null;
214 }
215 foreach ($categories as $category_id) {
216 $category = \get_the_category_by_ID($category_id);
217 if (!\is_wp_error($category)) {
218 $category_names[] = $category;
219 }
220 }
221 return \implode(', ', $category_names);
222 }
223 public final function category($formatted = \true)
224 {
225 if ($formatted === \true) {
226 return $this->formatted_category();
227 }
228 if (\is_null($this->cached_category)) {
229 $this->cached_category = $this->calculate_category();
230 }
231 return $this->cached_category;
232 }
233 public function examiner_title() : ?string
234 {
235 return $this->title();
236 }
237 public function examiner_url() : string
238 {
239 return \IAWPSCOPED\iawp_dashboard_url(['tab' => 'views', 'examiner' => $this->id()]);
240 }
241 private function use_cache() : bool
242 {
243 if (!\is_null($this->cache)) {
244 return \true;
245 }
246 $deleted = $this->is_deleted();
247 if ($deleted) {
248 $this->cache = $this->get_cache();
249 }
250 return $deleted;
251 }
252 private function get_cache()
253 {
254 global $wpdb;
255 $resources_table = Query::get_table_name(Query::RESOURCES);
256 $resource_key = $this->resource_key();
257 $resource_value = $this->resource_value();
258 $query = $wpdb->prepare("SELECT * FROM {$resources_table} WHERE {$resource_key} = %s", $resource_value);
259 return $wpdb->get_row($query);
260 }
261 public static function from_row(object $row) : \IAWP\Models\Page
262 {
263 switch ($row->resource) {
264 case 'singular':
265 return new \IAWP\Models\Page_Singular($row);
266 case 'author_archive':
267 return new \IAWP\Models\Page_Author_Archive($row);
268 case 'date_archive':
269 return new \IAWP\Models\Page_Date_Archive($row);
270 case 'post_type_archive':
271 return new \IAWP\Models\Page_Post_Type_Archive($row);
272 case 'term_archive':
273 return new \IAWP\Models\Page_Term_Archive($row);
274 case 'search':
275 return new \IAWP\Models\Page_Search($row);
276 case 'home':
277 return new \IAWP\Models\Page_Home($row);
278 case 'virtual_page':
279 return \IAWP\Models\Page_Virtual::from($row);
280 default:
281 return new \IAWP\Models\Page_Not_Found($row);
282 }
283 }
284 }
285