00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
00071 $this->xml[
"base"] = '/data/';
00072 $this->xml[
"users"] = $this->xml[
"base"].'users.xml';
00073
00074
00075
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
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
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
00095 $this->xsl[
"rss091-feed"] = '/xsl/rss091-
feed.xsl';
00096
00097
00098 $this->xsl[
"api-add-entry"] = '/xsl/api-add-
entry.xsl';
00099 $this->xsl[
"api-edit-entry"] = '/xsl/api-edit-
entry.xsl';
00100
00101
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
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
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
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
00249 $feed = preg_replace_callback( '#href=
"mailto:(.*?)"#si
','antispam',$
feed);
00250 $feed = str_replace(
'@', '@',$
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
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
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
00352
$info = $this->getEntryData($login,$entry_id);
00353
00354
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
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
00440 $url = explode(
'/',$entry_id);
00441 $base = $this->data.$this->xml['base'].$login.
'/'.$url[0];
00442
00443
if(!file_exists($base))
00444 {
00445 @mkdir($base,0755);
00446 }
00447
00448 $base .=
'/'.$url[1];
00449
00450
if(!file_exists($base))
00451 {
00452 @mkdir($base,0755);
00453 }
00454
00455
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
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
00559 $feed = preg_replace_callback( '#href=
"mailto:(.*?)"#si
','antispam',$
feed);
00560 $feed = str_replace(
'@', '@',$
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 ?>