calendrier.php NONE 1.1

Update of /home/spip-cvs/spip/ecrire/Include/MySQL3
In directory alan:/tmp/cvs-serv17950/Include/MySQL3

Added Files:
  calendrier.php
Log Message:
Remplace inc_agenda pour la partie SQL exclusivement

--- NEW FILE: calendrier.php ---
<?php

//
// Ce fichier ne sera execute qu'une fois
if (defined("_INCLURE_MYSQL3_CALENDRIER")) return;
define("_INCLURE_MYSQL3_CALENDRIER", "1");

function sql_calendrier_interval_jour($annee,$mois,$jour)
{
  $avant = "'$annee-$mois-$jour'";
  $apres = "'$annee-$mois-$jour 23:59:59'";

  return array(sql_calendrier_interval_articles($avant, $apres),
         sql_calendrier_interval_breves($avant, $apres),
         sql_calendrier_interval_rv($avant, $apres));
}

function sql_calendrier_interval_semaine($annee,$mois,$jour)
{
  $debut = $jour-date("w", mktime(0,0,0,$mois, $jour, $annee));
  $avant = "'" . date("Y-m-d", mktime(1,1,1,$mois,$debut,$annee)) . "'";
  $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$debut+7,$annee)) . "'";

  return array(sql_calendrier_interval_articles($avant, $apres),
         sql_calendrier_interval_breves($avant, $apres),
         sql_calendrier_interval_rv($avant, $apres));
}

function sql_calendrier_interval_mois($annee,$mois,$jour)
{
  $periode = $annee . '-' . sprintf("%02d", $mois) . '-01';
  $avant = "'$periode'";
  $apres = "DATE_ADD('$periode', INTERVAL 1 MONTH)";
  return array(sql_calendrier_interval_articles($avant, $apres),
         sql_calendrier_interval_breves($avant, $apres),
         sql_calendrier_interval_rv($avant, $apres));
}

# 3 fonctions retournant les evenements d'une période
# le tableau retourné est indexe par les balises du format ics
# afin qu'il soit facile de produire de tels documents.

