Subversion Repositories Applications.gtt

Compare Revisions

Ignore whitespace Rev 10 → Rev 11

/trunk/classes/aAction.class.php
File deleted
\ No newline at end of file
/trunk/classes/Resultat.class.php
File deleted
\ No newline at end of file
/trunk/classes/Controlleur.class.php
File deleted
\ No newline at end of file
/trunk/classes/Registre.class.php
New file
0,0 → 1,83
<?php
 
class Registre {
private static $registre = null;
private $suivant;
private $titre;
private $espaces = array();
private $donnees = array();
private $squelettes;
 
public static function getRegistre()
{
if (is_null(Registre::$registre)) {
Registre::$registre = new Registre;
}
return Registre::$registre;
}
// Titre
public function getTitre()
{
return $this->titre;
}
public function setTitre($t)
{
$this->titre = $t;
}
// Espaces De Nomage
public function setEspaces($e)
{
$this->espaces = $e;
}
public function ajouterEspace($cle, $val)
{
$this->espaces[$cle] = $val;
}
public function getEspaces($cle = null)
{
if ($cle != null) {
return $this->espaces[$cle];
} else {
return $this->espaces;
}
}
// Donnees
public function setDonnees($d)
{
$this->donnees = $d;
}
public function ajouterDonnee($cle, $val)
{
$this->donnees[$cle] = $val;
}
public function getDonnees($cle = null)
{
if (!is_null($cle)) {
return $this->donnees[$cle];
} else {
return $this->donnees;
}
}
 
// Squelettes
public function setSquelettes($s)
{
$this->squelettes = $s;
}
public function ajouterSquelette($cle, $val)
{
$this->squelettes[$cle] = $val;
}
public function getSquelettes($cle = null)
{
if ($cle != null) {
return $this->squelettes[$cle];
} else {
return $this->squelettes;
}
}
}
?>
/trunk/classes/aControlleurAction.class.php
New file
0,0 → 1,73
<?php
 
abstract class aControlleurAction {
private $suivant;
public function getRegistre()
{
return Registre::getRegistre();
}
// Suivant
public function getSuivant()
{
return $this->suivant;
}
public function setSuivant($s)
{
if (is_array($s)){
$this->suivant = $s;
} else {
$this->suivant[] = $s;
}
}
public function demarrer()
{
if (!is_null($this->getSuivant())) {
// ATTENTION :
// Il est important de laisser "count($this->getSuivant())" $this->getSuivant() peut varier de taille
for ($i = 0; $i < count($this->getSuivant()) ; $i++) {
$liste_actions = $this->getSuivant();
if ($liste_actions[$i] instanceof aControlleurAction) {
$liste_actions[$i]->demarrer();
} else {
if ($liste_actions[$i] == '__defaut__') {
$methode = 'executer';
} else {
$methode = 'executer'.$liste_actions[$i];
}
if (method_exists($this, $methode)) {
$this->$methode();
} else {
$m = "La méthode $methode de la classe ".get_class($this)." est introuvable!";
trigger_error($m, E_USER_ERROR);
}
}
}
} else {
$m = "Le registre ne contient aucune action!";
trigger_error($m, E_USER_ERROR);
}
}
public function verifier()
{
// Nous rassemblons les valeurs du tableau _POST contenant des : dans des sous-tableau de _POST.
foreach ($_POST as $cle => $val) {
$morceau = array();
if (preg_match('/^(.+?)(:.+)+$/', $cle, $morceau)) {
$table = '';
foreach (explode(':', trim($morceau[2], ':')) as $c) {
$table .= '['.$c.']';
}
eval('$_POST[$morceau[1]]'.$table.' = $val;');
unset($_POST[$cle]);
}
}
}
 
abstract protected function executer();
}
?>
/trunk/classes/Calendrier.class.php
59,19 → 59,10
private $mois;
private $semaine;
private $jour;
private $nom_jours = array();
private $nom_mois = array();
private $liste_feries = array();
/** contient le nom des variables que recevra l'url spécifié
* @var string
*/
var $var_jour = "jour";
var $var_mois = "mois";
var $var_annee = "annee";
 
