// // This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. // // To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/1.0/ // // or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. // // Francais (brouillon): http://creativecommons.org/projects/international/fr/translated-license // ////////////////////////////////////////////////////////////////////////////////////////////////////// // Gestion des journaux // v0.1.15 class journal { var $chemin = "../datas/"; var $regex = '^[a-z0-9]{3,30}$'; var $interdits = array("www","stats","mon","forum","forums","abuse","perso","ecrire","admin","docs","documents","images","img","classes","data","smileys","public"); var $err = array( "stop" => "oui", "log" => "oui", "debug" => "oui"); // Gestion des erreurs function _err($err,$debug="") { // Si le debug est activé if($this->err[debug] == "oui" && !empty($debug)) $err.= "\n// DEBUG //\n".$debug; // Si on log les erreurs if($this->err[log] == "oui") $this->erreurs[] = $err; // Si on s'arrête sur les erreurs if($this->err[stop] == "oui") { echo "
".htmlentities(stripslashes($err))."
"; exit; } $this->erreur = $err; return FALSE; } function secure_php($texte) { $texte = strtr($texte,array(""< ?","?>"=>"? >",'<%'=>"< %",'%>'=>"% >","x-http"=>"(x)-http")); $texte = eregi_replace("language=[\"']php[43]?","language='péhachepé",$texte); return $texte; } // Infos sur un journal // $journal = STRING id journal (identifiant unique texto) function infos($journal) { $requete = "SELECT * FROM journaux WHERE id=\"{$journal}\""; $res = mysql_query($requete); if(!$res) return $this->_err("Problème technique.",mysql_error()); if(mysql_num_rows($res) < 1) return $this->_err("Il n'existe pas de journal sous ce nom."); return mysql_fetch_assoc($res); } function creer($membre,$id,$titre) { if(!ereg($this->regex,$id)) return $this->_err("Votre identifiant n'est pas valide. Il ne ne doit contenir que des lettres minuscules sans accents et des chiffres et faire entre 3 et 30 caractères."); if(in_array($id,$this->interdits)) return $this->_err("Cet identifiant est réservé. Veuillez en choisir un autre."); $res = mysql_query('SELECT id FROM journaux WHERE id="'.$id.'"'); if(mysql_num_rows($res) > 0) return $this->_err("Cet identifiant a déjà été choisi par quelqu'un d'autre. Merci d'en choisir un autre."); mysql_free_result($res); $req = 'INSERT INTO journaux SET titre="'.$titre.'", id="'.$id.'", forum="non", suivimail="non", statut="prive", auteur="'.$membre.'"'; if(!mysql_unbuffered_query($req)) return $this->_err("Problème technique.",$req."\n--> ".mysql_error()); if($GLOBALS['cfg']['alternc'] == TRUE) system('add_subdomain '.$GLOBALS['cfg']['alternc_domain'].' '.$id.' '.$GLOBALS['cfg']['alternc_path']); if(!$this->creer_arbo($id)) return FALSE; return TRUE; } // $rec = array( titre, texte, statut (prive/public/restreint/interdit/collectif), forum ( non/oui/membres/abonnes ), // abonnement (oui/non), collectif (libre/modere), visuel ); function modifier($journal,$rec) { foreach($rec as $k=>$v) { if(trim($v) == "") return $this->_err("Le champ {$k} est vide."); } $requete = "UPDATE journaux SET titre=\"{$rec[titre]}\", texte=\"{$rec[texte]}\", statut=\"{$rec[statut]}\", ". "forum=\"{$rec[forum]}\", suivimail=\"{$rec[suivimail]}\", collectif='{$rec[collectif]}', visuel='{$rec[visuel]}' WHERE id=\"{$journal}\""; $res = mysql_unbuffered_query($requete); if(!$res) return $this->_err("Problème technique.",mysql_error()); if($rec[statut] == "restreint") { $fp = @fopen($this->chemin."textes/".$journal."/restreint","w"); @fclose($fp); } if($rec[statut] != "restreint" && file_exists($this->chemin."textes/".$journal."/restreint")) @unlink($this->chemin."textes/".$journal."/restreint"); return TRUE; } function get_infos($id) { $requete = "SELECT j.statut,e.mois FROM journaux AS j, ecrits AS e WHERE j.id='{$id}' AND j.id=e.journal AND e.statut != 'prive' ORDER BY e.mois DESC LIMIT 0,1"; $res = mysql_unbuffered_query($requete); if(!$res) return $this->_err("Problème technique.",$requete."\n --> ".mysql_error()); $rec = @mysql_fetch_assoc($res); return $rec; } function creer_arbo($journal) { $arbo = array($this->chemin."textes/".$journal,$this->chemin."documents/".$journal,$this->chemin."stats/".$journal, $this->chemin."cache/".$journal); foreach($arbo as $dir) { if(!@mkdir($dir,0777)) return $this->_err("Impossible de créer l'arborescence.","Repertoire {$dir}"); } return TRUE; } function liste($id) { $req = "SELECT id,titre,statut FROM journaux WHERE auteur=\"{$id}\""; $res = mysql_query($req); while($rec = mysql_fetch_assoc($res)) $out[] = $rec; mysql_free_result($res); return $out; } function liste_tous($debut="",$parpage="") { if(empty($debut)) $debut = 0; if(empty($parpage)) $parpage = 20; if($parpage != -1) $limit = " LIMIT ".$debut.",".$parpage; $req = "SELECT id,titre,auteur,statut,texte FROM journaux WHERE statut IN ('journaux','public') ORDER BY titre".$limit; $res = mysql_query($req); while($rec = mysql_fetch_assoc($res)) $out[] = $rec; mysql_free_result($res); return $out; } function nombre() { $req = "SELECT COUNT(id) FROM journaux"; $res = mysql_query($req); $rec = mysql_fetch_row($res); $out = $rec[0]; mysql_free_result($res); return $out; } function supprimer_rep($rep) { $dir = @opendir($this->chemin.$rep); if(!$dir) return $this->_err("Impossible d'ouvrir le répertoire {$rep}"); while($file = readdir($dir)) { if($file != "." && $file != "..") { if(!@unlink($this->chemin.$rep."/".$file)) return $this->_err("Impossible de supprimer le fichier {$this->chemin}{$rep}/{$file}"); } } closedir($dir); if(!@rmdir($this->chemin.$rep)) return $this->_err("Impossible de supprimer le répertoire {$rep}"); return TRUE; } function supprimer($id) { $res = mysql_query('SELECT id FROM ecrits WHERE journal="'.$id.'"'); while($rec = mysql_fetch_row($res)) { mysql_unbuffered_query('DELETE FROM ecrits_html WHERE id="'.$rec[0].'"'); mysql_unbuffered_query('DELETE FROM ecrits_textes WHERE id="'.$rec[0].'"'); } if(!mysql_unbuffered_query("DELETE FROM ecrits WHERE journal='{$id}'")) return $this->_err("Problème technique.",mysql_error()); $res = mysql_query('SELECT id FROM forums WHERE journal="'.$id.'"'); while($rec = mysql_fetch_row($res)) { mysql_unbuffered_query('DELETE FROM forums_textes WHERE id="'.$rec[0].'"'); } $this->supprimer_rep("textes/".$id); $this->supprimer_rep("cache/".$id); $this->supprimer_rep("documents/".$id); $this->supprimer_rep("stats/".$id); if(!mysql_unbuffered_query("DELETE FROM journaux WHERE id='{$id}'")) return $this->_err("Problème technique.",mysql_error()); mysql_unbuffered_query("DELETE FROM abonnements WHERE journal='{$id}'"); mysql_unbuffered_query("DELETE FROM forums WHERE journal='{$id}'"); mysql_unbuffered_query("DELETE FROM restreint WHERE journal='{$id}'"); if($GLOBALS['cfg']['alternc'] == TRUE) system('del_subdomain '.$GLOBALS['cfg']['alternc_domain'].' '.$id); return TRUE; } function restreint_liste($journal) { $res = mysql_query("SELECT r.membre,m.pseudo FROM membres AS m, restreint AS r WHERE r.journal='{$journal}' AND r.membre=m.id ORDER BY m.pseudo"); while($rec = mysql_fetch_assoc($res)) $out[] = $rec; mysql_free_result($res); return $out; } function restreint_ajout($journal,$pseudo) { $res = mysql_query("SELECT id FROM membres WHERE pseudo='{$pseudo}'"); $rec = @mysql_fetch_row($res); if(empty($rec[0])) return $this->_err("Ce pseudo est inconnu."); mysql_free_result($res); mysql_unbuffered_query("INSERT INTO restreint SET membre='{$rec[0]}', journal='{$journal}'"); return TRUE; } function restreint_supprime($journal,$id) { mysql_unbuffered_query("DELETE FROM restreint WHERE membre='{$id}' AND journal='{$journal}'"); return TRUE; } function restreint_log($journal,$id) { $res = mysql_query("SELECT log FROM restreint WHERE membre='{$id}' AND journal='{$journal}'"); $rec = @mysql_fetch_row($res); $log = trim($rec[0]); $log = explode("\n",$log); return $log; } function get_url($journal) { return str_replace("[ID]",$journal,$GLOBALS["cfg"]["url_tpl"]); } function get_admin($id) { $req = "SELECT j.*,m.pseudo FROM journaux AS j, membres AS m WHERE j.id='{$id}' AND m.id=j.auteur"; $res = mysql_query($req); $out = mysql_fetch_assoc($res); mysql_free_result($res); $req = "SELECT date FROM ecrits WHERE journal='{$id}' ORDER BY date DESC LIMIT 0,1"; $res = mysql_query($req); $rec = mysql_fetch_row($res); mysql_free_result($res); $out['dernier'] = $rec[0]; return $out; } function changer_proprio($journal,$membre) { $res = mysql_unbuffered_query("UPDATE journaux SET auteur='{$membre}' WHERE id='{$journal}'"); return TRUE; } function show_menage($jours) { $time = time() - ($jours * 24 * 3600); $req = "SELECT j.id,m.pseudo AS membre,j.dernier FROM membres AS m, journaux AS j WHERE (j.dernier < {$time}) AND j.auteur=m.id ORDER BY j.dernier DESC"; $res = mysql_query($req); while($rec = mysql_fetch_assoc($res)) { $out[] = $rec; } mysql_free_result($res); return $out; } function all_infos($journal) { $res = mysql_query("SELECT MIN(date),MAX(date),COUNT(id) FROM ecrits WHERE journal='".$journal."'"); $rec = mysql_fetch_row($res); $out = array("premier"=>$rec[0],"dernier"=>$rec[1],"total"=>$rec[2]); return $out; } function liste_collectifs() { $res = mysql_query("SELECT * FROM journaux WHERE statut='collectif' ORDER BY titre"); $out = array(); while($rec = mysql_fetch_assoc($res)) $out[] = $rec; return $out; } function set_print_date($journal,$time) { mysql_unbuffered_query("UPDATE journaux SET print='".$time."' WHERE id='".$journal."'"); return TRUE; } function set_statut($journal, $statut) { mysql_unbuffered_query('UPDATE journaux SET statut="'.mysql_escape_string($statut).'" WHERE id="'.mysql_escape_string($journal).'";'); return true; } } ?>