Completed
Branch 0.3.0 (b16461)
by Anton
04:03
created

Sitemap   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
c 1
b 0
f 0
lcom 0
cbo 5
dl 0
loc 60
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getLastModified() 0 10 3
A getPages() 0 12 4
B handle() 0 27 3
1
<?php
2
3
namespace Handlers\Tools {
4
5
	use Frames, Modules\Entitizer, Modules\Settings, Utils\Tools, Arr, Date, DB;
6
7
	class Sitemap extends Frames\Tools\Sitemap {
8
9
		# Get last modified
10
11
		private function getLastModified() {
12
13
			$selection = 'MAX(time_modified) as last_modified';
14
15
			if (!(DB::select(TABLE_PAGES, $selection) && (DB::last()->rows === 1))) return 0;
16
17
			# ------------------------
18
19
			return intval(DB::last()->row()['last_modified']);
20
		}
21
22
		# Get pages
23
24
		private function getPages() {
25
26
			$selection = ['slug', 'time_modified'];
27
28
			$condition = ['visibility' => VISIBILITY_PUBLISHED, 'access' => ACCESS_PUBLIC, 'locked' => 0];
29
30
			if (!(DB::select(TABLE_PAGES, $selection, $condition, 'slug') && DB::last()->status)) return;
31
32
			# ------------------------
33
34
			while (null !== ($page = DB::last()->row())) yield Entitizer::create(TABLE_PAGES, $page);
35
		}
36
37
		# Handle request
38
39
		protected function handle() {
40
41
			# Create sitemap
42
43
			$sitemap = new Tools\Sitemap();
44
45
			# Get last modification time
46
47
			if ($sitemap->load($this->getLastModified())) return $sitemap;
48
49
			# Fill sitemap
50
51
			foreach ($this->getPages() as $page) {
52
53
				$loc = $page->canonical; $lastmod = Date::get(DATE_FORMAT_W3C, $page->time_modified);
54
55
				$sitemap->add($loc, $lastmod, FREQUENCY_WEEKLY, 0.5);
56
			}
57
58
			# Save sitemap
59
60
			$sitemap->save();
61
62
			# ------------------------
63
64
			return $sitemap;
65
		}
66
	}
67
}
68