source: t29-www/lib/host.php @ 347

Last change on this file since 347 was 347, checked in by sven, 7 years ago

Diverse Verbesserungen am Homepagesystem, die bereits lange anstanden.

  • Die Suche ist endlich implementiert, wenngleich auch relativ unschoen mittels einer eingebundenen Google-Suche.

Bugfixes:

  • de/news.php: Syntaxfehler im Neuigkeiten-Menü

Backend-Aenderungen:

  • Englischsprachige Benutzer, die auf die deutsche Seite kommen oder andersrum erhalten einen Hinweis, dass es die andere Sprachversion gibt (noch nicht vollständig implementiert)
  • Es gibt ein besseres Logging-System, welches Client- und Serverausgaben verbindet
  • Das System generiert jetzt selbst Clean-URLs direkt (zumindest aus Menue/Template, Inhalte werden nicht touchiert). Das reduziert die Anzahl der Zugriffe erheblich.
  • Ein paar CSS-Details
  • navigation.xml: "#DUMME-VERLINKUNG"-Einträge entfernt
File size: 3.7 KB
Line 
1<?php
2/**
3 * t29v6 new Hostinfo and Hosthook system.
4 *
5 * Local host.php files in the webroot can hook into t29* php
6 * and js classes without interfering the code. This can be usually
7 * be used for extra svn information.
8 * Hostinfos can also be appended in this file and therefore be
9 * managed centrally.
10 *
11 * webroot/host.php muss have a t29LocalHost extends t29Host class.
12 *
13 **/
14
15abstract class t29Host {
16        const webroot_host_file = '/host.php'; # relative to webroot
17        const webroot_local_host_classname = 't29LocalHost';
18        const env_hidesuffix_name = "T29URLHIDESUFFIX";
19
20
21        /// Some identifier like a FQDN. Must be overwritten!
22        public $hostname = "undefined";
23
24        /**
25         * Factory for creating a t29Host instance automatically
26         * from the current host. This method will decide which
27         * subclass has to be taken.
28         **/
29        static function detect() {
30                $instance = null;
31
32                // check if local host file exists
33                $hostfile = dirname(__FILE__) . '/../' . self::webroot_host_file;
34                if(file_exists($hostfile)) {
35                        include $hostfile;
36                        if(class_exists(self::webroot_local_host_classname)) {
37                                $x = self::webroot_local_host_classname;
38                                $host = new $x;
39                                $host->setup();
40                                return $host;
41                        } else {
42                                print "Warning: Hostfile $hostfile does not contain class ".self::webroot_local_host_classname."\n";
43                        }
44                }
45               
46                // Quick and Dirty: Load hostname specific instances
47                switch($_SERVER['SERVER_NAME']) {
48                        case 'heribert':
49                        case 'localhost':
50                                $localhost = new t29HeribertHost;
51                                $localhost->setup();
52                                return $localhost;
53                }
54               
55                $publichost = new t29PublicHost;
56                $publichost->setup();
57                return $publichost;
58        }
59       
60        /**
61         * A constructing method which is always called by the t29Host::detect() factory.
62         * It does some general stuff.
63         * Of course you can always write your own setup() class - it's just your __constructor.
64         * The constructor will of course be called before the setup() method.
65         **/
66        function setup() {
67                $this->is_rewriting_host = isset($_SERVER[self::env_hidesuffix_name]);
68        }
69       
70        function check_url_rewrite() {
71                if($this->is_rewriting_host) {
72                        $path = $_SERVER['REQUEST_URI'];
73                        $newpath = $this->rewrite_link($path);
74                        if($path != $newpath) {
75                                header('HTTP/1.1 301 Moved Permanently');
76                                header('Location: '.$newpath);
77                                return $newpath;
78                        }
79                }
80                return null;
81        }
82
83        public function __toString() {
84                return 't29v6/'.$this->hostname;
85        }
86       
87        function rewrite_link($link_target) {
88                // rewrite link if neccessary. This function will be called hundreds of times
89                // while rendering a page, rewriting all links found.
90                if($this->is_rewriting_host) {
91                        $new_target = preg_replace('/\.(?:php|shtml?)([#?].+)?$/i', '\\1', $link_target);
92                        return $new_target;
93                } else {
94                        // just the identity function
95                        return $link_target;
96                }
97               
98        }
99       
100        function get_shorthand_link_returner() {
101                $t = $this;
102                return function($link_target)use($t) { return $t->rewrite_link($link_target); };
103        }
104
105        abstract function fillup_template_conf(&$template_conf);
106}
107
108class t29PublicHost extends t29Host {
109        /**
110         * This is actually the default public host which should be loaded
111         * at www.technikum29.de.
112         **/
113        public $hostname = "public";
114        function fillup_template_conf(&$template_conf) {}
115}
116
117/**
118 * Host auf heriberts Rechner; dort wird ein weiterer Metatag mit id eingefuehrt,
119 * mit dem seine Firefox Editthispage-Extension die Seite bearbeiten kann.
120 **/
121class t29HeribertHost extends t29Host {
122        public $hostname = "heribert";
123
124        function fillup_template_conf(&$template_conf) {
125                $template_conf['header_prepend'][] = 
126                        '<meta name="t29.localfile" content="'.$_SERVER['SCRIPT_FILENAME'].'" id="localFileSource">';
127        }
128}
Note: See TracBrowser for help on using the repository browser.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License