/**
*constructeur de la classe calendrier
*toutes les variables sont initialises avec les donnees
80,24 → 71,28
*@param semaine
*@param annee
*/
public function __construct($semaine = null, $annee = null)
public function __construct($jour = null, $semaine = null, $mois = null, $annee = null)
{
if (is_null($jour)) {
$jour = date('d', time());
}
$this->jour = $jour;
if (is_null($semaine)) {
$semaine = date('W', time());
}
$this->semaine = $semaine;
if (is_null($mois)) {
$mois = date('m', time());
}
$this->mois = $mois;
if (is_null($annee)) {
// TODO : vérifier le standard ISO-8601
$annee = date('Y', time());
}
$tableau = $this->donnerLundiEtDimancheSemaine($semaine, $annee);
$this->jour = date('d',mktime(0,0,0,1,$tableau[0],$annee));
$this->semaine = $semaine;
$this->mois = date('n',mktime(0,0,0,1,$tableau[0],$annee));
$this->annee = $annee;
$this->nom_jours = array (GESTION_LUN_L, GESTION_MAR_L, GESTION_MER_L, GESTION_JEU_L, GESTION_VEN_L, GESTION_SAM_L ,GESTION_DIM_L);
$this->nom_mois = array(1 => "Janvier","Février","Mars","Avril","Mai","Juin","Juillet", "Août","Septembre","Octobre","Novembre","Décembre");
$this->nom_jours = array (1 => GESTION_LUN_L, GESTION_MAR_L, GESTION_MER_L, GESTION_JEU_L, GESTION_VEN_L, GESTION_SAM_L ,GESTION_DIM_L);
$this->nom_mois = array(1 => "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
$this->liste_feries = $this->calculerJoursFeries($this->annee);
}
122,6 → 117,27
return $this->jour;
}
public function getNomJours($j = null)
{
if (is_null($j)) {
return $this->nom_jours;
}
return $this->nom_jours[$j];
}
 
public function getNomMois($m = null)
{
if (is_null($m)) {
return $this->nom_mois;
}
return $this->nom_mois[$m];
}
public function getListeFeries()
{
return $this->liste_feries;
}
/**
*Calcule les dates des jours fériés pour la france.
*Renvoie un tableau contenant la liste de dates par mois.
200,131 → 216,6
}
 
/**
*Donne le type de jour de la semaine au format numérique du premier jour du mois.
*
*@return integer le numéro de 1 (lundi) à 7 (dimanche) correspondant au type du premier jour du mois.
*/
function donnerTypePremierJourMois()
{
$intPremierJour = date("w", mktime(0, 0, 0, $this->getMois(), 1, $this->getAnnee()));
if ($intPremierJour == 0) {
$intPremierJour = 7; // si c'est un dimanche
}
return $intPremierJour;
}
 
/**
*Calcule le dernier jour du mois
*@param : annee, mois
*renvoie un entier
*/
function donnerDernierJourMois()
{
$h = $this->donnerNbreJoursMois();
$intDernierJour = date("w", mktime(0, 0, 0, $this->getMois(), $h, $this->getAnnee()));
if($intDernierJour == 0) {
$intDernierJour = 7; // si c'est un dimanche
}
return $intDernierJour;
}
/**
*Calcule le nombre de jours dans un mois
*@return integer le nombre de jour dans le mois.
*/
function donnerNbreJoursMois()
{
return date("t", mktime(0, 0, 0, $this->getMois(), 1, $this->getAnnee()));
}
 
/**
*Calcule la semaine suivante
*/
function donnerSemaineSuivante()
{
if ($this->getSemaine() == date('W', mktime(0, 0, 0, 12, 31, $this->getAnnee()))) {
$tab['semaine'] = 1;
$tab['annee'] = $this->getAnnee() + 1;
} else {
$tab['semaine'] = $this->getSemaine() + 1;
$tab['annee'] = $this->getAnnee();
}
return $tab;
}
 
/**
*Calule la semaine précédente
*/
function donnerSemainePrecedente()
{
if ($this->getSemaine() == 1) {
$tab['semaine'] = date('W', mktime(0, 0, 0, 12, 31, ($this->getAnnee() - 1)));
$tab['annee'] = $this->annee - 1;
} else {
$tab['semaine'] = $this->semaine - 1 ;
$tab['annee'] = $this->annee;
}
return $tab;
}
 