function sql_calendrier_interval_articles($avant, $apres)
{
  $evenements= array();
  $result=spip_query("
SELECT id_article, titre, date
FROM spip_articles
WHERE statut='publie'
AND date >= $avant
AND date < $apres
ORDER BY date
");
  while($row=spip_fetch_array($result)){
        $amj = sql_calendrier_jour_ical($row['date']);
        $evenements[$amj][]=
    array(
          'URL' => "articles.php3?id_article=" . $row['id_article'],
          'CATEGORIES' => 'a',
          'DESCRIPTION' => $row['titre']);
  }
  return $evenements;
}

function sql_calendrier_interval_breves($avant, $apres)
{
  $evenements= array();
  $result=spip_query("
SELECT id_breve, titre, date_heure
FROM spip_breves
WHERE statut='publie'
AND date_heure >= $avant
AND date_heure < $apres
ORDER BY date_heure
");
  while($row=spip_fetch_array($result)){
        $amj = sql_calendrier_jour_ical($row['date_heure']);
        $evenements[$amj][]=
    array(
          'URL' => "breves_voir.php3?id_breve=" . $row['id_breve'],
          'CATEGORIES' => 'b',
          'DESCRIPTION' => $row['titre']);
  }
  return $evenements;
}

function sql_calendrier_interval_rv($avant, $apres)
{
  global $connect_id_auteur;
  $evenements= array();
  $result=spip_query("
SELECT messages.id_message, messages.titre, messages.texte,
  messages.date_heure, messages.date_fin, messages.type
FROM spip_messages AS messages,
  spip_auteurs_messages AS lien
WHERE ((lien.id_auteur='$connect_id_auteur'
AND lien.id_message=messages.id_message) OR messages.type='affich')
AND messages.rv='oui'
AND messages.date_heure >= $avant
AND messages.date_heure <= $apres
AND messages.statut='publie'
GROUP BY messages.id_message
ORDER BY messages.date_heure
");
  while($row=spip_fetch_array($result)){
    $date_heure=$row["date_heure"];
    $date_fin=$row["date_fin"];
    $type=$row["type"];
    $id_message=$row['id_message'];
    if ($type=="pb")
      $cat = 2;
    else {
      if ($type=="affich")
      $cat = 4;
      else {
        if ($type!="normal")
          $cat = 12;
        else {
          $cat = 9;
          $auteurs = array();
          $result_aut=spip_query("
SELECT auteurs.nom
FROM spip_auteurs AS auteurs,
  spip_auteurs_messages AS lien
WHERE (lien.id_message='$id_message'
  AND (auteurs.id_auteur!='$connect_id_auteur'
  AND lien.id_auteur=auteurs.id_auteur))");
      while($row_auteur=spip_fetch_array($result_aut)){
        $auteurs[] = $row_auteur['nom'];
      }
        }
      }
    }
    $amj = sql_calendrier_jour_ical($date_heure);
    $evenements[$amj][]=
      array(
      'URL' => "message.php3?id_message=$id_message",
      'DTSTART' => date_ical($date_heure),
      'DTEND' => date_ical($date_fin),
      'DESCRIPTION' => $row['texte'],
      'SUMMARY' => $row['titre'],
      'CATEGORIES' => $cat,
      'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs,", "));
  }
  return $evenements;
}

function sql_calendrier_taches_annonces () {
  $r = array();
  $result = spip_query("
SELECT * FROM spip_messages
WHERE type = 'affich' AND rv != 'oui' AND statut = 'publie' ORDER BY date_heure DESC");
  if (spip_num_rows($result) > 0){
    while ($x = spip_fetch_object($result)) $r[] = $x;
  }
  return $r;
}

function sql_calendrier_taches_pb () {
  global $connect_id_auteur;
  $r = array();
  $result = spip_query("
SELECT * FROM spip_messages AS messages
WHERE id_auteur=$connect_id_auteur AND statut='publie' AND type='pb' AND rv!='oui'");
  if (spip_num_rows($result) > 0){
    $r = array();
    while ($x = spip_fetch_object($result)) $r[] = $x;
  }
  return $r;
}

function sql_calendrier_taches_rv () {
  global $connect_id_auteur;
  $r = array();
  $result = spip_query("
SELECT messages.*
FROM spip_messages AS messages, spip_auteurs_messages AS lien
WHERE ((lien.id_auteur='$connect_id_auteur'
  AND lien.id_message=messages.id_message)
  OR messages.type='affich')
AND messages.rv='oui'
AND ( (messages.date_heure > DATE_SUB(NOW(), INTERVAL 1 DAY)
  AND messages.date_heure < DATE_ADD(NOW(), INTERVAL 1 MONTH))
  OR (messages.date_heure < NOW() AND messages.date_fin > NOW() ))
AND messages.statut='publie'
GROUP BY messages.id_message
ORDER BY messages.date_heure");
  if (spip_num_rows($result) > 0){
    $r = array();
    while ($x = spip_fetch_object($result)) $r[] = $x;
  }
  return $r;
}

function sql_calendrier_agenda ($mois, $annee) {
  global $connect_id_auteur;

  $date = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee));
  $mois = mois($date);
  $annee = annee($date);

  // rendez-vous personnels dans le mois
  $result_messages=spip_query("SELECT messages.date_heure FROM spip_messages AS messages, spip_auteurs_messages AS lien WHERE ((lien.id_auteur='$connect_id_auteur' AND lien.id_message=messages.id_message) OR messages.type='affich') AND messages.rv='oui' AND messages.date_heure >='$annee-$mois-1' AND date_heure < DATE_ADD('$annee-$mois-1', INTERVAL 1 MONTH) AND messages.statut='publie'");
  $rv = array();
  while($row=spip_fetch_array($result_messages)){
    $rv[journum($row['date_heure'])] = 1;
  }
  return $rv;
}

function sql_calendrier_jour_ical($d)
{return substr($d, 0, 4) . substr($d, 5, 2) .substr($d, 8, 2);}

?>