Je pense que tu dois pouvoir gérer cela en utilisant une table intermédiairedans ta base de données qui fait le lien entre tes tables produit et photo.
Cette table intermédiaire (relation de type 1,n - 1,n) contiendrait donc les clés primaires des deux tables mentionnées.
Je suis actuellement en train de faire le tuto pour apprendre la POO en PHP afin d'organiser mon code de manière plus intelligente dans le cadre de 2 projets de site webs que je souhaite réaliser. J'ai assez bien compris les 2 premières parties du cours mais je dois avouer que je suis totalement perdu sur la dernière partie. Je ne comprends pas d'où vient cette architecture, pourquoi on raisonne de telle ou telle sorte. Je crois que cette dernière partie n'est pas suffisament détaillée pour moi. Pouvez-vous me rediriger vers des ressources qui pourraient m'aider à appréhender cette partie plus facilement ? Je suis convaincu que la maîtrise de cette partie me permettra d'avoir l'essentiel des compétences nécessaires dans le cadre de mes projets.
Salut Si tu veux organisé TON code de manière le : +plus +plus +plus et encore + plus intelligente
LA PLUS SIMPLE POSSIBLE
Je m'explique, Bonne lecture
La simplicité consiste à soustraire et retenir uniquement ce qui est évident Ajouté serait alourdir ce qui a déjà du sens
1 - Optimisation
Pour atteindre la simplicité, le mieux est la réduction méthodique des éléments.
2 - Organisation
Cordonnées l'ensemble d'éléments réduits, bien ordonnés. Toute la difficulté de schéma d'organisation basé sur la simplicité.
3 - Minima
Tout paraît plus simple si on fait économiser du temps. Accès aux résultats complexe tout en minimisés des étapes intermédiaires.
4 - Apprentissage & Utilisation
Simple vue, doit dégage une impression de familiarité, La connaissance simplifie tout, plutôt de proposer un mode d'emploi décourageant, une compréhension quasi immédiate du fonctionnement, qui évite à l'apprendre.
5- La différence
Simplicité sera traduire par un code claire, maintenable, facile d'utilisation Ensemble des éléments offre une confiance donc crée la différence.
Ps: Extrait l'introduction de mes conventions rédactionnel. Exemple un site documentaire - C'est bien fait je trouve http://php.net/manual/fr/language.variables.superglobals.php
- Edité par LEPaul 3 avril 2018 à 21:03:20
Fidèle résumé de mes capacités ! Bon à rien, mauvais à tout. Faire le moins, mais BIEN
SALUT svp je suis cette formation et j'ai un pti probleme au niveaux d'une ligne de code sur les transferts d'informations
comme vous le voyer juste en bas se con mes lignes de code qui sons sensé transféré le comtenus des variable "non" et "prenoms";
<!doctype :html>
<html>
<head>
<meta-charset :"utf-8"/>
<title>test supergloles </title>
</head>
<body>
<h1>BONJOUR LE JOUR</h1>
<a href="recep.php?nom=patrick&prenoms=ben_sira"> bonjour le jour </a>
</body>
</html>
et voici le fichez recepteur de ses variables ;
<!Doctype :html>
<html>
<head>
<meta-charset :"utf-8"/>
<title>teste super globalle</title>
</head>
<body>
<?php
echo("BONJOUR LE JOURS <br>contant de vous compte parmis nous "._$GET['nom']." "._$GET['prenoms'] );
?>
</body>
</html>
Sans vouloir manquer de respect à l’auteur, je trouve ce module ridiculement complexe pour un débutant, notamment l’activité finale qui en plus d’être très absconse, n’apporte pratiquement aucun d’intérêt à l’apprentissage d’un débutant.
La POO demande un certain effort d’abstraction, et ce n’est pas évident si l’on n’a pas déjà une bonne expérience en programmation. Quand on apprend de la POO, on commence en général avec des classes plus concrètes comme cela était le cas en début de cours avec les personnages. Les design patterns et surtout le framework fait maison est totalement hors sujet pour moi. Ces notions appartiennent à un autre cours, et sûrement pas à un cours de POO pour débutant.
L’activité finale demande de bien comprendre le Framework créé par l’auteur. Je soupçonne l’auteur d’avoir eu envie de se faire un kiff au détriment des apprenants. A quoi bon comprendre son Framework et sa façon de faire (dont certaines approches sont discutables). L’exercice final ne nécessite pas la grande partie de ce qui a été vu dans ce cours ! On s’entraîne juste à apprendre un Framework qui ne servira jamais (autant s’attaquer tout de suite à Symfony ou Zend Framework).
Le risque de ce cours est d’affoler beaucoup de débutants qui n’arriveront pas à faire cet exercice, et à les décourager. Oui, il y a beaucoup à apprendre pour devenir bon développeur, mais il faut aussi beaucoup de pratique et d’expérience pour en arriver là. Le maître-mot est d’y aller progressivement, ce que ne fait pas ce cours.
Si vous avez été découragés par ce cours, ne pensez pas que vous êtes nuls. Les premières parties sont intéressantes, ensuite le cours n’est plus vraiment pédagogique pour un débutant. Si vous faites un Parcours, laissez ce module de côté quand vous bloquez, et allez vous entraîner avec d’autres sources. Revenez valider votre certificat plus tard quand vous aurez déjà réalisé quelques projets concrets en POO autre qu’un Framework très abstrait aux concepts multiples qui vont bien au-delà d’un cours pour débutant. Ce cours pourrait facilement être divisé en trois cours différents.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>test supergloles </title>
</head>
<body>
<h1>BONJOUR LE JOUR</h1>
<a href="recep.php?nom=patrick&prenoms=ben_sira"> bonjour le jour </a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>teste super globalle</title>
</head>
<body>
<?php
echo("BONJOUR LE JOURS <br>contant de vous compte parmis nous ".$_GET['nom']." ".$_GET['prenoms'] );?>
</body>
</html>
Prends le temps de te relire, de vérifier la syntaxe et indente ton code, ça aide toujours.
PatrickDagouaga a écrit:
SALUT svp je suis cette formation et j'ai un pti probleme au niveaux d'une ligne de code sur les transferts d'informations
comme vous le voyer juste en bas se con mes lignes de code qui sons sensé transféré le comtenus des variable "non" et "prenoms";
<!doctype :html>
<html>
<head>
<meta-charset :"utf-8"/>
<title>test supergloles </title>
</head>
<body>
<h1>BONJOUR LE JOUR</h1>
<a href="recep.php?nom=patrick&prenoms=ben_sira"> bonjour le jour </a>
</body>
</html>
et voici le fichez recepteur de ses variables ;
<!Doctype :html>
<html>
<head>
<meta-charset :"utf-8"/>
<title>teste super globalle</title>
</head>
<body>
<?php
echo("BONJOUR LE JOURS <br>contant de vous compte parmis nous "._$GET['nom']." "._$GET['prenoms'] );
?>
</body>
</html>
<!Doctype :html>
<html>
<head>
<meta-charset :"utf-8"/>
<title>teste super globalle</title>
</head>
<body>
<?php
echo("BONJOUR LE JOURS <br>contant de vous compte parmis nous "._$GET['nom']." "._$GET['prenoms'] );
?>
</body>
</html>
svp aider a trouve l'erreur
Salut vue l'erreur {"._$GET['nom']."} je pense que tu devrai confondre avec les supers variables
Il est écrit dans le chapitre "Développement de la bibliothèque"
dans la partie intitulé L'Application :
Pensez donc à ajouter le lien de parenté aux classes HTTPRequest et HTTPResponse. Et n'oubliez donc pas de passer l'instance de l'application lors de l'instanciation de ces deux classes dans le constructeur de Application.
Or je ne vois pas d'extendsau niveau des classes déclarées dans cette partie du cours ni sur le shéma UML d'ailleurs...
Ne devrait-il pas y a voir la déclaration suivante pour la classe HTTPrequest : class HTTPRequest extends ApplicationComponent ?
Merci beaucoup pour votre aide...
Rebonjour,
Je me réponds à moi même... Car je viens de voir que le code est conforme plus bas dans le tuto. En effet il y a bien des extends dans la déclaration des classes concernées par un héritage. Autant pour moi. Encore toutes mes excuses... Problème résolu donc ! A propos existe t-il un bouton résolu quelque part que je n'aurais pas vu ?
j'utilise actuellement le framework "yiiFramework" ( il n'y a pas de de tutoriel pour ce framework ) il s'agit d'un langage php objet, depuis 2 ou 3 jours je suis sur le coups pour créer un systéme de Like ou Dislike mais aucune documentation, ni aucune aide quelqu'un pourrai m'éclaircir sur le sujet s'il vous plait une documentation ou un truc du genre ?
J'attaque le dernier exercice de ce cours, la mise en cache.
Pour l'instant j'arrive bien à cacher mes données, mais je me pose une question qui me semble importante avant de continuer pour faire au mieux.
Je me demande où je dois, pour faire au mieux, travailler avec mes infos de dossier de cache, de durée de cache, et de vérification si oui ou non tout ça existe et n'a pas expiré. À priori, je peux faire ça aussi bien dans ma classe lib/OCFram/Classe.php que dans App/Frontend/Modules/News/NewsController.php.. Ou peut-être encore ailleurs.
Je me dis que je devrais mettre le moins d'infos possible dans lib/OCFram/Classe.php étant donné qu'il s'agit d'un fichier du "core" qui doit pouvoir être utilisable pour d'autres modules.. ?
Il me semble que je devrais aussi plutôt mettre les chemins de dossiers et la durée de cache dans App/Frontend/Config/app.xml.. ?
Enfin, étant donné qu'il y a plusieurs façons de faire, ça n'a peut-être pas d'impact concret sur la note.. ?
je connaissais fetch et fetchall, mais n'avais pas encore utilisé fetch column. J'ai trouvé que quand il n'y a pas de chiffre colonne ça prend automatiquement la colonne 0. Ca peut servir quand il n'y a qu'une info à récupérer. dans mon cas c'était count, donc un chiffre.
Un message d'erreur s'inscrit à la ligne ou se trouve mon header:
Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/projet-Openclassroom/phpNew/minichat_post.php:1) in /Applications/MAMP/htdocs/projet-Openclassroom/phpNew/minichat_post.php on line 20.
Juste pour signaler, dans la partie 4 "Manipulation de données stockées", il n'est pas précisé qu'il faut rajouter le constructeur dans la classe "Personnage", donc l'hydratation n'est pas appelée lors de la création d'un objet => objets vides lors de récupération des données dans la BDD !
class Personnage{
private $_id,...;
public function __construct(array $donnees)
{
$this->hydrate($donnees);
}
...
Voilà sinon super tuto qui m'a bien éclairé, merci !
Je suis actuellement le chapitre 2 'Les exceptions' de la partie 2. J'ai un problème avec la dernière partie de ce chapitre avec la fonction set_error_handler(fonction) :
<?php
class MonException extends ErrorException
{
public function __toString()
{
switch ($this->severity)
{
case E_USER_ERROR : // Si l'utilisateur émet une erreur fatale;
$type = 'Erreur fatale';
break;
case E_WARNING : // Si PHP émet une alerte.
case E_USER_WARNING : // Si l'utilisateur émet une alerte.
$type = 'Attention';
break;
case E_NOTICE : // Si PHP émet une notice.
case E_USER_NOTICE : // Si l'utilisateur émet une notice.
$type = 'Note';
break;
default : // Erreur inconnue.
$type = 'Erreur inconnue';
break;
}
return '<strong>' . $type . '</strong> : [' . $this->code . '] ' . $this->message . '<br /><strong>' . $this->file . '</strong> à la ligne <strong>' . $this->line . '</strong>';
}
}
function error2exception($code, $message, $fichier, $ligne)
{
// Le code fait office de sévérité.
// Reportez-vous aux constantes prédéfinies pour en savoir plus.
// http://fr2.php.net/manual/fr/errorfunc.constants.php
throw new MonException($message, 0, $code, $fichier, $ligne);
}
set_error_handler('error2exception');
J’essaie de générer une erreur qui sera attrapée par ce code, du genre 'erreur fatale' mais à chaque fois l'erreur est retournée par l'analyseur (carré orange tout moche).
Je suis ici pour poser un problème que j'ai rencontré en suivant le cours Programmer en Orienté Objet en PHP et poser à la fin mes questions.
Je suis actuellement au niveau du chapitre " L'héritage" précisément sur Résolution statique à la volée.
En lisant le cours j'exécute les exemples pour voir ce que ça donne et j'ai remarqué que le code suivant génère une erreur.
<?php
class Mere
{
public static function lancerLeTest()
{
static::quiEstCe();
}
public function quiEstCe()
{
echo 'Je suis la classe <strong>Mere</strong> !';
}
}
class Enfant extends Mere
{
public static function quiEstCe()
{
echo 'Je suis la classe <strong>Enfant</strong> !';
}
}
Enfant::lancerLeTest();
En lisant l'erreur générée, j'ai constaté que c'est parce que la méthode quiEstCe() de la classe Meren'est plus static (puisque qu'elle l'était un peu plus haut dans le chapitre). Alors je l'ai changé en static et tout a bien marché.
Dans la suite du chapitre j'ai rencontré également les même problèmes dans plusieurs autres exemples. Et comme j'ai compris un peu le principe de la Résolution statique à la volée, je change à chaque fois les méthodes en static lorsqu'elles sont appelées dans un contexte statique et en non-statique dans un contexte non-statique par exemple en instanciant la classe (Voir code qui suit).
<?php
class Mere
{
public function lancerLeTest()
{
static::quiEstCe();
}
public function quiEstCe()
{
echo 'Je suis la classe « Mere » !';
}
}
class Enfant extends Mere
{
public function quiEstCe()
{
echo 'Je suis la classe « Enfant » !';
}
}
$e = new Enfant;
$e->lancerLeTest();
En faisant aussi quelques autres tests sur self:: et parent::, j'en suis arrivé à ces conclusions :
Début conclusion
Dans un contexte statique :
Les méthodes appelées sur self:: , parent:: et static:: doivent être static alors que
Dans un contexte non-statique :(Lorsqu'on crée une instance de classe).
Les méthodes appelées sur self::, parent:: et static:: peuvent être static comme ne pas l'être,puisque le code suivant marche très bien.
<?php
class Mere
{
public static function lancerLeTest()
{
static::quiEstCe();
}
public static function quiEstCe()
{
echo 'Je suis la classe « Mere » !';
}
}
class Enfant extends Mere
{
public static function quiEstCe()
{
echo 'Je suis la classe « Enfant » !';
}
}
$e = new Enfant;
$e->lancerLeTest();
Fin conclusion.
Alors mes questions sont les suivantes :
->Est-ce que j'ai raison concernant certains codes d'exemples qui génèrent des erreurs dans le
chapitre "L'héritage->Résolution statique à la volée" ?
-> Si oui, mes conclusions sont-elles vrai ? Si non pourquoi ça marche quand même?
-> Si à la fin j'ai raison pour tout ça, alors pouvez-vous demander à Victor T. de me décerner un trophée ?Puisque j'ai certainement contribué à une mise à jour prochaine ?
J'ai dû faire les mêmes modifications pour que ça fonctionne, il y a pas mal d'erreurs dans ce cours, peut-être qu'elles sont volontaires pour nous faire bosser sur la résolution d'erreurs.
Je dois actuellement passé d'une base de donnée Access a une base sur libre office, j'ai pour le moment récupéré les données des tables dans un fichiers CSV, et je les ai importé dans des tables sur Base sur Libre office, cependant il y'a des formulaires aussi à récupérer et des macros, mais je ne sais pas vraiment comment faire pour récupérer tout ça, je pense qu'il va falloir que je refasse les formulaires et les macros. Je suis chez quelqu'un qui a un serveur Synology (serveur WEB), je pensais donc faire un page en HTML qui viendrait alimenter la base de données, j'ai installé donc myadminPHP, apache et compagnie mais je ne suis pas très bon en développement, ni en base de données quelqu'un peut-il me dire comment alimenter les bases via une page WEB, est-ce qu'il faut envoyer du PHP ou des requêtes SQL......
Je dois actuellement passé d'une base de donnée Access a une base sur libre office, j'ai pour le moment récupéré les données des tables dans un fichiers CSV, et je les ai importé dans des tables sur Base sur Libre office, cependant il y'a des formulaires aussi à récupérer et des macros, mais je ne sais pas vraiment comment faire pour récupérer tout ça, je pense qu'il va falloir que je refasse les formulaires et les macros. Je suis chez quelqu'un qui a un serveur Synology (serveur WEB), je pensais donc faire un page en HTML qui viendrait alimenter la base de données, j'ai installé donc myadminPHP, apache et compagnie mais je ne suis pas très bon en développement, ni en base de données quelqu'un peut-il me dire comment alimenter les bases via une page WEB, est-ce qu'il faut envoyer du PHP ou des requêtes SQL......
Merci beaucoup pour votre réponse.
Voilà Je te donne un aperçu HTML-JS-CSS-PHP-SQL
qui viendrait alimenter la base de données
C'est un calendrier Multiple utilisateurs - taches -
Cal (heures trv par / mois / semaine / jour tranche date Saison par exemple)
Attention c'est une class complet non terminé
Hors base de donée
<?php
class Calendar{
var $date;
var $year;
var $month;
var $day;
var $week_start_on = FALSE;
var $week_start = 1; // 2 CLN week-end defaut place sur LUNDI
var $JoursFeries = 2; // Multiplicateur
var $Interval_Evnt = 5; // Minutes
var $Link_Service = TRUE;
var $link_to;
var $formatted_link_to;
var $mark_Css_Today = TRUE;
var $Css_Today_date_class = 'Css_Today';
var $Css_Lst_Semaine;
var $ThisWeekend;
var $ThisFeries;
var $mark_Css_Selected = TRUE;
var $Css_Selected_date_class = 'Css_Selected';
var $mark_passed = TRUE;
var $passed_date_class = 'passed';
var $Date_Activite;
var $Class_Dflt_Actv_Dt = 'Date_Activite';
var $Code_Bar_Jour;
var $Ln_Xday;
var $Ln_XNav;
//--------------------------Nomination a deplace dans la construct avoir avec le fichier traduction
private $XMois = array ( '01' => "Janvier", '02' => "Fevrier", '03' => "Mars", '04' => "Avril", '05' => "Mai", '06' => "Juin", '07' => "Juillet", '08' => "Aout", '09' => "Septembre", 10 => "Octobre", 11 => "Novembre", 12 => "Decembre", );
private $Xjour = array ( 'monday' => "lundi", 'tuesday' => "mardi", 'wednesday' => "mercredi", 'thursday' => "jeudi", 'friday' => "vendredi", 'saturday' => "samedi", 'sunday' => "dimanche", );
private $XNom_Semaine = array ( 0 => "Lundi", 1 => "Mardi", 2 => "Mercredi", 3 => "Jeudi", 4 => "Vendredi", 5 => "Samedi", 6 => "Dimanche", );
function __construct($date = NULL, $year = NULL, $month = NULL)
{ list($Ans, $Ms, $Jrs) = explode("-", $_GET[Xday]);
$this->Ln_Xday = (strlen($_GET[Xday])>1) ? "Xday=$_GET[Xday]" : '';
$this->Ln_XNav = (strlen($_GET[XNav])>1) ? "&XNav=$Ms" : '';
$self = htmlspecialchars($_SERVER['PHP_SELF']);
$this->link_to = $self;
list($Expl_A, $Expl_M, $Expl_J) = explode("-",$_GET[Xday]);
$XValeur=date("w", mktime(0,0,0,$Expl_M,$Expl_J,$Expl_A));
$this->ThisWeekend = ($XValeur=='0' OR $XValeur=='6') ?'oui':'non';
$this->ThisFeries = (Get_Feries($this->year,"$_GET[Xday]",'NOM_FERIE')=='') ?'non':'oui';
if( is_null($year) || is_null($month) )
{
if( !is_null($date) ){
//-------- format correct
$this->date = date("Y-m-d", strtotime($date));
} else {
//-------------------------- utilisez la date de Css_Today
$this->date = date("Y-m-d");
}
$this->set_date_parts_from_date($this->date);
} else {
$this->year = $year;
$this->month = str_pad($month, 2, '0', STR_PAD_LEFT);
}
$this->Mktime_Jour = mktime(0,0,0,date("m") ,date("d") ,date("Y") );
$DB_CX = new ConnectBDD(); if (!$Base[Prexife]=$DB_CX->Connect('',Connect_Bdd));
if($_GET[Act]==Del_All )
{
echo"<h1>Patientez je traite votre demande</h1>";
$NetoyageCalendier ="DELETE FROM e_1_calendier_base WHERE e_fk_clndr = '".self:: Cd_Br_Jour($_GET[Xday])."' LIMIT 1 ;";
$NetoyageActivite ="DELETE FROM e_2_activite WHERE e_fk_clndr = '".self:: Cd_Br_Jour($_GET[Xday])."' ;";
$Base[Prexife]->query($NetoyageCalendier );
$Base[Prexife]->query($NetoyageActivite );
echo"<script language='javascript'> document.location.href=\"?".$this->Ln_Xday."&".$this->Ln_XNav."\" </script>";
}
unset($DB_CX);
$this->Amplitude[JOURNALIER]= "".self::Amplitude_Trv($Demande='JOURNALIER' ,$Pers=$_SESSION[Id_A_traiter],$MyDate="$_GET[Xday]")."";
$this->Amplitude[SEMAINE]= "".self::Amplitude_Trv($Demande='SEMAINE' ,$Pers=$_SESSION[Id_A_traiter],$MyDate="$_GET[Xday]")."";
$this->Amplitude[MOIS]= "".self::Amplitude_Trv($Demande='MOIS' ,$Pers=$_SESSION[Id_A_traiter],$MyDate="$_GET[Xday]")."";
}
function set_date_parts_from_date($date){
$this->year = date("Y", strtotime($date));
$this->month = date("m", strtotime($date));
$this->day = date("d", strtotime($date));
}
function Output_calendar($year = NULL, $month = NULL, $calendar_class = 'calendar' ,$Out='Data-Form')
{
//--------------------- remplacer les méthodes de classe si les valeurs sont passées
$year = ( is_null($year) )? $this->year : $year;
$month = ( is_null($month) )? $this->month : str_pad($month, 2, '0', STR_PAD_LEFT);
//------------------------------------------- première du mois
$month_start_date = strtotime($year . "-" . $month . "-01");
//------------------------- le premier jour du mois tombe sur Week-end ou semaine
$first_day_falls_on = date("N", $month_start_date);
//----------------------------------------- nombre de jours dans le mois
$days_in_month = date("t", $month_start_date);
//-------------------------------------------- la dernière date du mois
$month_end_date = strtotime($year . "-" . $month . "-" . $days_in_month);
//----------------------- trouver le nombre de cellules pour préfixer
$start_week_offset = $first_day_falls_on - $this->week_start;
$prepend = ( $start_week_offset < 0 )? 7 - abs($start_week_offset) : $first_day_falls_on - $this->week_start;
//-------------------------- le premier jour du mois tombe sur Week-end ou semaine
$last_day_falls_on = date("N", $month_end_date);
$Lec_Mode= ( isset($_GET['Xday']) ) ? $_GET['Xday'] : date("Y-m-d");
list($a, $m, $j) = explode("-", $Lec_Mode);
$NumSemaineSelect = date("W", @mktime(0, 0, 0, $m, $j, $a));
$XMoisSelect = ($_GET[XNav]=='') ? date("m", @mktime(0, 0, 0, $m, $j, $a)): $_GET[XNav];
$DB_CX = new ConnectBDD(); if (!$Base[Prexife]=$DB_CX->Connect('',Connect_Bdd));
$COLUMNS="
SELECT id_clndr,e_fk_persone,e_clndr_dt_j,e_clndr_dt_num_j,e_clndr_dt_smn,count( e_srvc_pntg) AS Activation
FROM e_1_calendier_base AS a
WHERE
e_fk_persone='$_SESSION[Id_A_traiter]' AND
e_clndr_dt_m='".sprintf("%'02d",$XMoisSelect)."'
GROUP BY e_fk_clndr
";
$XTABLES = $Base[Prexife]->query($COLUMNS); if (!$XTABLES){return "Eh bah, voila t'as tout casse : Aller voir ".__FILE__." Ligne : ".__LINE__." ?";}
while ($AffData = $XTABLES->fetch())
{
$ConversionA="$AffData[e_clndr_dt_num_j]";
$ConversionB="$AffData[e_clndr_dt_j]";
$this->Traitement_100[$ConversionA]="$AffData[e_clndr_dt_num_j]";
$this->Ref_100[$ConversionA]="$AffData[id_clndr]";
$XPingLs.="ConversionA $ConversionA <br>";
}
$XTABLES->closeCursor ();
unset($DB_CX);
//------------------------------------------------- start table, caption
$Output = "
<div class='ME-col m12 ME-row-padding ME-clear'>
<h6 class='ME-theme-d5 ME-row-padding'>
Amplitude SEMAINE <span class='ME-right'>".$this->Amplitude[SEMAINE]."</span> <br>
Amplitude MOIS <span class='ME-right'>". $this->Amplitude[MOIS]."</span>
</h6>
</div>
<table cellspacing='0' cellpadding='0' style='width:100%; padding: 10px 5px;' class=\"" . $calendar_class . "\">\n";
$Dbt_A_1="".ucfirst(strftime("%m", $month_start_date))."";
$Dbt_A_2="".ucfirst(strftime("%Y", $month_start_date))."";
$Xvar= ($_GET[XNav]=='') ? date(m) : $_GET[XNav] ;
$Nvgtn_Dbt = ($Xvar=='' OR $Xvar =='0' ) ? 1 : $Xvar-1;
$Nvgtn_Fin = $Xvar <= '11' ? $Xvar+1 :1;
$Lien_Nvgtn_Dbt = $Xvar > '1' ? "<a href='".$this->link_to."?".$this->Ln_Xday."&XNav=$Nvgtn_Dbt'> ".$this->XMois[sprintf("%'02d",$Nvgtn_Dbt)]." </a>" :'';
$Lien_Nvgtn_Fin = $Xvar <= '11' ? "<a href='".$this->link_to."?".$this->Ln_Xday."&XNav=$Nvgtn_Fin'> ".$this->XMois[sprintf("%'02d",$Nvgtn_Fin)]." </a>":'';
$Output .= " <caption> $Lien_Nvgtn_Dbt <- ".$this->XMois[sprintf("%'02d",$Xvar)]." $Dbt_A_2 -> $Lien_Nvgtn_Fin</caption>\n";
$col = '';
$th = '';
for( $Cln_Df=1,$j=$this->week_start,$Cln=(3+$this->week_start)*86400; $Cln_Df<=7; $Cln_Df++,$j++,$Cln+=86400 ){
$localized_day_name = gmstrftime('%A',$Cln);
$col .= "<col class=\"".strtolower($localized_day_name) ."\" />\n";
$Conversion="".strtolower($localized_day_name)."";
$Var_Nom_Semaine= "".strtoupper($this->Xjour[$Conversion])."";
$Sort_Nom_Semaine= substr( $Var_Nom_Semaine ,0 , 3);
$th .= "\t<th title=\"" . ucfirst(strtolower ($Var_Nom_Semaine)) ."\" style='padding:3px;'>".strtoupper($Sort_Nom_Semaine)."</th>\n";
$j = ( $j == 7 )? 0 : $j;
}
//------------------------------------------------------- balisage colonnes
$Output .= $col;
//----------------------------------------------------------- table head
$Output .= "<thead>\n";
$Output .= "<tr>\n";
$Output .= $th;
$Output .= "</tr>\n";
$Output .= "</thead>\n";
//---------------------------------------------------------- start tbody
$Output .= "<tbody>\n";
$Output .= "<tr>\n";
//-------------------------------- initialiser le compteur de la semaine
$weeks = 1;
//--------------------------------------- ajuster semaine le samedi vide
for($i=1;$i<=$prepend;$i++){ $Output .= "\t<td class=\"pad\"> </td>\n"; }
//--------------------------------------------------- boucle jours du mois
for($day=1,$cell=$prepend+1; $day<=$days_in_month; $day++,$cell++)
{
$day = str_pad($day, 2, '0', STR_PAD_LEFT);
$day_date = $year . "-" . $month . "-" . $day;
list($a, $m, $j) = explode("-", $_GET[Xday]);
$NumSemaineSelect = self::Num_Semaine($j ,$m ,$a );
$NumSemaine = sprintf("%'02d",date("W", @mktime(0, 0, 0, $month, $day, $year)));
$Num_Jour_Alors = sprintf("%'03d",self::Num_Jour($day ,$month ,$year ));
$this->Css_Lst_Semaine = $NumSemaineSelect==$NumSemaine ? "background: #fc9; font-weight:Bold; padding:3px;":" padding:3px;";
if( $cell == 1 && $day != 1 ){ $Output .= "<tr>\n"; }
//-------------- zero pad day and create date string for comparisons
//-------------------------- compare day and add classes for matches
if( $this->mark_Css_Today == TRUE && $day_date == date("Y-m-d") ){
$classes[] = $this->Css_Today_date_class;
}
if( $this->mark_Css_Selected == TRUE && $day_date == $this->date ){
$classes[] = $this->Css_Selected_date_class;
}
if( $this->mark_passed == TRUE && $day_date < date("Y-m-d") ){
$classes[] = $this->passed_date_class;
}
if( is_array($this->Date_Activite) ){
if( in_array($day_date, $this->Date_Activite ) ){
$classes[] = $this->Class_Dflt_Actv_Dt;
}
}
$Link_Nav= $_GET[XNav]=='' ? date(m): "$_GET[XNav]";
//----------------- Css class conditions,Css = Report le nom des jours, il faut definir dans fichier CSS
$XStyle=( strlen($this->Traitement_100[$Num_Jour_Alors])>1 ) ? " style='color:red; font-weight:Bold;'":'';
if( isset($classes) ){
$day_class = ' class="';
foreach( $classes AS $value ){ $day_class .= $value . " "; }
$day_class = substr($day_class, 0, -1) . '"';
} else { $day_class = ''; }
$this->Mktime_Demande = mktime(0,0,0,date("$month") ,date("$day") ,date("$year") );
if($day_date==$_GET[Xday] ) {$XSouSel= "style='border: 1px solid black; font-weight:Bold; ".$this->Css_Lst_Semaine."'";} else
{$XSouSel= "style='".$this->Css_Lst_Semaine."'";}
$this->Cadre_Select=$XSouSel;
if($this->Mktime_Demande >= $this->Mktime_Jour )
{
$Xxx[$Num_Jour_Alors]= ( strlen($this->Traitement_100[$Num_Jour_Alors] )>1 ) ?
"<a href='?Xday=$year-$month-$day&XNav=$month&Act=Del_All&Ref=".$this->Ref_100[$Num_Jour_Alors]."'>
<i class='fa fa-remove' style='color:red; font-size: small;'> Sup. S.$NumSemaine </i></a> ":
"<label for='$day'><i class='fa fa-plus-square-o' style='color:#0040ff; font-size: small;'> Ajt. S.$NumSemaine </i></label>";
}
else{
$Xxx[$Num_Jour_Alors]= ( strlen($this->Traitement_100[$Num_Jour_Alors] )>1 ) ?
"<a href='?Xday=$year-$month-$day&XNav=$month' $XStyle> <i class='fa fa-check' style='color:red;'> S.$NumSemaine </i> </a>" :
"<span style='color:#0040ff; font-size: small;'>Semaine $NumSemaine</span>";
}
$Output .= "\t<td".$day_class." valign='top' title=\"$day_date Semaine : $NumSemaine | No Jour : $Num_Jour_Alors ".self::Cd_Br_Jour($day_date)."\" ".$this->Cadre_Select.">
$Xxx[$Num_Jour_Alors]<br>";
//----------------------------------------- unset to keep loop clean
unset($day_class, $classes);
//-------------------------------------- conditional, start link tag
switch( $this->Link_Service )
{
case 0 : // Pas de lien du tout
$Output .= "$day";
break;
case 1 : // Full lien
if( empty($this->formatted_link_to) ){
$Output .= "<a href=\"" . $this->link_to . "?Xday=" . $day_date . "&XNav=$Link_Nav\" $XStyle>" . $day . " </a> ";
} else {
$Output .= "<a href=\"" . strftime($this->formatted_link_to, strtotime($day_date)) . "\">" . $day . " </a>";
}
break;
case 2 : // Uniquement sur les dates valides
if( is_array($this->Date_Activite) ){ }
if( strlen($this->Traitement_100[$Num_Jour_Alors] )>1 )
{
$Output .= "<a href='".$this->link_to."?Xday=".$day_date."&XNav=$Link_Nav' style='color:red;'> <i class='fa fa-save' style='color:bleu;'></i> ";
}
$Output .= "$day";
break;
case 3 : // Case coche sur les dates valides <i class='></i>
if( is_array($this->Date_Activite) ) { }
$Xchecked=( strlen($this->Traitement_100[$Num_Jour_Alors] )>1 ) ?'checked':'';
$Css_Checked=( strlen($this->Traitement_100[$Num_Jour_Alors] )>1 ) ?"style='padding:5px;'":'';
$XCode_Bar="".self::Cd_Br_Jour($day_date)."";
if($this->Mktime_Demande >= $this->Mktime_Jour )
{
$Supression[$day] = ( strlen($this->Traitement_100[$Num_Jour_Alors] )>1 ) ?
"<a href='".$this->link_to."?Xday=".$day_date."&XNav=$Link_Nav' $XStyle> <i class='fa fa-save' style='color:red;'></i> "
:
"<input type='checkbox' name='$day' id='$day' value='$XCode_Bar' $Xchecked> ";
}
else{$Supression[$day]="<a href='".$this->link_to."?Xday=".$day_date."&XNav=$Link_Nav' $XStyle> <i class='fa fa-info' style='color:#0040ff;'></i> ";}
if (!$_SESSION[Id_A_traiter]){$Alert_Traitement_218= "<h3>Vous devez sélectionnez une personne</h3>"; }
else
{
$x = sprintf("%'02d",$day);
if(strlen($_POST[$x])>1){self::Sql_Gestion($XId_Jour, $_SESSION[Id_A_traiter] ); $XPOST++;}
$Output .= "<label for='$day' $XStyle $Css_Checked>$Supression[$day]";
}
$Output .= "$day<br> <span style='color:red; font-size:small;'> ".Get_Feries($this->year,"$day_date",'NOM_FERIE')." </span></label> ";
if( is_array($this->Date_Activite OR strlen($this->Date_Activite[$day_date])>1 ) ){
if( in_array($day_date, $this->Date_Activite) ){
if( empty($this->formatted_link_to) ){
$Output .= "</a>";
} else {
$Output .= "</a>";
}
}
}
break;
}
//------------------------------------------------- Fin close table cell
$Output .= "</td>\n";
//------- if this is the last cell, end the row and reset cell count
if( $cell == 7 ){ $Output .= "</tr>\n"; $cell = 0; }
}
//----------------------------------------------------- dt mois vide
if( $cell > 1 ){ for($i=$cell;$i<=7;$i++){ $Output .= "\t<td class=\"pad\"> </td>\n"; } $Output .= "</tr>\n"; }
//--------------------------------------------- Fin colonnes et table
$Output .= "</tbody>\n";
$Output .= "</table>\n";
$Alert_Traitement_218 =(strlen($XPOST)>=1) ? "<script language='javascript'> document.location.href=\"index.php?".$this->Ln_Xday."&XNav=$month\" </script>" : "$Alert_Traitement_218";
return "$Alert_Traitement_218 $Output ";
}
function Output_Semaine_Par_Num($Demande='' ,$XNumS='',$XAnne='',$Persone='')
{
$this->Persone=$Persone;
list($Ans, $Ms, $Jrs) = explode("-", $_GET[Xday]);
if (!$Demande){$Controle="oui"; return"";}
if($Ans == false ||$Ms == false || $Jrs == false AND $NumJour<=52 ){$NumJour = "$XNumS"; $Ans = "$XAnne"; if (!$NumJour>52){$Controle="oui"; return"";} }
elseif(checkdate($Ms, $Jrs, $Ans)==false ) {$NumJour = "$XNumS"; $Ans = "$XAnne";}
else {$NumJour = date("W", @mktime(0, 0, 0, $Ms, $Jrs, $Ans)); if (!$Demande){return"";}$Controle="oui"; }
$MaSemaine = date("W", @mktime(0, 0, 0, $Ms, $Jrs, $Ans)) ;
$Description[1]="Tout les liens actives";
$Description[2]="Seulement les liens déclarés";
$Description[3]="Case à coché";
$DB_CX = new ConnectBDD(); if (!$Base[Prexife]=$DB_CX->Connect('',Connect_Bdd));
$COLUMNS="
SELECT DISTINCT e_fk_strategie_tache, a.e_srvc_pntg AS e_srvc_pntg, e_avc_tache, e_clndri_chrono_dbt, e_clndri_chrono_fin, e_clndri_amplitude ,
TIMEDIFF(e_clndri_chrono_fin,e_clndri_chrono_dbt) AS DIFF_TEMPS,
(SELECT c.Calendier_tache FROM a_elements_strategie AS c WHERE c.id_strategie = a.e_fk_strategie_tache ) AS Tache_REC,
b.e_clndr_dt_complet, b.e_clndr_dt_smn, a.id_clndr AS Id_Actv, a.e_fk_clndr AS Cbr_Actv
FROM e_2_activite AS a
INNER JOIN e_1_calendier_base AS b ON (a.e_fk_clndr = b.e_fk_clndr )
WHERE
a.e_fk_clndr= '".self::Cd_Br_Jour($_GET[Xday])."' AND
a.e_fk_persone = '$_SESSION[Id_A_traiter]'
";
$XTABLES = $Base[Prexife]->query($COLUMNS); if (!$XTABLES){return "Eh bah, voila t'as tout casse : Aller voir ".__FILE__." Ligne : ".__LINE__." ?";}
/*Lecture et Preparation des posts*/
while ($AffData = $XTABLES->fetch())
{
$TotalActivation++;
$Option_[Del_All]="Act=Del_All&Ref=$AffData[e_clndr_dt_smn]";
$Option_[Del_Unite]="Act=Del_Unite&Ref=$AffData[Id_Actv]";
$Option_[Correction]="Act=Update&Ref=$AffData[Id_Actv]";
if($_GET[Act]==Del_Unite AND $AffData[Id_Actv]=="$_GET[Ref]")
{$NetoyageUnitaire ="DELETE FROM e_2_activite WHERE id_clndr = '".$AffData[Id_Actv]."' ;";
$Base[Prexife]->query($NetoyageUnitaire );
echo"<h1>Patientez je traite votre demande</h1> ";
echo"<script language='javascript'> document.location.href=\"?".$this->Ln_Xday."&".$this->Ln_XNav."\" </script>";
}
elseif($_GET[Act]==Update AND $AffData[Id_Actv]=="$_GET[Ref]")
{
$Reporter[tache]="$AffData[e_fk_strategie_tache]";
$Reporter[Serv_Pointage]="$AffData[e_srvc_pntg]";
$Reporter[Chrono_dbt]="$AffData[e_clndri_chrono_dbt]";
$Reporter[Chrono_fin]="$AffData[e_clndri_chrono_fin]";
$XOp = 'Correction';
}
$Bonne_Heure=substr($AffData[e_clndri_chrono_dbt], 0,2);
$Css_Sel_Trv = ($AffData[Id_Actv]=="$_GET[Ref]") ?"ME-theme-d6":"";
if($AffData[Id_Actv]=="$_GET[Ref]" )
{
$XNORMALTEMP="$AffData[e_clndri_amplitude]";
$XDIFF_TEMPS="$AffData[DIFF_TEMPS]";
}
if($AffData[e_srvc_pntg]=='oui')
{$TCmtpOui++;
$Chaine[Pointage][$Bonne_Heure].="<div class='ME-clear $Css_Sel_Trv'> <h5>
<div class='ME-col m5 ME-row-padding'> $AffData[e_clndri_chrono_dbt] à $AffData[e_clndri_chrono_fin] </div>
<div class='ME-col m5 ME-row-padding'> <b>$AffData[Tache_REC]</b></div>
<div class='ME-col m5 ME-row-padding'> Amplitude $AffData[e_clndri_amplitude]</div>
<div class='Me-right ME-col m5 ME-row-padding'>
<a href='?".$this->Ln_Xday."&".$this->Ln_XNav."&$Option_[Correction]' class='ME-right ME-hover-deep-purple ME-row-padding'> Correction </a>
<a href='?".$this->Ln_Xday."&".$this->Ln_XNav."&$Option_[Del_Unite]' class='ME-left ME-hover-deep-purple ME-row-padding'> Effacer </a>
</div>
</h5></div>
";
}
else
{$TCmtpNon++;
$Chaine[Normal][$Bonne_Heure].="
<div class='ME-clear $Css_Sel_Trv'> <h5>
<div class='ME-col m5 ME-row-padding'> $AffData[e_clndri_chrono_dbt] à $AffData[e_clndri_chrono_fin] </div>
<div class='ME-col m5 ME-row-padding'> <b>$AffData[Tache_REC]</b> </div>
<div class='Me-right ME-col m5 ME-row-padding'>
<a href='?".$this->Ln_Xday."&".$this->Ln_XNav."&$Option_[Correction]' class='ME-right ME-hover-deep-purple ME-row-padding'> Correction </a>
<a href='?".$this->Ln_Xday."&".$this->Ln_XNav."&$Option_[Del_Unite]' class='ME-left ME-hover-deep-purple ME-row-padding'> Effacer </a>
</div>
</h5></div>
";
}
if($AffData[e_clndr_dt_complet]==$_GET[Xday]) {$SouSel= "background: #fc9; color:red;"; } else{$SouSel= "background: #fff; color:#000;";$Indic="";}
}
$XTABLES->closeCursor ();
unset($DB_CX);
if($_POST[Action]==Injection OR $_POST[Action]==Correction )
{
$XMarquage=$_POST[Marquage];
$CNVRS[FK_CLNDR]="e_fk_clndr_".$XMarquage."";
$CNVRS[SOURCE_DT]="s_date".$XMarquage."";
$CNVRS[PNTG]="e_srvc_pntg_".$XMarquage."";
$CNVRS[TACHE]="e_fk_strategie_tache_".$XMarquage."";
$CNVRS[SUIVI]="e_avc_tache_".$XMarquage."";
$CNVRS[DBT_H]="pntg_dbt_h_".$XMarquage."";
$CNVRS[DBT_M]="pntg_dbt_m_".$XMarquage."";
$EXPORT_H_[DBT]="".$_POST[$CNVRS[DBT_H]].":".$_POST[$CNVRS[DBT_M]].":00";
$CNVRS[FIN_H]="pntg_fin_h_".$XMarquage."";
$CNVRS[FIN_M]="pntg_fin_m_".$XMarquage."";
$EXPORT_H_[FIN]="".$_POST[$CNVRS[FIN_H]].":".$_POST[$CNVRS[FIN_M]].":00";
$Dt_Debut = mktime ($_POST[$CNVRS[DBT_H]],$_POST[$CNVRS[DBT_M]],0,$Ms,$Jrs,$Ans);
$Dt_Fin = mktime ($_POST[$CNVRS[FIN_H]],$_POST[$CNVRS[FIN_M]],0,$Ms,$Jrs,$Ans);
$Test=$Dt_Fin-$Dt_Debut;
if($Test>$this->Interval_Evnt*60)
{
if($_POST[SelectFerie]=='oui' )
{$Special_Feries= "SEC_TO_TIME(TIME_TO_SEC(TIMEDIFF('".$EXPORT_H_[FIN]."','".$EXPORT_H_[DBT]."'))*".$this->JoursFeries.")";}
elseif($_POST[SelectFerie]=='oui' AND $this->ThisWeekend=='oui' )
{$Special_Feries= "SEC_TO_TIME(TIME_TO_SEC(TIMEDIFF('".$EXPORT_H_[FIN]."','".$EXPORT_H_[DBT]."'))*".$this->JoursFeries.")";}
else
{$Special_Feries= "SEC_TO_TIME(TIME_TO_SEC(TIMEDIFF('".$EXPORT_H_[FIN]."','".$EXPORT_H_[DBT]."')))";}
}
else
{
return"<div class='ME-col m12 ME-row-padding ME-clear'>
<h1 class='ME-theme-d5 ME-row-padding'>Err heure événement<br>Début <span class='Me-right'> $EXPORT_H_[DBT]</span><br>Fin <span class='Me-right'> $EXPORT_H_[FIN] </span> </h1>
<h3 style='color:red;'>Interval minimum doit être supérrieur de ".$this->Interval_Evnt." minutes</h3>
</div>";
}
//return"vvvvvvvvvv ".$_POST[$CNVRS[PNTG]]." ";
if($_POST[Action]==Correction )
{
$CHAINE_UPDATE= " UPDATE `e_2_activite` SET `e_srvc_pntg`='".$_POST[$CNVRS[PNTG]]."', `e_fk_strategie_tache`='".$_POST[$CNVRS[TACHE]]."', `e_clndri_chrono_dbt`='".$EXPORT_H_[DBT]."', `e_clndri_chrono_fin`='".$EXPORT_H_[FIN]."',
`e_clndri_amplitude`= ".$Special_Feries." WHERE id_clndr= '$_GET[Ref]' LIMIT 1 ; ";
$Base[Prexife]->query($CHAINE_UPDATE );
return"<script language='javascript'> document.location.href=\"?Xday=$_GET[Xday]&XNav=".$_GET[XNav]."\" </script> ";
}
if($_POST[Action]==Injection )
{
$CHAINE_INSERT="INSERT INTO e_2_activite VALUES ( '','".$_POST[$CNVRS[FK_CLNDR]]."', '$_SESSION[Id_A_traiter]','".$_POST[$CNVRS[TACHE]]."', '".$_POST[$CNVRS[PNTG]]."', '".$_POST[$CNVRS[SUIVI]]."', '".$EXPORT_H_[DBT]."', '".$EXPORT_H_[FIN]."', ".$Special_Feries." )";
$Base[Prexife]->query($CHAINE_INSERT );
echo"<h1>Patientez je traite votre demande</h1> ";
return"<script language='javascript'> document.location.href=\"?Xday=$_GET[Xday]&XNav=".$_GET[XNav]."\" </script> ";
}
}
$JoliMot = $TotalActivation==1 ?"$TotalActivation Activité programmée":"$TotalActivation Activités programmées";
$JoliMot = $TotalActivation=='' ? '' :"$JoliMot";
for($i=1;$i<=24;$i++)
{
$Uniforme = sprintf("%'02d",$i);
$Belle_Ls[Pointage].=($Chaine[Pointage][$Uniforme]=='')? "" : "<div class='ME-left ME-theme-d5 ME-row-padding'> $Uniforme heure</div><div class=' ME-row-padding'> ".$Chaine[Pointage][$Uniforme]." </div>";
$Belle_Ls[Normal].=($Chaine[Normal][$Uniforme]=='')? "" : "<div class='ME-left ME-theme-d5 ME-row-padding'> $Uniforme heure</div><div class='ME-row-padding'> ".$Chaine[Normal][$Uniforme]." </div>";
}
if($TotalActivation==''){$Eml_Sav = "";}
else
{
$En_tete_Non= $TCmtpNon==''?'':"<h4 class='ME-theme-d1 ME-row-padding'>Evenement".plrlrebel($TCmtpNon)." non comptablisé".plrlrebel($TCmtpNon)." <span class='Me-right'>$TCmtpNon Evenement".plrlrebel($TCmtpNon)."</span></h4>";
$En_tete_Oui= $TCmtpOui==''?'':"<h4 class='ME-theme-d5 ME-row-padding'>$TCmtpOui Evenement".plrlrebel($TCmtpOui)." comptablisé".plrlrebel($TCmtpOui)." <span class='Me-right'>Amplitude horraire jounalier
".$this->Amplitude[JOURNALIER]." </span></h4>";
$Eml_Sav = "
<div style=' '><div class='ME-clear'></div>
<div class=' ME-row-padding'><h3><a href='?".$this->Ln_Xday."&".$this->Ln_XNav."&$Option_[Del_All]' style='color:red;'> Effacer tout mes événement</a></h3></div>
<div class='ME-clear'> $En_tete_Oui ".$Belle_Ls[Pointage]."</div>
<div class='ME-clear'>$En_tete_Non ".$Belle_Ls[Normal]."</div>
</div>
</div>
";
}
$Opperation = $XOp=='' ? 'Injection' :"$XOp";
$Annulation = $XOp=='Correction' ? "<h3><a href='?".$this->Ln_Xday."&".$this->Ln_XNav."' style='padding:8px 16px; float:left;' class='ME-hover-deep-purple'>Annulation</a></h3>" :'';
$Frm_Nv = "
<h3 class='ME-row-padding ME-theme-d1'>Nouveau activité $DateActivite semaine $MaSemaine <span class='Me-right'> $JoliMot </span> </h3>
<form action='' method='post'>
<input type='hidden' name='Marquage' value='$TotalActivation'>
<input type='hidden' name='e_fk_clndr_".$TotalActivation."' value='".self:: Cd_Br_Jour($_GET[Xday])."'>
<input type='hidden' name='s_date".$TotalActivation."' value='$AffData[e_clndr_dt_complet]'>
<input type='hidden' name='Action' value='$Opperation'>
<div style='padding:8px 16px; float:left; width:100%;'>
".self::Form_Inject_Evnt($Total=$TotalActivation ,$Data=array( "e_fk_strategie_tache_"=>"".$Reporter[tache]."", "e_srvc_pntg_"=>"".$Reporter[Serv_Pointage]."", "pntg_dbt_h_"=>"".$Reporter[Chrono_dbt]."" ,
"pntg_fin_h_"=>"".$Reporter[Chrono_fin]."" , "pntg_amplitude_normal"=>"$XNORMALTEMP" ,"pntg_amplitude_dif"=>"$XDIFF_TEMPS" , ) )."
</div>
<div class='ME-right'><input type='submit' value='$Opperation' style='padding:8px 16px; float:left;' class='ME-hover-deep-purple'> </div>
<div class='ME-left'>$Annulation</div>
</form> ";
return" $Frm_Nv $Eml_Sav ";
}
function Amplitude_Trv($Demande='' , $Pers='SESSION[Id_A_traiter]', $MyDate="Sous_Fome =2018-07-14")
{ /*Tres important Contrain résultat limité 838
le résultat est limité de -838:59:59 à 838:59:59
AU DELÀ, IL FAUT TROUVER UNE AUTRE SOLUTION
*/
$Demande=strtoupper($Demande);
list($Ans, $Ms, $Jrs) = explode("-",$MyDate);
$Num_S = self::Num_Semaine($Jrs ,$Ms ,$Ans );
$Chercher[JOURNALIER]="SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(a.e_clndri_amplitude))) AS JOURNALIER FROM e_2_activite AS a WHERE a.e_fk_clndr= '".self::Cd_Br_Jour($MyDate)."' AND a.e_fk_persone = '$_SESSION[Id_A_traiter]' AND a.e_srvc_pntg = 'oui'";
$Chercher[SEMAINE]=" SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(b.e_clndri_amplitude))) AS $Demande FROM e_1_calendier_base AS a INNER JOIN e_2_activite AS b ON (b.e_fk_clndr = a.e_fk_clndr) WHERE a.e_fk_persone = '$Pers' AND a.e_clndr_dt_a = '$Ans' AND a.e_clndr_dt_smn = '$Num_S' AND a.e_srvc_pntg = 'oui' ";
$Jour_Un =date("j", mktime(0,0,0,$Ms,$Jrs,$Ans));
$Chercher[MOIS]=" SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(b.e_clndri_amplitude))) AS $Demande
FROM e_1_calendier_base AS a
INNER JOIN e_2_activite AS b ON (b.e_fk_clndr = a.e_fk_clndr)
WHERE a.e_fk_persone = '$Pers' AND
a.e_clndr_dt_a = '$Ans' AND
a.e_clndr_dt_m = '$Ms' AND
a.e_srvc_pntg = 'oui'
";
//if($Demande=='MOIS' ){return "$Chercher[MOIS]";}
$DB_CX = new ConnectBDD(); if (!$Base[Prexife]=$DB_CX->Connect('',Connect_Bdd));
$AMPLITUDE[$Demande]=" $Chercher[$Demande]";
$XAMPLITUDE[$Demande] = $Base[Prexife]->query($AMPLITUDE[$Demande]);
if (!$XAMPLITUDE[$Demande]){return "Eh bah, voila t'as tout casse : Aller voir ".__FILE__." Ligne : ".__LINE__." ?";}
$this->total_amplitude[$Demande] = $Combien=$XAMPLITUDE[$Demande]->fetch();
$XAMPLITUDE[$Demande]->closeCursor (); unset($DB_CX);
return"$Combien[0]";
}
function Form_Inject_Evnt($Total='' ,$Data="Sous_Fome_Tbl = array()")
{
$XCss="padding:5px;";
$XFeries="".Get_Feries($this->year,"$_GET[Xday]",'NOM_FERIE')."";
$AffXFeries = $XFeries=='' ? '' :"<div class='ME-clear'><h3 class='ME-right'>".ucfirst(strtolower( "Jour ferié $XFeries"))."</h3></div>";
if ( strlen($AffXFeries)>1 OR $this->ThisWeekend=='oui' )
{
$SelecXFeries = ($Data[pntg_amplitude_normal]==$Data[pntg_amplitude_dif])? "non":"oui";
$XSelectFeries = "<select name='SelectFerie' style='$XCss color:red;'><optgroup label='Amplitude horraire special'></optgroup> ".Selec_XEnum($Aide='',$SelecXFeries , array('oui','non'))." </select>";
$XTxtFeries[e_srvc_pntg_] ="<br>Special jours feriés et Week-end amplitude horraire (X".$this->JoursFeries.")";
}
$e_fk_strategie_tache_[$Total]="
<select name='e_fk_strategie_tache_".$Total."' style='$XCss'><optgroup label='Tache'></optgroup> ".Selec_Constant($Aide='#OPT SELECT #ID->NOM #NOM->ID',$Nom_Colone='Calendier_tache',$Data[e_fk_strategie_tache_],$Lec_Mode='SELECT')." </select>
";
$e_srvc_pntg_[$Total]=" $XSelectFeries
<select name='e_srvc_pntg_".$Total."' style='$XCss'><optgroup label='Service pointage'></optgroup> ".Selec_XEnum($Aide='',$Data[e_srvc_pntg_] , array('non','oui'))." </select>
";
list($Dbt_H, $Dbt_M, $Dbt_S) = explode(":", $Data[pntg_dbt_h_]);
$pntg_dbt_h_[$Total]="
<div class='ME-left'>
<select name='pntg_dbt_h_".$Total."' style='$XCss'><optgroup label='Heure'></optgroup> ".Selec_Heure($Aide='',$Dbt_H)." </select>
:
<select name='pntg_dbt_m_".$Total."' style='$XCss'><optgroup label='Minute'></optgroup> ".Selec_Minute($Aide='', $Dbt_M)." </select>
</div>
";
list($Fin_H, $Fin_M, $Fin_S) = explode(":", $Data[pntg_fin_h_]);
$pntg_fin_h_[$Total]="
<div class='ME-left'>
<select name='pntg_fin_h_".$Total."' style='$XCss'><optgroup label='Heure'></optgroup> ".Selec_Heure($Aide='',$Fin_H )." </select>
:
<select name='pntg_fin_m_".$Total."' style='$XCss'><optgroup label='Minute'></optgroup> ".Selec_Minute($Aide='',$Fin_M )." </select>
</div>
";
foreach($Data AS $XNom=>$XDone)
{
$XTbl.=( $XNom=='pntg_amplitude_normal' OR $XNom=='pntg_amplitude_dif' ) ? "":
"<div class='ME-col m6 ME-row-padding' style='display: block; position: relative; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;'>
trad::".$XNom." $XTxtFeries[$XNom] </div> <div class='ME-right'> ".$$XNom[$Total]." </div> <div class='ME-clear'></div>\n";
}
return" $AffXFeries $XTbl";
}
function Sql_Gestion($XCode_Bar='',$XPersonne='')
{
$DB_CX = new ConnectBDD(); if (!$Base[Prexife]=$DB_CX->Connect('',Connect_Bdd));
for($i=1; $i<=31; $i++)
{$x = sprintf("%'02d",$i);
$Xfk_Key= (strlen($_POST[$x])>1) ? "$_POST[$x]" :"$XCode_Bar" ;
$COLUMNS="SELECT DISTINCT count(a.e_srvc_pntg) AS Activation
FROM e_1_calendier_base AS a
WHERE
a.e_fk_clndr='$Xfk_Key' AND
a.e_fk_persone='$XPersonne' AND
a.e_srvc_pntg='oui'
GROUP BY a.e_srvc_pntg
";
$XTABLES = $Base[Prexife]->query($COLUMNS);
if (!$XTABLES){return "Eh bah, voila t'as tout casse : Aller voir ".__FILE__." Ligne : ".__LINE__." ?";}
if(strlen($_POST[$x])>1 AND strlen($_SESSION[Id_A_traiter])>1)
{
$Donne = $XTABLES->fetch();
$An="".self::ConversionCode($_POST[$x],$Data='Anne')."";
$Mo="".self::ConversionCode($_POST[$x],$Data='Mois')."";
$Jo="".self::ConversionCode($_POST[$x],$Data='Jour')."";
$Nj="".self::ConversionCode($_POST[$x],$Data='NJour')."";
$Ns="".self::ConversionCode($_POST[$x],$Data='Semaine')."";
$PreparationExport[$i]=" '', '$_POST[$x]', '$XPersonne', 'oui', '$An', '$Mo', '$Jo', '$Ns', '$Nj', '$An-$Mo-$Jo' ";
$TableExc[$i].="INSERT INTO `e_1_calendier_base` VALUES ($PreparationExport[$i]) ; ";
$Insert[$i] = ($Donne[0]==0 OR $Donne[0]=='' ) ? $Base[Prexife]->query($TableExc[$i]) : $XTABLES->closeCursor ();
}
}
unset($DB_CX);
return"";
}
function Num_Jour($XJour='',$XMois='',$XAne='')
{$XJour=sprintf("%'02d",$XJour); $XMois=sprintf("%'02d",$XMois);
$Alors= date("z", @mktime(0,0,0,$XMois,$XJour,$XAne));
return "".sprintf("%'03d",$Alors)."";
}
function ConversionCode($CodeJour='',$Data='')
{
$E[Anne]= substr($CodeJour ,0, 4) ; // 2018
$E[Mois]= substr($CodeJour ,4, 2) ; // 01-12
$E[Jour]= substr($CodeJour ,6, 2) ; // 01-31
$E[Semaine]= substr($CodeJour ,8, 2) ; // 01-52
$E[NJour]= substr($CodeJour ,10, 3) ; // 001-365
return "$E[$Data]";
}
function Cd_Br_Jour($Quand='$a-$m-$j')
{
list($a, $m, $j) = explode("-", $Quand );
$NumSemaineSelect = date("W", @mktime(0, 0, 0, $m, $j, $a));
$Num_Semaine = sprintf("%'02d",date("W", @mktime(0, 0, 0, $m, $j, $a)));
$Num_Jour = sprintf("%'03d",self::Num_Jour($j, $m, $a));
$a = sprintf("%'04d",$a);
$m = sprintf("%'02d",$m);
$j = sprintf("%'02d",$j);
$XCode_Bar="$a$m$day$j$Num_Semaine$Num_Jour";
return $this->Code_Bar_Jour= "$XCode_Bar";
}
function Num_Semaine($XJour='',$XMois='',$XAne='')
{$XSemaine = date("W", @mktime(0, 0, 0, $XMois, $XJour, $XAne));
return "".sprintf("%'02d",$XSemaine)."";
}
function Bissextile($annee)
{/*$bissextile = date("L", mktime(0,0,0,0,0,$annee)) ? '366':'365'; complique $bissextile = date("L", mktime(0,0,0,0,0,$annee)) ? '366':'365';*/
$Bissextile = ( (is_int($annee/4) && !is_int($annee/100)) || is_int($annee/400))?"366":"365";
return "$Bissextile";
}
}
?>
- Edité par LEPaul 26 mai 2018 à 15:20:18
Fidèle résumé de mes capacités ! Bon à rien, mauvais à tout. Faire le moins, mais BIEN
Mon problème concerne le chapitre 6 de la partie 2 (l'API de réflexivité) au niveau de la récupération des annotations des attributs et méthodes. jusque là tout allait bien sur la récupération des annotations des classes, mais impossible de récupérer celles des attributs et méthodes:
Ma classe Personnage:
<?php
class Personnage
{
/**
* @AttrInfos(description = 'Contient la force du personnage, de 0 à 100', type = 'int')
*/
protected $force;
/**
* @ParamInfo(name = 'destination', description = 'La destination du personnage')
* @ParamInfo(name = 'vitesse', description = 'La vitesse à laquelle se déplace le personnage')
* @MethodInfos(description = 'Déplace le personnage à un autre endroit', return = true, returnDescription = 'Retourne true si le personnage peut se déplacer')
*/
public function deplacer($destination, $vitesse)
{
// ...
}
}
Mon fichier index:
<?php
// On commence par inclure les fichiers nécessaires.
require 'addendum/annotations.php';
require 'MyAnnotations.php';
require 'Personnage.php';
// Récupération des annotations des attributs et des méthodes présentent dans la classe 'Personnage'
$reflectedAttr = new ReflectionAnnotatedProperty('Personnage', 'force');
$reflectedMethod = new ReflectionAnnotatedMethod('Personnage', 'deplacer');
echo 'Infos concernant l\'attribut :';
var_dump($reflectedAttr->getAnnotation('AttrInfos'));
echo 'Infos concernant les paramètres de la méthode :';
var_dump($reflectedMethod->getAllAnnotations('ParamInfo'));
echo 'Infos concernant la méthode :';
var_dump($reflectedMethod->getAnnotation('MethodInfos'));
Aucun retour de mes annotations. J'ai fais des recherche sur google et la documentattion, l'utilisation à l'air correcte. Si quelqu'un a réussi à obtenir le bon résultat je suis preneur!
J'ai dû faire les mêmes modifications pour que ça fonctionne, il y a pas mal d'erreurs dans ce cours, peut-être qu'elles sont volontaires pour nous faire bosser sur la résolution d'erreurs.
@+
Merci beaucoup Melron14 pour ta réponse. Maintenant je suis rassuré et je continuer sans inquiétude à cause de toi !!! Think...
Salut à tous et spéciale hip à LEPaul :) Franchement il faut du temps pour balancer tous ses fabuleux conseils. Hélas je n'ai vu la réponse que maintenant. Cela dit maintenant j'arrive même à deviner les problèmes d'intégrités dans mes tables. Donc je les règles assez facilement. En tout cas j'évite ce genre de problème désormais dans la construction même de mes entités. Cela dit j'ai un autre problème. Je n'arrive pas à terminer le dernier module de ma formation PHP/Symfony pour raison financière. C'est le module 8. Si quelqu'un peut fournir l’énoncé complet que je puisse le traiter avant de me réinscrire un jour...Merci à tous. Quoi qu'il en soit si vous avez des blocages pour convertir votre code en symfony 4 ou juste des blocages en symfony 4...je peux sans trop m'avancer peut être donner un coup de main.
j' ai suivi le cours "Programmez en orienté objet en PHP" mais je suis bloquer quand je met la page accueil j'ai une erreur
Warning: require(C:\wamp\www\klashesport\Web/../lib/vendors\Model\News.php): failed to open stream: No such file or directory in C:\wamp\www\klashesport\lib\KeFram\SplClassLoader.php on line 151
j' ai suivi le cours "Programmez en orienté objet en PHP" mais je suis bloquer quand je met la page accueil j'ai une erreur
Warning: require(C:\wamp\www\klashesport\Web/../lib/vendors\Model\News.php): failed to open stream: No such file or directory in C:\wamp\www\klashesport\lib\KeFram\SplClassLoader.php on line 151
merci d avance
Tu essaies d'ouvrir un fichier qui n'existe pas dans ton arborescence.
Je n'ai pas la science infuse, j'en ai bavé comme vous, il y a déjà 2 ans. J'ai même tout arrêté lors de la dernière activité car pour moi aussi c'était difficile. J'ai suivi d'autres cours tout en me documentant sur les systèmes de cache: 6 mois après, je m'y suis remis et j'ai terminé l'exercice avec un beau 8/10 au final et une grande fierté. C'est vrai, il ne faut pas lâcher et, surtout, ce n'est jamais du tout cuit ! On fait un métier dans lequel il faut toujours se documenter et ce cours nous l'a bien montré.
Bonsoir,
Le faire d'une traite ce n'est pas choses faciles comme Philippe2463 il faut ce documenté, et en premier lieu qui n'avait pas à l'époque c'est le cour Adoptez une architecture MVC en PHP, premièrement il montre l'architecture mvc et une petite partie sur la programmation orienter objet, mais ce cours est vraiment efficace, il y a beaucoup de cas pratique ce qui aide grandement l'apprentissage.
À bientôt sur le forum
- Edité par webcode 4 juin 2018 à 22:56:48
Tester le code Premium Solo et gagner un mois gratuit sans engagement, Voici le code promotionnel : WEBCODE-9F7H
Christophe Vallot
Christophe Vallot
Pas d'aide concernant le code par MP, le forum est là pour ça :)