Hello,
On dirait que mode"sorti" et mode"tous" c'est le même combat dans la boucle, il doit y avoir une condition qui ne s'applique pas dans Miseenligne.class.php !
<?php
include_once(realpath(dirname(__FILE__)) . '/../../../classes/PluginsClassiques.class.php');
include_once(realpath(dirname(__FILE__)) . '/../../../classes/Parseur.class.php');
class Miseenligne extends PluginsClassiques {
var $genre;
var $id;
var $date;
var $table = 'miseenligne';
var $bddvars = array('genre', 'id', 'date');
function miseenligne(){
$this->PluginsClassiques();
Parseur::ajouter_variable_conditionnelle('MEL_ETAT');
}
function init(){
$cnx = new Cnx();
$query = 'CREATE TABLE IF NOT EXISTS `' . $this->table . '` (
`genre` text NOT NULL,
`id` int(11) NOT NULL,
`date` datetime NOT NULL
) ;';
mysql_query($query, $cnx->link);
}
function check_date($date) {
global $check_date;
$check = preg_split('/[\s,\-,\:]/', $date);
$check_date = checkdate($check[1], $check[2], $check[0]);
if($check_date == TRUE){
$h = $check[3];
$m = $check[4];
$s = $check[5];
if(($h >= 0 AND $h <= 23) AND ($m >= 0 AND $m <= 59) AND ($s >= 0 AND $s <= 59)) {
$check_date = TRUE;
} else {
$check_date = FALSE;
}
}
return $check_date;
}
function pages_admin($id) {
$mel = new Miseenligne();
global $check_date;
// Genre
$genre = explode('/' , $_SERVER['SCRIPT_NAME']);
$i = count($genre) - 1;
$genre = substr($genre[$i],0,-13);
// Recherche
$result=mysql_query("SELECT * FROM $this->table WHERE id = $id AND genre = '$genre'");
if(!empty($result)) {
$row = mysql_fetch_array($result);
$date = $row['date'];
}
if($date) {
$jour_mel = strftime('%d/%m/%Y', strtotime($date));
$heure_mel = strftime('%H:%M:%S', strtotime($date));
$action = 'maj';
$value = 'Modifier';
} else {
$action = 'add';
$value = 'Ajouter';
}
// Traitement
if (isset($_POST['submit_mel'])) {
$jour_mel = $_REQUEST['jour_mel'];
$heure_mel = $_REQUEST['heure_mel'];
if (preg_match('^[0-9]{2}/[0-9]{2}/[0-9]{4}$^' , $jour_mel)) {
$dateMySQL = explode('/',$jour_mel);
$dateMySQL = $dateMySQL[2].'-'.$dateMySQL[1].'-'.$dateMySQL[0].' '.$heure_mel;
$mel->check_date($dateMySQL);
if($check_date == TRUE){
if ($_POST['action'] == 'maj') {
mysql_query("UPDATE $mel->table SET date = '$dateMySQL' WHERE id = '$id' AND genre = '$genre'");
} elseif ($_POST['action'] == 'add') {
mysql_query("INSERT INTO $mel->table (genre,id,date) VALUES('$genre','$id','$dateMySQL') ");
$action = 'maj';
$value = 'Modifier';
}
} else {
echo '<script type="text/javascript">alert("La date de mise en ligne n\'est pas valide");</script>';
}
} else {
echo '<script type="text/javascript">alert("Aucune date choisie ou problème de syntaxe");</script>';
}
}
if (isset($_POST['delete'])) {
mysql_query("DELETE FROM $mel->table WHERE id = '$id' AND genre = '$genre'");
$action = 'add';
$value = 'Ajouter';
unset($jour_mel);
unset($heure_mel);
}
$html = '<!-- Mise en ligne -->'."\n";
$html .= '</form>'."\n";
$html .= '<link rel="stylesheet" type="text/css" href="../client/plugins/miseenligne/datepick/jquery.datepick.css"/>'."\n";
$html .= '<script type="text/javascript" src="../client/plugins/miseenligne/datepick/jquery.datepick.js"></script>'."\n";
$html .= '<script type="text/javascript" src="../client/plugins/miseenligne/datepick/jquery.datepick-fr.js"></script>'."\n";
$html .= '<script type="text/javascript">'."\n";
$html .= ' $(function() {'."\n";
$html .= " $('#datepicker').datepick();"."\n";
$html .= ' });'."\n";
$html .= '</script>'."\n";
$html .= ' <li style="margin:0 0 10px 0">'."\n";
$html .= ' <div class="entete">'."\n";
$html .= " <div class=\"titre\" onclick=\"$('#pliantmiseenligne').show('slow');\" style=\"cursor: pointer;\">DATE DE LA MISE EN LIGNE</div>"."\n";
$html .= ' </div>'."\n";
$html .= ' <div id="pliantmiseenligne" class="blocs_pliants_prod"> '."\n";
$html .= ' <ul class="ligne1">'."\n";
$html .= ' <li class="cellule">'."\n";
$html .= ' <form action="'.$_SERVER['REQUEST_URI'].'" method="post">'."\n";
$html .= ' <input size="15" name="jour_mel" type="text" id="datepicker" value="'.$jour_mel.'"/>'."\n";
$html .= ' <select name="heure_mel">'."\n";
for ( $heure = 0 ; $heure <= 23 ; $heure++ ) {
for ( $minutes = 0 ; $minutes <= 30 ; $minutes += 30 ) {
$heure = sprintf("%02d", $heure);
$minutes = sprintf("%02d", $minutes);
$html .= '<option value="'.$heure.':'.$minutes.':00"';
if($heure_mel == $heure.':'.$minutes.':00') {
$html .=' selected="selected"';
}
$html .='>'.$heure.':'.$minutes.'</option>'."\n";
}
}
$html .= '</select>'."\n";
$html .= ' <input type="hidden" name="action" value="'.$action.'"/>'."\n";
$html .= ' <input type="submit" name="submit_mel" value="'.$value.'" />'."\n";
$html .= ' <input style="color:red;" type="submit" name="delete" value="Effacer" />'."\n";
$html .= ' </form>'."\n";
$html .= ' </li>'."\n";
$html .= ' </ul>'."\n";
$html .= " <div class=\"bloc_fleche\" onclick=\"$('#pliantmiseenligne').hide();\" style=\"cursor: pointer;\">"."\n";
$html .= ' <img src="gfx/fleche_accordeon_up.gif"/>'."\n";
$html .= ' </div>'."\n";
$html .= ' </div>'."\n";
$html .= ' </li>'."\n";
$html .= '<!-- Mise en ligne -->'."\n";
echo $html;
}
function boucle($texte, $args){
global $check_date;
$mel = new Miseenligne();
/* Paramètres ------------------------------------------------------------------*/
$param = array('genre','mode');
for($i=0;$i<sizeof($param);$i++) {
${$param[$i]} = lireTag($args, $param[$i]);
}
/* Mode ------------------------------------------------------------------*/
if($mode != 'tous' && $mode != 'sorti' && $mode != 'nonsorti' && $mode != 'dates')
exit('Boucle MISEENLIGNE : <em><strong>mode</strong></em> n\'a pas été correctement renseigné');
/* Min & Max ------------------------------------------------------------------*/
$now = date('Y-m-d h:i:s');
if($mode == "dates") {
$param = array('start','end');
for($i=0;$i<sizeof($param);$i++) {
${$param[$i]} = lireTag($args, $param[$i]);
}
$pattern = '^[0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}$^';
$clean_comp = array('-',' ',':');
if($start && preg_match($pattern , $start)) {
$mel->check_date($start);
if($check_date != TRUE)
exit('Boucle EVENEMENT : <em><strong>start</strong></em> n\'est pas une date valide');
$start_comp = str_replace($clean_comp,'',$start);
$min = $start;
} else {
exit('Boucle MISEENLIGNE : <em><strong>start</strong></em> doit être au format aaaa-mm-jj hh:mm:ss');
}
if($end && preg_match($pattern , $end)) {
$mel->check_date($end);
if($check_date != TRUE)
exit('Boucle EVENEMENT : <em><strong>end</strong></em> n\'est pas une date valide');
$end_comp = str_replace($clean_comp,'',$end);
$max = $end;
} else {
exit('Boucle MISEENLIGNE : <em><strong>end</strong></em> doit être au format aaaa-mm-jj hh:mm:ss');
}
if(($end && $start) && ($start_comp > $end_comp))
exit('Boucle MISEENLIGNE : <em><strong>end</strong></em> ne peut pas être antérieur à <em><strong>start</strong></em>');
} else {
$param = array('periode','duree','decalage');
for($i=0;$i<sizeof($param);$i++) {
${$param[$i]} = lireTag($args, $param[$i]);
}
if(!$periode && ($decalage || $duree))
exit('Boucle MISEENLIGNE<br><em><strong>duree</strong></em> et/ou <em><strong>decalage</strong></em> ont été renseigné mais <em><strong>periode</strong></em> est absent');
if($periode && $periode != 'jour' && $periode != 'semaine' && $periode != 'mois' && $periode != 'annee')
exit('Boucle MISEENLIGNE : <em><strong>periode</strong></em> n\'a pas été correctement renseigné');
if($duree < 0)
exit('Boucle MISEENLIGNE : <em><strong>duree</strong></em> n\'a pas été correctement renseigné');
if($decalage < 0)
exit('Boucle MISEENLIGNE : <em><strong>decalage</strong></em> n\'a pas été correctement renseigné');
$h_min = ' 00:00:00';
$h_max = ' 23:59:59';
if(!$duree) $duree = 1;
switch($mode) {
case 'tous' : $start = 0 ; $end = 0 ; break;
case 'sorti' : $start = 1 - ($decalage + $duree) ; $end = $duree - 1 ; break;
case 'nonsorti' : $start = $decalage ; $end = $duree - 1 ; break;
}
switch ($periode) {
case 'jour' : $periodetype = 'day' ; $formatdate_min = 'Y-m-d'.$h_min ; $formatdate_max = 'Y-m-d'.$h_max ; break;
case 'semaine' : $periodetype = 'week' ; $formatdate_min = 'Y-m-d'.$h_min ; $formatdate_max = 'Y-m-d'.$h_max ; break;
case 'mois' : $periodetype = 'month' ; $formatdate_min = 'Y-m-01'.$h_min ; $formatdate_max = 'Y-m-t'.$h_max ; break;
case 'annee' : $periodetype = 'year' ; $formatdate_min = 'Y-01-01'.$h_min ; $formatdate_max = 'Y-12-31'.$h_max ; break;
}
if($mode=='nonsorti' && $decalage==0 ){
$min = $now;
} else {
$min = date_format(date_add(date_create($now), date_interval_create_from_date_string("$start $periodetype")), $formatdate_min);
if($periodetype == 'week') {
$lundi = date_format(date_sub(date_create($now), date_interval_create_from_date_string("$decalage week")),'N') - 1;
$min = date_format(date_sub(date_create($min), date_interval_create_from_date_string("$lundi day")), $formatdate_min);
}
}
if($mode=='sorti' && $decalage==0){
$max = $now;
} else {
$max = date_format(date_add(date_create($min), date_interval_create_from_date_string("$end $periodetype")), $formatdate_max);
if($periodetype == 'week') {
$dimanche = 7 - date_format(date_sub(date_create($max), date_interval_create_from_date_string("$decalage week")),'N');
$max = date_format(date_add(date_create($max), date_interval_create_from_date_string("$dimanche day")), $formatdate_max);
}
}
}
/* Existence de 'genre' ou non ------------------------------------------------------------------*/
if($genre){
if($genre != 'contenu' && $genre != 'produit' && $genre != 'rubrique' && $genre != 'dossier')
exit('Boucle MISEENLIGNE : <em><strong>genre</strong></em> n\'a pas été correctement renseigné');
switch ($genre) {
case 'produit' : $parent = 'produit.rubrique' ; break;
case 'rubrique' : $parent = 'rubrique.parent' ; break;
case 'contenu' : $parent = 'contenu.dossier' ; break;
case 'dossier' : $parent = 'dossier.parent' ; break;
}
$genredesc = $genre.'desc';
/* Paramètres ------------------------------------------------------------------*/
$param = array('id','exclusion','in','out','deb','num','classement');
for($i=0;$i<sizeof($param);$i++) {
${$param[$i]} = lireTag($args, $param[$i]);
}
/* Requête ------------------------------------------------------------------*/
/* $query="SELECT $mel->table.* FROM $mel->table, $genre, $genredesc WHERE $genre.id = $mel->table.id AND $genre.id = $genredesc.$genre AND genre = '$genre'"; */
$query="SELECT $mel->table.* FROM $mel->table, $genre, $genredesc WHERE $genre.id = $mel->table.id AND $genre.id = $genredesc.$genre AND $genredesc.lang = ".ActionsLang::instance()->get_id_langue_courante()." AND genre = '$genre'";
/* ---- Min & Max */
if($min) $query .= " AND date >= '$min'";
if($max) $query .= " AND date <= '$max'";
/* ---- Id, Exclusion, In & Out */
if($id) $query .= " AND $mel->table.id IN ($id) ";
if($exclusion) $query .= "AND $mel->table.id NOT IN ($exclusion) ";
if($in) $query .= " AND $parent IN ($in)";
if($out) $query .= " AND $parent NOT IN ($out)";
/* ---- Classement */
switch ($classement) {
case 'datemin' : $query .= ' ORDER BY date' ; break;
case 'datemax' : $query .= ' ORDER BY date DESC' ; break;
case 'titre' : $query .= ' ORDER BY titre' ; break;
case 'titreinverse' : $query .= ' ORDER BY titre DESC' ; break;
case 'ref' : if($genre=='produit') $query .= ' ORDER BY ref' ; break;
case 'refinverse' : if($genre=='produit') $query .= ' ORDER BY ref DESC' ; break;
case 'manuel' : $query .= ' ORDER BY classement' ; break;
case 'inverse' : $query .= ' ORDER BY classement DESC' ; break;
case 'prixmin' : if($genre=='produit') $query .= ' ORDER BY prix' ; break;
case 'prixmax' : if($genre=='produit') $query .= ' ORDER BY prix DESC' ; break;
case 'promomin' : if($genre=='produit') $query .= ' ORDER BY prix2' ; break;
case 'promomax' : if($genre=='produit') $query .= ' ORDER BY prix2 DESC' ; break;
case 'aleatoire' : $query .= ' ORDER BY RAND()' ; break;
default : $query .= ' ORDER BY date';
}
/* ---- Deb & Num */
if($deb) $deb = $deb-1;
if($deb && $num) {
$query .= " LIMIT $deb,$num";
} elseif(!$deb && $num) {
$query .= " LIMIT $num";
} elseif($deb && !$num) {
$query .= " LIMIT $deb,99999";
}
$resul = $this->query($query) or die('Boucle MISEENLIGNE : problème de requête MySQL');
/* Substitutions ------------------------------------------------------------------*/
while ($row = mysql_fetch_assoc($resul)) {
$temp = $texte;
$temp = str_replace('#MEL_GENRE', strtoupper($genre), $temp);
$temp = str_replace('#MEL_ID', $row['id'], $temp);
$temp = str_replace('#MEL_DATE', $row['date'], $temp);
if(str_replace('-','',$now) >= str_replace('-','',$row['date']) ) {
$temp = preg_replace('/\#MEL_ETAT\[([^]]*)\]\[([^]]*)\]/', '\\1', $temp);
} else {
$temp = preg_replace('/\#MEL_ETAT\[([^]]*)\]\[([^]]*)\]/', '\\2', $temp);
}
$res .= $temp;
}
} else {
/* Substitutions ------------------------------------------------------------------*/
$temp = $texte;
$temp = str_replace('#MEL_MIN', $min, $temp);
$temp = str_replace('#MEL_MAX', $max, $temp);
$res .= $temp;
}
return $res;
}
}
?>