kolejna partia drobniejszych zmian (wciąż możliwe, że zacommitowany watermelon nie...
[watermeloncms.git] / wtrmln / libs / viewtags.php
blob495b2ea8240dc7f8a56c47246f275e50d4de53ae
1 <?php
2 /********************************************************************
4 Watermelon CMS
6 Copyright 2008-2009 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 ********************************************************************/
24 * Lib ViewTags
25 * wersja 2.0.0
27 * Przetwarzanie pseudo-tagów używanych m. in. w widokach.
30 class ViewTags
33 * public static string process(string $data)
35 * Funkcja dostaje na wejściu dotychczasową treść widoku i zwraca ją po
36 * przetworzeniu (obsługa pseudo-tagów)
38 * string $data - dotychczasowa treść widoku
41 public static function process($data)
43 // w razie, gdyby nie można było używać <? i <?=
45 $data = str_replace('<? ', '<?php ', $data);
46 $data = str_replace('<?=', '<?php echo ', $data);
48 // umożliwiamy w prosty sposób tworzenie ścieżek do podstron
50 $data = str_replace('href="$/', 'href="' . WTRMLN_SITEURL, $data);
51 $data = str_replace('action="$/', 'action="' . WTRMLN_SITEURL, $data);
53 // tag variable
55 $data = preg_replace_callback('#<\$([a-zA-Z0-9_]+)>#', array('ViewTags', 'tag_variable'), $data);
57 // tag foreach
59 $data = preg_replace_callback('#<foreach ([^>]+)>#', array('ViewTags', 'tag_foreach'), $data);
60 $data = preg_replace("#</foreach>#", "<?php } ?>", $data);
62 // tag if
64 $data = preg_replace_callback('#<if \(([^)]+)\)>#', array('ViewTags', 'tag_if'), $data);
65 $data = preg_replace_callback('#<if ([^>]+)>#', array('ViewTags', 'tag_if'), $data);
66 $data = preg_replace('#</if>#', '<?php } ?>', $data);
68 // tag while
70 $data = preg_replace_callback('#<while \(([^)]+)\)>#', array('ViewTags', 'tag_while'), $data);
71 $data = preg_replace_callback('#<while ([^>]+)>#', array('ViewTags', 'tag_while'), $data);
72 $data = preg_replace('#</while>#', '<?php } ?>', $data);
74 // tag else
76 $data = preg_replace('#<else>#', '<?php else{ ?>', $data);
77 $data = preg_replace('#</else>#', '<?php } ?>', $data);
79 $data = preg_replace('#<\?php \} \?>[\s]+<\?php else\{ \?>#', '<?php }else{ ?>', $data);
81 // tag end
83 /*$data = preg_replace('#<end>#', '<?php } ?>', $data);*/ //deprecated
85 // tag nick
87 //$data = preg_replace_callback('#<nick \$([a-zA-Z0-9_]+)>#', array('ViewTags', 'tag_nick'), $data);
88 $data = preg_replace('#<nick \$([a-zA-Z0-9_]+)>#', '<?php echo User::getNick($\\1); ?>', $data);
90 // tag date
92 //$data = preg_replace_callback('#<date \$([a-zA-Z0-9_]+)>#', array('ViewTags', 'tag_date'), $data);
93 $data = preg_replace('#<date \$([a-zA-Z0-9_]+)>#', '<?php echo plDate($\\1); ?>', $data);
95 // tag unpack
97 $data = preg_replace('#<unpack \$([a-zA-Z0-9_]+)>#', '<?php foreach($\\1 as $key => $var){$$key = $var;} ?>', $data);
99 // tag list object
101 $data = preg_replace('#<list object \$([a-zA-Z0-9_]+)>#', '<?php while($\\1_item = $\\1->to_obj()){foreach($\\1_item as $key => $var){$$key = $var;} ?>', $data);
102 $data = preg_replace('#</list>#', '<?php } ?>', $data);
104 // tag load page
106 $data = preg_replace_callback('#<load page ([^>]+)>#', array('ViewTags', 'tag_load_page'), $data);
108 // tag block
110 $data = preg_replace('#<block ([^>]+)>#', '<?php echo Loader::Block(\'\\1\'); ?>', $data);
112 return $data;
116 * private static string tag_variable(string[2] $data)
118 * obsługuje "wyświetlanie zmiennych" tzn. zamienia przykładowe <$nazwa_zmiennej>
119 * na <?php echo $nazwa_zmiennej; ?>
120 * Nazwa zmiennej jest brana z drugiego elementu $data. Pierwszy jest
121 * niewykorzystywany. Istnieje on ze względu na sposób działania funkcji
122 * preg_replace_callback.
125 private static function tag_variable($data)
127 return '<?php echo $' . $data[1] . '; ?>';
131 * private static string tag_nick(string[2] $data)
133 * obsługuje pobieranie nicku tzn. zamienia przykładowe <nick $uid>
134 * na <?php echo User::getNick($uid); ?>
135 * UID jest brany z drugiego elementu $data. Pierwszy jest
136 * niewykorzystywany. Istnieje on ze względu na sposób działania funkcji
137 * preg_replace_callback.
140 private static function tag_nick($data)
142 return '<?php echo User::getNick($' . $data[1] . '); ?>';
146 * private static string tag_date(string[2] $data)
148 * obsługuje wyświetlanie polskich dat tzn. zamienia przykładowe <date $created>
149 * na <?php echo plDate($created); ?>
150 * timestamp jest brany z drugiego elementu $data. Pierwszy jest
151 * niewykorzystywany. Istnieje on ze względu na sposób działania funkcji
152 * preg_replace_callback.
155 private static function tag_date($data)
157 return '<?php echo plDate($' . $data[1] . '); ?>';
161 * private static string tag_foreach(string[2] $data)
163 * obsługuje foreach tzn. zamienia przykładowe <foreach $foo as $bar>
164 * na <?php foreach($foo as $bar){ ?>
165 * Zawartość foreach (np. "$foo as $bar") jest brana z drugiego elementu $data.
166 * Pierwszy jest niewykorzystywany. Istnieje on ze względu na sposób działania
167 * funkcji preg_replace_callback.
170 private static function tag_foreach($data)
172 return '<?php foreach(' . $data[1] . '){ ?>';
176 * private static string tag_if(string[2] $data)
178 * obsługuje warunki tzn. zamienia przykładowe <if 4 == 5 - 1>
179 * na <?php if(4 == 5 - 1){ ?>
180 * Treść warunku jest brana z drugiego elementu $data. Pierwszy jest
181 * niewykorzystywany. Istnieje on ze względu na sposób działania funkcji
182 * preg_replace_callback.
185 private static function tag_if($data)
187 return '<?php if(' . $data[1] . '){ ?>';
191 * private static string tag_while(string[2] $data)
193 * obsługuje warunki tzn. zamienia przykładowe <while 4 == 5 - 1>
194 * na <?php while(4 == 5 - 1){ ?>
195 * Treść warunku jest brana z drugiego elementu $data. Pierwszy jest
196 * niewykorzystywany. Istnieje on ze względu na sposób działania funkcji
197 * preg_replace_callback.
200 private static function tag_while($data)
202 return '<?php while(' . $data[1] . '){ ?>';
206 * private static string tag_load_page(string[2] $data)
208 * obsługuje ładowanie stron tzn. zamienia przykładowe <load page testowa/stronka>
209 * na treść strony testowa/stronka
210 * Nazwa strony jest brana z drugiego elementu $data. Pierwszy jest
211 * niewykorzystywany. Istnieje on ze względu na sposób działania funkcji
212 * preg_replace_callback.
215 private static function tag_load_page($data)
217 $load = new Loader();
218 $pages = $load->model('pages');
220 $pagedata = $pages->GetData($data[1])->to_obj();
221 $pagedata = ViewTags::Process($pagedata->content);
223 ob_start();
224 $page = eval('?>' . $pagedata . '<?php ');
225 $page = ob_get_contents();
226 @ob_end_clean();
228 return $page;