Mercurial > SimpleWebPresenter
annotate Sitemap.inc @ 73:947d53f95ccd
Refactor Sitemap into a separate class.
Catch all exceptions in index.php and send a 500 error if nothing else
catches it.
Check response status before submitting to sitemap.
| author | Tom Fredrik "BFG" Klaussen <bfg@blenning.no> |
|---|---|
| date | Fri, 12 Oct 2012 01:06:32 +0200 |
| parents | |
| children | 1d5166aba2c5 |
| 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__); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
7 $cache->includeOnce('common-functions.inc', $baseDir); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
8 $cache->includeOnce('Options.inc', dirname(__FILE__)); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
9 /// @endcond |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
10 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
11 class Sitemap |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
12 { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
13 private $master; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
14 private $options; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
15 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
16 function __construct($path) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
17 $this->master = new DOMDocument(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
18 $this->master->load($path); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
19 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
20 $this->options = new Options($this->master); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
21 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
22 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
23 function genPage() { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
24 /// The final output variable |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
25 $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
|
26 $out .= "\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
27 $out .= '<urlset |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
28 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
|
29 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
|
30 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
|
31 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
|
32 '; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
33 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
34 $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
|
35 $base = substr($base, 0, strrpos($base, '/')); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
36 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
37 $acceptedLanguages = $this->options->getAcceptedLanguages(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
38 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
39 foreach($this->options->getAcceptedLanguages() as $lang) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
40 if ($handle = opendir("${lang}")) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
41 while (false !== ($entry = readdir($handle))) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
42 if (endsWith($entry, '.xml')) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
43 $fentry = "${lang}/${entry}"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
44 $doc = new DOMDocument(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
45 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
46 if (file_exists($fentry)) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
47 $doc->load($fentry); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
48 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
49 $opts = array(); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
50 if (count($acceptedLanguages) > 1) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
51 $opts['lang'] = $lang; |
|
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 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
54 $toplevel = $doc->getElementsByTagName("toplevel"); |
|
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 if($toplevel->length) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
57 $name = substr($entry, 0, -4); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
58 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
59 if ($name != $this->options->getInputDefault('name')) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
60 $opts['name'] = $name; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
61 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
62 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
63 $optstring = opttostring($opts); |
|
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 $location = "${base}/${optstring}"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
66 $headers = getHeaders($location); |
|
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 $location = htmlentities($location); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
69 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
70 $lastmod = $headers["Last-Modified"]; |
|
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 $n = StatusCodes::codeFromHeader($headers['']); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
73 |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
74 if ($n == StatusCodes::HTTP_OK) { |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
75 $lastmod = strtotime($lastmod); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
76 $lastmod = date(DateTime::W3C, $lastmod); |
|
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 $out .= "<url>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
79 $out .= "<loc>${location}</loc>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
80 $out .= "<lastmod>${lastmod}</lastmod>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
81 $out .= "</url>\n"; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
82 } |
|
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 } |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
85 } |
|
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 closedir($handle); |
|
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 } |
|
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 $out .= '</urlset>'; |
|
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 header('Content-type: application/xml'); |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
94 print $out; |
|
947d53f95ccd
Refactor Sitemap into a separate class.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff
changeset
|
95 } |
|
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 ?> |
