Mercurial > SimpleWebPresenter
annotate Sitemap.inc @ 94:2370f4450983
Document functions and move a few functions to more appropriate places.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 18 Oct 2012 17:33:34 +0200 |
| parents | 8aadd7a23b68 |
| children | 8a9bfbe220ca |
| rev | line source |
|---|---|
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
1 <? |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
2 include_once 'ScriptIncludeCache.inc'; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
3 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
4 /// @cond |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
5 $baseDir = dirname(__FILE__); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
6 $cache = ScriptIncludeCache::instance(__FILE__); |
|
93
8aadd7a23b68
Moved some functionality from common-functions into Http class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
91
diff
changeset
|
7 $cache->includeOnce('Http.inc', $baseDir); |
|
8aadd7a23b68
Moved some functionality from common-functions into Http class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
91
diff
changeset
|
8 $cache->includeOnce('Page.inc', $baseDir); |
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 $cache->includeOnce('common-functions.inc', $baseDir); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 /// @endcond |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 |
|
74
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
12 /** |
|
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
13 * Functionality for generating a sitemap |
|
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
14 */ |
|
78
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
15 class Sitemap extends Page |
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 private $master; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 private $options; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 |
|
74
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
20 /** |
|
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
21 * Constructs a sitemap object from a master document |
|
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
22 * |
|
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
23 * @param $path location of master document |
|
1d5166aba2c5
Documentation fixes.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
73
diff
changeset
|
24 */ |
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
25 function __construct($path) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
26 $this->master = new DOMDocument(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
27 $this->master->load($path); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
28 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
29 $this->options = new Options($this->master); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
30 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
31 |
|
78
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
32 function cacheCheck() |
|
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
33 { |
|
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
34 return false; |
|
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
35 } |
|
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
36 |
|
91
1d4c980f4255
Change the way headers are set.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
86
diff
changeset
|
37 function mayValidate() |
|
1d4c980f4255
Change the way headers are set.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
86
diff
changeset
|
38 { |
|
1d4c980f4255
Change the way headers are set.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
86
diff
changeset
|
39 return false; |
|
1d4c980f4255
Change the way headers are set.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
86
diff
changeset
|
40 } |
|
1d4c980f4255
Change the way headers are set.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
86
diff
changeset
|
41 |
|
78
7c68015b211a
Common source for all page generators.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
74
diff
changeset
|
42 function generateContent() { |
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
43 /// The final output variable |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
44 $out = '<?xml version="1.0" encoding="UTF-8"?>'; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
45 $out .= "\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
46 $out .= '<urlset |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
47 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
48 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
49 xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
50 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
51 '; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
52 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
53 $base = 'http://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
54 $base = substr($base, 0, strrpos($base, '/')); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
55 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
56 $acceptedLanguages = $this->options->getAcceptedLanguages(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
57 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
58 foreach($this->options->getAcceptedLanguages() as $lang) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
59 if ($handle = opendir("${lang}")) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
60 while (false !== ($entry = readdir($handle))) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
61 if (endsWith($entry, '.xml')) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
62 $fentry = "${lang}/${entry}"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
63 $doc = new DOMDocument(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
64 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
65 if (file_exists($fentry)) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
66 $doc->load($fentry); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
67 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
68 $opts = array(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
69 if (count($acceptedLanguages) > 1) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
70 $opts['lang'] = $lang; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
71 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
72 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
73 $toplevel = $doc->getElementsByTagName("toplevel"); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
74 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
75 if($toplevel->length) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
76 $name = substr($entry, 0, -4); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
77 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
78 if ($name != $this->options->getInputDefault('name')) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
79 $opts['name'] = $name; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
80 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
81 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
82 $optstring = opttostring($opts); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
83 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
84 $location = "${base}/${optstring}"; |
|
93
8aadd7a23b68
Moved some functionality from common-functions into Http class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
91
diff
changeset
|
85 $headers = Http::getHeaders($location, 5); |
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
86 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
87 $location = htmlentities($location); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
88 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
89 $lastmod = $headers["Last-Modified"]; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
90 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
91 $n = StatusCodes::codeFromHeader($headers['']); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
92 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
93 if ($n == StatusCodes::HTTP_OK) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
94 $lastmod = strtotime($lastmod); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
95 $lastmod = date(DateTime::W3C, $lastmod); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
96 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
97 $out .= "<url>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
98 $out .= "<loc>${location}</loc>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
99 $out .= "<lastmod>${lastmod}</lastmod>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
100 $out .= "</url>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
101 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
102 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
103 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
104 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
105 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
106 closedir($handle); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
107 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
108 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
109 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
110 $out .= '</urlset>'; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
111 |
|
86
b9654b9c4a66
Make headers a part of the content, rather than setting them directly.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
78
diff
changeset
|
112 $res = new PageContent($out); |
|
91
1d4c980f4255
Change the way headers are set.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
86
diff
changeset
|
113 $res->setHeader('Content-type', 'application/xml'); |
|
86
b9654b9c4a66
Make headers a part of the content, rather than setting them directly.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
78
diff
changeset
|
114 return $res; |
|
73
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
115 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
116 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
117 ?> |
