Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

atomServer.class.php

Go to the documentation of this file.
00001 <?php 00002 /* 00003 a(tom)Blog is a atom powered weblog system. 00004 Copyright (C) 2004 Yoan BLANC 00005 00006 This program is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU General Public License 00008 as published by the Free Software Foundation; either version 2 00009 of the License, or (at your option) any later version. 00010 00011 This program is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program; if not, write to the Free Software 00018 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00019 */ 00020 00021 include_once(dirname(__FILE__)."/class/xslt.class.php"); 00022 include_once(dirname(__FILE__)."/inc/pwd.inc.php"); 00023 include_once(dirname(__FILE__)."/inc/fct.inc.php"); 00024 00037 class atomServer 00038 { 00040 var $xslt; 00042 var $data; 00044 var $urlbase; 00046 var $atomid; 00047 00049 var $xml; 00051 var $xsl; 00052 00054 var $init; 00055 00062 function atomServer($data, $urlbase) 00063 { 00064 $this->data = $data; 00065 $this->urlbase = $urlbase; 00066 $this->atomid = "atom.dosimple.ch"; 00067 $this->xslt = new Xslt(); 00068 $this->xslt->setEngine("domxml"); 00069 00070 // XML 00071 $this->xml["base"] = '/data/'; 00072 $this->xml["users"] = $this->xml["base"].'users.xml'; 00073 00074 // XSLT 00075 // - PHP 00076 $this->xsl["php-fetch-user"] = '/xsl/php-fetch-user.xsl'; 00077 $this->xsl["php-users"] = '/xsl/php-users.xsl'; 00078 $this->xsl["php-feed"] = '/xsl/php-feed.xsl'; 00079 $this->xsl["php-entry"] = '/xsl/php-entry.xsl'; 00080 // - XML 00081 $this->xsl["xml-edit-user"] = '/xsl/xml-edit-user.xsl'; 00082 $this->xsl["xml-del-user"] = '/xsl/xml-del-user.xsl'; 00083 $this->xsl["xml-add-user"] = '/xsl/xml-add-user.xsl'; 00084 $this->xsl["xml-entry"] = '/xsl/xml-entry.xsl'; 00085 $this->xsl["xml-add-entry"] = '/xsl/xml-add-entry.xsl'; 00086 $this->xsl["xml-del-entry"] = '/xsl/xml-del-entry.xsl'; 00087 $this->xsl["xml-feed"] = '/xsl/xml-feed.xsl'; 00088 00089 // - XHTML 00090 $this->xsl["xhtml-feed"] = '/xsl/xhtml-feed.xsl'; 00091 $this->xsl["xhtml-entry"] = '/xsl/xhtml-entry.xsl'; 00092 $this->xsl["xhtml-archives"] = '/xsl/xhtml-archives.xsl'; 00093 00094 // - RSS 00095 $this->xsl["rss091-feed"] = '/xsl/rss091-feed.xsl'; 00096 00097 // - API 00098 $this->xsl["api-add-entry"] = '/xsl/api-add-entry.xsl'; 00099 $this->xsl["api-edit-entry"] = '/xsl/api-edit-entry.xsl'; 00100 00101 // init 00102 $this->init['feed'] = '/xml/feed_model.xml'; 00103 $this->init['entry'] = '/xml/entry_model.xml'; 00104 $this->init['introspection'] = '/xml/introspection_model.xml'; 00105 } 00106 00114 function getUserData($login='') 00115 { 00116 if(!empty($login)) 00117 { 00118 $varname = 'userdata'; 00119 00120 eval($this->__getXsltResult($this->xml["users"], 00121 $this->xsl["php-fetch-user"], 00122 array( 00123 'login'=>$login, 00124 'varname'=>$varname)) 00125 ); 00126 00127 return $$varname; 00128 } 00129 else 00130 { 00131 return getAllUsersData(); 00132 } 00133 } 00134 00140 function getAllUsersData() 00141 { 00142 $varname = 'users'; 00143 00144 eval($this->__getXsltResult( 00145 $this->xml["users"], 00146 $this->xsl["php-users"], 00147 array('varname'=>$varname)) 00148 ); 00149 00150 return $$varname; 00151 } 00152 00158 function setUserData($data) 00159 { 00160 $user = $this->__getXsltResult( 00161 $this->xml["users"], 00162 $this->xsl["xml-edit-user"], 00163 $data); 00164 00165 // sauvegarde des modifications 00166 file_put_contents($this->data.$this->xml["users"],$user); 00167 } 00168 00174 function addUser($data) 00175 { 00176 if($this->getUserData($data['login']) == '') 00177 { 00178 $user = $this->__getXsltResult( 00179 $this->xml["users"], 00180 $this->xsl["xml-add-user"], 00181 $data); 00182 00183 // sauvegarde des modifications 00184 file_put_contents($this->data.$this->xml["users"],$user); 00185 mkdir($this->data.'/data/'.$data['login']); 00186 $emptyfeed = file_get_contents($this->data.$this->init['feed']); 00187 return file_put_contents($this->data.'/data/'.$data['login'].'/feed.xml',$emptyfeed,FILE_APPEND); 00188 } 00189 else 00190 { 00191 return false; 00192 } 00193 } 00194 00200 function delUser($login) 00201 { 00202 $user = $this->__getXsltResult( 00203 $this->xml["users"], 00204 $this->xsl["xml-del-user"], 00205 array('login'=>$login)); 00206 00207 // sauvegarde des modifications 00208 file_put_contents($this->data.$this->xml["users"],$user); 00209 deldir($this->data.'/data/'.$login); 00210 } 00211 00219 function getEntry($login,$entry_id) 00220 { 00221 $entry = $this->__getXsltResult( 00222 $this->xml['users'], 00223 $this->xsl['xml-entry'], 00224 array( 00225 'login'=>$login, 00226 'id'=>$entry_id 00227 )); 00228 return $entry; 00229 } 00230 00238 function getXhtmlEntry($login,$entry_id) 00239 { 00240 $feed = $this->__getXsltResult( 00241 $this->xml['users'], 00242 $this->xsl['xhtml-entry'], 00243 array( 00244 'login'=>$login, 00245 'id'=>$entry_id 00246 )); 00247 00248 // anti-SPAM 00249 $feed = preg_replace_callback( '#href="mailto:(.*?)"#si','antispam',$feed); 00250 $feed = str_replace( '@', '&#64;',$feed); 00251 00252 return $feed; 00253 } 00254 00262 function getEntryData($login,$entry_id) 00263 { 00264 $varname = 'entryData'; 00265 00266 eval($this->__getXsltResult($this->xml['base'].$login.'/'.$entry_id, 00267 $this->xsl["php-entry"], 00268 array( 00269 'varname'=>$varname 00270 ))); 00271 00272 $file = file_get_contents($this->data.$this->xml['base'].$login.'/'.$entry_id); 00273 00274 $elem = array('content','summary','title'); 00275 foreach($elem as $tag) 00276 { 00277 ${$varname}[$tag] = ((preg_match('#<'.$tag.'(.*?)>(.*?)</'.$tag.'>#si',$file,$match))? $match[2] : ''); 00278 } 00279 00280 return $$varname; 00281 } 00282 00291 function addEntryData($login, $data) 00292 { 00293 //-- time 00294 $now = time(); 00295 00296 $entry_id = date("Y/m/d_His",$now).'.xml'; 00297 $data['issued'] = date("Y-m-d",$now).'T'.date("H:i:s",$now).'+01:00'; 00298 $data['modified'] = $data['issued']; 00299 $data['id'] = 'tag:'.$this->atomid.','.date('Y-m-d',$now).':/'.$data['user'].'/'.$entry_id; 00300 00301 //-- entry 00302 if(!($file = file_get_contents($this->data.$this->init['entry']))) 00303 { 00304 return false; 00305 } 00306 00307 foreach($data as $key => $value) 00308 { 00309 $file = preg_replace('#<'.$key.'(.*?)>(.*?)</'.$key.'>#si','<'.$key.'\1>'.$value.'</'.$key.'>',$file); 00310 } 00311 00312 return $this->__addEntry($login, $entry_id, $file); 00313 } 00314 00323 function setEntryData($login, $entry_id, $data) 00324 { 00325 $now = time(); 00326 $data['modified'] = date("Y-m-d",$now).'T'.date("H:i:s",$now).'+01:00'; 00327 00328 if(!($file = file_get_contents($this->data.$this->xml['base'].$login.'/'.$entry_id))) 00329 { 00330 return false; 00331 } 00332 00333 foreach($data as $key => $value) 00334 { 00335 $file = preg_replace('#<'.$key.'(.*?)>(.*?)</'.$key.'>#si','<'.$key.'\1>'.$value.'</'.$key.'>',$file); 00336 } 00337 00338 return $this->__setEntry($login, $entry_id, $file); 00339 } 00340 00349 function setEntry($login, $entry_id, $xml) 00350 { 00351 //-- info 00352 $info = $this->getEntryData($login,$entry_id); 00353 00354 //-- time 00355 $now = time(); 00356 00357 $atomid = $info['id']; 00358 $issued = $info['issued']; 00359 $modified = date("Y-m-d",$now).'T'.date("H:i:s",$now).'+01:00'; 00360 00361 $tmpfile = $this->xml['base'].$login.'/'.$now; 00362 file_put_contents($this->data.$tmpfile,$xml); 00363 00364 $entry = $this->__getXsltResult( 00365 $tmpfile, 00366 $this->xsl["api-edit-entry"], 00367 array( 00368 'atomid'=>$atomid, 00369 'issued'=>$issued, 00370 'modified'=>$modified 00371 )); 00372 00373 @unlink($this->data.$tmpfile); 00374 00375 return $this->__setEntry($login, $entry_id, $entry); 00376 } 00377 00386 function __setEntry($login, $entry_id, $xml) 00387 { 00388 return file_put_contents($this->data.$this->xml['base'].$login.'/'.$entry_id,$xml); 00389 } 00390 00398 function addEntry($login, $xml) 00399 { 00400 //-- time 00401 $now = time(); 00402 00403 $entry_id = date("Y/m/d_His",$now).'.xml'; 00404 00405 $issued = date("Y-m-d",$now).'T'.date("H:i:s",$now).'+01:00'; 00406 $modified = $issued; 00407 $atomid = 'tag:'.$this->atomid.','.date('Y-m-d',$now).':/'.$login.'/'.$entry_id; 00408 00409 $tmpfile = $this->xml['base'].$login.'/'.$now; 00410 file_put_contents($this->data.$tmpfile,$xml); 00411 00412 if(!$entry = $this->__getXsltResult( 00413 $tmpfile, 00414 $this->xsl["api-add-entry"], 00415 array( 00416 'atomid'=>$atomid, 00417 'issued'=>$issued, 00418 'modified'=>$modified 00419 ))) 00420 { 00421 @unlink($this->data.$tmpfile); 00422 return false; 00423 } 00424 @unlink($this->data.$tmpfile); 00425 00426 return $this->__addEntry($login, $entry_id, $entry); 00427 } 00428 00437 function __addEntry($login, $entry_id, $xml) 00438 { 00439 //-- filesystem 00440 $url = explode('/',$entry_id); 00441 $base = $this->data.$this->xml['base'].$login.'/'.$url[0]; 00442 // 2004 00443 if(!file_exists($base)) 00444 { 00445 @mkdir($base,0755); 00446 } 00447 00448 $base .= '/'.$url[1]; 00449 // 06 00450 if(!file_exists($base)) 00451 { 00452 @mkdir($base,0755); 00453 } 00454 00455 // feed 00456 if($this->__addEntryToFeed($login, $entry_id)) 00457 { 00458 return file_put_contents($this->data.$this->xml['base'].$login.'/'.$entry_id,$xml); 00459 } 00460 else 00461 { 00462 return false; 00463 } 00464 } 00465 00473 function __addEntrytoFeed($login, $entry_id) 00474 { 00475 $feed = $this->__getXsltResult( 00476 $this->xml['base'].$login.'/feed.xml', 00477 $this->xsl['xml-add-entry'], 00478 array( 00479 'id'=>$entry_id, 00480 'position'=>0 00481 )); 00482 return file_put_contents($this->data.$this->xml['base'].$login.'/feed.xml',$feed); 00483 } 00484 00492 function delEntry($login, $entry_id) 00493 { 00494 $url = explode('/',$entry_id); 00495 @unlink($this->data.$this->xml['base'].$login.'/'.$entry_id); 00496 //-- filesystem 00497 $base = $this->data.$this->xml['base'].$login.'/'.$url[0]; 00498 @rmdir($base,0755); 00499 $base .= '/'.$url[1]; 00500 @rmdir($base,0755); 00501 00502 return $this->__delEntryToFeed($login, $entry_id); 00503 } 00504 00512 function __delEntryToFeed($login, $entry_id) 00513 { 00514 $feed = $this->__getXsltResult( 00515 $this->xml['base'].$login.'/feed.xml', 00516 $this->xsl['xml-del-entry'], 00517 array( 00518 'id'=>$entry_id 00519 )); 00520 return file_put_contents($this->data.$this->xml['base'].$login.'/feed.xml',$feed); 00521 } 00522 00530 function getFeed($login, $quantity=10) 00531 { 00532 return $this->__getXsltResult( 00533 $this->xml['users'], 00534 $this->xsl['xml-feed'], 00535 array( 00536 'login'=>$login, 00537 'quantity'=>$quantity 00538 )); 00539 } 00540 00548 function getXhtmlFeed($login, $quantity=10) 00549 { 00550 $feed = $this->__getXsltResult( 00551 $this->xml['users'], 00552 $this->xsl['xhtml-feed'], 00553 array( 00554 'login'=>$login, 00555 'quantity'=>$quantity 00556 )); 00557 00558 // anti-SPAM 00559 $feed = preg_replace_callback( '#href="mailto:(.*?)"#si','antispam',$feed); 00560 $feed = str_replace( '@', '&#64;',$feed); 00561 00562 return $feed; 00563 } 00564 00572 function getRss091Feed($login, $quantity=10) 00573 { 00574 return $this->__getXsltResult( 00575 $this->xml['users'], 00576 $this->xsl['rss091-feed'], 00577 array( 00578 'login'=>$login, 00579 'quantity'=>$quantity 00580 )); 00581 } 00582 00591 function getFeedData($login,$start=0,$quantity=10) 00592 { 00593 $varname = 'userFeed'; 00594 00595 eval($this->__getXsltResult($this->xml['users'], 00596 $this->xsl["php-feed"], 00597 array( 00598 'login'=>$login, 00599 'varname'=>$varname, 00600 'quantity'=>$quantity, 00601 'offset'=>$start 00602 ))); 00603 00604 return $$varname; 00605 } 00606 00614 function getXhtmlArchives($login,$date) 00615 { 00616 $feed = $this->__getXsltResult( 00617 $this->xml['users'], 00618 $this->xsl['xhtml-archives'], 00619 array( 00620 'login'=>$login, 00621 'archive'=>$date 00622 )); 00623 00624 return $feed; 00625 } 00626 00633 function getIntrospection($login) 00634 { 00635 return file_get_contents($this->data.$this->init['introspection']); 00636 } 00637 00646 function __getXsltResult($xml,$xsl,$param=NULL) 00647 { 00648 $this->__XsltTransform($xml,$xsl,$param); 00649 $data = $this->xslt->result(); 00650 00651 return $data; 00652 } 00653 00661 function __XsltTransform($xml,$xsl,$param=NULL) 00662 { 00663 $this->xslt->setXml($this->data.$xml); 00664 $this->xslt->setXsl($this->data.$xsl); 00665 $this->xslt->setParam($param); 00666 00667 $this->xslt->transform(); 00668 } 00669 } 00670 ?>

Generated on Fri Jun 25 00:00:22 2004 for a(tom)Blog by doxygen 1.3.7