From 7bd9efcf5eb3bf96a679db33c6011e71e7ef2c97 Mon Sep 17 00:00:00 2001 From: Radex Date: Thu, 7 Aug 2008 17:39:16 +0200 Subject: [PATCH] =?utf8?q?male=20zmiany=20w=20konfiguracji,=20bazie=20dany?= =?utf8?q?ch,=20pare=20nowych=20funkcji=20w=20helpers,=20refaktoryzacja=20?= =?utf8?q?libs=C3=B3w=20(pozbywanie=20si=C4=99=20singletona)=20i=20par?= =?utf8?q?=C4=99=20mniejszych=20rzeczy?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- cms/INSTALL | 18 +- cms/config_template.php | 52 ++--- cms/index.php | 23 ++- cms/sqldump.sql | 62 +++--- cms/wtrmln/helpers/helpers.php | 80 ++++++-- cms/wtrmln/libs/controller.php | 4 +- cms/wtrmln/libs/db.php | 22 ++- cms/wtrmln/libs/model.php | 4 +- cms/wtrmln/libs/plugin.php | 2 +- cms/wtrmln/libs/url.php | 317 ++++++++++++++++++++++--------- cms/wtrmln/libs/viewtags.php | 18 +- cms/wtrmln/modules/controllers/login.php | 6 +- cms/wtrmln/modules/plugins/user.php | 6 +- cms/wtrmln/system.php | 91 ++++----- cms/wtrmln/themes/wcmslay/index.php | 5 +- cms/wtrmln/themes/wcmslay/skin.php | 28 ++- 16 files changed, 493 insertions(+), 245 deletions(-) diff --git a/cms/INSTALL b/cms/INSTALL index 72e939d..df107e2 100644 --- a/cms/INSTALL +++ b/cms/INSTALL @@ -99,8 +99,9 @@ $_w_hashAlgo Algorytm haszujący. Jeśli zaczyna się od x, skrypt korzysta z biblioteki hash, jeśli zaczyna się od innego znaku - będzie korzystał z dowolnej funkcji php. +Musi myć w tablicy -Np. _sha1 +Np. array('_sha1'); ------- @@ -148,4 +149,17 @@ Zamień ją na: //define('NOMENU', ''); -czyli mówiąc krótko: zakomentuj tą linijkę :) \ No newline at end of file +czyli mówiąc krótko: zakomentuj tą linijkę :) + +Żeby nie pokazywały się na stronie różne "dziwne" błędy należy w tym samym pliku +(index.php) zakomentować linijki + +error_reporting(E_ALL | E_STRICT); + +oraz + +error_reporting(E_ALL); + +(jedna z nich będzie już zakomentowana), a odkomentować należy linijkę + +error_reporting(E_ALL ^ E_NOTICE); \ No newline at end of file diff --git a/cms/config_template.php b/cms/config_template.php index 0a88e2d..3009746 100644 --- a/cms/config_template.php +++ b/cms/config_template.php @@ -33,7 +33,6 @@ $_w_superusers = array(); $_w_baseURL = ''; $_w_siteURL = ''; $_w_cmsDir = 'wtrmln/'; -$_w_appDir = 'modules/'; // baza danych @@ -49,7 +48,7 @@ $_w_siteName = ''; $_w_siteSlogan = ''; $_w_theme = ''; $_w_defaultCnt = ''; -$_w_hashAlgo = array(' md5'); +$_w_hashAlgo = array('_sha1'); // autoload @@ -68,35 +67,38 @@ $_w_superusers[''] = ''; # Systemowe - NIE EDYTOWAĆ! # ######################################## -$_w_basePath = str_replace('\\','/',realpath(dirname(__FILE__))).'/'; +$_w_basePath = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/'; -define('WTRMLN_BASEURL' , $_w_baseURL ); define('WTRMLN_SITEURL' , $_w_siteURL ); define('WTRMLN_CMSDIR' , $_w_cmsDir ); -define('WTRMLN_APPDIR' , $_w_appDir ); define('WTRMLN_THEME' , $_w_theme ); define('WTRMLN_DEFAULTCNT' , $_w_defaultCnt ); -define('WTRMLN_HASHALGO' , serialize($_w_hashAlgo) ); define('WTRMLN_SITENAME' , $_w_siteName ); define('WTRMLN_SITESLOGAN' , $_w_siteSlogan ); -define('WTRMLN_BASEPATH' , $_w_basePath ); - -define('WTRMLN_CMSURL' , WTRMLN_BASEURL.WTRMLN_CMSDIR ); -define('WTRMLN_APPURL' , WTRMLN_CMSURL.WTRMLN_APPDIR ); -define('WTRMLN_CMSPATH' , WTRMLN_BASEPATH.WTRMLN_CMSDIR ); -define('WTRMLN_APPPATH' , WTRMLN_CMSPATH.WTRMLN_APPDIR ); - -define('WTRMLN_THEMEURL' , WTRMLN_CMSURL.'themes/'.WTRMLN_THEME.'/' ); -define('WTRMLN_THEMEPATH' , WTRMLN_CMSPATH.'themes/'.WTRMLN_THEME.'/' ); -define('WTRMLN_LIBS' , WTRMLN_CMSPATH.'libs/' ); -define('WTRMLN_ADMINLIBS' , WTRMLN_CMSPATH.'admin/libs/' ); -define('WTRMLN_HELPERS' , WTRMLN_CMSPATH.'helpers/' ); -define('WTRMLN_FILES' , WTRMLN_CMSURL.'files/' ); -define('WTRMLN_ADMIN' , WTRMLN_CMSURL.'admin/' ); -define('WTRMLN_ADMINCNT' , WTRMLN_APPPATH.'admin/' ); -define('WTRMLN_CONTROLLERS' , WTRMLN_APPPATH.'controllers/' ); -define('WTRMLN_VIEWS' , WTRMLN_APPPATH.'views/' ); -define('WTRMLN_MODELS' , WTRMLN_APPPATH.'models/' ); -define('WTRMLN_PLUGINS' , WTRMLN_APPPATH.'plugins/' ); + +define('WTRMLN_CMSURL' , $_w_baseURL . WTRMLN_CMSDIR ); +define('WTRMLN_CMSPATH' , $_w_basePath . WTRMLN_CMSDIR ); +define('WTRMLN_APPPATH' , WTRMLN_CMSPATH . 'modules/' ); + +define('WTRMLN_THEMEURL' , WTRMLN_CMSURL . 'themes/' . WTRMLN_THEME . '/'); +define('WTRMLN_THEMEPATH' , WTRMLN_CMSPATH . 'themes/' . WTRMLN_THEME . '/'); +define('WTRMLN_LIBS' , WTRMLN_CMSPATH . 'libs/' ); +define('WTRMLN_ADMINLIBS' , WTRMLN_CMSPATH . 'admin/libs/' ); +define('WTRMLN_HELPERS' , WTRMLN_CMSPATH . 'helpers/' ); +define('WTRMLN_FILES' , WTRMLN_CMSURL . 'files/' ); +define('WTRMLN_ADMIN' , WTRMLN_CMSURL . 'admin/' ); +define('WTRMLN_ADMINCNT' , WTRMLN_APPPATH . 'admin/' ); +define('WTRMLN_CONTROLLERS' , WTRMLN_APPPATH . 'controllers/' ); +define('WTRMLN_VIEWS' , WTRMLN_APPPATH . 'views/' ); +define('WTRMLN_MODELS' , WTRMLN_APPPATH . 'models/' ); +define('WTRMLN_PLUGINS' , WTRMLN_APPPATH . 'plugins/' ); + +include WTRMLN_LIBS . 'config.php'; + +Config::$theme = $_w_theme; +Config::$defaultController = $_w_defaultCnt; +Config::$hashAlgo = $_w_hashAlgo; +Config::$siteName = $_w_siteName; +Config::$siteSlogan = $_w_siteSlogan; ?> diff --git a/cms/index.php b/cms/index.php index 5f13fd9..0a15259 100644 --- a/cms/index.php +++ b/cms/index.php @@ -23,7 +23,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. $_w_startTime = microtime(); session_start(); ob_start(); -error_reporting(E_ALL ^ E_NOTICE); + +/* + * dla zwykłych userów + */ + +//error_reporting(E_ALL ^ E_NOTICE); + +/* + * dla developerów + */ + +//error_reporting(E_ALL); + +/* + * dla developerów [pedantic mode] + */ + +error_reporting(E_ALL | E_STRICT); + +/* + * dla różnych testów itp + */ //define('NOMENU', ''); diff --git a/cms/sqldump.sql b/cms/sqldump.sql index 1f278b4..602419c 100644 --- a/cms/sqldump.sql +++ b/cms/sqldump.sql @@ -1,3 +1,14 @@ + -------------------------------------------------------- +# +# Struktura tabeli dla 'config' +# + +CREATE TABLE config ( + field varchar(255) NOT NULL, + value text NOT NULL, + KEY field (field) +); + # -------------------------------------------------------- # # Struktura tabeli dla 'groups' @@ -8,7 +19,8 @@ CREATE TABLE groups ( name varchar(30) NOT NULL, users text NOT NULL, style tinyint(1) unsigned NOT NULL, - PRIMARY KEY (id) + PRIMARY KEY (id), + KEY name (name) ); # @@ -22,11 +34,12 @@ CREATE TABLE groups ( # CREATE TABLE menu ( - menu_id smallint(5) unsigned NOT NULL auto_increment, - menu_capt varchar(100) NOT NULL, - menu_content text NOT NULL, - menu_if text NOT NULL, - PRIMARY KEY (menu_id) + id smallint(5) unsigned NOT NULL auto_increment, + capt varchar(100) NOT NULL, + content text NOT NULL, + condition text NOT NULL, + PRIMARY KEY (id), + KEY menu_capt (capt) ); # @@ -46,28 +59,29 @@ CREATE TABLE pages ( name varchar(255) NOT NULL, content text NOT NULL, title varchar(255) NOT NULL, - PRIMARY KEY (id) + PRIMARY KEY (id), + KEY title (title) ); # # Zawartosc tabeli 'pages' # -INSERT INTO pages VALUES ( '22', 'testowa/stronka', 'Heh elo no :D test - - - - - - - - - +INSERT INTO pages VALUES ( '22', 'testowa/stronka', 'Heh elo no :D test + + + + + + + + + ;)', 'Elo heh'); # -------------------------------------------------------- @@ -98,10 +112,10 @@ CREATE TABLE users ( salt varchar(16) NOT NULL, ingroups varchar(255) NOT NULL, privileges tinyint(2) unsigned DEFAULT '0' NOT NULL, - PRIMARY KEY (id) + PRIMARY KEY (id), + KEY nick (nick) ); # # Zawartosc tabeli 'users' # - diff --git a/cms/wtrmln/helpers/helpers.php b/cms/wtrmln/helpers/helpers.php index 46fdad9..a75e9e7 100644 --- a/cms/wtrmln/helpers/helpers.php +++ b/cms/wtrmln/helpers/helpers.php @@ -31,6 +31,71 @@ function setH1($value) return '

