From 6c8bccf5fffd6fb16b9f3c8d17884c51b13fffae Mon Sep 17 00:00:00 2001 From: Bronco Date: Wed, 16 Oct 2013 13:08:47 +0200 Subject: [PATCH] V2.0 BIG NEW CHANGES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - un système de tags pour pouvoir filtrer les pages (bouton (T) pour ajouter modifier les tags d'une page), - un flux RSS des pages publiques filtrable par tags également (le lien RSS de la page en cours est en pied de page) - une API permettant de récupérer un array d'infos sur les pages au format sérialisé (on peut également filtrer le résultat par tag) - un bouton de renommage des titres de page (R) - un bouton pour télécharger le zip de la page qu'on est en train de visionner. --- design/actions.png | Bin 2831 -> 2846 bytes design/style.css | 35 +++- design/zip.png | Bin 0 -> 1014 bytes index.php | 440 ++++++++++++++++++++++++++++++---------- mypersonaldata/tags.txt | 0 readme.md | 27 ++- 6 files changed, 385 insertions(+), 117 deletions(-) create mode 100644 design/zip.png create mode 100644 mypersonaldata/tags.txt diff --git a/design/actions.png b/design/actions.png index 1e43e39da60a8f259c47319821c90d37f6a8914f..5cecb2209b7c1706dedc7ef0344c86468f0e4e91 100644 GIT binary patch delta 2773 zcmX9=c|6oh0N-8KI&-hHh;|c|Tv5AaSID`x^2Bp(MAnt7M>&4GM0k=!j?hNJYh9_8 zBUU-0h!l}~%Y7~7N$8E<|5kno*mm=O%mpz!r48 zr1C+Raer&rK(Ir`4-m4Bjm?qa<+J^dtxSKcH$fMbPEt=MH?OA22NXBRzl*+8+cl&j z>O)cd1FO1Tm?Xb!z8Z)RbPUNYl-PVWBlIvhUp}CwNMJuslO`>heT98!W&H^Uzx}bd z*co9Hfj%wo)8oAW4&|k`{oT$7m8{#Rl9~T(jxdW-a@|sN{VS)<*-XO=DH7VOjxnn(V+@?nU13V`CS-w<6=E?s3VxOtY3nMw1vNlQZKo8fKt zrc0-EC75|2_vIByHP-KENT|XP$}mLOefUzz$uabgj&DTn>w}Sp9hIhUc6rRjyp)jA zNPF^~-iJvm6@6}UGDtZxU~*f(VxukLBm^dcvOWxlHhHgykW1LzytXPwY-twAI6?9Z z?{z_j9{dd6LPk(nn(LwWs~88$hbWWGNl-nE+{-4MJ{7^FC=^w6m}-m zAUM^HSy5FpgcUO8|K&e!f6Fi|NZSg97b<)76OVOaG%C}A9ZD;p44s(-UIJ{VEdS)$ zrK`Q$%NO509ibe#+_*Q;%x2&31(a!{Qsj0OzVzV2zh$MmVzuICij_*3v~?qio~yh5 z8Z51eC&E+QgwNfUQ~amgG^0Q%jV-_NsC2zzTSpj)wFQ%42U=4)1gC?(ambN+4OfFi zZp=Oo?1%bdLP*U8B}IuQ!h$p@_xMBmhyu*+0{1iC4z%12@#7!iOXz zYE`%)c5|GIwdDc<3&0XR3%W59_NTc2_X@uoT&B;cEn0=B=1OW!E4>r+bUXcp9dlkBwCStL`QYSmN|7o>;Zt?nykc`c_6= zJRL8}PlNG~MWWtvb)#fwjXOJ!+qxRY0(MP?)z<&YJ;8Ozc^*lUt~VUG3UB%VDeK2A z%^If9EjqWxwuu}GKRssown<(#gML15o2Kw8^o)mg2T$_LA7!PeTTrfHdyl`Jm2zqV zU0Tvh-s@bNS+MVByH3(HzUa>_taRPJv4B%ICoIo*Rx`djp&0}3lS4?xo5Rmq(Wz!r z#t(y46qAZ{$2Pim57cx6m_m|5>EfJ0+9UeWi2nX)^*iE4OHR=PxM-M6+#T*jcA?0A z|NA_ciow!uUn;5*N`tGm2G(yeXKQb<@~-ReG1k7v2YO%C+0IiEO@SQ1eYW=W-SJ{Q zRXzTW?%Dx%`hXcul%ME5CJvOrjol|VA^`BA!PbQM11{JKXC@$z;C)V2_a;4H^Imh} zkrfymzlpLGO5&#Q@HAX{y;)Do9o{|PFx+x4*AII51d-QeuVrqtlnc|6$|OYj@O;L7 zRu6yC5Pcv2YC}LQW?L&>GtYgs^KMzC8=@fioHtw1rU3Hf_feR$AAQUDJmQ&NdU=xT z?I-tQk*LRh7fTUIa>q2PJ3a^=ze<%S!1=l2->e z?uVMpx_A8Acz+Q*q|79}R#o`c!%*C%&-X@bN)bit#NU0>(hv@3^^5LH`MU zLm4A=4GQ_E&T4=6BD2OtGy>yz_Bj43BHMRO{ZcD5^gtvM*Cec0@`BndDK z{F-Xjh}sKH+T1< zNLq`2BETQ}lJpi^@&a`?Ae(-N>(*@;2iOBJzC7As66JHs1^NQAU?XtK{F?kzv6cMYjiYb<=H?+0kbAtWu>3`ltH-c?^; zKd8fwe`nEE&=lTi`+y01#!A}ki}Q``ik)&TJ@nX;Qs89f*=zsVKEpcbFus~qnSAkR zX&DblniwwSin}$-zsP~>ppD|3sYYNb_;3rRM@%>wAJ5ynxSko%d|WPO)l<>yKfPv* z;?Mym)A$=hD?;@yu0;PI$oy4E5oiVkA4sY25h3_t=2cCpw$ax-u{(qwIZvp`CLoJ# zC4tF$Baj43NiS-Qku?M6MMa!&R;D756vJ!+T&<7y+BF7Qve<%Lf+c?>R${w*k*Qen zGozgvAEaodLvc{d;j-UXonky=&>myFWq19Jn)AR=S$NbK7oVu zBVBPh2<duQP-e3e)*Twa_r+(pn6l1UTVnG zwBB=1R7E!0zH|(Pp1-SI_c_mgH2jWH+7obt-APq2308KLNh*5~gys z6-~$;izd*7V#GNh?S9Gogio-Pn@>yWJohUQ?bZ%ccu&IIwh|uKEqF~m3$+Z4z!}n} zdDdr_F_TXUnhj*N4r7u* z^0m~MVIOT7WxP3IJ(i)pKH08kRx$uG8I(S@ff`*eVryCuJfw20Tvj}@A+BQ9eVH{# zzpEJ$a60m$4awoRJ;9#1%DV}fH=|Qm7BwnkFM9keq{7t)HLZO%3i7w!KeZtDL{a|) iqq4iAsHn)?jz$!0baLLlG(1`n20n8Wl5v?4CHgOt-`%>Gc ztGtT-S%EH!0g;gC+vAmDCl51F+JQVzFlav$L&PYT;FSl$p++I_Jo%iq)rX9WxpjrkyBLG1Jto27 z-0%@qgmt)r0PV@R-td+@-ciARuNU>z!xATbe*d8_hnBjQ&q&r){yTqx7VIfE-scvy0GA{=$9CYtJY zpM`;RlxO=N{1lb%iss^G78A?ePBRe=xA@QHjQCnGqS$rodF)0dyh?AF+`uN8S3s>4RJh?)4sD7gw(i%H8asDXm~ zaOon_{tFGpNos41e@ca1X?X{mF2|^c;`!X|-h$jd665zfvRUI=)%u)pM`3jAV9~tL zL=z`Plj}+*{wm2TyN)`1(j2J&pg~Uazad=gyc7NNcFOkge!|7}5+fT^N+5KFfTzd> z7>;j*y)ETN#__x+09?ndU;Gw>f}vMIa|wKhKL^0Al)EUEZkvyI=f9yV{=2!GzSail z_wcsPP3Ee?RUl)ZVk+Cb9Ot6a~TgT#^8|Am%QF`VBNUjS+6eLBz$%Z}%C!Mw)NplE8@7xLvg9U1w9IbO}scvIzHIJqYL zw7Ey|C;ic?8~O9skw#u*HNfNEHWl~T6hPs$DPk4-n3(T2ox5V?3bbo^VdB+2T@RAA ztqibr{u_tR#*hsA?`Yw6t(j{-8{Ej9OHB&^lx_U*ge8sO3^r%GKe~KtZ5E1inKq0} z>UExDR5JTUat|cx7Xk+W7>QFsN50o{wJ#9Y|FUSWMR7mpDq_#;iJ8u*)#)qM2@-|D zgvS)q0#6HwwX02m(u2KUGauAY@j9b-TSy?Mv8Tr8!w#mATC2cWY5K^(Fz5C)}?bu<# z(tojxPDUwi>JeR~N44WEGX2NEk&5f!P8dxem|wj@f7=QH>~UHCvhx{#2_*?}dOQrH z61k>(-lnpp_4QNdv6j{HD?eZEI-rzI16NhJna+bKQnC$xNQMraxY>FOS=U9|K+K&; z!9Lkqc1b(+*%UPK2vO>Av1>`!KX@NAC!(`}INM?l2ie4n&L0|LMDyZX*f~EHaNoa} zf5ROHS_i2~bR&p_vdo43XK%zhgi36272vT$m>e@=aX@;rw@Z@H4%|ZGDtt`&3)hj} ziIAT$Nos-Kr2ymNEBC*RNXFqdPVZs{qu{QdwsyyARp*w%K157%R+><{#Z^J{(8+hx@{$ z=A%A*h_zMys$^hzo9h!~{&Ac(^*}kT%F6=`hI6C&-fX^@p!cxAz#BD9&tfKDSo=3r zZIXMy^RzuZ(iek=vGvjmt457Bov#gOr~+=|?6Uc~M(XZ=r52nT4$1&LJbCfWQXcis zO#SKj$JZ+X$0Z2BX-&&h%G*`(F(x{G&x+7cK;SRv6()e$rdr(5F~qc9eW7(0P&y*+ zZ6r|S%LB-MjXQ@GxH@5V;dF-aj#^?2tz)<5c_Z#>)I|BNtu%JlGy#691}D0zMbw|o z7|AfVu{9neR1h!*L*9cni+!5d**oHrvAcXxKR5lFEp64p_Rf9s;{!M~a0>!>7;X5O zg(b>^#aH@YCh;=;4zcD6SYZ~40e^|33|5?S$jAjvOJE|!s z`ISX7#Oh>`#dCg!Iu{l0o@_0V_?MN!u)<2J5`Y+o(n z3)?)jaD>}e=KvZY9gTl=-yVyQHEE1Ju$j%1&F-8`>H=8;{M`{>vXm|4rB{BQ$z?)< zV%ytWteqU6?tU}cpy*&4y7%E+RBo?H@v+A2KaxugoV>{xaO-W<$7Qm#!0<25W1RUQ z_kd{n>Z}o`YD&^)E^x;@m*NU24Biz6@qTHl+JvB~OMp{l04=~H+9Di);#h4f?zo2O zq8FRCqN|rGmwUoZ#YeoQRET(Vb{$qgK0K)#p)CS&tk=+iclc5nIi84Rdo&>?Z{h&2 z4>k&aBr!w?_P^boaR@E9 z{y)}&!CV?VrzViej_oiLxyz1aIDs2jTmB_Cx;;$RxSJq$+5171V8O#fiJ}}mhcQF} zkGAnpQ7`oc1L;hhQceN;-#G(o?HtcqH18(ZN0x#g+qIwUT+(ge&ijD%iolf%SQ$SP zN_#Dot{;v`v1>0fBeLn)adtrtV|TaF&%v38{$*+h7>Vkq-^Ta*-0SxN6AWbf(wDAL z5b5&{n+4dR58oJ^pj_3TBg8c1D_(S>vhyFxy2IRb-jpW(ZP?TF_~d8P;?;~22E5x# z*{b=3zKH#VV7)n*REZ= zc3p4J<(%UST%UpI7xxHNcFDwD)vLk(SfU;804 z($j1^J-@7AI%DgTpFDqmJU%hZ9^KB5bZ@IV+|k1Jt4m+#;TC^TRTzY63Abea!C(LG zKYIS+8`&?v`OI4zVppf9L@?l?wV^6K9tU8K>s&@VBp=!$o$Eg7MBK8}@0Z0Zel7=g z$xAODxd8xow1!WdxiG~~ogI)5JoxJS9*+wEKr=b%%uOBSmUu*LBpPL6lt@ts$@EfC zLg-K{s|WxXswND@MJp;bF*iHXUo4hEC{-xoTw$I+6*V|Ub88i3;bs-#=3PW=Xyg{K z2>@Vo$0m$G*EK4sUI74*0P|IQuo{hFx-Sc2=?Df~SQwrH@n(UJd%!A#003^=j%jg} zEn7Nfseu1uR!)K2dklfL6-a&+)LMh!K9uZAAeBXVX+{Eo=5iYKpd?Rfc~TQ-#f;x?09`O$xzD?7K}dCqvZys#PxM zOB;U8MR^g@qYHJNhEj)n=MSvZ?|bF-ufP4Yx2v9aeSU+O#6y>RpXr>BjSjH3z0CWJdk=-@b1ME>D$@955>1T(&iSt(#@@jxE=-T2s}|JzKl6{PQ2D-~1qEbUe{aEk1GX^h42! zzXk~?BLpA-Kq!$yNaekrx833HgGxG?%+D2Tf1H_HxN>*3`PDknFFgF%Q{fMPi(~B4 z#dC#g=leQOy!8>2fCK';var_dump($a);echo '';if ($stop){exit();}} function BodyClasses($add=''){$regex='#(msie)[/ ]([0-9])+|(firefox)/([0-9])+|(chrome)/([0-9])+|(opera)/([0-9]+)|(safari)/([0-9]+)|(android)|(iphone)|(ipad)|(blackberry)|(Windows Phone)|(symbian)|(mobile)|(bada])#i';@preg_match($regex,$_SERVER['HTTP_USER_AGENT'],$resultat);return ' class="'.$add.' '.@preg_replace('#([a-zA-Z ]+)[ /]([0-9]+)#','$1 $1$2',$resultat[0]).' '.basename($_SERVER['PHP_SELF'],'.php').'" ';} function title2filename($chaine){$a=array(' ',':','|','#','/','\\','$','*','?','&','<','>');return substr(stripAccents(str_replace($a,'_',$chaine)),0,30);} function stripAccents($string){ $a=explode(' ','à á â ã ä ç è é ê ë ì í î ï ñ ò ó ô õ ö ù ú û ü ý ÿ À Á Â Ã Ä Ç È É Ê Ë Ì Í Î Ï Ñ Ò Ó Ô Õ Ö Ù Ú Û Ü Ý');$b=explode(' ','a a a a a c e e e e i i i i n o o o o o u u u u y y A A A A A C E E E E I I I I N O O O O O U U U U Y');return str_replace($a,$b,$string);} +function returncurrenturl(){$domaine=dirname($_SERVER['SERVER_PROTOCOL']) . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ;$domaine=explode('?',$domaine);return $domaine[0];} +function store($file,$datas){file_put_contents($file,serialize($datas));} +function unstore($file){ return unserialize(file_get_contents($file));} +function search($public='public',$tag=false){ + global $GLOBAL; + //$GLOBAL['tag_array']; + if (!$tag){return scandir($GLOBAL[$public.'_data_folder'] );} + else{ + foreach ($GLOBAL['tag_array'][$public] as $key=>$val){ + if (stripos($val,$tag)!==false){$result[]=$key;} + } + if (!empty($result)){return $result;}else{return array();} + } +} +function array2feed($array=null){ + // more infos on this function at https://github.com/broncowdd/feed2array + if (!$array){return false;} + if (empty($array['infos']['type'])){$array['infos']['type']='rss';}else{$array['infos']['type']=strtolower($array['infos']['type']);} + if (empty($array['infos']['description'])){$array['infos']['description']='';} + $r="\n";$t="\t"; + $tpl=array('rss'=>array(),'atom'=>array()); + $tpl['rss']['header']=''.$r.''.$r.$t.''.$r; + $tpl['atom']['header']=''.$r; + $tpl['rss']['footer']=$t.''.$r; + $tpl['atom']['footer']=''.$r; + $tpl['rss']['content-type']='Content-Type: application/rss+xml'; + $tpl['atom']['content-type']='Content-Type: application/atom+xml;charset=utf-8'; + header($tpl[$array['infos']['type']]['content-type']); + $feed=$tpl[$array['infos']['type']]['header']; + //create the feed's info content + foreach($array['infos'] as $key=>$value){ + if ($array['infos']['type']=='atom'){ // ATOM + if ($key=='link'){$feed.=$t.$t.''.$r;} + elseif ($key=='author'){$feed.=$t.$t.''.$value.''.$r;} + elseif ($key=='licence'){$feed.=$t.$t.'<'.$key.' href="'.$value.'" rel="license"/>'.$r;} // in atom feed, licence is the link to the licence type + elseif ($key!='version'&&$key!='type'){$feed.=$t.$t.'<'.$key.'>'.$value.''.$r;} + }else{ // RSS + if ($key!='version'&&$key!='type'){$feed.=$t.$t.'<'.$key.'>'.$value.''.$r;} + } + } + //then the items content + foreach ($array['items'] as $item){ + if ($array['infos']['type']=='atom'){ $feed.=$t.$t.$t.''.$r;}else{$feed.=$t.$t.$t.''.$r;} + foreach($item as $key=>$value){ + if ($array['infos']['type']=='atom'){ // ATOM + if ($key=='link'){$feed.=$t.$t.$t.$t.''.$r;} + elseif ($key=='content'){$feed.=$t.$t.$t.$t.''.htmlspecialchars($value).''.$r;} + else{$feed.=$t.$t.$t.$t.'<'.$key.'>'.$value.''.$r;} + }else{ // RSS + if ($key=='date'||$key=='pubDate'||$key=='title'||$key=='link'){$feed.=$t.$t.$t.$t.'<'.$key.'>'.htmlspecialchars($value).''.$r;} + elseif($key=='guid'){ $feed.=$t.$t.$t.$t.''.$value.''.$r;} + else{$feed.=$t.$t.$t.$t.'<'.$key.'>'.$r;} + } + } + if ($array['infos']['type']=='atom'){ $feed.=$t.$t.$t.''.$r;}else{$feed.=$t.$t.$t.''.$r;} + } + + + $feed.=$tpl[$array['infos']['type']]['footer']; + return $feed; +} +function tagcloud(){ + global $GLOBAL; + $array=array(); + if (!$GLOBAL['public']){ + foreach ($GLOBAL['tag_array']['private'] as $key=>$tag){ + $tags=explode(' ',$tag); + foreach ($tags as $t){ + if (!isset($array[$t]['nb'])){$array[$t]['nb']=1;}else{$array[$t]['nb']++;} + if (!isset($array[$t]['status'])){$array[$t]['status']='private';} + } + } + } + foreach ($GLOBAL['tag_array']['public'] as $key=>$tag){ + $tags=explode(' ',$tag); + foreach ($tags as $t){ + if (!isset($array[$t]['nb'])){$array[$t]['nb']=1;}else{$array[$t]['nb']++;} + if (!isset($array[$t]['status'])){$array[$t]['status']='public';} + } + } + + foreach ($array as $tag=>$val){ + echo ''.$tag.' '.$val['nb'].''; + } +} +function tag2links($tagstring){ + global $GLOBAL; + $array=explode(' ',$tagstring);$links=''; + foreach ($array as $tag){ + $links.=''.$tag.''; + } + return $links; +} if(isset($_GET['publicget'])||isset($_GET['privateget'])){$bodyclass.=' iframe';} $bodyclass=bodyclasses($bodyclass);$target=''; @@ -22,9 +124,9 @@ $bodyclass=bodyclasses($bodyclass);$target=''; * */ -/* all the enhancements (logo, css, session lock, bookmarklet) are from Bronco (www.warriordudimanche.net) -* and are based on the same licence ;) -* thanks a lot to Timo for his great job on this app ;) */ +/* all the enhancements (logo, css, session lock, bookmarklet, tags, rss feed, api) are from Bronco (www.warriordudimanche.net) +* and are based on the same licence ;) +* thanks a lot to Timo for his great job on this app ;) */ // PHP 5.1.2 minimum required @@ -32,20 +134,27 @@ error_reporting(-1); date_default_timezone_set('UTC'); // CONFIGURABLE OPTIONS // change those directories'names for more security -$GLOBALS['data_folder'] = 'mypersonaldata'; -$GLOBALS['private_data_folder'] = $GLOBALS['data_folder'].'/private'; -$GLOBALS['public_data_folder'] = $GLOBALS['data_folder'].'/public'; -$GLOBALS['default_data_folder'] = $GLOBALS['public_data_folder']; -$GLOBAL['version']='1.3'; -$GLOBALS['message'] = 'Votre webliothèque perso'; -$GLOBALS['public_title'] = 'Voici la webliothèque publique de Bronco'; +$GLOBAL['data_folder'] = 'mypersonaldata'; +$GLOBAL['private_data_folder'] = $GLOBAL['data_folder'].'/private'; +$GLOBAL['public_data_folder'] = $GLOBAL['data_folder'].'/public'; +$GLOBAL['default_data_folder'] = $GLOBAL['public_data_folder'];//change to private_data_folder to make private the default status +$GLOBAL['version']='2.0'; +$GLOBAL['rss_title']='Respawn: le flux de la webliothèque'; +$GLOBAL['rss_description']='Le respawn de warriordudimanche.net'; +$GLOBAL['respawn_url']=returncurrenturl(); +$GLOBAL['message'] = 'Votre webliothèque perso'; +$GLOBAL['public_title'] = 'Voici la webliothèque publique de Bronco'; $bookmarklet='Bookmarklet'; $column_width='width:47%'; -if ($public){$bookmarklet='';$column_width='width:97%';} -if (!creer_dossier($GLOBALS['data_folder'], TRUE)) { die('Cant create '.$GLOBALS['data_folder'].' folder.'); } -if (!creer_dossier($GLOBALS['data_folder'].'/zipversions', TRUE)) { die('Cant create '.$GLOBALS['data_folder'].'/zipversions'.' folder.'); } -if (!creer_dossier($GLOBALS['private_data_folder'], TRUE)) { die('Cant create '.$GLOBALS['private_data_folder'].' folder.'); } -if (!creer_dossier($GLOBALS['public_data_folder'], TRUE)) { die('Cant create '.$GLOBALS['public_data_folder'].' folder.'); } +if ($GLOBAL['public']){$bookmarklet='';$column_width='width:97%';} +if (!creer_dossier($GLOBAL['data_folder'], TRUE)) { die('Cant create '.$GLOBAL['data_folder'].' folder.'); } +if (!creer_dossier($GLOBAL['data_folder'].'/zipversions', TRUE)) { die('Cant create '.$GLOBAL['data_folder'].'/zipversions'.' folder.'); } +if (!creer_dossier($GLOBAL['private_data_folder'], TRUE)) { die('Cant create '.$GLOBAL['private_data_folder'].' folder.'); } +if (!creer_dossier($GLOBAL['public_data_folder'], TRUE)) { die('Cant create '.$GLOBAL['public_data_folder'].' folder.'); } +if (is_file($GLOBAL['data_folder'].'/tags.txt')){$GLOBAL['tag_array']=unstore($GLOBAL['data_folder'].'/tags.txt');}else{$GLOBAL['tag_array']=array('public'=>array(),'private'=>array());store($GLOBAL['data_folder'].'/tags.txt',$GLOBAL['tag_array']);} +if (!isset($GLOBAL['tag_array']['public'])){$GLOBAL['tag_array']['public']=array();}; +if (!isset($GLOBAL['tag_array']['private'])){$GLOBAL['tag_array']['private']=array();}; + // // BEGIN SCRIPT @@ -62,9 +171,9 @@ if (!creer_dossier($GLOBALS['public_data_folder'], TRUE)) { die('Cant create '.$ // init // url not yet retrieved -$GLOBALS['done']['d'] = FALSE; +$GLOBAL['done']['d'] = FALSE; -if (!$public){ +if (!$GLOBAL['public']){ // private // Get URL to save. if (!empty($_GET['q'])) { @@ -73,39 +182,39 @@ if (!$public){ if (strpos($url, '://') === false) { $url = 'http://'.$url; } - $GLOBALS['url'] = $url; + $GLOBAL['url'] = $url; $url_p = url_parts(); // retrieve the file main HTML file - $GLOBALS['main_page_data'] = get_external_file($GLOBALS['url'], 6); + $GLOBAL['main_page_data'] = get_external_file($GLOBAL['url'], 6); - if ($GLOBALS['main_page_data'] === FALSE) { + if ($GLOBAL['main_page_data'] === FALSE) { die('error retrieving external main page'); } else { // crée le nouveau dossier basé sur le TS. $new_folder = date('Y-m-d-H-i-s'); - if (!creer_dossier($GLOBALS['default_data_folder'].'/'.$new_folder) === TRUE ) { + if (!creer_dossier($GLOBAL['default_data_folder'].'/'.$new_folder) === TRUE ) { die('error creating data folder'); } else { - $GLOBALS['target_folder'] = $GLOBALS['default_data_folder'].'/'.$new_folder; + $GLOBAL['target_folder'] = $GLOBAL['default_data_folder'].'/'.$new_folder; } /*GESTION DU PDF ICI*/ if (strtolower(substr($_GET['q'],-4))=='.pdf'){ $title=basename($_GET['q']); - file_put_contents($GLOBALS['target_folder'].'/'.$title,$GLOBALS['main_page_data']); - file_put_contents($GLOBALS['target_folder'].'/index.php',''); + file_put_contents($GLOBAL['target_folder'].'/'.$title,$GLOBAL['main_page_data']); + file_put_contents($GLOBAL['target_folder'].'/index.php',''); }else{ $liste_css = array(); // parse le fichier principal à la recherche de données à télécharger - $files = list_retrievable_data($GLOBALS['url'], $GLOBALS['main_page_data']); + $files = list_retrievable_data($GLOBAL['url'], $GLOBAL['main_page_data']); // les récupère et les enregistre. //echo '
';print_r($files);die();
 				foreach ($files as $i => $file) {
@@ -115,20 +224,20 @@ if (!$public){
 							$liste_css[] = $file;
 						}
 						else {
-							file_put_contents($GLOBALS['target_folder'].'/'.$file['nom_destination'], $data);
+							file_put_contents($GLOBAL['target_folder'].'/'.$file['nom_destination'], $data);
 						}
 					}
 				}
 				// remplace juste les liens  relatifs vers des liens absolus
