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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ?>