crabs_cms-1.0.4 ©2006-2008 - Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com)
1 <?php 2 // 3 // ============================================================================= 4 // crabs_cms-1.0.4 : Crabs Contents Management System 5 // Copyright (C) 2006-2008 : Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com) 6 // 7 // Ce source fait partie d'un projet logiciel libre. Vous pouvez le distribuer 8 // et/ou le modifier en respectant les termes de la GNU General Public License 9 // version 2 ou (suite a votre propre choix) une version ulterieure. 10 // 11 // Ce programme est distribue dans l'espoir qu'il puisse etre utile, mais 12 // sans aucune garantie, meme si il est associe a un produit qui vous en 13 // propose une. Conformez-vous a la GNU General Public License pour avoir 14 // plus de precisions. 15 // 16 // L'auteur ne peut etre tenu responsable de l'utilisation faite des 17 // composantes associees a ce projet (en partie ou dans leur totalite). 18 // 19 // Une copie du fichier de la GNU GPL est fournie dans le repertoire DOC 20 // de ce projet sous le nom gnu_gpl.txt 21 // 22 // ============================================================================= 23 // 24 function generer_accueil( &$xml, $c ) 25 { 26 global $DB_PRFX ; 27 $sql = <<<SQL 28 SELECT titre, resume, contenu, pseudo, 29 DATE_FORMAT( dt, '%d/%m/%Y à %Hh%i') as dtc 30 FROM ${DB_PRFX}dossier 31 WHERE court = 'accueil' 32 SQL; 33 $res = $c->query( $sql ) ; 34 if ( $r = mysql_fetch_assoc( $res ) ) 35 { 36 $xml->addElementText('page', toXML(fromMYSQL($r['titre'])) ) ; 37 $attr = array( 38 'titre'=> toXML(fromMYSQL($r['titre']), true ), 39 'date'=> toXML( $r['dtc'], true ), 40 'auteur'=> toXML( $r['pseudo'], true ) 41 ) ; 42 $txt = espaceInsecable(fromMYSQL($r['contenu'])) ; 43 $xml->addElementText('index', $txt, $attr ) ; 44 $xml->addElementText('description',toXML(fromMYSQL($r['resume'])) ) ; 45 } 46 mysql_freeresult( $res ) ; 47 $sql = <<<SQL 48 SELECT titre, contenu, pseudo, 49 DATE_FORMAT( dt, '%d/%m/%Y à %Hh%i') as dtc 50 FROM ${DB_PRFX}news 51 ORDER BY id DESC 52 LIMIT 5 53 SQL; 54 $res = $c->query( $sql ) ; $news_xml = false ; 55 while ( $r = mysql_fetch_assoc( $res ) ) 56 { 57 if ( $news_xml == false ) 58 $news_xml = &$xml->addElement( 'nouveautes' ) ; 59 $attr = array( 60 'titre'=> toXML(fromMYSQL($r['titre']), true ), 61 'date'=> toXML( $r['dtc'], true ), 62 'auteur'=> toXML( $r['pseudo'], true ) ) ; 63 $txt = espaceInsecable(fromMYSQL($r['contenu'])) ; 64 $news_xml->addElementText( 'nouveaute', $txt, $attr ); 65 } 66 ajouter_menu( $xml, $c ) ; 67 ajouter_liste( $xml, $c, 'index' ) ; 68 } 69 70 function generer_dossier( &$xml, $c, $dossier ) 71 { 72 global $DB_PRFX ; 73 $sql = <<<SQL 74 SELECT titre, resume, contenu, pseudo, sous_article, 75 DATE_FORMAT( dt, '%d/%m/%Y à %Hh%i') as dtc 76 FROM ${DB_PRFX}dossier 77 WHERE court = '$dossier' 78 SQL; 79 $res = $c->query( $sql ) ; 80 if ( $r = mysql_fetch_assoc( $res ) ) 81 { 82 $xml->addElementText('page', toXML(fromMYSQL($r['titre'])) ) ; 83 $attr = array( 84 'titre'=> toXML(fromMYSQL($r['titre']), true ), 85 'date'=> toXML( $r['dtc'], true ), 86 'auteur'=> toXML( $r['pseudo'], true ) 87 ) ; 88 $txt = espaceInsecable(fromMYSQL($r['contenu'])) ; 89 $xml->addElementText( 'dossier', $txt, $attr ); 90 $xml->addElementText( 'description', toXML(fromMYSQL($r['resume'])) ) ; 91 } 92 mysql_freeresult( $res ) ; 93 ajouter_menu( $xml, $c ) ; 94 if ( $r['sous_article'] == 'N' ) 95 ajouter_liste( $xml, $c, $dossier ) ; 96 else 97 ajouter_articles( $xml, $c, $dossier, -1 ) ; 98 } 99 100 function generer_article( &$xml, $c, $dossier, $numero ) 101 { 102 global $DB_PRFX ; 103 $sql = <<<SQL 104 SELECT titre, resume, contenu, pseudo, 105 DATE_FORMAT( dt, '%d/%m/%Y à %Hh%i') as dtc 106 FROM ${DB_PRFX}article 107 WHERE dossier = '$dossier' AND numero='$numero' 108 SQL; 109 $res = $c->query( $sql ) ; 110 if ( $r = mysql_fetch_assoc( $res ) ) 111 { 112 $xml->addElementText('page', toXML(fromMYSQL($r['titre'])) ) ; 113 $attr = array( 114 'titre'=> toXML(fromMYSQL($r['titre']), true ), 115 'date'=> toXML( $r['dtc'], true ), 116 'auteur'=> toXML( $r['pseudo'], true ) 117 ) ; 118 $txt = espaceInsecable(fromMYSQL($r['contenu'])) ; 119 $xml->addElementText( 'article', $txt , $attr ); 120 $xml->addElementText( 'description', toXML(fromMYSQL($r['resume'])) ) ; 121 } 122 mysql_freeresult( $res ) ; 123 ajouter_menu( $xml, $c ) ; 124 ajouter_articles( $xml, $c, $dossier, $numero ) ; 125 } 126 127 function ajouter_menu( &$xml, $c ) 128 { 129 global $DB_PRFX ; 130 $sql = <<<SQL 131 SELECT court, titre, titre_item 132 FROM ${DB_PRFX}dossier 133 WHERE rang_menu >= 0 134 ORDER BY rang_menu 135 SQL; 136 $menu = &$xml->addElement( 'menu' ) ; 137 $res = $c->query( $sql ) ; 138 while ( $r = mysql_fetch_assoc( $res ) ) 139 { 140 if ( $r['court'] == 'accueil' ) 141 $page = 'index' ; 142 else 143 $page = $r['court'] ; 144 $attr = array( 145 'page'=> $page, 146 'titre'=> toXML(fromMYSQL($r['titre']), true ), 147 'titre_item'=> toXML(fromMYSQL($r['titre_item']), true ) 148 ) ; 149 $menu->addElementSimple( 'item', $attr ) ; 150 } 151 mysql_freeresult( $res ) ; 152 } 153 154 function ajouter_liste( &$xml, $c, $courant ) 155 { 156 global $DB_PRFX ; 157 $sql = <<<SQL 158 SELECT court, titre, titre_item 159 FROM ${DB_PRFX}dossier 160 WHERE rang_liste >= 0 161 ORDER BY rang_liste 162 SQL; 163 $menu = &$xml->addElement( 'liste', 164 array('type'=>'menu','courant'=>toXML($courant,true)) ) ; 165 $res = $c->query( $sql ) ; 166 while ( $r = mysql_fetch_assoc( $res ) ) 167 { 168 if ( $r['court'] == 'accueil' ) 169 $page = 'index' ; 170 else 171 $page = $r['court'] ; 172 $actif = ( $page == $courant )?'Y':'N' ; 173 $attr = array( 174 'page'=> $page, 175 'titre'=> toXML(fromMYSQL($r['titre']), true ), 176 'titre_item'=> toXML(fromMYSQL($r['titre_item']), true ), 177 'actif'=> $actif 178 ) ; 179 $menu->addElementSimple( 'item', $attr ) ; 180 } 181 mysql_freeresult( $res ) ; 182 } 183 184 function ajouter_articles( &$xml, $c, $dossier, $numero ) 185 { 186 global $DB_PRFX ; 187 $menu = &$xml->addElement( 'liste', array('type'=>'article') ) ; 188 $sql = <<<SQL 189 SELECT titre, titre_item 190 FROM ${DB_PRFX}dossier 191 WHERE court = '$dossier' 192 SQL; 193 $res = $c->query( $sql ) ; 194 if ( $r = mysql_fetch_assoc( $res ) ) 195 { 196 $page = $dossier ; 197 $attr = array( 198 'page'=> $page, 199 'titre'=> toXML(fromMYSQL($r['titre']), true ), 200 'titre_item'=> toXML(fromMYSQL($r['titre_item']), true ), 201 'actif'=>($numero==-1)?'Y':'N' 202 ) ; 203 $menu->addElementSimple( 'titre_liste', $attr ) ; 204 } 205 $sql = <<<SQL 206 SELECT numero, titre, titre_item 207 FROM ${DB_PRFX}article 208 WHERE dossier='$dossier' 209 ORDER BY numero 210 SQL; 211 $res = $c->query( $sql ) ; $art = array() ; 212 while ( $r = mysql_fetch_assoc( $res ) ) 213 { 214 $page = $dossier.'_'.$r['numero'] ; 215 $attr = array( 216 'page'=> $page, 217 'titre'=> toXML(fromMYSQL($r['titre']), true ), 218 'titre_item'=> toXML(fromMYSQL($r['titre_item']), true ), 219 'actif'=>($r['numero']==$numero)?'Y':'N' 220 ) ; 221 $menu->addElementSimple( 'item', $attr ) ; 222 $art[] = $attr ; 223 } 224 mysql_freeresult( $res ) ; 225 if ( $numero == -1 ) 226 { 227 $la = &$xml->addElement( 'liste_article' ) ; 228 foreach( $art as $a ) 229 $la->addElementSimple( 'item_article', $a ) ; 230 } 231 } 232 233 // le retour de cette fonction 234 // 0 : OK, il y a une page suivante 235 // 1 : OK, il n'a pas de page suivante 236 // 2 : PB 237 function generer_album( &$xml, $c, $album, $page ) 238 { 239 global $DB_PRFX ; 240 // Les info de l'album 241 $sql = <<<SQL 242 SELECT numero, titre, resume 243 FROM ${DB_PRFX}pha 244 WHERE court='$album' 245 SQL; 246 $res = $c->query( $sql ) ; 247 if ( ! ( $r = mysql_fetch_assoc( $res ) ) ) return 2 ; 248 $xml->addElementText( 'description', toXML(fromMYSQL($r['resume'])) ) ; 249 $attr = array( 'titre'=> toXML(fromMYSQL($r['titre']), true) ) ; 250 $album_num = $r['numero'] ; 251 mysql_freeresult( $res ) ; 252 253 // le nombre d'images dans l'album : verification de la page 254 $sql = "SELECT COUNT(*) FROM ${DB_PRFX}phf WHERE album='$album_num'" ; 255 $res = $c->query( $sql ) ; 256 if ( ! ( $r = mysql_fetch_array( $res, MYSQL_NUM ) ) ) return 2 ; 257 $nbphoto = $r[0] ; 258 mysql_freeresult( $res ) ; 259 $nbpage = (int)( ($nbphoto+14) / 15 ) ; 260 if ( $page >= $nbpage ) return 2 ; // les pages commencencent à 0 261 262 $premier = $page*15 ; 263 $xml_album = &$xml->addElement( 'album', $attr ) ; 264 $sql = <<<SQL 265 SELECT numero, titre, fichier, vw, vh 266 FROM ${DB_PRFX}phf 267 WHERE album='$album_num' 268 ORDER BY numero 269 LIMIT $premier, 15 270 SQL; 271 $res = $c->query( $sql ) ; 272 while ( $r = mysql_fetch_assoc( $res ) ) 273 { 274 $attr = array( 275 'page'=> 'PHOTOS/'.$album.'_p_'.$r['numero'], 276 'titre'=> toXML(fromMYSQL($r['titre']), true ), 277 'fichier'=> toXML( $r['fichier'], true ), 278 'w'=> $r['vw'], 'h'=>$r['vh'] 279 ) ; 280 $xml_album->addElementSimple( 'photo_album', $attr ) ; 281 } 282 mysql_freeresult( $res ) ; 283 $premier = '<premier page="PHOTOS/'.$album.'_a_0"/>' ; 284 $precedent = '<precedent page="PHOTOS/'.$album.'_a_'.($page-1).'"/>' ; 285 $suivant = '<suivant page="PHOTOS/'.$album.'_a_'.($page+1).'"/>' ; 286 $dernier = '<dernier page="PHOTOS/'.$album.'_a_'.($nbpage-1).'"/>' ; 287 if ( $page == 0 ) { $premier = '' ; $precedent = '' ; } 288 if ( $page == 1 ) { $precedent = '' ; } 289 if ( $page == $nbpage-2 ) { $suivant = '' ; } 290 if ( $page == $nbpage-1 ) { $suivant = '' ; $dernier='' ; } 291 $nav = $premier.$precedent.$suivant.$dernier ; 292 $attr = array( 'page'=>$album.'_p_'.$page, 'mode'=>'a' ) ; 293 $xml_album->addElementText( 'navigation', $nav, $attr ) ; 294 ajouter_menu( $xml, $c ) ; 295 return 0 ; 296 } 297 function generer_photo( &$xml, $c, $album, $num ) 298 { 299 global $DB_PRFX ; 300 // Les info de l'album 301 $sql = <<<SQL 302 SELECT numero, titre 303 FROM ${DB_PRFX}pha 304 WHERE court='$album' 305 SQL; 306 $res = $c->query( $sql ) ; 307 if ( ! ( $r = mysql_fetch_assoc( $res ) ) ) return 2 ; 308 $album_num = $r['numero'] ; 309 $album_titre = fromMYSQL($r['titre']) ; 310 mysql_freeresult( $res ) ; 311 312 // les images dans l'album : recherche des liens 313 $sql = "SELECT numero FROM ${DB_PRFX}phf" ; 314 $sql.= " WHERE album='$album_num' ORDER BY NUMERO" ; 315 $res = $c->query( $sql ) ; 316 $photo_nb = 0 ; $prec = -1 ; $prem = -1 ; $suiv = -1 ; $der = -1 ; 317 while( $r = mysql_fetch_array( $res, MYSQL_NUM ) ) 318 { 319 $n = $r[0] ; 320 if ( $prem == -1 ) $prem = $n ; 321 if ( $n < $num ) $prec = $n ; 322 if ( $n > $num ) if ( $suiv == -1 ) $suiv = $n ; 323 $der = $n ; 324 if ( $n <= $num ) $photo_nb++ ; 325 } 326 mysql_freeresult( $res ) ; 327 $nupage = (int)( ($photo_nb+14) / 15 ) - 1 ; 328 329 $sql = <<<SQL 330 SELECT numero, titre, fichier, resume, w, h 331 FROM ${DB_PRFX}phf 332 WHERE numero='$num' 333 SQL; 334 $attr = array( 'album'=>toXML( $album_titre, true ) ) ; 335 $xml_photo = &$xml->addElement( 'grande_photo', $attr ) ; 336 $res = $c->query( $sql ) ; 337 if ( $r = mysql_fetch_assoc( $res ) ) 338 { 339 $attr = array( 340 'page'=> 'PHOTOS/'.$album.'_p_'.$r['numero'], 341 'titre'=> toXML( fromMYSQL($r['titre']), true ), 342 'fichier'=> toXML( $r['fichier'], true ), 343 'w'=> $r['w'], 'h'=>$r['h'] 344 ) ; 345 $xml_photo->addElementSimple( 'la_photo', $attr ) ; 346 $xml->addElementText( 'description', toXML(fromMYSQL($r['resume'])) ) ; 347 } 348 mysql_freeresult( $res ) ; 349 350 $up = '<album page="PHOTOS/'.$album.'_a_'.$nupage.'"/>' ; 351 $premier = '<premier page="PHOTOS/'.$album.'_p_'.$prem.'"/>' ; 352 $precedent = '<precedent page="PHOTOS/'.$album.'_p_'.$prec.'"/>' ; 353 $suivant = '<suivant page="PHOTOS/'.$album.'_p_'.$suiv.'"/>' ; 354 $dernier = '<dernier page="PHOTOS/'.$album.'_p_'.$der.'"/>' ; 355 356 if ( $num == $prem ) { $premier = '' ; $precedent = '' ; } 357 if ( $prem == $prec ) { $precedent = '' ; } 358 if ( $num == $der ) { $dernier=''; $suivant = '' ; } 359 if ( $der == $suiv ) { $suivant = '' ; } 360 $nav = $up.$premier.$precedent.$suivant.$dernier ; 361 $attr = array( 'page'=>$album.'_p_'.$nupage, 'mode'=>'a' ) ; 362 $xml_photo->addElementText( 'navigation', $nav, $attr ) ; 363 ajouter_menu( $xml, $c ) ; 364 return 0 ; 365 } 366 function generer_nouveautes( &$xml, $c ) 367 { 368 global $DB_PRFX ; 369 $c = new MYSQL ; 370 $sql = <<<SQL 371 SELECT titre, contenu, pseudo, 372 DATE_FORMAT( dt, '%d/%m/%Y à %Hh%i') as dtc 373 FROM ${DB_PRFX}news 374 ORDER BY id DESC 375 SQL; 376 $res = $c->query( $sql ) ; $news_xml = false ; 377 while ( $r = mysql_fetch_assoc( $res ) ) 378 { 379 if ( $news_xml == false ) 380 $news_xml = &$xml->addElement( 'nouveautes' ) ; 381 $attr = array( 382 'titre'=> toXML(fromMYSQL($r['titre']), true ), 383 'date'=> toXML( $r['dtc'], true ), 384 'auteur'=> toXML( $r['pseudo'], true ) ) ; 385 $txt = espaceInsecable(fromMYSQL($r['contenu'])) ; 386 $news_xml->addElementText( 'nouveaute', $txt, $attr ); 387 } 388 ajouter_menu( $xml, $c ) ; 389 ajouter_liste( $xml, $c, 'nouveautes' ) ; 390 } 391 392 function generer_cal( &$xml, $c, $saison ) 393 { 394 global $DB_PRFX ; 395 if ( $saison == false ) 396 { 397 $annee = date('Y')+0 ; $mois = date('m')+0 ; $jour = date('d')+0 ; 398 $sql = "SELECT saison FROM ${DB_PRFX}cal WHERE annee='$annee'" ; 399 $sql.= " AND mois='$mois' AND jour='$jour'" ; 400 $res = $c->query( $sql ) ; 401 $r = mysql_fetch_object( $res ) ; 402 $saison = $r->saison ; 403 mysql_freeresult( $res ) ; 404 file_put_contents( 'sql.txt', $sql."\n" ) ; 405 } 406 $LES_MOIS = array ( 407 1=>'Janvier', 2=>'Fevrier', 3=>'Mars', 4=>'Avril', 408 5=>'Mai', 6=>'Juin', 7=>'Juillet', 8=>'Août', 409 9=>'Septembre', 10=>'Octobre', 11=>'Novembre', 12=>'Décembre' ) ; 410 $jattr = array( 'id', 'jour', 'jsem', 'classe', 'info' ) ; 411 412 $sql = "SELECT saison FROM ${DB_PRFX}cal GROUP BY saison ORDER BY saison" ; 413 $res = $c->query( $sql ) ; 414 $prec = -1 ; $suiv = -1 ; 415 while ( $r = mysql_fetch_object( $res ) ) 416 { 417 if ( $r->saison < $saison ) $prec = $r->saison ; 418 if ( $r->saison > $saison ) if ( $suiv == -1 ) $suiv = $r->saison ; 419 } 420 mysql_freeresult( $res ) ; 421 $attr = array( 'saison'=>$saison ) ; 422 if ( $prec != -1 ) $attr['precedente'] = $prec ; 423 if ( $suiv != -1 ) $attr['suivante'] = $suiv ; 424 $cal = &$xml->addElement( 'cal', $attr ) ; 425 $mois_courant = -1 ; $mois_xml = false ; $mois_pos=0 ; 426 $sql = <<<SQL 427 SELECT * 428 FROM ${DB_PRFX}cal 429 WHERE saison='$saison' 430 ORDER BY annee, mois, jour 431 SQL; 432 file_put_contents( 'sql2.txt', $sql."\n" ) ; 433 $res = $c->query( $sql ) ; 434 while ( $r = mysql_fetch_assoc( $res ) ) 435 { 436 foreach( $r as $var => $val ) 437 $$var = fromMYSQL( $val ) ; 438 if ( $mois != $mois_courant ) 439 { 440 $mois_pos++ ; 441 $mois_xml = &$cal->addElement( 'mois', array( 'pos'=>$mois_pos, 442 'm'=>$mois, 'mois'=>$LES_MOIS[$mois], 'annee'=>$annee ) ) ; 443 $mois_courant = $mois ; 444 } 445 $attr = array() ; 446 foreach( $jattr as $a ) $attr[$a] = toXML( $$a, true ) ; 447 $mois_xml->addElementSimple( 'jour', $attr ) ; 448 } 449 mysql_freeresult( $res ) ; 450 $sql = "SELECT * FROM ${DB_PRFX}calcl ORDER BY info" ; 451 $res = $c->query( $sql ) ; 452 while ( $r = mysql_fetch_assoc( $res ) ) 453 { 454 $attr = array() ; 455 foreach( $r as $var => $val ) 456 $attr[$var] = toXML( fromMYSQL( $val ), true ) ; 457 $cal->addElementSimple( 'classe', $attr ) ; 458 } 459 mysql_freeresult( $res ) ; 460 ajouter_menu( $xml, $c ) ; 461 } 462 ?>
Date de génération : 24/10/2008 21:34