-				absolutes_links($GLOBALS['main_page_data']);
+				absolutes_links($GLOBAL['main_page_data']);
 
 				// enregistre le fichier HTML principal
-				file_put_contents($GLOBALS['target_folder'].'/'.'index.html', $GLOBALS['main_page_data']);
+				file_put_contents($GLOBAL['target_folder'].'/'.'index.html', $GLOBAL['main_page_data']);
 
 				// récupère le titre de la page
 				// cherche le charset spécifié dans le code HTML.
 				// récupère la balise méta tout entière, dans $meta
-				preg_match('##Usi', $GLOBALS['main_page_data'], $meta);
+				preg_match('##Usi', $GLOBAL['main_page_data'], $meta);
 
 				// si la balise a été trouvée, on tente d’isoler l’encodage.
 				if (!empty($meta[0])) {
@@ -138,7 +247,7 @@ if (!$public){
 					$html_charset = (!empty($enc[1])) ? strtolower($enc[1]) : 'utf-8';
 				} else { $html_charset = 'utf-8'; }
 				// récupère le titre, dans le tableau $titles, rempli par preg_match()
-				preg_match('#(.*)#Usi', $GLOBALS['main_page_data'], $titles);
+				preg_match('#(.*)#Usi', $GLOBAL['main_page_data'], $titles);
 				if (!empty($titles[1])) {
 					$html_title = trim($titles[1]);
 					// ré-encode le titre en UTF-8 en fonction de son encodage.
@@ -224,14 +333,14 @@ if (!$public){
 
 								if (!preg_match('#(css|php|txt|html)#', $file['url_fichier']) ) {
 									if (FALSE !== ($f = get_external_file($url_fichier, 3)) ) {
-										file_put_contents($GLOBALS['target_folder'].'/'.$nouveau_nom, $f);
+										file_put_contents($GLOBAL['target_folder'].'/'.$nouveau_nom, $f);
 									}
 								}
 							}
 						}
 
 						// don't forget to save data
-						file_put_contents($GLOBALS['target_folder'].'/'.$file['nom_destination'], $data);
+						file_put_contents($GLOBAL['target_folder'].'/'.$file['nom_destination'], $data);
 					}
 					$n++;
 					$count = count($liste_css);
