static function mailUserDelayedResa($task) { global $DB, $CFG_GLPI; $res = 0; $config = new PluginReservationConfig(); $week = $config->getConfigurationWeek(); setlocale(LC_TIME, 'fr_FR.utf8', 'fra'); $jour = strftime("%A"); if (isset($week[$jour])) { $query = "SELECT * FROM `glpi_plugin_reservation_manageresa` WHERE `date_return` is NULL"; if ($result = $DB->query($query)) { while ($row = $DB->fetch_assoc($result)) { $task->log("envoie d'un mail pour la reservation du materiel depassée numero " . $row['resaid']); $reservation = new Reservation(); $reservation->getFromDB($row['resaid']); NotificationEvent::raiseEvent('plugin_reservation_expiration', $reservation); $res++; } } return $res; } else { $task->log("jour sauté"); } }
/** * Fonction permettant d'afficher les reservations actuelles * **/ function showCurrentResa() { global $DB, $CFG_GLPI, $datesresa; $showentity = Session::isMultiEntitiesMode(); $config = new PluginReservationConfig(); $methode = $config->getConfigurationMethode(); $begin = $datesresa["begin"]; $end = $datesresa["end"]; $left = ""; $where = ""; //tableau contenant un tableau des reservations par utilisateur // exemple : (salleman => ( 0=> (resaid => 1, debut => '12/12/2054', fin => '12/12/5464', comment => 'tralala', name => 'hobbit16' $ResaByUser = array(); foreach ($CFG_GLPI["reservation_types"] as $itemtype) { if (!($item = getItemForItemtype($itemtype))) { continue; } $itemtable = getTableForItemType($itemtype); $otherserial = "'' AS otherserial"; if ($item->isField('otherserial')) { $otherserial = "`{$itemtable}`.`otherserial`"; } if (isset($begin) && isset($end)) { $left = "LEFT JOIN `glpi_reservations`\n\t ON (`glpi_reservationitems`.`id` = `glpi_reservations`.`reservationitems_id`\n\t AND '" . $begin . "' < `glpi_reservations`.`end`\n\t AND '" . $end . "' > `glpi_reservations`.`begin`)"; $where = " AND `glpi_reservations`.`id` IS NOT NULL "; } $query = "SELECT `glpi_reservationitems`.`id`,\n\t`glpi_reservationitems`.`comment`,\n\t`{$itemtable}`.`name` AS name,\n\t`{$itemtable}`.`entities_id` AS entities_id,\n\t{$otherserial},\n\t`glpi_reservations`.`id` AS resaid,\n\t`glpi_reservations`.`comment`,\n\t`glpi_reservations`.`begin`,\n\t`glpi_reservations`.`end`,\n\t`glpi_users`.`name` AS username,\n\t`glpi_reservationitems`.`items_id` AS items_id\n\t FROM `glpi_reservationitems`\n\t {$left}\n\t INNER JOIN `{$itemtable}`\n\t ON (`glpi_reservationitems`.`itemtype` = '{$itemtype}'\n\t AND `glpi_reservationitems`.`items_id` = `{$itemtable}`.`id`)\n\t LEFT JOIN `glpi_users` \n\t ON (`glpi_reservations`.`users_id` = `glpi_users`.`id`)\n\t WHERE `glpi_reservationitems`.`is_active` = '1'\n\t AND `glpi_reservationitems`.`is_deleted` = '0'\n\t AND `{$itemtable}`.`is_deleted` = '0'\n\t {$where} " . getEntitiesRestrictRequest(" AND", $itemtable, '', $_SESSION['glpiactiveentities'], $item->maybeRecursive()) . "\n\t ORDER BY username,\n\t`{$itemtable}`.`entities_id`,\n\t`{$itemtable}`.`name`"; if ($result = $DB->query($query)) { // on regroupe toutes les reservations d'un meme user dans un tableau. while ($row = $DB->fetch_assoc($result)) { if (!array_key_exists($row["username"], $ResaByUser)) { $ResaByUser[$row["username"]] = array(); } $tmp = array("resaid" => $row["resaid"], "name" => $row['name'], "debut" => $row["begin"], "fin" => $row["end"], "comment" => nl2br($row["comment"])); $ResaByUser[$row["username"]][] = $tmp; //on trie par date usort($ResaByUser[$row["username"]], 'compare_date_by_user'); } } } echo "<div class='center'>"; echo "<table class='tab_cadre'>"; echo "<thead>"; echo "<tr><th colspan='" . ($showentity ? "11" : "10") . "'>" . "Matériels empruntés" . "</th></tr>\n"; echo "<tr class='tab_bg_2'>"; /*echo "<th><a href=\"#\" onclick=\"sortTable(this,0); return false;\">Utilisateur</a></th>"; echo "<th><a href=\"#\" onclick=\"sortTable(this,1); return false;\">Materiel</a></th>"; echo "<th><a href=\"#\" onclick=\"sortTable(this,2); return false;\">Debut</a></th>"; echo "<th><a href=\"#\" onclick=\"sortTable(this,3); return false;\">Fin</a></th>"; echo "<th><a href=\"#\" onclick=\"sortTable(this,4); return false;\">Commentaires</a></th>"; echo "<th><a href=\"#\" onclick=\"sortTable(this,5); return false;\">Mouvement</a></th>";*/ echo "<th>Utilisateur</a></th>"; echo "<th>Materiel</a></th>"; echo "<th>Debut</a></th>"; echo "<th>Fin</a></th>"; echo "<th>Commentaires</a></th>"; echo "<th>Mouvement</a></th>"; echo "<th>Acquitter</th>"; echo "<th colspan='" . ($methode == "manual" ? 3 : 2) . "'>Actions</th>"; echo "</tr></thead>"; echo "<tbody>"; //on parcourt le tableau pour construire la table à afficher foreach ($ResaByUser as $User => $arrayResa) { $nbLigne = 1; $limiteLigneNumber = count($arrayResa); $flag = 0; echo "<tr class='tab_bg_2'>"; echo "<td rowspan=" . count($arrayResa) . ">" . $User . "</td>"; foreach ($arrayResa as $Num => $resa) { $colorRed = ""; $flagSurveille = 0; // on regarde si la reservation actuelle a été prolongée par le plugin $query = "SELECT `date_return`, `date_theorique`, `dernierMail` FROM `glpi_plugin_reservation_manageresa` WHERE `resaid` = " . $resa["resaid"]; if ($result = $DB->query($query)) { $dates = $DB->fetch_row($result); } if ($DB->numrows($result)) { if ($dates[1] < date("Y-m-d H:i:s", time()) && $dates[0] == NULL) { // on colore en rouge seulement si la date de retour theorique est depassée et si le materiel n'est pas marqué comme rendu (avec une date de retour effectif) $colorRed = "bgcolor=\"red\""; $flagSurveille = 1; } } // le nom du materiel echo "<td {$colorRed}>" . $resa['name'] . "</td>"; if (!$flag) { $i = $Num; while ($i < count($arrayResa) - 1) { if ($arrayResa[$i + 1]['debut'] == $resa['debut'] && $arrayResa[$Num + 1]['fin'] == $resa['fin']) { $nbLigne++; } else { break; } $i++; } $limiteLigneNumber = $Num + $nbLigne - 1; } //date de debut de la resa if (!$flag) { echo "<td rowspan=" . $nbLigne . " {$colorRed}>" . date("d-m-Y \\à H:i:s", strtotime($resa["debut"])) . "</td>"; // si c'est une reservation prolongée, on affiche la date theorique plutot que la date reelle (qui est prolongée jusqu'au retour du materiel) if ($DB->numrows($result) && $dates[0] == NULL) { echo "<td rowspan=" . $nbLigne . " {$colorRed}>" . date("d-m-Y \\à H:i:s", strtotime($dates[1])) . "</td>"; } else { echo "<td rowspan=" . $nbLigne . " {$colorRed}>" . date("d-m-Y \\à H:i:s", strtotime($resa["fin"])) . "</td>"; } //le commentaire echo "<td rowspan=" . $nbLigne . " {$colorRed}>" . $resa["comment"] . "</td>"; // les fleches de mouvements echo "<td rowspan=" . $nbLigne . " ><center>"; if (date("Y-m-d", strtotime($resa["debut"])) == date("Y-m-d", strtotime($begin))) { echo "<img title=\"\" alt=\"\" src=\"../pics/up-icon.png\"></img>"; } if (date("Y-m-d", strtotime($resa["fin"])) == date("Y-m-d", strtotime($end))) { echo "<img title=\"\" alt=\"\" src=\"../pics/down-icon.png\"></img>"; } echo "</center></td>"; } if ($nbLigne > 1) { $flag = 1; } if ($Num == $limiteLigneNumber) { $flag = 0; $nbLigne = 1; } // si la reservation est rendue, on affiche la date du retour, sinon le bouton pour acquitter le retour if ($dates[0] != NULL) { echo "<td>" . date("d-m-Y \\à H:i:s", strtotime($dates[0])) . "</td>"; } else { echo "<td><center><a title=\"Marquer comme rendu\" href=\"reservation.php?resareturn=" . $resa['resaid'] . "\"><img title=\"\" alt=\"\" src=\"../pics/greenbutton.png\"></img></a></center></td>"; } // boutons action $matDispo = getMatDispo(); echo "<td>"; echo "<ul>"; echo "<li><span class=\"bouton\" id=\"bouton_add" . $resa['resaid'] . "\" onclick=\"javascript:afficher_cacher('add" . $resa['resaid'] . "');\">Ajouter un materiel</span>\n <div id=\"add" . $resa['resaid'] . "\" style=\"display:none;\">\n <form method='POST' name='form' action='" . Toolbox::getItemTypeSearchURL(__CLASS__) . "'>"; echo '<select name="matDispoAdd">'; foreach ($matDispo as $mat) { echo "\t", '<option value="', key($mat), '">', current($mat), '</option>'; } echo "<input type='hidden' name='AjouterMatToResa' value='" . $resa['resaid'] . "'>"; echo "<input type='submit' class='submit' name='submit' value=Ajouter>"; Html::closeForm(); echo "</div></li>"; echo "<li><span class=\"bouton\" id=\"bouton_replace" . $resa['resaid'] . "\" onclick=\"javascript:afficher_cacher('replace" . $resa['resaid'] . "');\">Remplacer le materiel</span>\n <div id=\"replace" . $resa['resaid'] . "\" style=\"display:none;\">\n <form method='post' name='form' action='" . Toolbox::getItemTypeSearchURL(__CLASS__) . "'>"; echo '<select name="matDispoReplace">'; foreach ($matDispo as $mat) { echo "\t", '<option value="', key($mat), '">', current($mat), '</option>'; } echo "<input type='hidden' name='ReplaceMatToResa' value='" . $resa['resaid'] . "'>"; echo "<input type='submit' class='submit' name='submit' value=Remplacer>"; Html::closeForm(); echo "</div></li>"; echo "</ul>"; echo "</td>"; echo "<td>"; echo "<ul>"; echo "<li><a class=\"bouton\" title=\"Editer la reservation\" href='../../../front/reservation.form.php?id=" . $resa['resaid'] . "'>Editer la reservation</a></li>"; echo "</ul>"; echo "</td>"; if ($methode == "manual") { echo "<td>"; echo "<ul>"; if ($flagSurveille) { echo "<li><a class=\"bouton\" title=\"Envoyer un mail de rappel\" href=\"reservation.php?mailuser="******"\">Envoyer un mail de rappel</a></li>"; if (isset($dates[2])) { echo "<li>Dernier mail envoyé le : </li>"; echo "<li>" . date("d-m-Y \\à H:i:s", strtotime($dates[2])) . "</li>"; } } echo "</ul>"; echo "</td>"; } echo "</tr>"; echo "<tr class='tab_bg_2'>"; } echo "</tr>\n"; } echo "</tbody>"; echo "</table>\n"; echo "</div>\n"; }
<?php // Définition de la variable GLPI_ROOT obligatoire pour l'instanciation des class define('GLPI_ROOT', getAbsolutePath()); // Récupération du fichier includes de GLPI, permet l'accès au cœur include GLPI_ROOT . "inc/includes.php"; $plugin = new Plugin(); if ($plugin->isActivated("reservation")) { $PluginReservationConfig = new PluginReservationConfig(); Session::checkRight("config", array(CREATE, UPDATE, DELETE)); if (isset($_POST["week"])) { $PluginReservationConfig->setConfigurationWeek($_POST["week"]); //Html::back(); } if (isset($_POST["methode"])) { $PluginReservationConfig->setConfigurationMethode($_POST["methode"]); //Html::back(); } Html::header(PluginReservationReservation::getTypeName(2), '', "plugins", "Reservation"); $PluginReservationConfig->showForm(); Html::footer(); } else { Html::header(__('Setup'), '', "config", "plugins"); echo "<div class='center'><br><br>" . "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/warning.png\" alt='warning'><br><br>"; echo "<b>" . __('Please activate the plugin', 'Reservation') . "</b></div>"; Html::footer(); } function getAbsolutePath() { return str_replace("plugins/reservation/front/config.form.php", "", $_SERVER['SCRIPT_FILENAME']); }