1 <?php
if(!defined('WTRMLN_IS')) die;
2 /********************************************************************
6 Copyright 2008 Radosław Pietruszewski
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 version 2 as published by the Free Software Foundation.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 ********************************************************************/
23 header("Content-Type: text/html; charset=UTF-8");
25 ########################################
27 ########################################
29 include(WTRMLN_LIBS
. 'url.php');
30 include(WTRMLN_LIBS
. 'db.php');
31 include(WTRMLN_LIBS
. 'loader.php');
32 include(WTRMLN_LIBS
. 'plugins_handle.php');
33 include(WTRMLN_LIBS
. 'controller.php');
34 include(WTRMLN_LIBS
. 'model.php');
35 include(WTRMLN_LIBS
. 'plugin.php');
37 include(WTRMLN_HELPERS
. 'helpers.php');
39 ////////////////////////////////////////
42 /* zamiast die i exit w przypadku poważnego błędu.
43 ************************/
45 function panic($text = 'noname error')
47 die('<div style="position: absolute;
54 <big>Błąd krytyczny uniemożliwiający kontynuowanie.</big><br>Debug: ' . $text . '</div>');
60 * public static string[] $metaSrc
62 * dane meta (tagi z sekcji <head>)
64 * $metaSrc = array(string $head_element[, $head_element[, ... ]])
65 * $head_element - pojedynczy element do umieszczenia w sekcji <head>
67 public static $metaSrc = array();
70 * public void Watermelon(string $dbHost, string $dbUser, string $dbPass, string $dbName,
71 * string $dbPrefix, array $autoload, string[] $metaSrc)
73 * Konstuktor. Odpala najważniejsze biblioteki, odpowiedni kontroler
76 * string $dbHost - host bazy danych
77 * string $dbUser - użytkownik bazy danych
78 * string $dbPass - hasło do bazy danych
79 * string $dbName - nazwa bazy danych
80 * string $dbPrefix - prefiks do tabel
81 * array $autoload - pluginy i kod związany z nimi do automatycznego załadowania
82 * string[] $metaSrc - dane do wstawienia w sekcji <head>
84 * $autoload = array(array(string $plugin_name, string $eval)[, array(string $plugin_name, string $eval)[, ... ]]
85 * $plugin_name - nazwa plugina
86 * $eval - związany z tym pluginem kod do wykonania
88 * $metaSrc = array(string $head_element[, $head_element[, ... ]])
89 * $head_element - pojedynczy element do umieszczenia w sekcji <head>
92 public function Watermelon($dbHost, $dbUser, $dbPass, $dbName, $dbPrefix, array $autoload, array $metaSrc)
94 $url = new URL(Config
::$defaultController);
96 $db->connect($dbHost, $dbUser, $dbPass, $dbName, $dbPrefix);
98 $this->LoadPlugins($autoload);
100 self
::$metaSrc = $metaSrc;
102 $content = $this->loadController();
104 $this->generatePage($content);
108 * private void loadController()
110 * ładuje odpowiedni kontroler (wykonuje pracę Front Controllera)
113 private function loadController()
115 // zamieniamy _ na /, tak aby można było robić kontrolery w podfolderach
116 // (przydatne, kiedy mamy moduł składający się z kilku kontrolerów, np.
117 // duży skrypt forum)
119 $controllerPath = str_replace('_', '/', URL
::$class);
121 $controllerPath = WTRMLN_CONTROLLERS
. $controllerPath . '.php';
123 // sprawdzanie, czy istnieje plik controllera
125 if(file_exists($controllerPath))
127 include $controllerPath;
129 // wywalamy dwa pierwsze segmenty URL-a (kontroler i jego funkcja składowa/metoda)
131 array_shift(URL
::$segments);
132 array_shift(URL
::$segments);
136 //jeśli nie można znaleźć kontrolera, niech Pages przejmie stery
137 include WTRMLN_CONTROLLERS
. 'pages.php';
139 $controller = new pages();
141 URL
::$method = 'index';
142 URL
::$class = 'pages';
145 // sprawdzanie, czy istnieje klasa controllera
147 if(class_exists(URL
::$class))
149 $controller = new URL
::$class();
153 panic('Nie moge znalesc klasy podanego controllera (' . URL
::$class . ')');
156 // sprawdzanie czy istnieje dana funkcja składowa controllera.
158 if(!method_exists($controller, URL
::$method))
160 panic('Nie moge znalesc podanej funkcji składowej controllera (' . URL
::$method . ')');
163 // przystepujemy do roboty
165 $controller->{URL
::$method}();
167 $content = ob_get_contents(); //wyciagamy dane z bufora wyjścia
174 * private void LoadPlugins(array $plugins)
176 * Ładuje pluginy i wykonuje kod związany z tymi pluginami
178 * $plugins = array(array(string $plugin_name, string $eval)[, array(string $plugin_name, string $eval)[, ... ]]
179 * $plugin_name - nazwa plugina
180 * $eval - związany z tym pluginem kod do wykonania
183 private function LoadPlugins(array $plugins)
185 foreach($plugins as $plugin)
187 list($plugin_name, $eval) = $plugin;
189 if(file_exists(WTRMLN_PLUGINS
. $plugin_name . '.php'))
191 include(WTRMLN_PLUGINS
. $plugin_name . '.php');
199 * private void generatePage(string $content)
201 * ostatecznie generuje stronę (dodaje znaczniki do head, oczyszcza treść itd.)
203 * string $content - treść wygenerowana przez kontroler
206 private function generatePage($content)
208 // umożliwiamy w prosty sposób tworzenie ścieżek do podstron
210 $content = str_replace('href="$/', 'href="' . WTRMLN_SITEURL
, $content);
211 $content = str_replace('action="$/', 'action="' . WTRMLN_SITEURL
, $content);
213 // preparujemy zawartość <title> :)
215 $siteTitle = (defined('WTRMLN_H1') ? WTRMLN_H1
. ' » ' : '') . WTRMLN_SITENAME
;
219 $metaSrc = self
::$metaSrc;
221 // żeby array_unshift się nie czepiał,
222 // gdyby wcześniej nie było żadnych elementów
229 // wsadzamy na początek tablicy <title>
231 array_unshift($metaSrc, '<title>' . $siteTitle . '</title>');
233 // zmieniamy nazwy, żeby skin.php wiedział odzochodzi
235 $_w_metaSrc = $metaSrc;
236 $_w_content = $content;
240 include WTRMLN_THEMEPATH
. 'skin.php';
244 new Watermelon($_w_dbHost, $_w_dbUser, $_w_dbPass, $_w_dbName, $_w_dbPrefix, $_w_autoload, $_w_metaSrc);
246 // dla bezpieczeństwa usuwamy dane konfiguracji bazy danych