@@ -239,12 +348,12 @@ if (!$public){
 			}
 			// enregistre un fichier d’informations concernant la page (date, url, titre)
 			$info  = '';
-			$info .= 'URL="'.$GLOBALS['url'].'"'."\n";
+			$info .= 'URL="'.$GLOBAL['url'].'"'."\n";
 			$info .= 'TITLE="'.$title.'"'."\n";
 			$info .= 'DATE="'.time().'"'."\n";
-			file_put_contents($GLOBALS['target_folder'].'/'.'index.ini', $info);
-			/*$GLOBALS['done']['d'] = 'ajout';			
-			$GLOBALS['done']['lien'] = $GLOBALS['target_folder'].'/';	*/
+			file_put_contents($GLOBAL['target_folder'].'/'.'index.ini', $info);
+			/*$GLOBAL['done']['d'] = 'ajout';			
+			$GLOBAL['done']['lien'] = $GLOBAL['target_folder'].'/';	*/
 			
 		}
 		
@@ -264,7 +373,7 @@ if (!$public){
 			}
 			// then the folder itself.
 	        if (TRUE === rmdir($_GET['suppr'])) {
-					$GLOBALS['done']['d'] = 'remove';			
+					$GLOBAL['done']['d'] = 'remove';			
 
 			}
 	    }
