diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..66096ff --- /dev/null +++ b/.htaccess @@ -0,0 +1,5 @@ +RewriteEngine On +RewriteBase /dolibarr/htdocs/custom/ACM/web/ + +# Redirige /setup ou /about vers index.php?page=setup ou index.php?page=about +RewriteRule ^(setup|about)$ index.php?page=$1 [L,QSA] diff --git a/admin/.htaccess b/admin/.htaccess new file mode 100644 index 0000000..5d14b45 --- /dev/null +++ b/admin/.htaccess @@ -0,0 +1 @@ +Require all granted \ No newline at end of file diff --git a/admin/setup.php b/admin/setup.php new file mode 100644 index 0000000..3c00e7c --- /dev/null +++ b/admin/setup.php @@ -0,0 +1,44 @@ + 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {$i--;$j--;} +if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) {$res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";} +if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) {$res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";} +if (!$res && file_exists("../../main.inc.php")) {$res = @include "../../main.inc.php";} +if (!$res && file_exists("../../../main.inc.php")) {$res = @include "../../../main.inc.php";} +if (!$res) {die("Include of main fails");} + +global $langs, $user; + + +// Translations +$langs->loadLangs(array("admin", "ACM@ACM")); + + +$csrfToken = function_exists('newToken') ? newToken() : $_SESSION['newtoken']; + +$data = array( + 'controleur' => 'admin', + 'action' => 'afficherSetup', + 'page' => 'etup', + 'token' => "$csrfToken" +); + +// URL where you want to POST data +$redirect_url = '../index.php'; +echo '
'; +echo ''; +echo ''; +echo ''; + +$db->close(); +?> \ No newline at end of file diff --git a/classe/.htaccess b/classe/.htaccess new file mode 100644 index 0000000..a7a56f7 --- /dev/null +++ b/classe/.htaccess @@ -0,0 +1 @@ +Require all denied \ No newline at end of file diff --git a/classe/Classe/.htaccess b/classe/Classe/.htaccess new file mode 100644 index 0000000..a7a56f7 --- /dev/null +++ b/classe/Classe/.htaccess @@ -0,0 +1 @@ +Require all denied \ No newline at end of file diff --git a/classe/Classe/GestionDate/GestionPeriode.php b/classe/Classe/GestionDate/GestionPeriode.php new file mode 100644 index 0000000..a97384c --- /dev/null +++ b/classe/Classe/GestionDate/GestionPeriode.php @@ -0,0 +1,29 @@ +jourDebut = $jourDebut; + $this->jourFin = $jourFin; + } + public function getNbDemiJournnees(){ + $this->jourFin ->modify('+1 day'); + $interval = (($this->jourDebut->diff($this->jourFin))->days)*2; + if ( $this->jourDebut->format("Y-m-d" )==$this->jourFin->format("Y-m-d") + && $this->jourDebut->format("a" )==$this->jourFin->format("a")) { + $interval = $interval - 1; + } else { + if ( $this->jourDebut->format("a") == "pm") {$interval = $interval-1;} + if ( $this->jourFin->format("a") == "am") {$interval = $interval-1;} + }return $interval; + } + + public function jourDansPeriode(DateTime $date) : bool { + return $this->jourDebut->format("Ymd")<=$date->format("Ymd") + && $this->jourFin->format("Ymd")>=$date->format("Ymd"); + } +} diff --git a/classe/Classe/GestionDate/GestionSemaine.php b/classe/Classe/GestionDate/GestionSemaine.php new file mode 100644 index 0000000..959fa3b --- /dev/null +++ b/classe/Classe/GestionDate/GestionSemaine.php @@ -0,0 +1,77 @@ +nom = $nomClasse; + $this->jours = []; + foreach (self::$joursSemaine as $jour) $this->jours[$jour] = [0, 0]; + } + + public function setLundi(int $matin, int $aprem = 0) {$this->jours["lundi"] = [$matin, $aprem];} + public function setMardi(int $matin, int $aprem = 0) {$this->jours["mardi"] = [$matin, $aprem];} + public function setMercredi(int $matin, int $aprem = 0) {$this->jours["mercredi"] = [$matin, $aprem];} + public function setJeudi(int $matin, int $aprem = 0) {$this->jours["jeudi"] = [$matin, $aprem];} + public function setVendredi(int $matin, int $aprem = 0) {$this->jours["vendredi"] = [$matin, $aprem];} + public function setSamedi(int $matin, int $aprem = 0) {$this->jours["samedi"] = [$matin, $aprem];} + public function setDimanche(int $matin, int $aprem = 0) {$this->jours["dimanche"] = [$matin, $aprem];} + + public function setDayByNb(int $day, int $matin, int $aprem = 0 ){ + switch ($day) { + case 1: $this->setLundi($matin, $aprem);break; + case 2: $this->setMardi($matin, $aprem);break; + case 3: $this->setMercredi($matin, $aprem);break; + case 4: $this->setJeudi($matin, $aprem);break; + case 5: $this->setVendredi($matin, $aprem);break; + case 6: $this->setSamedi($matin, $aprem);break; + case 7: $this->setDimanche($matin, $aprem);break; + } + } + + public function getNom() : string {return $this->nom;} + public function toString() : string { + $texte = ""; + $x = 0; + $td = 14; + if (!$this->estVide()){ + foreach (GestionSemaine::$joursSemaine as $jour) { + if ($td <= 0){break;} + if ($x <= 0){ + if ($this->jours[$jour][0] == 0 && $this->jours[$jour][1] == 0) { + $texte = $texte . "
".$titrePage;
+ $liste = gestionUtilisateur::getAllEmployer();
+ $date = (new GestionJour())->getLundiSemaine($date);
+ for($x = 0; $x < 7; $x++) { $semaine[] = new DateTime($date->format("Y-m-d"));$date->modify('+1 day');}
+ $date->modify("-1 week");
+ $mois = " ".$langs->trans("ACM".$semaine[0]->format("M"));
+ if ($semaine[0]->format("m") == $semaine[6]->format("m")) {$mois = "";}
+ if ($semaine[0]->format("Y") == $semaine[6]->format("Y")) { $anne0 = "";
+ if ((new DateTime())->format("Y") == $semaine[6]->format("Y")) {$anne1 = "";}
+ else $anne1 = " ".$semaine[6]->format("Y");
+ }else {$anne0 = " ".$semaine[0]->format("Y"); $anne1 = " ".$semaine[6]->format("Y");}
+ $titreSemaine = $langs->trans("ACMSemaineDu")." ".$semaine[0]->format("d")." ".$mois.$anne0." ".$langs->trans("ACMAu")." ".$semaine[6]->format("d"). " ".$langs->trans("ACM".$semaine[6]->format("M")).$anne1;
+ $listeDateSemaine = [];
+ foreach ($liste as $user) {
+ $gestionUser = new gestionUtilisateurSemaine($user, $date);
+ $listeDateSemaine[$user["login"]]["Malade"] = $gestionUser->getMaladeSemaine();
+ $listeDateSemaine[$user["login"]]["Congé"] = $gestionUser->getCongeSemaine();
+ $listeDateSemaine[$user["login"]]["Recupe"] = $gestionUser->getRecupeSemaine();
+ }
+ self::afficherVue(["cheminCorpsVue"=>$chemin, "message" => $message, "titrePage"=>$titrePage, "titre"=>$titre,
+ "liste"=>$liste, "langs"=>$langs, "semaine"=>$semaine, "titreSemaine"=>$titreSemaine, "date"=>$date,
+ "listeDateSemaine"=>$listeDateSemaine]);
+ }
+}
\ No newline at end of file
diff --git a/classe/Controleur/ControleurAdmin.php b/classe/Controleur/ControleurAdmin.php
new file mode 100644
index 0000000..c1fbee2
--- /dev/null
+++ b/classe/Controleur/ControleurAdmin.php
@@ -0,0 +1,85 @@
+$chemin, "lien" => $lien];
+ foreach ($variables as $key => $value) $parameters[$key] = $value;
+ self::afficherVue($parameters);
+
+ }
+ public static function afficherSetup($message = "") {
+ global $langs;
+ $lien = "dateGestion".".php";
+ $couleurs = gestionVariableCouleur::getACMCouleurs();
+ $liste = gestionVariableDate::getACMFeries();
+ self::afficherBase("$lien", ["liste" => $liste, "message" => $message, "listeCouleur"=>$couleurs]);
+ }
+
+ public static function putActif() {
+ global $langs;
+ $nom = $_POST["nom"];
+ $res = gestionVariableDate::putACMDateActif($nom);
+ if (!$res) $message = $langs->trans("ACMEchecConnexion");
+ self::afficherSetup($message);
+ }
+ public static function putInactif() {
+ global $langs;
+ $nom = $_POST['nom'];
+ $res = gestionVariableDate::putACMDateInactif($nom);
+ if (!$res) $message = $langs->trans("ACMEchecConnexion");
+ self::afficherSetup($message);
+ }
+ public static function supprimer($message = "") {
+ global $langs;
+ $nom = $_POST["nom"];
+ $titre = $langs->trans("ACMClasseTitreFonction");
+ $chemin = self::$lien . "suppression" . ".php";
+ $titrePage = $langs->trans("ACMAdminSupprimer");
+ self::afficherBase("suppression.php", ["message" => $message, "nom"=>$nom]);
+ }
+ public static function suppression() {
+ global $langs;
+ $nom = $_POST["nom"];
+ $oui = $_POST["ouiNon"];
+ if ($oui == "true") {
+ $res = gestionVariableDate::deleteACMFeries($nom);
+ if (!$res) $message = $langs->trans("ACMEchecSuppression");
+ else $message = $langs->trans("ACMSuppressionReussite");
+ self::afficherSetup($message);
+ }
+ else self::afficherSetup("ACMSuppressionAnnuler");
+
+ }
+
+ public static function changerCouleur($message = "") {
+ global $langs;
+
+ $ACMTitreTableau = $_POST["ACMTitreTableau"]; gestionVariableCouleur::updateACMCouleur("ACMTitreTableau", $ACMTitreTableau);
+ $ACMCorpsTableau = $_POST["ACMCorpsTableau"];gestionVariableCouleur::updateACMCouleur("ACMCorpsTableau", $ACMCorpsTableau);
+ $ACMBordure = $_POST["ACMBordure"]; gestionVariableCouleur::updateACMCouleur("ACMBordure", $ACMBordure);
+ $ACMConge = $_POST["ACMConge"]; gestionVariableCouleur::updateACMCouleur("ACMConge", $ACMConge);
+ $ACMMalade = $_POST["ACMMalade"]; gestionVariableCouleur::updateACMCouleur("ACMMalade", $ACMMalade);
+ $ACMTravail = $_POST["ACMTravail"]; gestionVariableCouleur::updateACMCouleur("ACMTravail", $ACMTravail);
+ $ACMTeletravail = $_POST["ACMTeletravail"]; gestionVariableCouleur::updateACMCouleur("ACMTeletravail", $ACMTeletravail);
+ $ACMFontTitreTableau = $_POST["ACMFontTitreTableau"]; gestionVariableCouleur::updateACMCouleur("ACMFontTitreTableau", $ACMFontTitreTableau);
+ $ACMFontCorpsTableau = $_POST["ACMFontCorpsTableau"]; gestionVariableCouleur::updateACMCouleur("ACMFontCorpsTableau", $ACMFontCorpsTableau);
+ $ACMRecupe = $_POST["ACMRecupe"]; gestionVariableCouleur::updateACMCouleur("ACMRecupe", $ACMRecupe);
+
+ self::afficherSetup("$ACMTitreTableau");
+ }
+ /*public static function modele($message = "") {
+ global $langs;
+ $titre = $langs->trans("ACMClasseTitreFonction");
+ $chemin = self::$lien."chemin"."php";
+ $titrePage = $langs->trans("ACMAdminTitrePage");
+ self::afficherVue(["titre"=>$titre, "cheminCorpsVue"=>$chemin, "message" => $message, "titrePage"=>$titrePage,
+ ]);
+ }
+ }*/
+}
\ No newline at end of file
diff --git a/classe/Controleur/ControleurGenerique.php b/classe/Controleur/ControleurGenerique.php
new file mode 100644
index 0000000..fb98bff
--- /dev/null
+++ b/classe/Controleur/ControleurGenerique.php
@@ -0,0 +1,16 @@
+ "erreur.php", "messageErreur" => $messageErreur]);
+ }
+}
\ No newline at end of file
diff --git a/classe/GestionBD/.htaccess b/classe/GestionBD/.htaccess
new file mode 100644
index 0000000..a7a56f7
--- /dev/null
+++ b/classe/GestionBD/.htaccess
@@ -0,0 +1 @@
+Require all denied
\ No newline at end of file
diff --git a/classe/GestionBD/gestionCouleur.php b/classe/GestionBD/gestionCouleur.php
new file mode 100644
index 0000000..2a41897
--- /dev/null
+++ b/classe/GestionBD/gestionCouleur.php
@@ -0,0 +1,45 @@
+query($query);
+ }
+}
\ No newline at end of file
diff --git a/classe/GestionBD/gestionDate.php b/classe/GestionBD/gestionDate.php
new file mode 100644
index 0000000..daf2457
--- /dev/null
+++ b/classe/GestionBD/gestionDate.php
@@ -0,0 +1,46 @@
+query($query);
+ }
+}
\ No newline at end of file
diff --git a/classe/GestionBD/gestionUtilisateur.php b/classe/GestionBD/gestionUtilisateur.php
new file mode 100644
index 0000000..3559705
--- /dev/null
+++ b/classe/GestionBD/gestionUtilisateur.php
@@ -0,0 +1,108 @@
+query("SET NAMES 'utf8mb4'");
+ $list = [];
+ $sql = " SELECT rowid, entity, ref_employee, ref_ext, admin, employee, fk_establishment, login, gender, civility
+ , lastname, firstname, job, fk_member, fk_user, fk_user_holiday_validator, idpers1, idpers2,
+ idpers3, datelastlogin, dateendvalidity, statut, photo, color, barcode, fk_barcode_type,
+ nb_holiday, thm, tjm, salary, salaryextra, dateemployment, dateemploymentend, weeklyhours,
+ national_registration_number
+ FROM llx_user
+ WHERE employee = 1
+ ORDER BY fk_establishment, lastname, login";
+ $resql=$db->query($sql);
+ if ($resql) {
+ // Parcours des résultats avec fetch_array
+ while ($row = $db->fetch_array($resql)) {
+ // Accès aux colonnes via leur index ou alias
+ $list[] = ["id"=>$row['rowid'], "login"=>$row['login']];
+ }
+ } else { return false; }
+ return $list;
+ }
+
+
+
+ /**
+ * @param $nom string nom de l'utilisateur
+ * @return array|false return l'id de l'utilisateur
+ */
+ public static function getIdParNom($nom) {
+ global $db;
+ $db->query("SET NAMES 'utf8mb4'");
+ $nom = $db->escape($nom);
+ $sql = "SELECT rowid FROM llx_user WHERE login = '$nom'";
+ $resql=$db->query($sql);
+ if ($resql) {
+ $row = $db->fetch_array($resql);
+ $row = $row['rowid'];
+ return $row;
+ } else { return false; }
+ }
+
+ /**
+ * @param $nom string nom de l'utilisateur
+ * @param $code string type de congee de dolibarr
+ * @return array|false return la liste des dates congées des utilisateurs ou faux en cas d'erreur sql
+ */
+ public static function getListeCongeeParNomEtCode(string $nom, string $code) {
+ $id = self::getIdParNom($nom);
+ global $db;
+ $db->query("SET NAMES 'utf8mb4'");
+ $list = [];
+ $matin = "08:00"; $soir = "15:00";
+ $id = $db->escape($id); // pour protéger contre l'injection sql
+ $code = $db->escape($code);
+ $sql = "SELECT h.date_debut, h.date_fin, t.code, h.halfday FROM llx_holiday h JOIN llx_c_holiday_types t on h.fk_type = t.rowid WHERE h.fk_user = '$id' and h.date_approval IS NOT NULL and code = '$code'";
+ $resql=$db->query($sql);
+ if ($resql) {
+ while ($row = $db->fetch_array($resql)) {
+ $debut = $matin;
+ $fin = $soir;
+ if ($row['halfday'] == "2") {$debut = $soir;$fin = $matin;}
+ if ($row['halfday'] == "-1") {$debut = $soir;}
+ if ($row['halfday'] == "1") {$fin = $matin;}
+ $list[] = ["date_debut" => $row['date_debut']." ".$debut, "date_fin" => $row['date_fin']." ".$fin, "type" => $row['code']];
+ }
+ } else { return false; }
+ return $list;
+ }
+
+ /**
+ * @param $nom string nom de l'utilisateur
+ * @param $code1 string type de congé à recuperer
+ * @param $code2 string type de congé à recuperer
+ * @return array|false renvoie la liste des congés correspondent à au moins un des deux codes ou faux en cas d'erreur sql
+ */
+ public static function getListeCongeeParNomEtDeuxCode(string $nom, string $code1, string $code2) {
+ $id = self::getIdParNom($nom);
+ global $db;
+ $db->query("SET NAMES 'utf8mb4'");
+ $list = [];
+ $matin = "08:00"; $soir = "15:00";
+ $id = $db->escape($id); // pour protéger contre l'injection sql
+ $code1 = $db->escape($code1);
+ $code2 = $db->escape($code2);
+ $sql = "SELECT h.date_debut, h.date_fin, t.code, h.halfday FROM llx_holiday h JOIN llx_c_holiday_types t on h.fk_type = t.rowid WHERE h.fk_user = '$id' and h.date_approval IS NOT NULL and (code = '$code1' OR code = '$code2')";
+ $resql=$db->query($sql);
+ if ($resql) {
+ while ($row = $db->fetch_array($resql)) {
+ $debut = $matin;
+ $fin = $soir;
+ if ($row['halfday'] == "2") {$debut = $soir;$fin = $matin;}
+ if ($row['halfday'] == "-1") {$debut = $soir;}
+ if ($row['halfday'] == "1") {$fin = $matin;}
+ $list[] = ["date_debut" => $row['date_debut']." ".$debut, "date_fin" => $row['date_fin']." ".$fin, "type" => $row['code']];
+ }
+ } else { return false; }
+ return $list;
+ }
+
+}
\ No newline at end of file
diff --git a/classe/GestionBD/gestionVariableCouleur.php b/classe/GestionBD/gestionVariableCouleur.php
new file mode 100644
index 0000000..575902d
--- /dev/null
+++ b/classe/GestionBD/gestionVariableCouleur.php
@@ -0,0 +1,35 @@
+query("SET NAMES 'utf8mb4'");
+ $list = [];
+ $sql = "SELECT nom, codeHexa FROM llx_acm_couleur";
+ $resql=$db->query($sql);
+ if ($resql)
+ while ($row = $db->fetch_array($resql))
+ $list[$row['nom']] = $row['codeHexa'];
+ return $list;
+ }
+
+ /**
+ * @param $nom string nom de la variable
+ * @param $codeHexa string code de la couleur en hexa
+ * @return bool renvoie si la modification, c'est bien effectué
+ */
+ public static function updateACMCouleur(string $nom, string $codeHexa) {
+ global $db;
+ $db->query("SET NAMES 'utf8mb4'");
+ $nom = $db->escape($nom);
+ $codeHexa = $db->escape($codeHexa);
+ $sql = "UPDATE llx_acm_couleur SET codeHexa='$codeHexa' WHERE nom='$nom'";
+ $resql=$db->query($sql);
+ if ($resql) return true;
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/classe/GestionBD/gestionVariableDate.php b/classe/GestionBD/gestionVariableDate.php
new file mode 100644
index 0000000..bda75a5
--- /dev/null
+++ b/classe/GestionBD/gestionVariableDate.php
@@ -0,0 +1,75 @@
+query("SET NAMES 'utf8mb4'");
+ $list = [];
+ $sql = "SELECT nom, regle, jour, mois, actif FROM llx_acm_feries ORDER BY regle ASC, mois ASC, jour ASC";
+ $resql=$db->query($sql);
+ if ($resql)
+ while ($row = $db->fetch_array($resql))
+ $list[] = ["nom"=>$row['nom'],"regle"=>$row['regle'],"jour"=>$row['jour'],"mois"=>$row['mois'],"actif"=>$row['actif']];
+ return $list;
+ }
+
+ /**
+ * @param $nom string label de la date
+ * @return bool renvoie si la modification a été effectuer
+ */
+ public static function putACMDateActif(string $nom) : bool {
+ global $db; $db->query("SET NAMES 'utf8mb4'");
+ $nom = $db->escape($nom);
+ $sql = "UPDATE llx_acm_feries SET actif='actif' WHERE nom = '$nom';";
+ $resql=$db->query($sql);
+ if ($resql) return true;
+ else return false;
+ }
+ /**
+ * @param $nom string label de la date
+ * @return bool renvoie si la modification a été effectuer
+ */
+ public static function putACMDateInactif($nom) : bool{
+ global $db; $db->query("SET NAMES 'utf8mb4'");
+ $nom = $db->escape($nom);
+ $sql = "UPDATE llx_acm_feries SET actif='inactif' WHERE nom = '$nom';";
+ $resql=$db->query($sql);
+ if ($resql) return true;
+ else return false;
+ }
+
+ /**
+ * @param $nom string label de la date
+ * @param $regle string type de regle
+ * @param $jour string|int jour
+ * @param $mois string|int mois
+ * @param $actif string si est actif ou inactif
+ * @return bool renvoie la valeur d'insertion
+ */
+ public static function addACMFeries(string $nom, string $regle, $jour, $mois, string $actif) : bool {
+ global $db; $db->query("SET NAMES 'utf8mb4'");
+ $nom = $db->escape($nom); $regle = $db->escape($regle);
+ $jour = $db->escape($jour); $mois = $db->escape($mois);
+ $actif = $db->escape($actif);
+ $sql = "INSERT INTO llx_acm_feries(nom, regle, jour, mois, actif) VALUES ('$nom','$regle','$jour','$mois','$actif')";
+ $resql=$db->query($sql);
+ if ($resql) return true;
+ else return false;
+ }
+
+ /**
+ * @param $nom string label de la date
+ * @return bool renvoie la valeur de suppression
+ */
+ public static function deleteACMFeries($nom) : bool {
+ global $db; $db->query("SET NAMES 'utf8mb4'");
+ $nom = $db->escape($nom);
+ $sql = "DELETE FROM llx_acm_feries WHERE nom = '$nom'";
+ $resql=$db->query($sql);
+ if ($resql) return true;
+ else return false;
+ }
+}
\ No newline at end of file
diff --git a/core/.htaccess b/core/.htaccess
new file mode 100644
index 0000000..a7a56f7
--- /dev/null
+++ b/core/.htaccess
@@ -0,0 +1 @@
+Require all denied
\ No newline at end of file
diff --git a/core/modules/modACM.class.php b/core/modules/modACM.class.php
new file mode 100644
index 0000000..f3fbfe7
--- /dev/null
+++ b/core/modules/modACM.class.php
@@ -0,0 +1,128 @@
+register();
+$chargeurDeClasse->addNamespace('Module\\ACM',__DIR__ ."/../../" );
+
+use Module\ACM\Classe\GestionBD\gestionVariableCongee;
+use Module\ACM\Classe\GestionBD\gestionDate;
+use Module\ACM\Classe\GestionBD\gestionCouleur;
+
+require_once DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php";
+
+class modACM extends DolibarrModules{
+ /**
+ * @param $db TraceableDB est la variable qui contient la bd de dolibarr
+ */
+ function __construct($db) {
+
+ /** ** ** Base de la création de module dolibarr ** ** **/
+ global $langs;
+ $this->db = $db;
+ $langs->load("ACM@ACM");
+ $this->numero = 340003;
+ $this->editor_name = "Desal"; // nom de l'éditeur
+ $this->family = "Desal-Tools"; // lieu où le module est retrouvable
+ $this->name = preg_replace('/^mod/i', '', get_class($this)); // permet de récupérer le nom du module à partir du nom du fichier
+ $this->description = $langs->trans("ACMDescription"); // description du module, permet une traduction grâce à la fonction traduction
+ $this->version = 1; // numero de version au format X.X
+ $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); // constante du nom du module
+ $this->special = 3; // ?
+ $this->picto = 'ACM.png@'.$this->name; // image nommée object_ACM.png dans le dossier img de ACM
+ $this->module_parts = array ( // permet la gestion et l'execution des triggers et du js
+ 'hooks'=>array('holidaycard', 'holidaylist', 'formObjectOptions'),
+ 'js'=>array()
+ );
+
+ /** Création de répertoire dans la partie documentation **/
+ $this->dirs = array(); // Exemple de composent : "/templateDolibarr/temp"
+ $r = 0;
+ /** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
+
+ /** Gestion des dépendances et des modules obligatoires **/
+ $this->hidden = false;
+ $this->depends = array("modHRM"); // module obligatoire pour utilisation
+ $this->conflictwith = array(); // liste des modules conflictuelle
+ $this->phpmin = array(7,0); // version minimum de php demander
+ $this->need_dolibarr_version = array(19,0,2); // version minimum de dolibarr demander
+ $this->langfiles = array($this->name.'@'.$this->name); // position du fichier de langue
+ /** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
+ $csrfToken = function_exists('newToken') ? newToken() : $_SESSION['newtoken'];
+ $this->config_page_url = '../custom/ACM/admin/setup.php';
+
+ $this->tabs = array('objecttype:+ACMAbsences:Absences:ACM@ACM:/ACM/absences.php?id=__ID__');
+
+ $this->boxes = array(); // permet un affichage sur la page d'accueil
+ $r = 0;
+
+ /** ** ** Gestion des permissions ** ** **/
+ $this->rights = array();
+ $this->rights_class = $this->name;
+ $r=0;
+
+ // Exemple de permission //
+ $r++;
+ $this->rights[$r][0] = 3400031;
+ $this->rights[$r][1] = 'User can use the module';
+ $this->rights[$r][2] = 'r';
+ $this->rights[$r][3] = 0;
+ $this->rights[$r][4] = 'moduleutilisable';
+ /** ** ** ** ** ** ** ** ** ** ** ** ** **/
+ $r = 0;
+
+
+ $this->menu = array();
+ $r = 0;
+ $r = $r+1;
+ // Add here entries to declare new menus
+ /* BEGIN MODULEBUILDER TOPMENU */
+ $this->menu[$r] = array(
+ 'fk_menu' => 'fk_mainmenu=hrm', // Pas de parent, menu principal
+ 'type' => 'left', // Menu principal en haut
+ 'prefix' => img_picto('pictoAbsence', 'absence@ACM', 'class="pictofixedwidth paddingright em088"'),
+ 'titre' => " ".$langs->trans("ACMAbsenceTitre"), // Nom affiché
+ 'mainmenu' => 'hrm', // Menu principal pour ton module
+ 'leftmenu' => 'acmAbsences', // Identifiant unique pour le sous-menu
+ 'url' => '/acm/index.php', // Lien vers ta page
+ 'langs' => 'acm@acm', // Fichier de langue
+ 'position' => 1000+$r, // Position dans le menu
+ 'enabled' => '$conf->acm->enabled', // Affiche seulement si ACM est activé
+ );
+
+ $r = $r+1;
+ global $dolibarr_main_url_root;
+ $css_file = $dolibarr_main_url_root . '/custom/ACM/css/style.css';
+ $this->resprints = "";
+ }
+
+ /**
+ * @override dolibarr
+ * @param $options
+ * @return int
+ */
+ function init($options=''){
+ global $conf, $langs;
+ $result = $this->_load_tables('/ACM/sql/');
+ if ($result < 0) {
+ return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default')
+ }
+ $this->remove($options);
+ $sql = array();
+ gestionCouleur::getListeCouleur();
+ gestionDate::importerDateFerier();
+ return $this->_init($sql, $options);
+ }
+
+ /**
+ * @param $options
+ * @return mixed
+ */
+ function remove($options=''){
+ $sql = array();
+ return $this->_remove($sql, $options);
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/css/StyleTableau.css.php b/css/StyleTableau.css.php
new file mode 100644
index 0000000..7e65aaa
--- /dev/null
+++ b/css/StyleTableau.css.php
@@ -0,0 +1,37 @@
+
+
\ No newline at end of file
diff --git a/img/.htaccess b/img/.htaccess
new file mode 100644
index 0000000..5d14b45
--- /dev/null
+++ b/img/.htaccess
@@ -0,0 +1 @@
+Require all granted
\ No newline at end of file
diff --git a/img/absence.png b/img/absence.png
new file mode 100644
index 0000000..282f736
Binary files /dev/null and b/img/absence.png differ
diff --git a/img/object_ACM.png b/img/object_ACM.png
new file mode 100644
index 0000000..4a8f4d2
Binary files /dev/null and b/img/object_ACM.png differ
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..a93b99b
--- /dev/null
+++ b/index.php
@@ -0,0 +1,42 @@
+register();
+$chargeurDeClasse->addNamespace('Module\\ACM',__DIR__);
+$res = 0;
+global $db, $hookmanager, $conf;
+// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
+if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";}
+// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
+$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1;
+while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {$i--;$j--;}
+if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) {$res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";}
+if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) {$res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";}
+// Try main.inc.php using relative path
+if (!$res && file_exists("../../main.inc.php")) {$res = @include "../../main.inc.php";}
+if (!$res && file_exists("../../../main.inc.php")) {$res = @include "../../../main.inc.php";}
+if (!$res) {die("Include of main fails");}
+
+if (!isset($_POST['controleur'])){
+ $controleur = 'ControleurAbsence';
+} else {
+ $controleur = $_POST['controleur'];
+}
+
+
+$nomDeClasseControleur = 'Module\ACM\Classe\Controleur\Controleur'.ucfirst($controleur);
+if (class_exists($nomDeClasseControleur)){
+ if (isset($_POST['action'])){
+ $action = $_POST['action'];
+ $methodes = get_class_methods($nomDeClasseControleur);
+ if (in_array($action, $methodes)){
+ $nomDeClasseControleur::$action();
+ }else ControleurGenerique::afficherErreur("page not found
Réussite : fichier chargé
$file"); + require $file; + return true; + } + $this->affichageDebogage("
Échec : fichier introuvable
$file"); + return false; + } +} \ No newline at end of file diff --git a/sql/llx_acm_couleur.sql b/sql/llx_acm_couleur.sql new file mode 100644 index 0000000..000fc58 --- /dev/null +++ b/sql/llx_acm_couleur.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS llx_acm_couleur ( + rid integer NOT NULL auto_increment PRIMARY KEY, + nom varchar(32) UNIQUE NOT NULL, + codeHexa varchar(7) NOT NULL +); diff --git a/sql/llx_acm_feries.sql b/sql/llx_acm_feries.sql new file mode 100644 index 0000000..9c99ce0 --- /dev/null +++ b/sql/llx_acm_feries.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS llx_acm_feries ( + rid integer NOT NULL auto_increment PRIMARY KEY, + nom varchar(32) NOT NULL UNIQUE, + regle varchar(32) NOT NULL DEFAULT 'fixe', + jour int NULL, + mois int NULL, + actif varchar(7) NOT NULL DEFAULT 'actif' +); diff --git a/view/.htaccess b/view/.htaccess new file mode 100644 index 0000000..a7a56f7 --- /dev/null +++ b/view/.htaccess @@ -0,0 +1 @@ +Require all denied \ No newline at end of file diff --git a/view/admin/dateGestion.php b/view/admin/dateGestion.php new file mode 100644 index 0000000..dcd6319 --- /dev/null +++ b/view/admin/dateGestion.php @@ -0,0 +1,135 @@ +loadLangs(array("admin", "ACM@ACM")); +/** @var $liste */ +/** @var $listeCouleur */ +?> + + + +
| + nom + | ++ régle + | ++ jour + | ++ mois + | ++ état + | ++ + | +
|---|---|---|---|---|---|
| + = $langs->trans($item['nom']) ?> + | ++ = $item['regle'] ?> + | ++ = $item['jour'] ?> + | ++ = $item['mois'] ?> + | ++ + + + + + + + + + | ++ + + + | +
| + aucune valeur dans la base de donnée + | +|||||
| + =$langs->trans("ACMLogin")?> + | + ++ = $jour->format("d/m/Y") ?> + | + +|
|---|---|---|
| + =$langs->trans("ACMAm")?> + | ++ =$langs->trans("ACMPm")?> + | + +|
| =$user["login"]?> | ++ "; + }?> + + + | |
| ■ =$langs->trans("ACMConge")?> | +■ =$langs->trans("ACMMalade")?> | +■ =$langs->trans("ACMRecupe")?> | +
|---|
$message
"; + else if ($popup != "") print ''; + if (isset($cheminCorpsVue))require __DIR__ . "/{$cheminCorpsVue}"; + +print ""; +// End of page +llxFooter(); +?> +