/**
*Calucule le mois suivant
*renvoie l'annee et le mois suivant sous forme de chiffre
*dans un tableau
*/
function donnerMoisSuivant()
{
if ($this->mois == 12) {
$tab['mois'] = 1;
$tab['annee'] = $this->annee + 1;
} else {
$tab['mois'] = $this->mois + 1;
$tab['annee'] = $this->annee;
}
return $tab;
}
/**
*Calcule le mois precedent
*renvoie l'annee et le mois precedent sous forme de chiffre
*/
function donnerMoisPrecedent()
{
if ($this->mois == 1) {
$tab['mois'] = 12;
$tab['annee'] = $this->annee - 1;
} else {
$tab['mois'] = $this->mois - 1;
$tab['annee'] = $this->annee;
}
return $tab;
}
/**
*Renvoie la date du lundi et dimanche d'une semaine
*a partir du numero de semaine
*
*@return un tableau contenat le timestamp unix de lundi et dimanche
*de la semaine en question
*/
function donnerLundiEtDimancheSemaine()
{
if ((date("w", mktime(0, 0, 0, 1, 1, $this->getAnnee())) <= 4) && (date("w", mktime(0, 0, 0, 1, 1, $this->getAnnee())) != 0)) {
$nbre_jour = ($this->getSemaine() - 1) * 7;
} else {
$nbre_jour = ($this->getSemaine()) * 7;
}
if (date("w", mktime(0, 0, 0, 1, 1, $this->getAnnee())) == 0) {
$nbre_jour += 7;
} else {
$nbre_jour += 7 - ((date("w", mktime(0, 0, 0, 1, 1, $this->getAnnee())) - 1) % 7);
}
$nbre_jour_7 = $nbre_jour - 6;
return array($nbre_jour_7, $nbre_jour);
}
 
/**
*Indique si une date est fériée ou non
*renvoie 1 si férié
*0 sinon
337,116 → 228,5
return 0;
}
}
 
/**
*Affiche un calendrier naviguable par semaine
*option pour cliquer sur une semaine donnee
*utilisation de la bibliotheque HTML/TABLE de PEAR
*@param numero de semaine et annee
*/
function afficherCalendrier($annee)
{
$id="CALENDRIER";
$text=/*"</tr></td>".*/"<div id=\"calendrier\">";
//initialisation des donnees
$intPremierJour = &Calendrier::premierJourMois($this->mois,$this->annee);
$intNbJoursMois = &Calendrier::nbJourMois($this->mois,$this->annee);
$prevMonth=&Calendrier::prevMonth($this->mois,$this->annee);
$intNbJourPrec=&Calendrier::nbJourMois($prevMonth[0],$prevMonth[1]);
$intDernierJour=&Calendrier::dernierJourMois($this->mois,$this->annee);
//calcul du lundi et dimanche de la semaine courante
//calcul de l'annee
$tabLundiDimanche =& Calendrier::lundiEtDimancheSemaine($this->semaine,$annee);
//creation de la table HTML representant le calendrier
$tableAttrs = array("class" =>$id,"width" => "300");
//creation de la barre de navigation
//semaine precedente
$tabPrevWeek=&Calendrier::prevWeek();
$text.="<a href=".$GLOBALS['urlBase'].GESTION_TRAVAIL."&semaine=";
$text.=$tabPrevWeek[0]."&annee=".$tabPrevWeek[1].">";
$text.="<<"."</a>";
//semaine courante
$text.='<button>';
$text.=date('d/m/y',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));
$text.=' -- ';
$text.=date('d/m/y',mktime(0,0,0,1,$tabLundiDimanche[1],$annee));
$text.='</button>';
//semaine suivante
$tabNextWeek= &Calendrier::nextWeek();
$text.="<a href=".$GLOBALS['urlBase'].GESTION_TRAVAIL."&semaine=";
$text.=$tabNextWeek[0]."&annee=".$tabNextWeek[1].">";
$text.=">>"."</a>";
$table = new HTML_Table($tableAttrs);
$table -> setAutoGrow(true);
$table->addRow($this->nom_jours);
//remplissage de la premiere ligne
//test si on est dans la semaine courante
//si dimanche egale a la fin de la semaine
$semCourante=(date('d',mktime(0,0,0,1,$tabLundiDimanche[1],$annee))==(7-$intPremierJour+1));
$p=1;
for($i=1; $i<=7;$i++) {
if ($i<$intPremierJour and $semCourante) {//mois prec et semaine courante
$elem[$i-1]="<div id=\"moisprecedent\">".($intNbJourPrec-$intPremierJour+$i+1);
} elseif ($i<$intPremierJour and !$semCourante) {//mois prec et pas semaien courante
$semaineL=date('W',mktime(0,0,0,$prevMonth[0],($intNbJourPrec-$intPremierJour+$i+1),$prevMonth[1]));
$elem[$i-1]= "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL"."&annee=$prevMonth[1]".">".($intNbJourPrec-$intPremierJour+$i+1)."</a>";
} elseif ($i>=$intPremierJour and $semCourante) {//mois courant et semaine courante
$elem[$i-1] = "<div id=\"jourcourant\">".$p."</div>";
$p++;
} else {//mois courant et pas semaine courante
$semaineL=date('W',mktime(0,0,0,$this->mois,$p,$this->annee));
$elem[$i-1] = "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL";
$elem[$i-1] .="&annee=".$this->annee.">".$p."</a>";
$p++;
}
}
$table->addRow($elem);
//remplissage du reste des lignes
$i=0; //indice du tableau
//lundi de la semaien courante
// $t=&Calendrier::lundiEtDimancheSemaine($this->semaine,$this->annee);
$lundiCourant=date('d',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));
$semCourante2=0;
for ($f=$p; $f<=$intNbJoursMois ; $f++) {
if ($f==$lundiCourant and $i==0) {
$semCourante2=1;//booleen
}
//calcul de la semaine courante
$semaineL2=date('W',mktime(0,0,0,$this->mois,$f,$this->annee));
if ($semCourante2==1) {
$elem[$i]= "<div id=\"jourcourant\">".$f."</div>";
} else {
$elem[$i]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";
$elem[$i].="&annee=".$this->annee.">".$f."</a>";
}
if ($i==6) {
$i=0;
if ($semCourante2==1) {
$semCourante2=0;
}
$table->addRow($elem);
} else {
$i++;
}
}
//remplissage de la derniere ligne
$semaineL3=date('W',mktime(0,0,0,$this->mois,$intNbJoursMois,$this->annee));
if ($semCourante2==0) {
for ($d=$i; $d<=6;$d++) {
$s=$d-$i+1;
$elem[$d]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";
$elem[$d].="&annee=".$this->annee.">".$s."</a>";
}
} else {
for ($d=$i; $d<=6;$d++) {
$elem[$d]= ($d-$i+1);
}
}
$table->addRow($elem);
$text.=$table->toHtml();
$text .= "</div>";
return $text;
}
}
?>
/trunk/classes/ControlleurFrontal.class.php
New file
0,0 → 1,92
<?php
 