@@ -275,70 +384,145 @@ if (!$public){
 	// to private
 	if (isset($_GET['toprivate']) and $torem = $_GET['toprivate'] and $torem != '') {
 		$torem = htmlspecialchars($_GET['toprivate']);
-		if (is_dir($GLOBALS['public_data_folder'].'/'.$_GET['toprivate'])){
-			rename ($GLOBALS['public_data_folder'].'/'.$_GET['toprivate'],$GLOBALS['private_data_folder'].'/'.$_GET['toprivate']);
+		if (is_dir($GLOBAL['public_data_folder'].'/'.$_GET['toprivate'])){
+			rename ($GLOBAL['public_data_folder'].'/'.$_GET['toprivate'],$GLOBAL['private_data_folder'].'/'.$_GET['toprivate']);
 			header("location: index.php");
 		}
 	}
 	// to public
 	if (isset($_GET['topublic']) and $torem = $_GET['topublic'] and $torem != '') {
 		$torem = htmlspecialchars($_GET['topublic']);
-		if (is_dir($GLOBALS['private_data_folder'].'/'.$_GET['topublic'])){
-			rename ($GLOBALS['private_data_folder'].'/'.$_GET['topublic'],$GLOBALS['public_data_folder'].'/'.$_GET['topublic']);
+		if (is_dir($GLOBAL['private_data_folder'].'/'.$_GET['topublic'])){
+			rename ($GLOBAL['private_data_folder'].'/'.$_GET['topublic'],$GLOBAL['public_data_folder'].'/'.$_GET['topublic']);
 			header("location: index.php");
 		}
 	}
 	// disconnect
 	if (isset($_GET['discotime'])){log_user('disco','');}
 
-	if (isset($_GET['privateget'])&&is_dir($GLOBALS['private_data_folder'].'/'.$_GET['privateget'])){$target=$GLOBALS['private_data_folder'].'/'.$_GET['privateget'];}
-
+	if (isset($_GET['privateget'])&&is_dir($GLOBAL['private_data_folder'].'/'.$_GET['privateget'])){$target=$GLOBAL['private_data_folder'].'/'.$_GET['privateget'];}
 
 	if (isset($_GET['zipprivate'])) { 
-		$ini_file = $GLOBALS['private_data_folder'].'/'.$_GET['zipprivate'].'/index.ini';
+		$ini_file = $GLOBAL['private_data_folder'].'/'.$_GET['zipprivate'].'/index.ini';
 		if(is_file($ini_file)){$info=parse_ini_file($ini_file);}else{$info['TITLE']='';}
-		$origin_folder_path=$GLOBALS['private_data_folder'].'/'.$_GET['zipprivate'];
+		$origin_folder_path=$GLOBAL['private_data_folder'].'/'.$_GET['zipprivate'];
 		$zip_foldername=title2filename($info['TITLE']).'-'.$_GET['zipprivate'];
 		$zip_filename=$zip_foldername.'.zip';
-		$zip_completepath=$GLOBALS['data_folder'].'/zipversions/'.$zip_filename;
+		$zip_completepath=$GLOBAL['data_folder'].'/zipversions/'.$zip_filename;
 		if (is_file($zip_completepath)){header("location: $zip_completepath");exit();}// il existe déjà, on envoie
 		if (is_dir($origin_folder_path)){// sinon on crée le zip si le dossier existe
 			include 'zip.php';			
 			rename ($origin_folder_path,$zip_foldername); // on le déplace pour éviter de voir la structure de dossiers apparaître dans le zip
-			zip($zip_filename,$zip_foldername,$GLOBALS['data_folder'].'/zipversions/');  
+			zip($zip_filename,$zip_foldername,$GLOBAL['data_folder'].'/zipversions/');  
 			rename ($zip_foldername,$origin_folder_path); // on le remet à sa place
-			header('location: '.$GLOBALS['data_folder'].'/zipversions/'.$zip_filename);
+			header('location: '.$GLOBAL['data_folder'].'/zipversions/'.$zip_filename);
 		}
 	}
-}
-	// public get 
+
+	if (isset($_GET['rename'])&&isset($_GET['to'])&&isset($_GET['file'])) { 
+		if (is_file($_GET['file'].'/index.ini')){
+			$ini=parse_ini_file($_GET['file'].'/index.ini');
+			
+			$old=strip_tags(urldecode($_GET['rename']));
+			$new=strip_tags(urldecode($_GET['to']));
+			$newini='URL="'.$ini['URL'].'"'."\n".'TITLE="'.$new.'"'."\n".'DATE="'.$ini['DATE'].'"';
+			//$ini=str_replace('TITLE="'.$old.'"','TITLE="'.$new.'"',$ini);aff($ini);
+			file_put_contents($_GET['file'].'/index.ini',$newini);
+		}
+	}
+	if (isset($_GET['settag'])&&isset($_GET['file'])) { 
+		if (is_file($GLOBAL['data_folder'].'/tags.txt')){$GLOBAL['tag_array']=unstore($GLOBAL['data_folder'].'/tags.txt');}else{$GLOBAL['tag_array']=array();}	
+		if (isset($_GET['ispublic'])){$type='public';}else{$type='private';}
+		$GLOBAL['tag_array'][$type][$_GET['file']]=strip_tags($_GET['settag']);
+		store($GLOBAL['data_folder'].'/tags.txt',$GLOBAL['tag_array']);
+	}
+}else{ // public get 	
 	//download public zip version
 	if (isset($_GET['zippublic'])) {
-		$ini_file = $GLOBALS['public_data_folder'].'/'.$_GET['zippublic'].'/index.ini';
-		if(is_file($ini_file)){$info=parse_ini_file($ini_file);}else{$info['TITLE']='';}
-		$origin_folder_path=$GLOBALS['public_data_folder'].'/'.$_GET['zippublic'];
-		$zip_foldername=title2filename($info['TITLE']).'-'.$_GET['zippublic'];
-		$zip_filename=$zip_foldername.'.zip';
-		$zip_completepath=$GLOBALS['data_folder'].'/zipversions/'.$zip_filename;
-		if (is_file($zip_completepath)){header("location: $zip_completepath");exit();}// il existe déjà, on envoie
-		if (is_dir($origin_folder_path)){// sinon on crée le zip si le dossier existe
-			include 'zip.php';			
-			rename ($origin_folder_path,$zip_foldername); // on le déplace pour éviter de voir la structure de dossiers apparaître dans le zip
-			zip($zip_filename,$zip_foldername,$GLOBALS['data_folder'].'/zipversions/');  
-			rename ($zip_foldername,$origin_folder_path); // on le remet à sa place
-			header('location: '.$GLOBALS['data_folder'].'/zipversions/'.$zip_filename);
-		}
+	$ini_file = $GLOBAL['public_data_folder'].'/'.$_GET['zippublic'].'/index.ini';
+	if(is_file($ini_file)){$info=parse_ini_file($ini_file);}else{$info['TITLE']='';}
+	$origin_folder_path=$GLOBAL['public_data_folder'].'/'.$_GET['zippublic'];
+	$zip_foldername=title2filename($info['TITLE']).'-'.$_GET['zippublic'];
+	$zip_filename=$zip_foldername.'.zip';
+	$zip_completepath=$GLOBAL['data_folder'].'/zipversions/'.$zip_filename;
+	if (is_file($zip_completepath)){header("location: $zip_completepath");exit();}// il existe déjà, on envoie
+	if (is_dir($origin_folder_path)){// sinon on crée le zip si le dossier existe
+		include 'zip.php';			
+		rename ($origin_folder_path,$zip_foldername); // on le déplace pour éviter de voir la structure de dossiers apparaître dans le zip
+		zip($zip_filename,$zip_foldername,$GLOBAL['data_folder'].'/zipversions/');  
+		rename ($zip_foldername,$origin_folder_path); // on le remet à sa place
+		header('location: '.$GLOBAL['data_folder'].'/zipversions/'.$zip_filename);
 	}
-	if (isset($_GET['publicget'])&&is_dir($GLOBALS['public_data_folder'].'/'.$_GET['publicget'])){$target=$GLOBALS['public_data_folder'].'/'.$_GET['publicget'];}
+	}
+	if (isset($_GET['publicget'])&&is_dir($GLOBAL['public_data_folder'].'/'.$_GET['publicget'])){$target=$GLOBAL['public_data_folder'].'/'.$_GET['publicget'];}
+	if (isset($_GET['rss'])){
 
+		$items=array_reverse(search('public',$search_tags));
+		$feed=array(
+			'infos'=>array(
+				'type'=>'rss',
+				'description'=>$GLOBAL['rss_description'],
+				'title'=>$GLOBAL['rss_title'],
+				'link'=>$GLOBAL['respawn_url'],
+			)
+		);
+		foreach ($items as $key=>$item){
+			if ($item!='index.html'){	
+				if (is_dir($GLOBAL['public_data_folder'].'/'.$item)){					
+					if (is_file($GLOBAL['public_data_folder'].'/'.$item.'/index.ini')){
+						$infos=parse_ini_file($GLOBAL['public_data_folder'].'/'.$item.'/index.ini');
+						date_default_timezone_set('Europe/Paris');
+						$infos['DATE']= date("r", $infos['DATE']);
+						if ($infos['TITLE']==''){$infos['TITLE']='Version Respawn de '.$infos['URL'];}
+						$feed['items'][$key]=array(
+							'description'=>'Version Respawn de '.$infos['URL'],
+							'title'=>$infos['TITLE'],
+							'link'=>$GLOBAL['respawn_url'].'?publicget='.$item,
+							'guid'=>$infos['URL'],
+							'pubDate'=>$infos['DATE'],
+						);
+				}
+				}
+			}
+
+		}
+		exit(array2feed($feed));
+	}
+	if (isset($_GET['api'])){
+		$content=array();
+		$items=search('public',$search_tags);	
+		foreach ($items as $key=>$item){
+			if ($item!='index.html'){	
+				if (is_dir($GLOBAL['public_data_folder'].'/'.$item)){					
+					if (is_file($GLOBAL['public_data_folder'].'/'.$item.'/index.ini')){
+						$infos=parse_ini_file($GLOBAL['public_data_folder'].'/'.$item.'/index.ini');
+						date_default_timezone_set('Europe/Paris');
+						$infos['DATE']= date('d/m/Y', $infos['DATE']);
+						if ($infos['TITLE']==''){$infos['TITLE']='Respawn de '.$infos['URL'];}
+						$content[$key]=array(
+							'description'=>'Version Respawn de '.$infos['URL'],
+							'title'=>$infos['TITLE'],
+							'respawn_link'=>$GLOBAL['respawn_url'].'?publicget='.$item,
+							'original_link'=>$infos['URL'],
+							'date'=>$infos['DATE'],
+							'tags'=>$GLOBAL['tag_array']['public'][$item],
+						);
+				}
+				}
+			}
+
+		}
+		exit(serialize($content));
+	}
+}
 
 
 
 function url_parts() {
-	$url_p['s']    = parse_url($GLOBALS['url'], PHP_URL_SCHEME); $url_p['s']   = (is_null($url_p['s'])) ? '' : $url_p['s'];
-	$url_p['h']    = parse_url($GLOBALS['url'], PHP_URL_HOST);   $url_p['h']   = (is_null($url_p['h'])) ? '' : $url_p['h'];
-	$url_p['p']    = parse_url($GLOBALS['url'], PHP_URL_PORT);   $url_p['p']   = (is_null($url_p['p'])) ? '' : ':'.$url_p['p'];
-	$url_p['pat']  = parse_url($GLOBALS['url'], PHP_URL_PATH);   $url_p['pat'] = (is_null($url_p['pat'])) ? '' : $url_p['pat'];
+	$url_p['s']    = parse_url($GLOBAL['url'], PHP_URL_SCHEME); $url_p['s']   = (is_null($url_p['s'])) ? '' : $url_p['s'];
+	$url_p['h']    = parse_url($GLOBAL['url'], PHP_URL_HOST);   $url_p['h']   = (is_null($url_p['h'])) ? '' : $url_p['h'];
+	$url_p['p']    = parse_url($GLOBAL['url'], PHP_URL_PORT);   $url_p['p']   = (is_null($url_p['p'])) ? '' : ':'.$url_p['p'];
+	$url_p['pat']  = parse_url($GLOBAL['url'], PHP_URL_PATH);   $url_p['pat'] = (is_null($url_p['pat'])) ? '' : $url_p['pat'];
 	$url_p['file'] = pathinfo($url_p['pat'], PATHINFO_BASENAME);
 	return $url_p;
 }
@@ -520,7 +704,7 @@ function add_table_and_replace(&$data, $retrievable, &$match1, $match, $url_p, $
 		$url_fichier = $url_p['s'].'://'.$url_p['h'].$match;
 	}
 	else { // relative local path
-		$uuu = (strlen($url_p['file']) == 0 or preg_match('#/$#', $url_p['pat'])) ? $GLOBALS['url'] : substr($GLOBALS['url'], 0, -strlen($url_p['file'])) ;
+		$uuu = (strlen($url_p['file']) == 0 or preg_match('#/$#', $url_p['pat'])) ? $GLOBAL['url'] : substr($GLOBAL['url'], 0, -strlen($url_p['file'])) ;
 		$url_fichier = $uuu . substr($match, 0, -strlen($nom_fichier)).$nom_fichier;
 	}
 
@@ -564,13 +748,13 @@ function rand_new_name($name) {
 }
 
 
-if ($GLOBALS['done']['d'] !== FALSE) {
-	switch($GLOBALS['done']['d']) {
+if ($GLOBAL['done']['d'] !== FALSE) {
+	switch($GLOBAL['done']['d']) {
 		case 'ajout' :
-			header('Location: index.php?done='.$GLOBALS['done']['d'].'&lien='.urlencode($GLOBALS['url']).'&loclink='.urlencode($GLOBALS['done']['lien']));
+			header('Location: index.php?done='.$GLOBAL['done']['d'].'&lien='.urlencode($GLOBAL['url']).'&loclink='.urlencode($GLOBAL['done']['lien']));
 			break;
 		case 'remove' :
-			header('Location: index.php?done='.$GLOBALS['done']['d']);
+			header('Location: index.php?done='.$GLOBAL['done']['d']);
 			break;
 	}
 	echo ''."\n";
@@ -584,23 +768,41 @@ if ($GLOBALS['done']['d'] !== FALSE) {
 
 
 	
+		
 		
-		Respawn – a PHP WebPage Saver	
+		<?php echo $page_title; ?>	
 		
 		
 		
 		
 	
 >
-	
+
@@ -609,7 +811,8 @@ if ($GLOBALS['done']['d'] !== FALSE) { if (!empty($target)){ echo ''; }else{ - if (!$public){ + if (!empty($search_tags)){echo '

Tag : '.$search_tags.' - No tag


';} + if (!$GLOBAL['public']){ if (isset($_GET['done']) and $_GET['done'] !== FALSE) { echo '