' . $value . '

'; } +/* Zamiana tablicy na obiekt +********************************/ + +function arrayToObject(array $array) +{ + foreach($array as $key => $var) + { + if(is_array($var)) + { + $object->$key = arrayToObject($var); + } + else + { + $object->$key = $var; + } + } + + return $object; +} + +/* Zamiana obiektu na tablicę +********************************/ + +function objectToArray($object) +{ + foreach($object as $key => $var) + { + if(is_object($var)) + { + $array[$key] = objectToArray($var); + } + else + { + $array[$key] = $var; + } + } + + return $array; +} + +/* Zamiana tablicy lub obiektu na HTML-owskie/XML-owskie argumenty +********************************/ + +function arrayToHTMLArguments($array) +{ + $arguments = ''; + + foreach($array as $key => $var) + { + $arguments .= ' ' . $key . '="' . $var . '"'; + } + + $arguments = substr($arguments, 1); + + return $arguments; +} + +/* Alias funkcji arrayToHTMLArguments +********************************/ + +function objectToHTMLArguments($object) +{ + return arrayToHTMLArguments($object); +} + /* zwraca element tablicy $_POST ********************************/ @@ -103,23 +168,18 @@ function ClientIP() function strHash($string, $algo = NULL) { - if($algo == NULL) + if($algo === NULL) { - $algo = unserialize(WTRMLN_HASHALGO); + $algo = Config::$hashAlgo; $algo = $algo[0]; } elseif(is_int($algo)) { $algo_id = $algo; - $algo = unserialize(WTRMLN_HASHALGO); - echo 'TEST'; - var_dump(WTRMLN_HASHALGO); + $algo = Config::$hashAlgo; $algo = $algo[$algo_id]; - die; } - - $algoType = $algo[0]; $algo = substr($algo, 1); @@ -134,9 +194,7 @@ function strHash($string, $algo = NULL) } else { - //return $algo($string); - - //return eval($algo . '(' . $string . ')'); + return $algo($string); } } diff --git a/cms/wtrmln/libs/controller.php b/cms/wtrmln/libs/controller.php index c967f9f..f721dbf 100644 --- a/cms/wtrmln/libs/controller.php +++ b/cms/wtrmln/libs/controller.php @@ -24,8 +24,8 @@ class Controller { public function Controller() { - $this->url = URL::Instance(); - $this->db = DB::Instance(); + $this->url = new URL(); + $this->db = new DB(); $this->load = new Loader(); } diff --git a/cms/wtrmln/libs/db.php b/cms/wtrmln/libs/db.php index fc35598..b96f612 100644 --- a/cms/wtrmln/libs/db.php +++ b/cms/wtrmln/libs/db.php @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* * Lib DB - * wersja 1.7.3 + * wersja 1.9.5 * * Komunikacja z bazą danych * @@ -60,9 +60,12 @@ class DB * private static DB $instance * * Zawiera instancję tej klasy + * + * DEPRECATED - Niedługo to coś zostanie wywalone z kodu. Póki co tylko + * zakomentowane. (Akcja wywalanie singletona) */ - private static $instance = NULL; + //private static $instance = NULL; /* * private static string $prefix @@ -106,7 +109,7 @@ class DB * */ - public function query($query) + public static function query($query) { // jeśli jakaś nazwa tabeli w "panie kopniętym" zaczyna się od // podwójnego podkreślnika, zamienia na prefix @@ -146,7 +149,7 @@ class DB * */ - public function errorList() + public static function errorList() { return self::$errorList; } @@ -158,7 +161,7 @@ class DB * */ - public function lastError() + public static function lastError() { return end(self::$errorList); } @@ -170,7 +173,7 @@ class DB * */ - public function queries() + public static function queries() { return self::$queriesCounter; } @@ -179,15 +182,18 @@ class DB * public static DB Instance() * * Singleton... (zwraca instancję tej klasy) - * + * + * DEPRECATED - Niedługo to coś zostanie wywalone z kodu. Póki co tylko + * zakomentowane. (Akcja wywalanie singletona) */ + /* public static function Instance() { if(!self::$instance instanceof self) self::$instance = new self; return self::$instance; } - + */ } ############ diff --git a/cms/wtrmln/libs/model.php b/cms/wtrmln/libs/model.php index 1d1f77c..e0ee6e9 100644 --- a/cms/wtrmln/libs/model.php +++ b/cms/wtrmln/libs/model.php @@ -24,8 +24,8 @@ class Model { function Model() { - $this->url = URL::Instance(); - $this->db = DB::Instance(); + $this->url = new URL(); + $this->db = new DB(); } } diff --git a/cms/wtrmln/libs/plugin.php b/cms/wtrmln/libs/plugin.php index bf01fa5..a224671 100644 --- a/cms/wtrmln/libs/plugin.php +++ b/cms/wtrmln/libs/plugin.php @@ -24,7 +24,7 @@ class Plugin { function Plugin() { - $this->db = DB::Instance(); + $this->db = new DB(); $this->load = new Loader(); } } diff --git a/cms/wtrmln/libs/url.php b/cms/wtrmln/libs/url.php index 248dcee..2633e87 100644 --- a/cms/wtrmln/libs/url.php +++ b/cms/wtrmln/libs/url.php @@ -22,16 +22,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* * Lib URL - * wersja 1.4.4 + * wersja 1.7.0 * - * Parsowanie URLi etc. + * Parsowanie URL-i etc. * */ class URL { /* - * public static array $segments + * public static string[] $segments * * segmenty URL-a (np. foo/bar == array('foo', 'bar')) * @@ -41,180 +41,302 @@ class URL public static $segments = array(); /* - * public string $class + * public static string $class * * nazwa kontrolera do wykonania */ - public $class = ''; + static public $class = ''; /* - * public string $method + * public static string $method * * nazwa funkcji składowej (metody) kontrolera do wykonania */ - public $method = ''; + public static $method = ''; /* * private static URL $instance * * Zawiera instancję tej klasy + * + * DEPRECATED - Niedługo to coś zostanie wywalone z kodu. Póki co tylko + * zakomentowane. (Akcja wywalanie singletona) */ - + + /* private static $instance = NULL; + */ + + /* + * private static bool $inited + * + * true, jeśli biblioteka została już zainicjalizowana + * false, jeśli nie + */ + + private static $inited = false; /* - * public void URL([string $default = WTRMLN_DEFAULTCNT]) - * - * string $default - jeśli nie ma nazwy controllera, jakiego wybrać? - * jeśli nie podano argumentu, ustawiane jest na - * WTRMLN_DEFAULTCNT - * - * Inicjuje bibliotekę uzupełniając pole 'segments' - * - * WAŻNE: Tą funkcję trzeba przepisać. Syf w niej jest i mało czytelna - * (wcześniej też nie działała poprawnie, teraz jest ok) + * public void URL(string $default) + * + * Konstruktor. Inicjalizuje bibliotekę uzupełniając pole 'segments' + * Zwraca false jeśli już była wcześniej zainicjalizowana + * Wywala błąd krytyczny, jeśli nie podano argumentu $default + * i nie była jeszcze zainicjalizowana. + * + * string $default - nazwa domyślnego kontrolera * */ - public function URL($default = WTRMLN_DEFAULTCNT) + + public function URL($default = null) { - // pobieram dane + // jeśli klasa została już zainicjalizowana, nie kontynuujemy działania + // tej funkcji składowej + + if(self::$inited === true) + { + return false; + } + + // żeby klasa mogła funkcjonować poprawnie, nie można pozwolić na + // nie podanie domyślnego kontrolera. Tutaj musi być to zrobione "ręcznie" + // dlatego, że funkcja jest (jako konstruktor) wykonywana wielokrotnie w + // kodzie, już po inicjalizacji biblioteki. + + if($default === null) + { + panic('Lib URL: 0'); + } + + // pobieramy dane o URL-u + $URL = (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ''); $URL2 = array(); - // parsuję człony + // parsujemy segmenty URL-a (ze względów bezpieczeństwa pozwalam + // tylko na znaki 0-9A-Za-z+-._) - foreach(explode('/',$URL) as $segment) + foreach(explode('/', $URL) as $segment) { - $segment2 = NULL; - foreach(str_split($segment) as $ch) + $segment2 = ''; + foreach(str_split($segment) as $char) { - $ch = ord($ch); // char -> int - - //pozwalam tylko na takie znaki: - - if($ch >= 48 && $ch <= 57) // 0-9 - $segment2 .= chr($ch); - if($ch >= 65 && $ch <= 90) // A-Z - $segment2 .= chr($ch); - if($ch >= 97 && $ch <= 122) // a-z - $segment2 .= chr($ch); - if($ch == 43) // + - $segment2 .= chr($ch); - if($ch == 45) // - - $segment2 .= chr($ch); - if($ch == 46) // . - $segment2 .= chr($ch); - if($ch == 95) // _ - $segment2 .= chr($ch); + $char = ord($char); // char -> int + + // pozwalam tylko na znaki takie jak: + + // cyfry + + if($char >= 48 && $char <= 57) + { + $segment2 .= chr($char); + } + + // duże litery + + if($char >= 65 && $char <= 90) + { + $segment2 .= chr($char); + } + + // małe litery + + if($char >= 97 && $char <= 122) + { + $segment2 .= chr($char); + } + + // plus (+) + + if($char == 43) + { + $segment2 .= chr($char); + } + + // minus (-) + + if($char == 45) + { + $segment2 .= chr($char); + } + + // kropka (.) + + if($char == 46) + { + $segment2 .= chr($char); + } + + // podkreślenie (_) + + if($char == 95) + { + $segment2 .= chr($char); + } } - // uważam, czy ktoś nie zrobił wielokrotnych slashów + + // jeśli ktoś zrobił wielokrotne slashe, wywalamy pusty segment if(!empty($segment2)) + { $URL2[] = $segment2; + } } - // jeśli brak nazwy kontrolera - // wczytaj domyślny. + // czyszczenie nazwy kontrolera + // (jeśli brak nazwy kontrolera, ustaw na domyślną) if(isset($URL2[0])) { - //$t[0] = clean_segments($URL2[0]); - - //czyszczenie - - $seg = strtolower($URL2[0]); // małe literki - $seg = str_split($seg); - $seg_n = NULL; - foreach($seg as $ch) + // czyszczenie segmentu z potencjalnie niebezpiecznego syfu + // (nawet nie chodzi o bezpieczeństwo, ale wiadomo, że + // kontroler o nazwie Foo.bar nie ma prawa istnieć + // ze względu na ograniczenia nazewnictwa w PHP) + + $seg = strtolower($URL2[0]); + $seg = str_split($seg); + $seg_n = ''; + + // parsujemy nazwę kontrolera (ze względów bezpieczeństwa pozwalam + // tylko na znaki 0-9A-Za-z_) + + foreach($seg as $char) { - $ch = ord($ch); - - if($ch >= 97 && $ch <= 122) // a-z, A-Z - $seg_n .= chr($ch); - if($ch >= 48 && $ch <= 57) // 0-9 - $seg_n .= chr($ch); - if($ch == 95) // _ - $seg_n .= chr($ch); + $char = ord($char); //char -> int + + // pozwalam tylko na znaki takie jak: + + // litery + + if($char >= 97 && $char <= 122) + { + $seg_n .= chr($char); + } + + // cyfry + + if($char >= 48 && $char <= 57) + { + $seg_n .= chr($char); + } + + // podkreślenie (_) + + if($char == 95) + { + $seg_n .= chr($char); + } } $t[0] = $seg_n; } else { + // jeśli nie podano nazwy kontrolera, ustaw na domyślną + $t[0] = $default; } - // jeśli brak nazwy metody - // wczytaj index + // czyszczenie nazwy funkcji składowej/metody kontrolera + // (jeśli brak, ustaw na index) if(isset($URL2[1])) { - //$t[1] = clean_segments($URL2[1]); - - //czyszczenie - - $seg_n = NULL; - $seg = strtolower($URL2[1]); - $seg = str_split($seg); - foreach($seg as $ch) + $seg = strtolower($URL2[1]); + $seg = str_split($seg); + $seg_n = ''; + + // parsujemy nazwę kontrolera (ze względów bezpieczeństwa pozwalam + // tylko na znaki 0-9A-Za-z_) + + foreach($seg as $char) { - $ch = ord($ch); - if($ch >= 97 && $ch <= 122) // a-z, A-Z - $seg_n .= chr($ch); - if($ch >= 48 && $ch <= 57) // 0-9 - $seg_n .= chr($ch); - if($ch == 95) // _ - $seg_n .= chr($ch); + $char = ord($char); //char -> int + + // pozwalam tylko na znaki takie jak: + + // litery + + if($char >= 97 && $char <= 122) + { + $seg_n .= chr($char); + } + + // cyfry + + if($char >= 48 && $char <= 57) + { + $seg_n .= chr($char); + } + + // podkreślenie (_) + + if($char == 95) + { + $seg_n .= chr($char); + } } + $t[1] = $seg_n; } else { + // jeśli nie podano nazwy funkcji składowej/metody kontrolera + // ustaw na index (domyślna funkcja składowa) + $t[1] = 'index'; } - // jeśli wpisano więcej niż dwa człony - // usuń dwa pierwsze, a jeśli nie - // oczyść tablicę + // usuń dwa pierwsze segmenty (kontroler i jego funkcja składowa) + // jeśli są tylko dwa segmenty lub mniej, oczyść tablicę + // (wychodzi na to samo, ale PHP nie wywala błędu) if(count($URL2) > 2) { - $URL2 = array_splice($URL2, -(count($URL2)-2)); + $URL2 = array_splice($URL2, -(count($URL2) - 2)); } else { $URL2 = array(); } - // złączenie tablic + // złączenie tablic - tej z oczyszczonymi lub domyślnymi nazwami kontrolera + // i funkcji składowej/metody kontrolera z tą tablicą, która ma pozostałe + // segmenty (lub nie ma, jeśli nie podano) - $URL2 = array_merge($t,$URL2); + $URL2 = array_merge($t, $URL2); + + // nadanie odpowiednich wartości self::$segments = $URL2; - - - $this->class = self::$segments[0]; - $this->method = self::$segments[1]; + self::$class = self::$segments[0]; + self::$method = self::$segments[1]; + self::$inited = true; } /* - * public mixed segment(int $ID) + * public string segment(int $ID) * - * Zwraca treść danego [$ID] segmentu + * Zwraca treść danego [$ID] segmentu. + * Segmenty są liczone od jeden + * (a nie od zera, jak to jest w PHP-owskich tablicach) + * + * Zwraca false w przypadku niepowodzenia + * (tj. jeśli żądany segment nie istnieje) * */ public function segment($ID) { - if(isset(self::$segments[$ID-1])) + if(isset(self::$segments[$ID - 1])) { - return self::$segments[$ID-1]; + return self::$segments[$ID - 1]; } else { - return FALSE; + return false; } } @@ -234,14 +356,19 @@ class URL * public static object Instance() * * Singleton... + * + * DEPRECATED - Niedługo funkcja zostanie wywalona z kodu. Póki co tylko + * zakomentowana. (Akcja wywalanie singletona) * */ + + /* public static function Instance() { if(!self::$instance instanceof self) - self::$instance = new self; + self::$instance = new self(Config::$defaultController); return self::$instance; } - + */ } ?> diff --git a/cms/wtrmln/libs/viewtags.php b/cms/wtrmln/libs/viewtags.php index b232111..3bdbbea 100644 --- a/cms/wtrmln/libs/viewtags.php +++ b/cms/wtrmln/libs/viewtags.php @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* * Lib ViewTags - * wersja 1.1.4 + * wersja 1.1.8 * * Przetwarzanie pseudo-tagów używanych w widokach. */ @@ -30,14 +30,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. class ViewTags { /* - * public string process(string $data) + * public static string process(string $data) * * Funkcja dostaje na wejściu dotychczasową treść widoku i zwraca ją po * przetworzeniu (obsługa pseudo-tagów) * * string $data - dotychczasowa treść widoku */ - public function process($data) + public static function process($data) { $data = str_replace(' * na @@ -64,13 +64,13 @@ class ViewTags * preg_replace_callback. */ - private function tag_variable($data) + private static function tag_variable($data) { return ''; } /* - * private string tag_foreach(string[2] $data) + * private static string tag_foreach(string[2] $data) * * obsługuje foreach tzn. zamienia przykładowe * na @@ -79,13 +79,13 @@ class ViewTags * funkcji preg_replace_callback. */ - private function tag_foreach($data) + private static function tag_foreach($data) { return ''; } /* - * private string tag_if(string[2] $data) + * private static string tag_if(string[2] $data) * * obsługuje warunki tzn. zamienia przykładowe * na @@ -94,7 +94,7 @@ class ViewTags * preg_replace_callback. */ - private function tag_if($data) + private static function tag_if($data) { return ''; } diff --git a/cms/wtrmln/modules/controllers/login.php b/cms/wtrmln/modules/controllers/login.php index 4b0947f..cfd6825 100644 --- a/cms/wtrmln/modules/controllers/login.php +++ b/cms/wtrmln/modules/controllers/login.php @@ -50,9 +50,9 @@ class Login extends Controller { $login = $_POST['login']; $pass = $_POST['password']; - $autologin = $_POST['autologin']; - - $this->User->Login($login, $pass, ($autologin == 'on' ? TRUE : FALSE)); + $autologin = isset($_POST['autologin']); + + $this->User->Login($login, $pass, $autologin); //TODO } diff --git a/cms/wtrmln/modules/plugins/user.php b/cms/wtrmln/modules/plugins/user.php index 1d6b8c5..b6a9154 100644 --- a/cms/wtrmln/modules/plugins/user.php +++ b/cms/wtrmln/modules/plugins/user.php @@ -58,6 +58,8 @@ class User extends Plugin public function Login($user, $password, $autologin) { // Walidacja wprowadzonych danych + + var_dump($autologin); if(empty($user)) { @@ -90,11 +92,11 @@ class User extends Plugin echo $this->load->view('login_loginerrors', array('errors' => $errors)); return false; } + + // sprawdzamy poprawność hasła $userdata = $userdata->to_obj(); - var_dump(intval($userdata->hashalgo)); - if($userdata->password != strHash($password . $userdata->salt, intval($userdata->hashalgo))) { setH1('Błąd logowania'); diff --git a/cms/wtrmln/system.php b/cms/wtrmln/system.php index db2cabb..0a8a3ab 100644 --- a/cms/wtrmln/system.php +++ b/cms/wtrmln/system.php @@ -57,7 +57,7 @@ function panic($text = 'noname error') class Watermelon { /* - * public static array $metaSrc + * public static string[] $metaSrc * * dane meta (tagi z sekcji ) * @@ -67,26 +67,19 @@ class Watermelon public static $metaSrc = array(); /* - * private URL $url + * public void Watermelon(string $dbHost, string $dbUser, string $dbPass, string $dbName, + * string $dbPrefix, array $autoload, string[] $metaSrc) * - * instancja klasy URL - */ - private $url; - - /* - * public void Watermelon(string $dbHost, string $dbUser, string $dbPass, string $dbName, - * string $dbPrefix, array $autoload, array $metaSrc) - * - * konstuktor. Odpala najważniejsze biblioteki, odpala odpowiedni kontroler + * Konstuktor. Odpala najważniejsze biblioteki, odpowiedni kontroler * i generuje stronę. * - * string $dbHost - host bazy danych - * string $dbUser - użytkownik bazy danych - * string $dbPass - hasło do bazy danych - * string $dbName - nazwa bazy danych - * string $dbPrefix - prefiks do tabel - * array $autoload - pluginy i kod związany z nimi do automatycznego załadowania - * array $metaSrc - dane do wstawienia w sekcji + * string $dbHost - host bazy danych + * string $dbUser - użytkownik bazy danych + * string $dbPass - hasło do bazy danych + * string $dbName - nazwa bazy danych + * string $dbPrefix - prefiks do tabel + * array $autoload - pluginy i kod związany z nimi do automatycznego załadowania + * string[] $metaSrc - dane do wstawienia w sekcji * * $autoload = array(array(string $plugin_name, string $eval)[, array(string $plugin_name, string $eval)[, ... ]] * $plugin_name - nazwa plugina @@ -96,18 +89,18 @@ class Watermelon * $head_element - pojedynczy element do umieszczenia w sekcji */ - public function Watermelon($dbHost, $dbUser, $dbPass, $dbName, $dbPrefix, $autoload, array $metaSrc) + public function Watermelon($dbHost, $dbUser, $dbPass, $dbName, $dbPrefix, array $autoload, array $metaSrc) { - $this->url = new URL(); - $db = new DB(); + $url = new URL(Config::$defaultController); + $db = new DB(); $db->connect($dbHost, $dbUser, $dbPass, $dbName, $dbPrefix); - + $this->LoadPlugins($autoload); - + self::$metaSrc = $metaSrc; - + $content = $this->loadController(); - + $this->generatePage($content); } @@ -120,17 +113,21 @@ class Watermelon private function loadController() { // zamieniamy _ na /, tak aby można było robić kontrolery w podfolderach + // (przydatne, kiedy mamy moduł składający się z kilku kontrolerów, np. + // duży skrypt forum) - $_w_controllerPath = str_replace('_', '/', $this->url->class); + $controllerPath = str_replace('_', '/', URL::$class); - $_w_controllerPath = WTRMLN_CONTROLLERS . $_w_controllerPath . '.php'; + $controllerPath = WTRMLN_CONTROLLERS . $controllerPath . '.php'; // sprawdzanie, czy istnieje plik controllera - if(file_exists($_w_controllerPath)) + if(file_exists($controllerPath)) { - include $_w_controllerPath; - + include $controllerPath; + + // wywalamy dwa pierwsze segmenty URL-a (kontroler i jego funkcja składowa/metoda) + array_shift(URL::$segments); array_shift(URL::$segments); } @@ -139,33 +136,33 @@ class Watermelon //jeśli nie można znaleźć kontrolera, niech Pages przejmie stery include WTRMLN_CONTROLLERS . 'pages.php'; - $_controller = new pages(); + $controller = new pages(); - $this->url->method = 'index'; - $this->url->class = 'pages'; + URL::$method = 'index'; + URL::$class = 'pages'; } - + // sprawdzanie, czy istnieje klasa controllera - if(class_exists($this->url->class)) + if(class_exists(URL::$class)) { - $_controller = new $this->url->class(); + $controller = new URL::$class(); } else { - panic('Nie moge znalesc klasy podanego controllera (' . $this->url->class . ')'); + panic('Nie moge znalesc klasy podanego controllera (' . URL::$class . ')'); } - + // sprawdzanie czy istnieje dana funkcja składowa controllera. - - if(!method_exists($_controller, $this->url->method)) + + if(!method_exists($controller, URL::$method)) { - panic('Nie moge znalesc podanej funkcji składowej controllera (' . $this->url->method . ')'); + panic('Nie moge znalesc podanej funkcji składowej controllera (' . URL::$method . ')'); } // przystepujemy do roboty - $_controller->{$this->url->method}(); + $controller->{URL::$method}(); $content = ob_get_contents(); //wyciagamy dane z bufora wyjścia @ob_end_clean(); @@ -219,7 +216,7 @@ class Watermelon // wyciągamy metaSrc - $metaSrc = Watermelon::$metaSrc; + $metaSrc = self::$metaSrc; // żeby array_unshift się nie czepiał, // gdyby wcześniej nie było żadnych elementów @@ -246,4 +243,12 @@ class Watermelon new Watermelon($_w_dbHost, $_w_dbUser, $_w_dbPass, $_w_dbName, $_w_dbPrefix, $_w_autoload, $_w_metaSrc); +// dla bezpieczeństwa usuwamy dane konfiguracji bazy danych + +unset($_w_dbHost); +unset($_w_dbUser); +unset($_w_dbPass); +unset($_w_dbName); +unset($_w_dbPrefix); + ?> diff --git a/cms/wtrmln/themes/wcmslay/index.php b/cms/wtrmln/themes/wcmslay/index.php index 7cf4cae..f77cb1b 100644 --- a/cms/wtrmln/themes/wcmslay/index.php +++ b/cms/wtrmln/themes/wcmslay/index.php @@ -23,7 +23,10 @@ diff --git a/cms/wtrmln/themes/wcmslay/skin.php b/cms/wtrmln/themes/wcmslay/skin.php index cb93164..c4e50e8 100644 --- a/cms/wtrmln/themes/wcmslay/skin.php +++ b/cms/wtrmln/themes/wcmslay/skin.php @@ -3,6 +3,8 @@ /* meta (poładniamy source) **************************/ +$meta = ''; + foreach($_w_metaSrc as $metaItem) { $meta .= "\t" . $metaItem . "\n"; @@ -11,31 +13,25 @@ foreach($_w_metaSrc as $metaItem) /* menu ***************************/ -$db = DB::Instance(); - if(!defined('NOMENU')) { - $menus = $db->query("SELECT * FROM `menu`"); - - while($menu_e = $menus->to_obj()) + $menus = DB::query("SELECT * FROM `menu`"); + + $menu = ''; + + while($menu_item = $menus->to_obj()) { - $menu .= '
' . $menu_e->menu_capt . '
' . $menu_e->menu_content; + $menu .= '
' . $menu_item->capt . '
' . $menu_item->content; } - + //przetwarzanie - - if (@ini_get('short_open_tag') === FALSE) - { - //jeśli nie można używać ' . $menu . '