source: trunk/www.guidonia.net/wp/wp-content/plugins/parteibuch-aggregator/pba_output_library.php@ 44

Last change on this file since 44 was 44, checked in by luciano, 15 years ago
File size: 63.8 KB
Line 
1<?php
2
3class PBALIB extends BDPRSS2
4{
5
6//this class is a collection of the following functions
7////functions with parameter definitions
8// function getdefaultparameter(){ -- moved to get_pbadefaultparameter in pba-defaultparameter__LANG__.php
9// function get_para_definition(){
10// function geturlparameter(){
11// function getoutputconfigparameter($outputid=1){
12// function process_superparameter($superparameter){
13// function bootstrap_parameters($firstparafromfunctioncall){
14//
15////functions needed for debugging
16// function get_r($invar){
17// function process_profiler($profilerarray=array()){
18//
19////functions to process templates
20// function template_replacements($template, &$replacements){
21// function split_template($template, $bodytag=false){
22// function process_template_conditions($processed_template="", $conditionarray=array()){
23// function preprocess_headertemplate(&$resultparas, &$pbaout, $footer=false){
24// function formatheader(&$resultparas, &$pbaout, $footer=false, $formatteditem=false){
25// function preprocess_itemtemplate(&$resultparas){
26// function formatitem(&$item, &$resultparas, $resultrownumber){
27//
28////functions to generate href values
29// function makesearchactionhref(&$resultparas){
30// function makehiddenformvalues(&$resultparas){
31// function makecachehref(&$resultparas, $itemid){
32// function makefeedhref(&$resultparas){
33// function makehtmlhref(&$resultparas){
34// function makelastpagehref($lastpage, &$resultparas){
35// function makenextpagehref($nextpage, &$resultparas){
36// function makedatepagehref($thedate="", &$resultparas, $regardkalenderlinkpart=false, $forcekalender=false){
37//
38////functions to generate boxes with content
39// function formatted_feedlist(&$resultparas, $liststyle="sidebar"){
40// function formatkalender($kalenderdates, &$resultparas, $thedate="", &$pbaout){
41//
42//
43////helper functions
44// function analysepagetype(&$resultparas){
45// function analyze_needed_boxes($rawtemplate){
46// function makebox($boxtomake, &$resultparas, &$pbaout){
47// function processtagset($tagsetfromdb){
48// function gettheage($seconds, &$resultparas=false, &$ageunitsstring=false){
49// function pba_cache(&$identifier, &$cache_content, $cache_mode='get', $name='c', $type='mixed', $cache_max_time=180, $serverstatus='OK'){
50
51//functions with parameter definitions
52 function get_para_definition(){
53 //outcommenting or setting values to false will disable parameters from url
54
55 //list all possible url parameters for looping through
56 $paralist["url"]["outputid"]=true; //forbidden anyway by default
57 $paralist["url"]["searchphrase"]=true;
58 $paralist["url"]["feedrequest"]=true;
59 $paralist["url"]['opmlrequest']=true;
60 $paralist["url"]['feedlistrequest']=true;
61 $paralist["url"]["tickerpage"]=true;
62 $paralist["url"]["archivdate"]=true;
63 $paralist["url"]["maxitems"]=true;
64 $paralist["url"]["listid"]=true; //forbidden anyway by default, may be opened by function call or later by config
65 $paralist["url"]["kalreq"]=true;
66 $paralist["url"]["cacheid"]=true;
67 $paralist["url"]['srequri']=true; //this is the base url
68
69 return $paralist;
70 }
71
72 function geturlparameter(){
73
74 global $post;
75 if(function_exists('get_page_link')){
76 $stripped_guid=get_page_link();
77 if(!strstr($stripped_guid,'?')
78 && !preg_match('/\/$/',$stripped_guid)
79 ) $stripped_guid = $stripped_guid . '/';
80 $stripped_guid=str_replace($_SERVER['HTTP_HOST'],'',str_replace(array('http://','https://'),'',$stripped_guid));
81 }else{
82 $stripped_guid=str_replace($_SERVER['HTTP_HOST'],'',str_replace(array('http://','https://'),'',$post->guid));
83 }
84 $sanitized_request_uri= substr($_SERVER['REQUEST_URI'],strlen($stripped_guid));
85
86// echo "<br>stripped_guid: " . $stripped_guid;
87// echo "<br>request_uri: " . $_SERVER['REQUEST_URI'];
88// echo "<br>sanitized_request_uri: " . $sanitized_request_uri;
89
90 //searchphrase
91 $paras['searchphrase']="";
92 $paras['feedrequest']=false;
93 $paras['opmlrequest']=false;
94 $paras['feedlistrequest']=false;
95 $paras['kalreq']=false;
96 $paras['tickerpage']=1;
97 $paras['cacheid']=false;
98 $paras['archivdate']=false;
99 $paras['outputid']=false;
100 $paras['srequri']=$sanitized_request_uri;
101
102 if(preg_match("/^opml\//", $sanitized_request_uri)){
103 $paras['opmlrequest']=true;
104 }elseif(preg_match("/^feedlist\//", $sanitized_request_uri)){
105 $paras['feedlistrequest']=true;
106 }elseif(preg_match("/^ticker-feed\//", $sanitized_request_uri)){
107 $paras['feedrequest']=true;
108 }elseif(preg_match("/^tickerpage\/([0-9]+)?\//", $sanitized_request_uri, $pagetemp)){
109 if(preg_match("/^[0-9]+$/",$pagetemp[1])) {
110 $paras['tickerpage']=abs(intval($pagetemp[1]));
111 if($paras['tickerpage']<1) $paras['tickerpage']=1;
112 }
113 }elseif(preg_match("/^[kc]alend[ea]r\/([0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2})?\/?/", $sanitized_request_uri, $kalendertemp)){
114 $paras['kalreq']=true;
115 if(preg_match("/^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}$/",$kalendertemp[1])) $paras['archivdate'] = $kalendertemp[1];
116 }elseif(isset($_GET['kalender'])||isset($_GET['calendar'])){
117 $paras['kalreq']=true;
118 }elseif(isset($_GET['opml'])){
119 $paras['opmlrequest']=true;
120 }elseif(isset($_GET['feedlist'])){
121 $paras['feedlistrequest']=true;
122 }elseif(preg_match("/^([0-9]+)\//", $sanitized_request_uri, $cachetemp)){
123 $paras['cacheid']=abs(intval($cachetemp[1]));
124 }elseif(isset($_GET['cacheid'])){
125 $paras['cacheid']=abs(intval($_GET['cacheid']));
126 }elseif(preg_match("/([0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2})(\/tickerpage\/)?([0-9]+)?\/(feed\/)?/", $sanitized_request_uri, $datetemp)) {
127 if(strstr($datetemp[2] . $datetemp[3]. $datetemp[4],'feed')) $paras['feedrequest']=true;
128 $paras['archivdate']=$datetemp[1];
129 if(preg_match("/^[0-9]+$/",$datetemp[3])) {
130 $paras['tickerpage']=abs(intval($datetemp[3]));
131 if($paras['tickerpage']<1) $paras['tickerpage']=1;
132 }
133 }elseif(preg_match("/^s\/([a-zA-Z0-9-+%_]+)(\/tickerpage\/)?([0-9]+)?\/(feed\/)?/", $sanitized_request_uri, $searchtemp)){
134 $paras['searchphrase']=utf8_encode(urldecode(str_replace("_","+",$searchtemp[1])));
135 if(strstr($searchtemp[2] . $searchtemp[3]. $searchtemp[4],'feed')) $paras['feedrequest']=true;
136 if(preg_match("/^[0-9]+$/",$searchtemp[3])) {
137 $paras['tickerpage']=abs(intval($searchtemp[3]));
138 if($paras['tickerpage']<1) $paras['tickerpage']=1;
139 }
140 }elseif(isset($_GET['searchphrase'])){
141 $paras['searchphrase']=stripslashes($_GET['searchphrase']);
142 $paras['searchphrase']=utf8_encode(urldecode(str_replace("_","+",$paras['searchphrase'])));
143 }
144 if(!$paras['cacheid'] && !$paras['kalreq']) {
145 if(isset($_GET['feed'])) $paras['feedrequest'] = true;
146 if(isset($_GET['tickerpage']) && abs(intval($_GET['tickerpage'])) > 0) $paras['tickerpage'] = abs(intval($_GET['tickerpage']));
147 }
148 if(!$paras['cacheid']){
149 if(isset($_GET['bdprssarchivedate'])) {
150 if(preg_match("/([0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2})/", $_GET['bdprssarchivedate'], $badtemp)) $paras['archivdate'] = $badtemp[1];
151 }elseif(isset($_GET['itemdate'])) {
152 if(preg_match("/([0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2})/", $_GET['itemdate'], $badtemp)) $paras['archivdate'] = $badtemp[1];
153 }
154 }
155
156//echo "itemdate: " . $_GET['itemdate'];
157//echo "archivdate: " . $paras['archivdate'];
158
159 if(isset($_GET['bdprsslist'])) $paras['outputid']=abs(intval($_GET['bdprsslist']));
160
161 //search parameter possible in GET: $search_phrase, $start=0, $max=10, $list_id=0, $itemdate="", $feed="", item_id
162 //output parameter possible in GET: page, outputformat
163
164 //parameter directly possible in url: search_phrase, itemdate, item_id, page, calendar
165 //indirect parameter in url: list, max
166
167 return $paras;
168 }
169
170 function getoutputconfigparameter(&$resultparas){
171 //just overloading $resultparas for speed, not changing
172 global $bdprss_db, $post;
173
174 if($resultparas['getoutputconfigbypageid']===true){
175 if(abs(intval($post->ID))>0){
176 $outputinfo = $bdprss_db->get_pbaoutput_from_page_id(abs(intval($post->ID)));
177 }
178 }else{
179 $outputid=$resultparas['outputid'];
180 $outputinfo = $bdprss_db->get_pbaoutput(abs(intval($outputid)));
181 }
182
183 if(!isset($outputinfo->{$bdprss_db->pbaoidentifier})){
184 return false;
185 }
186
187//item selection
188 $configparas["outputid"]=abs(intval($outputinfo->{$bdprss_db->pbaoidentifier}));
189 $configparas['outputname']=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->pbaoname});
190 $configparas["page2hookin"]=abs(intval($outputinfo->page2hookin));
191
192 $configparas["listid"]=abs(intval($outputinfo->{$bdprss_db->pbaodefaultlist}));
193 $configparas["maxitems"]=abs(intval($outputinfo->{$bdprss_db->pbaomaxitems}));
194 $configparas["formattype"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->pbaoformattype});
195
196//item page formatting
197 $configparas["template_ticker"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->pbaotemplate_ticker});
198 $extralinkhelper=$outputinfo->{$bdprss_db->pbaoappend_extra_link};
199 if($extralinkhelper != 'Y') $configparas['noextralink']= 'Y';
200 $configparas["append_cache_link"]=$outputinfo->{$bdprss_db->pbaoappend_cache_link};
201 $configparas["add_social_bookmarks"]=$outputinfo->{$bdprss_db->pbaoadd_social_bookmarks};
202
203//item formatting
204 $configparas['maxbodylength']= abs(intval($outputinfo->{$bdprss_db->pbaomaxlength}));
205 $configparas['maxwordlength']= abs(intval($outputinfo->{$bdprss_db->pbaomaxwordlength}));
206 $configparas["itemdateformat"]= BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->pbaoitem_date_format});
207 $configparas["tagset"]= BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->pbaoallowablexhtmltags});
208
209//widget paras
210 $configparas['template_sidebarwidget'] = BDPRSS2::codeQuotes($outputinfo->template_sidebarwidget);
211
212//cache page options
213 $configparas["iscachable"] = $outputinfo->{$bdprss_db->pbaoiscachable};
214 $configparas["template_cache"]=BDPRSS2::codeQuotes($outputinfo->template_cache);
215 $configparas["cacheviewpage"]= BDPRSS2::codeQuotes($outputinfo->cache_view_page);
216
217//feed options
218 $configparas["channel_title"]= BDPRSS2::codeQuotes($outputinfo->channel_title);
219 $configparas["htmlpage"]= BDPRSS2::codeQuotes($outputinfo->channel_link);
220 $configparas["channel_description"]= BDPRSS2::codeQuotes($outputinfo->channel_description);
221 $configparas["channel_language"]= BDPRSS2::codeQuotes($outputinfo->channel_language);
222 $configparas["channel_copyright"]= BDPRSS2::codeQuotes($outputinfo->channel_copyright);
223
224//kalender options
225 $configparas["template_kalender"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->otemplate_kalender});
226 $configparas["archive_date_format"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->oarchive_date_format});
227 $configparas["kalendermonthslist"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->okalendermonthslist});
228 $configparas["kalenderboxtablecaption"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->okalenderboxtablecaption});
229 $configparas["kalender_last"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->okalender_last});
230 $configparas["kalender_next"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->okalender_next});
231 $configparas["kalenderboxdaysofweeklist"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->okalenderboxdaysofweeklist});
232
233 if($bdprss_db->serverstatus['pbacache']['status']=='ok'){
234 if(isset($bdprss_db->serverstatus['full_cache_time']['notice'])) $configparas["pba_full_cache_time"]=$bdprss_db->serverstatus['full_cache_time']['notice'];
235 if(isset($bdprss_db->serverstatus['kalenderquery_cache_time']['notice'])) $configparas["pba_kalenderquery_cache_time"]=$bdprss_db->serverstatus['kalenderquery_cache_time']['notice'];
236 if(isset($bdprss_db->serverstatus['feedlistquery_cache_time']['notice'])) $configparas["pba_feedlistquery_cache_time"]=$bdprss_db->serverstatus['Delete feedlistquery_cache_time']['notice'];
237 }
238 if(isset($bdprss_db->serverstatus['rewriting']['status'])) $configparas["short_cache_link"] = ($bdprss_db->serverstatus['rewriting']['status']=='ok');
239
240 $configparas["superparameter"]=BDPRSS2::codeQuotes($outputinfo->{$bdprss_db->pbao_superparameter});
241
242 $superparameterarray=PBALIB::process_superparameter($configparas["superparameter"]);
243 foreach($superparameterarray as $paraname => $paravalue){
244 $configparas[$paraname]=$paravalue;
245 }
246 unset ($configparas["superparameter"]);
247
248 return $configparas;
249 }
250
251 function process_superparameter($superparameter=""){
252 $superparameterarray=array();
253 preg_match_all("'###SUPERPARAMETER_([A-Za-z0-9_-]+?)_BEGIN###(.*?)###SUPERPARAMETER_[A-Za-z0-9_-]*?END###'s", $superparameter, $match);
254 //print_r($match);
255 if(is_array($match) && isset($match[1]) && isset($match[2])){
256 foreach($match[1] as $match1key => $match1value){
257 //echo "<br>matchkey is : " . $matchkey . "value is: ";
258 if(trim($match[2][$match1key]) == "false") {
259 $superparameterarray[$match1value]=false;
260 }elseif(trim($match[2][$match1key]) == "true"){
261 $superparameterarray[$match1value]=true;
262 }else{
263 $superparameterarray[$match1value]=$match[2][$match1key];
264 }
265 }
266 //print_r($superparameterarray);
267 }
268 return $superparameterarray;
269 }
270
271 function bootstrap_parameters($firstparafromfunctioncall){
272 global $post;
273
274 //initialize all neeeded parameters with default values
275 $resultparas=get_pbadefaultparameter();
276 //get lists in array to name all possible parameters for looping through
277 $paralist=PBALIB::get_para_definition();
278
279 $resultparas['url2plugindir'] = get_option('home') . '/wp-content/plugins/'.PBA_DIRECTORY.'/';
280
281 //$pbaout['debug'] .= "\n<br>Debug: Default resultparas: " . PBALIB::get_r($resultparas);
282
283 //get function call parameters
284 if(is_array($firstparafromfunctioncall)) $funcdefparas=$firstparafromfunctioncall;
285
286 //'N' meaning not set used for backward compatibility
287 //stupid idea? we possibly may use false to overwrite the maxitems in function call
288 if($funcdefparas["maxitems"] == 'N') unset($funcdefparas["maxitems"]);
289
290 //we have got all parameters from function call now and normalized them
291 //$pbaout['debug'] .= "\n<br>Debug: funcdefparas: " . PBALIB::get_r($funcdefparas);
292
293//if exist, we overwrite default output id paras with paras from func call, do other later
294//we unset the output id function parameters, so they will not overwrite config parameter values later
295 if(isset($funcdefparas['outputid'])) {
296 $resultparas['outputid'] = $funcdefparas['outputid'];
297 }else{
298 if(isset($funcdefparas['getoutputconfigbypageid'])) $resultparas['getoutputconfigbypageid'] = $funcdefparas['getoutputconfigbypageid'];
299 }
300 unset($funcdefparas["outputid"]);
301 unset($funcdefparas['getoutputconfigbypageid']);
302 if(isset($funcdefparas['outputidfromurlallowed'])) $resultparas['outputidfromurlallowed'] = $funcdefparas['outputidfromurlallowed'];
303 unset($funcdefparas["outputidfromurlallowed"]);
304
305
306 //get parameters from url
307 $urlparas=PBALIB::geturlparameter();
308 //$pbaout['debug'] .= "\n<br>Debug: urlparas: " . PBALIB::get_r($urlparas);
309
310 //now let's apply limits to url parameter output_id and find out the output id to take
311 //first normalize output id parameter from url - check other values later
312 $urlparas['outputid']=abs(intval($urlparas['outputid']));
313 if(!$urlparas['outputid']>0) unset($urlparas['outputid']);
314
315 if($resultparas['outputidfromurlallowed'] === false){
316 unset($urlparas['outputid']);
317 }elseif($resultparas['outputidfromurlallowed'] !== true){
318 if(!strstr("," . str_replace(" ", '', $resultparas['outputidfromurlallowed']) . ",", $urlparas['outputid'])) unset($urlparas['outputid']);
319 }
320 if(isset($urlparas['outputid'])) $resultparas['outputid'] = intval($urlparas['outputid']);
321
322 //now we know, which output definition we have to take from db -> let's get it
323 $configparas=PBALIB::getoutputconfigparameter($resultparas);
324 if(!is_array($configparas)) {
325 return false;
326 }
327
328 if(function_exists('get_page_link')){
329 if($funcdefparas['show_sidebarwidget'] == 'Y'
330 && $configparas['page2hookin'] > 0){
331 $resultparas['baseurl']=get_page_link($configparas['page2hookin']);
332 $resultparas['search_page_baseurl']="";
333 }else{
334 $resultparas['baseurl']=get_page_link();
335 }
336 if(!strstr($resultparas['baseurl'],'?')
337 && !preg_match('/\/$/',$resultparas['baseurl'])
338 ) $resultparas['baseurl'] = $resultparas['baseurl'] . '/';
339 }else{
340 $resultparas['baseurl'] = $post->guid;
341 }
342 if($resultparas['search_page_baseurl']=="") $resultparas['search_page_baseurl'] = $resultparas['baseurl'];
343 if($resultparas['htmlpage']=="")$resultparas['htmlpage'] = $resultparas['baseurl'];
344 if($configparas["htmlpage"]=="") unset($configparas["htmlpage"]); //this will make the default post->guid be used
345
346 //copy config paras over default paras
347 if($configparas){
348 foreach($configparas as $paraname => $paravalue){
349 $resultparas[$paraname]=$paravalue;
350 }
351 }
352
353 //copy func defined paras over default paras
354 if($funcdefparas){
355 foreach($funcdefparas as $paraname => $paravalue){
356 $resultparas[$paraname]=$paravalue;
357 }
358 }
359
360 //check if we want to show a sidebar
361 if($resultparas['show_sidebarwidget'] == 'Y'){
362 $resultparas['template_ticker']=$resultparas['template_sidebarwidget'];
363 $resultparas["add_social_bookmarks"]='N';
364 unset($urlparas['searchphrase']);
365 unset($urlparas['cacheid']);
366 unset($urlparas['kalreq']);
367 }
368
369 //to be completed filter url parameter to allowed values
370 if($resultparas['listidfromurlallowed'] === false){
371 unset($urlparas['listid']);
372 }elseif($resultparas['listidfromurlallowed'] !== true){
373 if(!strstr("," . str_replace(" ", '', $resultparas['listidfromurlallowed']) . ",", $urlparas['listid'])) unset($urlparas['listid']);
374 }
375 if($urlparas['kalreq'] === false) unset($paralist["url"]["kalreq"]);
376 if($urlparas['feedrequest'] === false) unset($paralist["url"]["feedrequest"]);
377 if($resultparas['searchenabled']){
378 $resultparas['searchactionhref'] = PBALIB::makesearchactionhref($resultparas);
379 $resultparas['hiddensearchformformvalues'] = PBALIB::makehiddenformvalues($resultparas);
380 $urlparas['searchphrase']=utf8_decode($urlparas['searchphrase']);
381 }else{
382 unset($urlparas['searchphrase']);
383 $resultparas['template_search_box']="";
384 }
385
386 //copy url paras over result got by funcdef paras copying
387 foreach($paralist["url"] as $paraname => $paravalue){
388 if(isset($urlparas[$paraname])){
389 if($paravalue) $resultparas[$paraname]=$urlparas[$paraname]; //false means not overwriting !!!
390 }
391 }
392 return $resultparas;
393 }
394
395//functions needed for debugging
396 function get_r($invar){
397 ob_start();
398 print_r($invar);
399 $outvar = ob_get_contents();
400 ob_end_clean();
401 return $outvar;
402 }
403
404 function process_profiler($profilerarray=array()){
405 $profilerself['Profiler reached at']=microtime();
406 $profilerarray=array_merge($profilerarray, $profilerself);
407 $precision=4;
408 $first=true;
409 $counter=0;
410 $outstring="\nOutput from Profiler:";
411 foreach($profilerarray as $point => $microtimer){
412 $timearray = explode(" ", $microtimer);
413 $microtimestamp = (substr($timearray[1],6,4) + substr($timearray[0],0,$precision + 2));
414 if($first) { $starttime = $microtimestamp; $last=$microtimestamp; $first=false; $outstring .= "<table>"; }
415 $outstring .= "<tr>\n<td>Checkpoint: " . $point .
416 "</td><td> Time: " . substr($timearray[1],0,6) . $microtimestamp .
417 "</td><td> Diff: " . round($microtimestamp - $last,$precision) .
418 "</td><td> Total: " . round($microtimestamp - $starttime,$precision) . "</td>\n</tr>";
419 $last=$microtimestamp;
420 }
421 $outstring .= "</table>";
422 return $outstring;
423 }
424
425//functions to process page templates
426 function template_replacements($template, &$replacements){
427 //we will not change input values, but pass replacements like eg resultparas by reference parameters to be quick,
428 //is it really neccessary? or will the php optimizer understand itself not to pass variables as value,
429 //until the value is not changed?
430 preg_match_all('/###[0-9A-Z_]+###/', $template, $uppertags);
431 foreach($uppertags[0] as $key => $uppertag){
432 $tag=str_replace('#','',strtolower($uppertag));
433 if(isset($replacements[$tag])) {
434 $needle[]=$uppertag;
435 $replace[]=$replacements[$tag];
436 }
437 }
438 $processed_template=str_replace($needle, $replace, $template);
439 return $processed_template;
440 }
441
442 function split_template($template, $bodytag=false, $looptag='LOOP', $headeronly=false){
443 if($bodytag===false) $bodytag = '###INSIDELOOP###';
444 $split_template['aroundloop']=preg_replace('/###'.$looptag.'BEGIN###.*?###'.$looptag.'END###/s',$bodytag,$template);
445 preg_match("'(.*)###".$looptag."BEGIN###(.*?)###".$looptag."END###(.*)'s", $template, $match);
446 $split_template['beforeloop']=$match[1];
447 $split_template['inloop']=$match[2];
448 $split_template['postloop']=$match[3];
449 if($headeronly=="header"){
450 return $split_template['beforeloop'];
451 }elseif($headeronly=="footer"){
452 return $split_template['postloop'];
453 }elseif($headeronly=="body"){
454 return $split_template['inloop'];
455 }elseif($headeronly=="aroundloop"){
456 return $split_template['aroundloop'];
457 }
458 return $split_template;
459 }
460
461 function process_template_conditions($processed_template="", $conditionarray=array()){
462 foreach($conditionarray as $value){
463 $conditionaltag=$value['tag'];
464 $expression=$value['expression'];
465 if($expression !== true) $expression = false;
466 if($expression) {
467 $conditionaltagarray=array('###'.$conditionaltag.'BEGIN###', '###'.$conditionaltag.'END###');
468 $processed_template = str_replace($conditionaltagarray , '', $processed_template);
469 } else {
470 $processed_template=PBALIB::split_template($processed_template, '', $conditionaltag, 'aroundloop');
471 }
472 }
473 return $processed_template;
474 }
475
476 function preprocess_headertemplate(&$resultparas, &$pbaout, $footer=false){
477 $pre="pre";
478 if($footer) $pre="post";
479 if($resultparas["profiler_enabled"]) $pbaout['profiler']['Start making a ' . $pre . ' header']=microtime();
480 if($resultparas['kalreq']) {
481 $pbaheader = $resultparas['template_' . $resultparas['template']];
482 }elseif($resultparas['pagetype'] == 'cachepage'){
483 $pbaheader = $resultparas['template_' . $resultparas['template']];
484 }elseif($resultparas['feedrequest']) {
485 $pbaheader_tmp = $resultparas['template_' . $resultparas['template']];
486 $headeronly="header";
487 if($footer) $headeronly="footer";
488 $pbaheader = PBALIB::split_template($pbaheader_tmp, false, 'LOOP', $headeronly);
489 // $pbaheader=$resultparas[$pre . '_loop_feedtemplate'];
490 } else {
491 $pbaheader_tmp = $resultparas['template_' . $resultparas['template']];
492 $headeronly="header";
493 if($footer) $headeronly="footer";
494 $pbaheader = PBALIB::split_template($pbaheader_tmp, false, 'LOOP', $headeronly);
495 // $pbaheader=$resultparas[$pre . '_loop_template'];
496 if($footer && $resultparas['add_social_bookmarks']=="Y") {
497 //this looks stupid, why to format it here?
498 $pbaheader = str_replace('###URL2PLUGINDIR###' , $resultparas['url2plugindir'], $resultparas['headersbtemplate']) . $pbaheader;
499 }
500 }
501
502 //first let's cut out the condional parts, where the condition is false
503 //Syntax: $conditionarray[]=array('tag' =>'MYCONDITIONALTAG','expression' => (true));
504
505 //why to use such sloppy conditions here - haven't we calculated pagetype for this?
506 $conditionarray[]=array('tag' =>'ISSEARCH','expression' => ($resultparas['searchphrase'] !=""));
507 $conditionarray[]=array('tag' =>'ISDATE','expression' => ($resultparas['archivdate']!=""));
508 $conditionarray[]=array('tag' =>'ISNODATENOSEARCH','expression' => ($resultparas['searchphrase'] =="" && $resultparas['archivdate']==""));
509 $conditionarray[]=array('tag' =>'LASTLINK','expression' => ($pbaout['lastpageexists']));
510 $conditionarray[]=array('tag' =>'NEXTLINK','expression' => ($pbaout['nextpageexists']));
511
512 if($resultparas["debug"]) $pbaout['debug'] .= "\n<br>Debug: conditionarray: " . PBALIB::get_r($conditionarray);
513 $pbaheader=PBALIB::process_template_conditions($pbaheader, $conditionarray);
514
515 if($resultparas["debug"]) $pbaout['debug'] .= "\n<br>Debug: See the pbaheader: " . PBALIB::get_r($pbaheader);
516
517 return $pbaheader;
518 }
519
520 function formatheader(&$resultparas, &$pbaout, $footer=false, $formatteditem=false, $pbaheader){
521
522 //will see later if we need more paras
523
524 //variables we understand
525 if($resultparas['cacheid']>0) $formattedheader = $formatteditem; //copy over variables from loop to understand them here
526 $formattedheader['searchphrase']=$resultparas['searchphrase'];
527 $formattedheader['archivedate']=$resultparas['archivdate'];
528 $formattedheader['feedhref']=$resultparas['feedhref'];
529 $formattedheader['founditems']=$pbaout['founditems'];
530 $formattedheader['startitem']=$pbaout['startitem'];
531 $formattedheader['lastitem']=$pbaout['lastitem'];
532 $formattedheader['lastpage']=$pbaout['lastpage'];
533 $formattedheader['nextpage']=$pbaout['nextpage'];
534 $formattedheader['lastpagehref']=$pbaout['lastpagehref'];
535 $formattedheader['nextpagehref']=$pbaout['nextpagehref'];
536 $formattedheader['kalenderhref']=$resultparas['kalenderhref'];
537 $formattedheader['feedlisthref']=$resultparas['feedlisthref'];
538 $formattedheader['feedopmlhref']=$resultparas['feedopmlhref'];
539 $formattedheader['outputname']=$resultparas['outputname'];
540
541 $formattedheader['channel_title']=$resultparas["channel_title"];
542 $formattedheader['htmlpage']=$resultparas["htmlpage"];
543 $formattedheader['channel_description']=$resultparas["channel_description"];
544 $formattedheader['channel_language']=$resultparas["channel_language"];
545 $formattedheader['channel_copyright']=$resultparas["channel_copyright"];
546 $formattedheader['firstitem_datefeed']= $pbaout['firstitem_datefeed'];
547 $formattedheader['htmlhref']= $resultparas['htmlhref'];
548 $formattedheader['baseurl']=$resultparas['baseurl'];
549 $formattedheader['pba_version']= PBA_PRODUCT . " " . PBA_VERSION;
550
551 $formattedheader['kalenderdate']=$pbaout['kalenderdate'];
552
553 //boxes we understand
554 $formattedheader['kalenderlist_box']=$pbaout['kalenderlist_box'];
555 $formattedheader['kalender_box']=$pbaout['kalender_box'];
556 $formattedheader['feedlistsidebar_box']=$pbaout['feedlistsidebar_box'];
557 $formattedheader['search_box']=$pbaout['search_box'];
558
559 //now do the final replacements
560 foreach($formattedheader as $key => $value){
561 $needle[$key]="###" . strtoupper($key) . "###";
562 //echo $needle[$key] . "\n"; //take this to find out with variables the engine understands
563 $replace[$key]=$value;
564 }
565
566// if($pre=="post" && $resultparas["debug"]) $pbaout['debug1'] .= "\n<br>Debug: See the needles: " . PBALIB::get_r($needle);
567// if($pre=="post" && $resultparas["debug"]) $pbaout['debug1'] .= "\n<br>Debug: See the replaces: " . PBALIB::get_r($replace);
568// if($pre=="post" && $resultparas["debug"]) $pbaout['debug1'] .= "\n<br>Debug: See the template: " . PBALIB::get_r($pbaheader);
569
570 $formattedheader['result']=str_replace($needle, $replace, $pbaheader);
571 return $formattedheader;
572 }
573
574 function preprocess_itemtemplate(&$resultparas){
575 //get the item template
576 if($resultparas['cacheid']>0){
577 $itemtemplate=""; //just an empty template, we will print it with the footer - is this clever???
578 }elseif($resultparas['feedrequest']){
579 $itemtemplate_tmp = $resultparas['template_' . $resultparas['template']];//fixme later to template come from resultparas again, was before: $itemtemplate=$resultparas['in_loop_feedtemplate'];
580 $itemtemplate = PBALIB::split_template($itemtemplate_tmp, false, 'LOOP', 'body');
581 }else{
582 $itemtemplate_tmp = $resultparas['template_' . $resultparas['template']];
583 $itemtemplate = PBALIB::split_template($itemtemplate_tmp, false, 'LOOP', 'body');
584 if($resultparas['add_social_bookmarks']=="Y") $itemtemplate = str_replace('###ITEM_BODY###' , '###ITEM_BODY###' . $resultparas['itemssbtemplate'], $itemtemplate);
585 }
586 //add some standard components to the template, if desired
587 if($resultparas["iscachable"]=="Y" && $resultparas["append_cache_link"]=="Y") $itemtemplate = str_replace('###ITEM_BODY###' , '###ITEM_BODY###' . $resultparas['cachelinktemplate'], $itemtemplate);
588 if($resultparas["noextralink"]!="Y") $itemtemplate = str_replace('###ITEM_BODY###' , '###ITEM_BODY###' . $resultparas['extralinktemplate'], $itemtemplate);
589
590 return $itemtemplate;
591 }
592
593 function formatitem(&$item, &$resultparas, $itemtemplate, $resultrownumber, $itemvaluesneeded=false){
594 //takes an item-site object row from dbquery and gives back
595 //in array field result the result,
596 //and further in array field debug some debug output
597
598 //the row number in the list given out
599 $formatteditem['result_rownumber']=$resultrownumber + 1;
600
601 $formatteditem['baseurl']=$resultparas['baseurl'];
602
603 //read in the row ... for site
604 $formatteditem['site_id']=$item->siteid;
605 $formatteditem['site_name']=$item->site_name;
606 $formatteditem['site_feedurl']=$item->feed_url;
607 $formatteditem['site_nameoverridden']=$item->site_name_overriden;
608 $formatteditem['site_description']=$item->description;
609 $formatteditem['site_license']=$item->site_license;
610 $formatteditem['site_url']=$item->site_url;
611 $formatteditem['site_updatetime']=$item->site_update_time;
612
613 //read in the row ... for item
614 $formatteditem['item_id']=$item->itemid;
615 $formatteditem['item_url']=$item->item_url;
616 $formatteditem['item_name']=$item->item_name;
617 $formatteditem['item_sitename']=$item->item_site_name;
618 $formatteditem['item_siteurl']=$item->item_site_url;
619 $formatteditem['item_license']=$item->item_license;
620 $formatteditem['item_timestamp']=$item->item_time;
621 $formatteditem['item_updatetimestamp']=$item->item_update_time;
622 $formatteditem['item_body']=$item->text_body;
623
624 //we got the rows from database,
625 //now do some quick processing with the raw row values
626 //and get in this way some new values
627
628 $formatteditem['cachehref']=PBALIB::makecachehref($resultparas, $formatteditem['item_id']);
629
630 //make an item text as to be displayed as cache item
631 if($itemvaluesneeded['item_cachebody']){
632 $formatteditem['item_cachebody'] = BDPRSS2::codeQuotes($formatteditem['item_body']);
633 $formatteditem['item_cachebody'] = eregi_replace('&lt;' , '<', $formatteditem['item_cachebody']);
634 $formatteditem['item_cachebody'] = eregi_replace('&gt;' , '>', $formatteditem['item_cachebody']);
635 }
636
637 //process the item body
638 if($itemvaluesneeded['item_body'] || $itemvaluesneeded['item_cachebody'] || $itemvaluesneeded['item_feedbody'] || $itemvaluesneeded['item_description']){
639 $formatteditem['item_body']=BDPRSS2::remove_link_and_cache_links_from_item($formatteditem['item_body']);
640 }
641 //this seems to be for feed usage
642 if($itemvaluesneeded['item_description']){
643 $formatteditem['item_description'] = BDPRSS2::packageItemText($formatteditem['item_body'], $resultparas['maxbodylength'], $resultparas['maxwordlength'], false, $resultparas['formattedtagset']);
644 }
645 if($itemvaluesneeded['item_feedbody']){
646 $formatteditem['item_feedbody']= $formatteditem['item_body'];
647 }
648 $formatteditem['item_datefeed']= date('r', $formatteditem['item_timestamp']);
649 if($formatteditem['result_rownumber'] == 1) $formatteditem['firstitem_datefeed'] = $formatteditem['item_datefeed'];
650
651 //package item text for list description display
652 if($itemvaluesneeded['item_body']){
653 $formatteditem['item_body'] = BDPRSS2::packageItemText($formatteditem['item_body'], $resultparas['maxbodylength'], $resultparas['maxwordlength'], true, $resultparas['formattedtagset']);
654 }
655 //process item titles decode ": " separator in item titles -- may be buggy, needs to come from site details overridden and have some testing
656 if($formatteditem['site_nameoverridden'] != 'Y'){
657 $itemtitlearray=explode(': ', $formatteditem['item_name'], 2);
658 if(strlen($itemtitlearray[1])>0) {
659 $formatteditem['item_name'] = $itemtitlearray[1];
660 $formatteditem['site_name'] = $itemtitlearray[0];
661 }else{
662 //site name not overridden, but no : in item
663 $formatteditem['site_name']=$formatteditem['item_sitename'];
664 }
665 } else {
666 //site_name overridden
667 $formatteditem['site_name'] = $formatteditem['site_name']; //bogus, no need for this
668 }
669
670 if(strlen($formatteditem['item_siteurl'])>0) $formatteditem['site_url'] = $formatteditem['item_siteurl'];
671
672 $formatteditem['site_name'] = BDPRSS2::packageItemText($formatteditem['site_name']);
673 $formatteditem['item_name'] = BDPRSS2::packageItemText($formatteditem['item_name']);
674
675 //generate dates in some configured and standard formats
676 if(strlen($resultparas["itemdateformat"]."") >0){
677 $formatteditem['item_datetime'] = date($resultparas["itemdateformat"]."", ($formatteditem['item_timestamp'])+(0*3600));
678 } else {
679 $formatteditem['item_datetime'] = PBALIB::gettheage($formatteditem['item_timestamp'], $resultparas['ageunit'], $resultparas['ageunitsstring']);
680 }
681
682 if(strlen($resultparas["itemdateformat"]."") >0){
683 $formatteditem['item_updatedatetime'] = date($resultparas["itemdateformat"]."", ($formatteditem['item_updatetimestamp'])+(0*3600));
684 } else {
685 $formatteditem['item_updatedatetime'] = PBALIB::gettheage($formatteditem['item_updatetimestamp'], $resultparas['ageunit'], $resultparas['ageunitsstring']);
686 }
687 $formatteditem['item_updatedate']= date('r', $formatteditem['item_updatetimestamp']);
688
689 //unset not needed values, to be done later
690 unset ($formatteditem['item_sitename']);
691 unset ($formatteditem['item_siteurl']);
692 unset ($formatteditem['site_nameoverridden']);
693
694 //build up variables for the template
695 $result=PBALIB::template_replacements($itemtemplate, &$formatteditem);
696 $formatteditem['result']=$result;
697// foreach($formatteditem as $key => $value){
698// $needle[$key]="###" . strtoupper($key) . "###";
699// echo $needle[$key] . "\n"; //take this to find out with variables the engine understands
700// $replace[$key]=$value;
701// }
702// $formatteditem['result']=str_replace($needle, $replace, $itemtemplate);
703 return $formatteditem;
704 }
705
706//functions to generate href values
707 function makefeedlisthref(&$resultparas){
708 if($resultparas['short_cache_link']){
709 $feedlisthref = $resultparas['baseurl'] . 'feedlist/';
710 }else{
711 $joiner='?';
712 if(strstr($resultparas['baseurl'], '?')) $joiner = '&';
713 $feedlisthref = $resultparas['baseurl'] . $joiner . 'feedlist';
714 }
715 return $feedlisthref;
716 }
717
718
719 function makefeedopmlhref(&$resultparas){
720 if($resultparas['short_cache_link']){
721 $feedopmlhref = $resultparas['baseurl'] . 'opml/';
722 }else{
723 $joiner='?';
724 if(strstr($resultparas['baseurl'], '?')) $joiner = '&';
725 $feedopmlhref = $resultparas['baseurl'] . $joiner . 'opml';
726 }
727 return $feedopmlhref;
728 }
729
730 function makesearchactionhref(&$resultparas){
731 if(strstr($resultparas['search_page_baseurl'],'?')) {
732 $searchactionhref=$resultparas['search_page_baseurl'];
733 }else{
734 $searchactionhref=$resultparas['search_page_baseurl'] . 'index.php';
735 }
736 return $searchactionhref;
737 }
738
739 function makehiddenformvalues(&$resultparas){
740 $hiddenformvalues = "";
741 if(preg_match('/\?(.+)$/',$resultparas['search_page_baseurl'],$baseurlquerystring)) {
742 parse_str($baseurlquerystring[1], $baseurlgetarray);
743 //print_r($baseurlgetarray);
744 foreach($baseurlgetarray as $key => $value){
745 $hiddenformvalues .= '<input type="hidden" name="'.$key.'" value="'.$value.'" />';
746 }
747 }
748 return $hiddenformvalues;
749 }
750
751 function makecachehref(&$resultparas, $itemid){
752 //not changing resultparas, just passing by reference to gain speed
753 $itemid=abs(intval($itemid));
754 $baseurl = $resultparas['baseurl'];
755 if($resultparas['cacheviewpage'] != "" ) $baseurl = $resultparas['cacheviewpage'];
756
757 if($resultparas['short_cache_link']){
758 $cachehref = $baseurl . $itemid . '/';
759 }else{
760 $joiner='?';
761 if(strstr($baseurl, '?')) $joiner = '&';
762 $cachehref = $baseurl . $joiner . 'cacheid=' . $itemid;
763 }
764 return $cachehref;
765 }
766
767
768 function makefeedhref(&$resultparas){
769 //not changing resultparas, just passing by reference to gain speed
770 //calculate the link to the feedalized version of this page
771 if(!$resultparas['feedrequest']){
772 if($resultparas['feedpage']!="") {
773 //use this url replaced by feedurlbase and strip page info
774 $feedhref=$resultparas['feedpage'] . preg_replace("/[&\?]?tickerpage[\/=][0-9]+\/?/s", '', $resultparas['srequri']);
775 }else{
776 $feedhref= $resultparas['baseurl'] . preg_replace("/[&\?]?tickerpage[\/=][0-9]+\/?/s", '', $resultparas['srequri']);
777 if(strstr($feedhref,'?')) {
778 $feedhref .= '&feed';
779 } else {
780 if($resultparas['short_cache_link']){
781 $feedhrefworkaround="";
782 if($resultparas['searchphrase'] == "" && $resultparas['archivdate'] == "") $feedhrefworkaround="ticker-";
783 $feedhref .= $feedhrefworkaround . 'feed/';
784 }else{
785 $feedhref .= '?feed';
786 }
787 }
788 }
789 } else {
790 //this is a feedrequest, so let us give out a link to ourself
791 //wrong idea - this could also be a feedlist?
792 $feedhref = $resultparas['baseurl'] . $resultparas['srequri'];
793 //to do: and calculate a nice html link for use in feed header
794 }
795 return $feedhref;
796 }
797
798 function makehtmlhref(&$resultparas){
799 //used to calculate the href value to pba html page when displaying a feed
800 if($resultparas['searchphrase'] == "" && $resultparas['archivdate'] == ""){
801 $htmlhref = $resultparas['htmlpage'];
802 } else {
803 if($resultparas['short_cache_link']){
804 $htmlhref = $resultparas['htmlpage'] . preg_replace("/\/(ticker-)?feed\//s", '/',$resultparas['srequri']);
805 }else{
806 $htmlhref = $resultparas['htmlpage'] . preg_replace("/[&\?]feed/s", '', str_replace('?feed&' , '&feed?', $resultparas['srequri']));
807 }
808 }
809 return $htmlhref;
810 }
811
812 function makelastpagehref($lastpage, &$resultparas){
813 //resultparas should not be changed, just overloaded by reference to gain speed in processing
814 if($lastpage == 1) {
815 if($resultparas['specialpage1url']
816 && $resultparas['specialpage1url'] != 'N'
817 && $resultparas['searchphrase']== ""
818 && $resultparas['archivdate']== ""
819 ){
820 $lastpagehref = $resultparas['specialpage1url'];
821 }else{
822 $lastpagehref= $resultparas['baseurl'] . preg_replace("/[&\?]?tickerpage[\/=][0-9]+\/?/s", '', $resultparas['srequri']);
823 }
824 } else {
825 if(strstr($resultparas['srequri'],"tickerpage/".$resultparas['tickerpage']."/")) {
826 $lastpagehref=$resultparas['baseurl'] . str_replace("tickerpage/".$resultparas['tickerpage']."/","tickerpage/".$lastpage."/",$resultparas['srequri']);
827 }else{
828 $lastpagehref=$resultparas['baseurl'] . str_replace("tickerpage=".$resultparas['tickerpage'],"tickerpage=".$lastpage,$resultparas['srequri']);
829 }
830 }
831 return $lastpagehref;
832 }
833
834 function makenextpagehref($nextpage, &$resultparas){
835 //resultparas should not be changed, just overloaded by reference to gain speed in processing
836 if($nextpage == 2){
837 //add the page to the link
838 //we have to decide, if we add a short uri rewritten page link or a query style link, on start page, there s no way to determine this from URI, so we need to get it from some config value
839 if(strstr($resultparas['srequri'],'?')){
840 if($resultparas['short_cache_link']){
841 $slash ="/";
842 if(strstr($resultparas['srequri'],'/?')) $slash ="";
843 $nextpagehref= $resultparas['baseurl'] . str_replace('?', $slash . 'tickerpage/' . $nextpage . '?', $resultparas['srequri']);
844 } else {
845 $nextpagehref= $resultparas['baseurl'] . $resultparas['srequri'] . '&tickerpage=' . $nextpage;
846 }
847 }else{
848 //no ? in url
849 if($resultparas['short_cache_link']){
850 $slash ="";
851 if(substr($resultparas['baseurl'] . $resultparas['srequri'], strlen($resultparas['baseurl'] . $resultparas['srequri']) - 1) != '/') $slash ="/";
852 $nextpagehref= $resultparas['baseurl'] . $resultparas['srequri'] . $slash . 'tickerpage/' . $nextpage . '/';
853 } else {
854 $joiner='?';
855 if(strstr($resultparas['baseurl'], '?')) $joiner = '&';
856 $nextpagehref= $resultparas['baseurl'] . $resultparas['srequri'] . $joiner . 'tickerpage=' . $nextpage;
857 }
858 }
859 }else{
860 // nextpage > 2 - replace existing page identifier
861 //echo "srequri: " . $resultparas['srequri'] . "<br>";
862 if(strstr($resultparas['srequri'],'tickerpage=')){
863 $nextpagehref= $resultparas['baseurl'] . str_replace('tickerpage=' . $resultparas['tickerpage'], 'tickerpage=' . $nextpage, $resultparas['srequri']);
864 }else{
865 $nextpagehref= $resultparas['baseurl'] . str_replace('tickerpage/' . $resultparas['tickerpage'] . '/', 'tickerpage/' . $nextpage . '/', $resultparas['srequri']);
866 }
867 }
868 return $nextpagehref;
869 }
870
871 function makedatepagehref($thedate="", &$resultparas, $regardkalenderlinkpart=false, $forcekalender=false){
872 //check input values
873 if ($thedate!="" && !ereg("[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]", $thedate)) $thedate = "";
874 if($thedate=="") $forcekalender = true;
875
876 //depends on $resultparas['short_cache_link']
877 $kalender="";
878 $datepart="";
879 if($resultparas['short_cache_link']){
880 if($forcekalender || ($regardkalenderlinkpart && (substr($resultparas['srequri'], 0, 8) == "calendar" || substr($resultparas['srequri'], 0, 8) == "kalender"))) $kalender="calendar/";
881 if ($thedate!="") $datepart = $thedate . '/';
882 $datepagehref = $resultparas['baseurl'] . $kalender . $datepart;
883 } else {
884 if($forcekalender || ($regardkalenderlinkpart && preg_match('/[&\?][kc]alend[ae]r/',$resultparas['srequri']))) $kalender="calendar";
885 if ($thedate!="") {
886 $datepart = 'itemdate=' . $thedate;
887 if($kalender != "") $kalender = "&" . $kalender;
888 }
889 $joiner='?';
890 if(strstr($resultparas['baseurl'], '?')) $joiner = '&';
891 $datepagehref= $resultparas['baseurl'] . $joiner . $datepart . $kalender;
892 }
893 return $datepagehref;
894 }
895
896//functions to generate boxes with content
897 function formatted_feedlist(&$resultparas, $dateformat="", $template=false){
898 global $bdprss_db;
899
900 //$liststyle shall be one of sidebar, feedlist, opml
901 $maxage=$resultparas['feedlistmaxage']; //to be done in parameter definition, 0 means filter disabled, age in seconds
902 $list_id=$resultparas['listid'];
903
904 $split_template=PBALIB::split_template($template, '###INSIDELOOP###');
905
906 if($resultparas['pba_feedlistquery_cache_time'] > 0) {
907 $key=array($maxage, $list_id);
908 $feedlistcache=@PBALIB::pba_cache($key, $dummy, 'get', 'feedlist', 'mixed', $resultparas['pba_feedlistquery_cache_time'], 'OK');
909 if($feedlistcache[1]) {
910 if($resultparas["profiler_enabled"]) $pbaout['profiler']['Got feedlist cache']=microtime();
911 $result = $feedlistcache[0];
912 }
913 }
914 if(!$feedlistcache[1]){
915 if($resultparas["profiler_enabled"]) $pbaout['profiler']['Start query for feedlist']=microtime();
916 $result = $bdprss_db->getsiteswithupdatetime($maxage, $list_id);
917 if($resultparas['pba_feedlistquery_cache_time'] > 0) {
918 $pba_cachereturn=PBALIB::pba_cache($feedlistcache[0], $result, 'write', 'feedlist', 'mixed', 0, 'OK');
919 }
920 }
921 foreach($result as $r) {
922 //$feedlist_loop['feedlist_loop_site_id'] = $r->{$bdprss_db->cidentifier};
923 $feedlist_loop['feedlist_loop_feedurl'] = $r->{$bdprss_db->cfeedurl};
924 $feedlist_loop['feedlist_loop_siteurl'] = $r->{$bdprss_db->csiteurl};
925 $feedlist_loop['feedlist_loop_site'] = $r->{$bdprss_db->csitename};
926 $updated = $r->lastupdate;
927 if(strlen($dateformat . "") >0){
928 $feedlist_loop['feedlist_loop_date']=date($dateformat, $updated);
929 }else{
930 $feedlist_loop['feedlist_loop_date']=PBALIB::gettheage($updated, $resultparas['ageunit'], $resultparas['ageunitsstring']);
931 }
932 //build up variables for the inner template - here is potential for optimization - resul from test: optimization potential minimal - not measurable
933 //we shall analyze the template above to find out, which variables we need in inner loop
934 foreach($feedlist_loop as $key => $value){
935 $needle[$key]="###" . strtoupper($key) . "###";
936 $replace[$key]=$value;
937 }
938 $feedlist['insideloop'] .=str_replace($needle, $replace, $split_template['inloop']);
939 }
940 //now the outer template
941
942 $feedlist['result'] =str_replace('###INSIDELOOP###', $feedlist['insideloop'], $split_template['aroundloop']);
943 //print_r($feedlist);
944 return $feedlist;
945 }
946
947 function formatkalender(&$resultparas, $thedate="", &$pbaout, $longtype="kalenderlist_box", $template=""){
948 global $bdprss_db;
949
950 if($resultparas["profiler_enabled"]) { $type="list"; if($longtype == 'kalender_box') $type="box"; }
951 if($resultparas['pba_kalenderquery_cache_time'] > 0) {
952 $key=array(substr($resultparas['archivdate'],0,7),$resultparas['listid']);
953 $kalendercache=@PBALIB::pba_cache($key, $dummy, 'get', 'kalender', 'mixed', $resultparas['pba_kalenderquery_cache_time'], 'OK');
954 if($kalendercache[1]) {
955 if($resultparas["profiler_enabled"]) $pbaout['profiler']['Got '. $type .' kalender cache']=microtime();
956 $kalenderdates = $kalendercache[0];
957 }
958 }
959 if(!$kalendercache[1]){
960 if($resultparas["profiler_enabled"]) $pbaout['profiler']['Start query for ' . $type . ' kalenderdates']=microtime();
961 $kalenderdates=$bdprss_db->getmonthlyarchivedates($resultparas['archivdate'],$resultparas['listid']);
962 if($resultparas['pba_kalenderquery_cache_time'] > 0) {
963 $pba_cachereturn=PBALIB::pba_cache($kalendercache[0], $kalenderdates, 'write', 'kalender', 'mixed', 0, 'OK');
964 }
965 }
966
967 if($resultparas["profiler_enabled"]) $pbaout['profiler']['Start to format ' . $type . ' kalender']=microtime();
968
969 //check input values
970 if (!ereg("[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]", $thedate)) $thedate = date('Y-m-d');
971
972 //parameter for all kalender types
973 $dateformatinnormallinktext=$resultparas['kalendernormaldateformat'];
974 $kalendermonthslist=$resultparas['kalendermonthslist'];
975
976 //get template for basic calendar and loop through to find subtemplates for earlierlink and laterlink
977 if($longtype == 'kalenderlist_box'){
978 $lastlinktpl=PBALIB::split_template($template, '###KALENDER_LASTLINK###','EARLIERLINK');
979 $lastlinktemplate=$lastlinktpl['inloop'];
980 $nextlinktpl=PBALIB::split_template($lastlinktpl['aroundloop'], '###KALENDER_NEXTLINK###','LATERLINK');
981 $nextlinktemplate=$nextlinktpl['inloop'];
982 $split_template=PBALIB::split_template($nextlinktpl['aroundloop'], '###INSIDELOOP###');
983 }
984
985 //calculate some values from paras
986 $thetimestamp=mktime(0, 0, 0, substr($thedate, 5, 2), substr($thedate, 8, 2), substr($thedate, 0, 4));
987 $kalendermonths=explode(",", preg_replace('/\s/','',$kalendermonthslist));
988 $formattedkalender['kalenderdate']=$kalendermonths[(substr($thedate, 5, 2) - 1)] . ' ' . substr($thedate, 0, 4);
989
990 //value initialization
991 $formattedkalender['insideloop']="";
992
993 //format the body, if not box, else, we need the routine to check later, if a value for a date exists
994 foreach($kalenderdates as $k) {
995 if($k->type == 'last') {
996 $formattedkalender['kalender_lastlink'] = "";
997 if ($k->item_date != '0') {
998 $lasthref=PBALIB::makedatepagehref($k->item_date, $resultparas, true);
999 if($longtype == 'kalenderlist_box') $formattedkalender['kalender_lastlink'] = str_replace('###KALENDER_LASTHREF###',$lasthref, $lastlinktemplate);
1000 }
1001 } elseif($k->type == 'next'){
1002 $formattedkalender['kalender_nextlink'] = "";
1003 if ($k->item_date != '0') {
1004 $nexthref=PBALIB::makedatepagehref($k->item_date, $resultparas, true);
1005 if($longtype == 'kalenderlist_box') $formattedkalender['kalender_nextlink'] = str_replace('###KALENDER_NEXTHREF###',$nexthref,$nextlinktemplate);
1006 }
1007 }elseif($k->type == 'normal') {
1008 $inkalenderloop[$k->item_date]['kalenderloop_href']=PBALIB::makedatepagehref($k->item_date, $resultparas);
1009 $kalenderloop_timestamp=mktime(0, 0, 0, substr($k->item_date, 5, 2), substr($k->item_date, 8, 2), substr($k->item_date, 0, 4));
1010 $inkalenderloop[$k->item_date]['kalenderloop_inlinkdate']=date($dateformatinnormallinktext,$kalenderloop_timestamp);
1011 if($longtype=="kalenderlist_box"){
1012 foreach($inkalenderloop[$k->item_date] as $key => $value){
1013 $needle[$key]="###" . strtoupper($key) . "###";
1014 $replace[$key]=$value;
1015 }
1016 $formattedkalender['insideloop'] .= str_replace($needle, $replace, $split_template['inloop']);
1017 }
1018 }
1019 }
1020
1021 if($longtype=="kalenderlist_box"){
1022 foreach($formattedkalender as $key => $value){
1023 $needle[$key]="###" . strtoupper($key) . "###";
1024 $replace[$key]=$value;
1025 }
1026 if($resultparas["debug"]) $formattedkalender['debug'] .= "\n<br>Debug: we understand the template keywords: " . PBALIB::get_r($needle);
1027 $formattedkalender['kalenderlist_box']= str_replace($needle, $replace, $split_template['aroundloop']);
1028 $formattedkalender['result']=$formattedkalender['kalenderlist_box'];
1029 }
1030 if($longtype=="kalender_box"){
1031 //get templates and other parameters for box calendar
1032 $kalenderdaysofweeklist=$resultparas['kalenderboxdaysofweeklist'];
1033 $kalenderdaysofweek=explode(",", preg_replace('/\s/','',$kalenderdaysofweeklist));
1034 $kalendertablecaption=$resultparas['kalenderboxtablecaption'];
1035 $formattedkalender['kalender_last']=$resultparas['kalender_last'];
1036 $formattedkalender['kalender_next']=$resultparas['kalender_next'];
1037
1038 //calculating some special values
1039 $firstsecondofthemonth=mktime(0, 0, 0, substr($thedate,5,2), 1, substr($thedate,0,4));
1040 $weekdayoffirstsecondofthemonth=date('N', $firstsecondofthemonth);
1041 $offsetdays=$weekdayoffirstsecondofthemonth-1;
1042 $firstsecondofnextmonth=mktime(0, 0, 0, ( substr($thedate,5,2) +1 ), 1, substr($thedate,0,4));
1043
1044 $formattedkalender['kalender_box']="<table".$kalendertablecaption."><caption>" . $formattedkalender['kalenderdate'] . "</caption>\n";
1045 $formattedkalender['kalender_box'].=' <thead><tr>';
1046 foreach($kalenderdaysofweek as $dayofweeknumber => $dayofweek){
1047 $formattedkalender['kalender_box'].= '<th abbr="'.$dayofweek.'" scope="col" title="'.$dayofweek.'">'.substr($dayofweek,0,1).'</th>';
1048 }
1049 $formattedkalender['kalender_box'].= '</tr></thead>' . "\n";
1050 $formattedkalender['kalender_box'].=' <tfoot><tr>';
1051 if($lasthref) {
1052 $formattedkalender['kalender_box'].='<td abbr="'.$formattedkalender['kalender_last'].'" colspan="3" id="prev"><a href="'.$lasthref.'" title="'.$formattedkalender['kalender_last'].'">'.$formattedkalender['kalender_last'].'</a></td>';
1053 } else {
1054 $formattedkalender['kalender_box'].='<td colspan="3" id="prev">&nbsp;</td>';
1055 }
1056 $formattedkalender['kalender_box'].='<td>&nbsp;</td>';
1057 if($nexthref) {
1058 $formattedkalender['kalender_box'].='<td abbr="'.$formattedkalender['kalender_next'].'" colspan="3" id="next"><a href="'.$nexthref.'" title="'.$formattedkalender['kalender_next'].'">'.$formattedkalender['kalender_next'].'</a></td>';
1059 } else {
1060 $formattedkalender['kalender_box'].='<td colspan="3" id="next">&nbsp;</td>';
1061 }
1062 $formattedkalender['kalender_box'].='</tr></tfoot><tbody>' . "\n";
1063
1064 //loop through the rows
1065 $startdate=date('Y-m-d',mktime(0, 0, 0, substr($thedate,5,2), (1 - $offsetdays), substr($thedate,0,4)));
1066 while(mktime(0, 0, 0, substr($startdate,5,2), substr($startdate,8,2), substr($startdate,0,4)) < $firstsecondofnextmonth){
1067 $formattedkalender['kalender_box'].='<tr>';
1068 foreach($kalenderdaysofweek as $dayofweeknumber => $dayofweek){
1069 $blank = "";
1070 $daynumber=(substr($startdate,8,2)+0);
1071 if($daynumber < 10) $blank = "&nbsp;";
1072 if(isset($inkalenderloop[$startdate]['kalenderloop_href'])){
1073 //there exists a link due to db entry, so we want to link it
1074 $formattedkalender['kalender_box'].='<td>'.$blank.'<a title="'.$inkalenderloop[$startdate]['kalenderloop_inlinkdate'].'" href="'.$inkalenderloop[$startdate]['kalenderloop_href'].'">'. $daynumber . '</a></td>';
1075 }elseif(substr($startdate,0,7) == substr($thedate,0,7)){
1076 //startdate in current month
1077 $formattedkalender['kalender_box'].='<td>'. $blank . $daynumber . '</td>';
1078 }else{
1079 $formattedkalender['kalender_box'].='<td>&nbsp;</td>';
1080 }
1081 $startdate=date('Y-m-d',mktime(0, 0, 0, substr($startdate,5,2), (substr($startdate,8,2) + 1), substr($startdate,0,4)));
1082 }
1083 $formattedkalender['kalender_box'].='</tr>';
1084 }
1085 $formattedkalender['kalender_box'].='</tbody></table>';
1086 $formattedkalender['result']=str_replace('###KALENDERBOX###',$formattedkalender['kalender_box'], $template);
1087 }
1088
1089 if($resultparas["profiler_enabled"]) $pbaout['profiler']['End of format ' . $type . ' kalender']=microtime();
1090 return $formattedkalender;
1091 }
1092
1093//helper functions
1094
1095 function analysepagetype(&$resultparas){
1096 // we have pages with templates:
1097 // 1. tickerpage - a tickerpage is a basic output list page
1098
1099 if($resultparas['archivdate'] == ""
1100 && $resultparas['searchphrase']== ""
1101 && $resultparas['feedrequest']==false
1102 && $resultparas['cacheid']==false
1103 && $resultparas['kalreq']==false
1104 && $resultparas['tickerpage']>1
1105 && !$resultparas['displayonlybox'] ) {
1106 $pagetype['pagetype']='tickerpage';
1107 $pagetype['template']='ticker';
1108 }
1109
1110 // 2. searchpage - almost same as tickerpage, but with search specifica
1111 if($resultparas['archivdate'] == ""
1112 && $resultparas['searchphrase']!= ""
1113 && $resultparas['feedrequest']==false
1114 && $resultparas['cacheid']==false
1115 && $resultparas['kalreq']==false
1116 && !$resultparas['displayonlybox']) {
1117 $pagetype['pagetype']='searchpage';
1118 $pagetype['template']='ticker';
1119 }
1120
1121 // 3. datepage - almost same as tickerpage, but with datepage specifica
1122 if($resultparas['archivdate'] != ""
1123 && $resultparas['searchphrase']== ""
1124 && $resultparas['feedrequest']==false
1125 && $resultparas['cacheid']==false
1126 && $resultparas['kalreq']==false
1127 && !$resultparas['displayonlybox'] ) {
1128 $pagetype['pagetype']='datepage';
1129 $pagetype['template']='ticker';
1130 }
1131
1132 // 8. startpage - almost a tickerpage, but headers can be suppressed and a special uri can be assigned
1133 if($resultparas['archivdate'] == ""
1134 && $resultparas['searchphrase']== ""
1135 && $resultparas['feedrequest']==false
1136 && $resultparas['cacheid']==false
1137 && $resultparas['kalreq']==false
1138 && $resultparas['tickerpage']==1
1139 && !$resultparas['displayonlybox'] ) {
1140 $pagetype['pagetype']='startpage';
1141 $pagetype['template']='ticker';
1142 }
1143 // these pagetypes above may use the same template with a preprocessor doing some modifications?
1144
1145 // 5. feedpage - a ticker- no search- no date - page with diffrent output preprocessing and diffrent template
1146 if($resultparas['archivdate'] == ""
1147 && $resultparas['searchphrase']== ""
1148 && $resultparas['feedrequest']==true
1149 && $resultparas['cacheid']==false
1150 && $resultparas['kalreq']==false
1151 && !$resultparas['displayonlybox'] ) {
1152 $pagetype['pagetype']='feedpage';
1153 $pagetype['template']='feed';
1154 }
1155
1156 // 5a. search feedpage - a feed ticker- with search - page
1157 if($resultparas['archivdate'] == ""
1158 && $resultparas['searchphrase']!= ""
1159 && $resultparas['feedrequest']==true
1160 && $resultparas['cacheid']==false
1161 && $resultparas['kalreq']==false
1162 && !$resultparas['displayonlybox'] ) {
1163 $pagetype['pagetype']='feedsearchpage';
1164 $pagetype['template']='feed';
1165 }
1166
1167 // 5b. date feedpage - a feed ticker- with date - page
1168 if($resultparas['archivdate'] != ""
1169 && $resultparas['searchphrase']== ""
1170 && $resultparas['feedrequest']==true
1171 && $resultparas['cacheid']==false
1172 && $resultparas['kalreq']==false
1173 && !$resultparas['displayonlybox'] ) {
1174 $pagetype['pagetype']='feeddatepage';
1175 $pagetype['template']='feed';
1176 }
1177
1178 // 7. cache page - a tickerpage with diffrent template and just one item requested
1179 //these pages also use the main loop via search engine
1180 //information which page was requested is in url, but limited by other config parameters
1181 if($resultparas['archivdate'] == ""
1182 && $resultparas['searchphrase']== ""
1183 && $resultparas['feedrequest']==false //maybe have a cache page delivered as feed?
1184 && $resultparas['cacheid']> 0
1185 && $resultparas["iscachable"]=="Y"
1186 && $resultparas['kalreq']==false
1187 && !$resultparas['displayonlybox'] ) {
1188 $pagetype['pagetype']='cachepage';
1189 $pagetype['template']='cache';
1190 }
1191
1192 // 4. kalenderpage - a special page with no content but showing all our navigation and boxes
1193 if( $resultparas['searchphrase']== ""
1194 && $resultparas['feedrequest']==false
1195 && $resultparas['cacheid']==false
1196 && $resultparas['kalreq']==true
1197 && !$resultparas['displayonlybox']) {
1198 $pagetype['pagetype']='kalpage';
1199 $pagetype['template']='kalender';
1200 }
1201
1202 // 9. nopage - maybe just a box was called? - great we could save a lot of time, when we know, that we don't need to process a page template
1203 if($resultparas['feedrequest']==false
1204 && $resultparas['displayonlybox'] // just a box
1205 ) {
1206 $pagetype['pagetype']='nopage';
1207 $pagetype['template']= $resultparas['displayonlybox'];
1208 // one of 'kalender_box', 'kalenderlist_box', 'search_box', 'feedlistsidebar_box', 'opml_box', 'feedlist_box', 'feedlistsidebar_box'
1209 }
1210
1211 //10. errorpage - probably nobody wants this page, but maybe our system is not ready or it is not understandable what the user wanted
1212 if(!isset($pagetype['pagetype']) || !isset($pagetype['template'])
1213 ) {
1214 $pagetype['pagetype']='errorpage';
1215 $pagetype['template']='error';
1216 $pagetype['error'].='This error never should happen. Sorry for this. Cannot determine page type or template';
1217 }
1218 return $pagetype;
1219 }
1220
1221 function analyze_needed_elements($rawtemplate, $type=''){
1222 //avaliable_boxes: 'search_box, kalender_box, kalenderlist_box, feedlist_box, sendfeedpermail_box'; //do we really need this?
1223 preg_match_all('/###[0-9A-Z_]+'.$type.'###/', $rawtemplate, $elementname);
1224 //$element['boxname']=$elementname;
1225 foreach($elementname[0] as $key => $elementnameupper){
1226 $element['result'][str_replace('#','',strtolower($elementnameupper))]=true;
1227 }
1228 if(!isset($element['result'])) $element['result'] = false;
1229 return $element;
1230 }
1231
1232 function makebox($boxtomake, &$resultparas, &$pbaout){
1233 $boxtemplate = $resultparas['template_' . $boxtomake]; //Fix this later to be a copy of resultparas
1234 $preprocessed_boxtemplate=PBALIB::template_replacements($boxtemplate, $resultparas);
1235
1236 if($boxtomake == 'kalender_box' || $boxtomake == 'kalenderlist_box'){
1237 //this one is tricky:
1238 //1. to query db only once, if we have diffrent kalenderboxes to make, we want them all make at once
1239 //2. we want to give some (?) other global results back like kalenderdate
1240 //formatted_kalender gives out:
1241 //1. result - as specified with boxtomake
1242 //2. kalenderdate - needed later in page templates,
1243 //3. maybe profiler, when profiler enabled set -> now directly sent to pbaout
1244
1245 //we shall better work with db query results cache ? - nice to see in profiler: mysql does caching automatically very well
1246 $formatted_kalender=PBALIB::formatkalender($resultparas, $resultparas['archivdate'], $pbaout, $boxtomake, $preprocessed_boxtemplate);
1247 $box['result']=$formatted_kalender['result']; //completely unused so far?
1248 $pbaout['kalenderdate']=$formatted_kalender['kalenderdate'];
1249
1250 }elseif($boxtomake == 'opml_box' || $boxtomake == 'feedlist_box' || $boxtomake == 'feedlistsidebar_box'){
1251
1252 //we need to pass over dateformat for inside the loop
1253 $dateformat="";
1254 if (isset($resultparas['dateformat_' . $boxtomake])) $dateformat=$resultparas['dateformat_' . $boxtomake];
1255 $feedlist = PBALIB::formatted_feedlist($resultparas, $dateformat, $preprocessed_boxtemplate);
1256 $box['result']=$feedlist['result'];
1257 }else{
1258 //doing nothing special here is perfect for making a search box
1259 $box['result']=$preprocessed_boxtemplate; //this
1260 }
1261
1262 return $box;
1263 }
1264
1265 function processtagset($tagsetfromdb){
1266 //$bdprssTagSet: tags to possibly keep defined in programm code
1267 //$tagsetfromdb - the tags defined as allowed as defined per output id
1268 //$formattedtagset: the resulting tagset applied to the items in packageItemText
1269 //to do: encapsulate this into function and store it in database!!!
1270 global $bdprssTagSet;
1271 $formattedtagset = '';
1272 if($tagsetfromdb){
1273 $kts = preg_split("','", $tagsetfromdb, -1, PREG_SPLIT_NO_EMPTY);
1274 foreach($kts as $t){
1275 $u = $bdprssTagSet[$t];
1276 foreach($u as $v)
1277 $formattedtagset .= "$v,";
1278 }
1279 }
1280 return $formattedtagset;
1281 }
1282
1283 function gettheage($seconds, &$resultparas=false, &$ageunitsstring=false){
1284
1285 //this function is used inside inner loops and has to be quick
1286 //we set $resultparas['ageunit'] on first call with just a string and no array,
1287 //so in following calls we won't have to loop
1288
1289 if(is_array($resultparas['ageunit'])){
1290 $ageunit=$resultparas['ageunit'];
1291 }else{
1292 if(!$ageunitsstring) $ageunitsstring = get_pbadefaultparameter('ageunitsstring');
1293 $ageunitsarray = explode(",", $ageunitsstring);
1294 foreach($ageunitsarray as $valuepair){
1295 $valuepairarray=explode(":", $valuepair);
1296 $ageunit[trim($valuepairarray[0])]= trim($valuepairarray[1]);
1297 }
1298 $resultparas['ageunit']=$ageunit;
1299 }
1300 if($seconds < 100000) return $ageunit['never']; // usually true :)
1301
1302 $age = (time() - $seconds);
1303 if($age < 0) {
1304 $future = TRUE;
1305 $age = -$age;
1306 }
1307
1308 $unit = $ageunit['seconds'];
1309 if($age>120.0) {
1310 $age /= 60;
1311 $unit = $ageunit['minutes'];
1312 }
1313
1314 if($age>120.0 && $unit==$ageunit['minutes']){
1315 $age /= 60;
1316 $unit = $ageunit['hours'];
1317 }
1318
1319 if($age>48.0 && $unit == $ageunit['hours']){
1320 $age /= 24;
1321 $unit = $ageunit['days'];
1322 }
1323
1324 if($age>21.0 && $unit==$ageunit['days']){
1325 $age /= 7;
1326 $unit = $ageunit['weeks'];
1327 }
1328
1329 if($age>13.0 && $unit==$ageunit['weeks'])
1330 {
1331 $age /= 4.34821;
1332 $unit = $ageunit['months'];
1333 }
1334
1335 if($age>=24.0 && $unit==$ageunit['months']){
1336 $age /= 12;
1337 $unit = $ageunit['years'];
1338 }
1339
1340 $age = round($age, 0);
1341 if(!isset($future)) {
1342 if($ageunit['before'] != "") $ageunit['before'] = $ageunit['before'] . " ";
1343 if($ageunit['beforeafter'] != "") $ageunit['beforeafter'] = " " . $ageunit['beforeafter'];
1344 $return = $ageunit['before'] . "$age $unit" . $ageunit['beforeafter'];
1345 } else {
1346 $return = $ageunit['in'] . " $age $unit";
1347 }
1348 return $return;
1349 }
1350
1351//pba_cache($identifier, $content, 'write', $name, 'mixed', 0, 'OK');
1352//pba_cache($identifier, $content, 'housekeeping', $name, 'mixed', 500, 'OK');
1353//pba_cache($identifier, $content, 'clear', $name, 'mixed', 180, 'OK');
1354//$cachereturn=pba_cache($identifier, $dummy, 'get', $name, 'mixed', 1800, 'OK');
1355//if($cachereturn[1]) echo "Here is what I got: " . print_r($cachereturn);
1356//if($cachereturn[0]) echo "Got no cache";
1357
1358 function pba_cache(&$identifier, &$cache_content, $cache_mode='get', $name='c', $type='mixed', $cache_max_time=180, $serverstatus='OK'){
1359 $cache_file=false;
1360 $cache_path=PBA_CACHE_PATH;
1361
1362 //if identifier is just a short string containing nothing else then a-zA-Z0-9_-, we will use it as part of filename instead of md5
1363 if(is_string($identifier)) {
1364 if(strlen($identifier)<=40){
1365 if(preg_match('/^[a-zA-Z0-9_-]+$/',$identifier)){
1366 $cache_file=$cache_path . $name . '_' . $identifier;
1367 }
1368 }
1369 }
1370 if(!$cache_file){
1371 $cache_file=$cache_path . $name . '_' . md5(serialize($identifier));
1372 }
1373
1374 //to the filenames on disk will be appended:
1375 //__c for check files, __d for data files, __t for tmp files
1376
1377 if($cache_mode=='write'){
1378 $wrote_cache=false;
1379 if ($serverstatus == 'OK' && !file_exists($cache_file."__t") && !(@filemtime($cache_file."__d") + $cache_max_time > time())){
1380 $cache_file_handle = fopen($cache_file."__t", 'w+');
1381
1382 if($type=='string') {
1383 if(fwrite($cache_file_handle, $cache_content)) $wrote_cache=true;
1384 } else {
1385 if(fwrite($cache_file_handle, serialize($cache_content))) $wrote_cache=true;
1386 }
1387 fclose($cache_file_handle);
1388 rename($cache_file."__t",$cache_file."__d");
1389 @touch($cache_file."__c");
1390 }
1391 return $wrote_cache;
1392 }
1393 if($cache_mode=='get'){
1394 $got_cache=false;
1395 if (file_exists($cache_file."__c")){
1396 if( @filemtime($cache_file."__d") + $cache_max_time > time() && $serverstatus == 'OK' ) {
1397 if($type=='string') {
1398 if($get_cache=file_get_contents($cache_file."__d")) $got_cache=true;
1399 } else {
1400 if($get_cache=unserialize(file_get_contents($cache_file."__d"))) {
1401 $got_cache=true;
1402 }
1403 }
1404 }
1405 }
1406 if(!$got_cache) $get_cache = $identifier;
1407 return array($get_cache,$got_cache);
1408 }
1409
1410 if($cache_mode=='housekeeping'){
1411 $counter=0;
1412 if($serverstatus == 'OK'){
1413 foreach (glob($cache_path . "*__?") as $filename) {
1414 if(preg_match('/__[cd]$/',$filename)){
1415 if(filemtime($filename) + $cache_max_time < time()) {
1416 unlink($filename);
1417 $counter++;
1418 }
1419 }
1420 }
1421 }
1422 return $counter;
1423 }
1424
1425 if($cache_mode=='clear'){
1426 $counter=0;
1427 foreach (glob($cache_path . "*__?") as $filename) {
1428 unlink($filename);
1429 $counter++;
1430 }
1431 return $counter;
1432 }
1433 }
1434
1435
1436}// end class PBALIB
1437?>
Note: See TracBrowser for help on using the repository browser.