class ControlleurFrontal {
public function getRegistre()
{
return Registre::getRegistre();
}
public function parserAction($url)
{
if (preg_match('/^(.+?)(?:_(.+)|)$/', $url, $match)) {
$retour['classe_action'] = 'GttCtrlAction'.ucfirst($match[1]);
}
$retour['tab_actions'] = array('');
if (isset($match[2])) {
preg_match_all('/(.+)(?:_|$)/', $match[2], $match_actions);
$retour['tab_actions'] = $match_actions[1];
}
return $retour;
}
 
public function executer($url_action)
{
$tab_info_url = $this->parserAction($url_action);
//echo '<pre>'.print_r($tab_info_url, true).'</pre>';
$classe_action = $tab_info_url['classe_action'];
$fichier_action = GTT_CHEMIN_ACTION.$classe_action.'.class.php';
if (file_exists($fichier_action)) {
require_once $fichier_action;
$Action = new $classe_action($this->getRegistre());
foreach ($tab_info_url['tab_actions'] as $action) {
// Vérification des données POST ou GET avant l'appel de l'action
if (isset($_POST) || isset($_GET)) {
$Action->verifier();
$methode_verif = 'verifier'.ucfirst($action);
if (method_exists($Action, $methode_verif)) {
// Méthode "vérifier" spécifique à une action
$Action->$methode_verif();
}
}
// Execution de l'action
$Action->setSuivant(ucfirst($action));
}
$Action->demarrer();
$aso_principal['principal'] = $this->rendre();
//echo '<pre>'.print_r($aso_principal, true).'</pre>';
$Resultats = $this->getRegistre();
$aso_principal['principal']['titre'] = $Resultats->getTitre();
$Resultats->setEspaces(array());
$Resultats->setSquelettes(array());
$Resultats->setDonnees(array());
$Resultats->ajouterEspace('Principal', 'principal');
$Resultats->ajouterSquelette('principal', 'principal.tpl.html');
$Resultats->ajouterDonnee('principal', $aso_principal['principal']);
return $this->rendre();
} else {
$m = "Le fichier $fichier_action contenant l'action est introuvable!";
trigger_error($m, E_USER_ERROR);
}
}
public function rendre()
{
$contenu_principal = null;
$aso_contenu = array('zone_contenu' => '', 'zone_identification' => '');
foreach ($this->getRegistre()->getEspaces() as $espace_de_nom) {
ob_start();
extract($GLOBALS['_GTT_']['i18n']['general'], EXTR_PREFIX_ALL, 'i18n_general');
extract($this->getRegistre()->getDonnees($espace_de_nom));
include_once GTT_CHEMIN_PRESENTATION.$this->getRegistre()->getSquelettes($espace_de_nom);
// Répartition dans des zones
switch($espace_de_nom) {
case 'principal' :
$contenu_principal .= ob_get_contents();
break;
case 'identification' :
$aso_contenu['zone_identification'] .= ob_get_contents();
break;
default:
$aso_contenu['zone_contenu'] .= ob_get_contents();
}
ob_end_clean();
}
if (!is_null($contenu_principal)) {
return $contenu_principal;
}
return $aso_contenu;
}
}
?>
/trunk/classes/metiers/Projet.class.php
48,7 → 48,8
/*** Constantes : */
const GP_TOUS = 'PROJET_TOUS';
const GP_ID = 'PROJET_ID';
const GP_ID_MAX = 'PROJET_ID_MAX';
const GP_ID_MAX = 'PROJET_ID_MAX';
const GP_ID_LIST = 'PROJET_ID_LIST';
/*** Attributs : */
private $id_projet;
175,6 → 176,11
case Projet::GP_ID_MAX:
$requete = 'SELECT MAX(gp_id_projet) '.
'FROM gestion_projet ';
break;
case Projet::GP_ID_LIST:
$requete = 'SELECT * '.
'FROM gestion_projet '.
'WHERE gp_id_projet IN ('.$parametres[0].') ';
break;
default :
$message = 'Commande '.$cmd.'inconnue!';
181,7 → 187,6
$e = GestionnaireErreur::formaterMessageErreur(__FILE__, __LINE__, $message);
trigger_error($e, E_USER_ERROR);
}
$resultat = $GLOBALS['db']->query($requete);
(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$tab_resultat = array();
/trunk/classes/metiers/TravailProjet.class.php
46,7 → 46,8
*/
class TravailProjet extends aGttSql {
/*** Constantes : */
const GTP_ID = 'TRAVAILPROJET_ID';
const GTP_ID = 'TRAVAILPROJET_ID';
const GTP_ID_UTILISATEUR_DATE_DEB_FIN = 'TRAVAILPROJET_ID_UTILISATEUR_DATE';
const GTP_ID_MAX_UTILISATEUR = 'TRAVAILPROJET_ID_MAX_UTILISATEUR';
const GTP_ID_MAX_PROJET = 'TRAVAILPROJET_ID_MAX_PROJET';
const GTP_ID_MAX_DATE_TRAVAIL = 'TRAVAILPROJET_ID_MAX_DATE_TRAVAIL';
128,8 → 129,13
case TravailProjet::GTP_ID:
$requete = 'SELECT * '.
'FROM gestion_travail_projet '.
'WHERE gtp_id_utilisateur = '.$parametres[0].' AND gtp_id_projet = '.$parametres[1].' AND gtp_id_date_travail = '.$parametres[2].' ';
'WHERE gtp_id_utilisateur = '.$parametres[0].' AND gtp_id_projet = '.$parametres[1].' AND gtp_id_date_travail = "'.$parametres[2].'" ';
break;
case TravailProjet::GTP_ID_UTILISATEUR_DATE_DEB_FIN:
$requete = 'SELECT * '.
'FROM gestion_travail_projet '.
'WHERE gtp_id_utilisateur = '.$parametres[0].' AND gtp_id_date_travail > "'.$parametres[1].'" '.' AND gtp_id_date_travail < "'.$parametres[2].'" ';
break;
case TravailProjet::GTP_ID_MAX_UTILISATEUR:
$requete = 'SELECT MAX(gtp_id_utilisateur) '.
'FROM gestion_travail_projet ';
141,9 → 147,9
case TravailProjet::GTP_ID_MAX_DATE_TRAVAIL:
$requete = 'SELECT MAX(gtp_id_date_travail) '.
'FROM gestion_travail_projet ';
break;
break;
default :
$message = 'Commande '.$cmd.'inconnue!';
$message = 'Commande '.$cmd.' inconnue!';
$e = GestionnaireErreur::formaterMessageErreur(__FILE__, __LINE__, $message);
trigger_error($e, E_USER_ERROR);
}