/** * Show the planning * * Function name change since version 0.84 show() => showPlanning * * @param $who ID of the user (0 = undefined) * @param $who_group ID of the group of users (0 = undefined) * @param $when Date of the planning to display * @param $type type of planning to display (day, week, month) * @param $limititemtype itemtype limit display to this itemtype (default '') * * @return Nothing (display function) **/ static function showPlanning($who, $who_group, $when, $type, $limititemtype = '') { global $CFG_GLPI, $DB; if (!Session::haveRight("show_planning", "1") && !Session::haveRight("show_all_planning", "1")) { return false; } // Define some constants $date = explode("-", $when); $time = mktime(0, 0, 0, $date[1], $date[2], $date[0]); $daysinweek = Toolbox::getDaysOfWeekArray(); // Check bisextile years list($current_year, $current_month, $current_day) = explode("-", $when); if ($current_year % 4 == 0) { $feb = 29; } else { $feb = 28; } $nb_days = array(31, $feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // Begin of the month $begin_month_day = strftime("%w", mktime(0, 0, 0, $current_month, 1, $current_year)); if ($begin_month_day == 0) { $begin_month_day = 7; } $end_month_day = strftime("%w", mktime(0, 0, 0, $current_month, $nb_days[$current_month - 1], $current_year)); // Day of the week $dayofweek = date("w", $time); // Cas du dimanche if ($dayofweek == 0) { $dayofweek = 7; } // Get begin and duration $begin = 0; $end = 0; switch ($type) { case "month": $begin = strtotime($current_year . "-" . $current_month . "-01 00:00:00"); $end = $begin + DAY_TIMESTAMP * $nb_days[$current_month - 1]; break; case "week": $tbegin = $begin = $time + mktime(0, 0, 0, 0, 1, 0) - mktime(0, 0, 0, 0, $dayofweek, 0); $end = $begin + WEEK_TIMESTAMP; break; case "day": $add = ""; $begin = $time; $end = $begin + DAY_TIMESTAMP; break; } $begin = date("Y-m-d H:i:s", $begin); $end = date("Y-m-d H:i:s", $end); // Print Headers echo "<div class='center'><table class='tab_cadre_fixe'>"; // Print Headers echo "<tr class='tab_bg_1'>"; switch ($type) { case "month": for ($i = 1; $i <= 7; $i++) { echo "<th width='12%'>" . $daysinweek[$i % 7] . "</th>"; } break; case "week": for ($i = 1; $i <= 7; $i++, $tbegin += DAY_TIMESTAMP) { echo "<th width='12%'>" . $daysinweek[$i % 7] . " " . date('d', $tbegin) . "</th>"; } break; case "day": echo "<th width='12%'>" . $daysinweek[$dayofweek % 7] . "</th>"; break; } echo "</tr>\n"; $params = array('who' => $who, 'who_group' => $who_group, 'begin' => $begin, 'end' => $end); $interv = array(); if (empty($limititemtype)) { foreach ($CFG_GLPI['planning_types'] as $itemtype) { $interv = array_merge($interv, $itemtype::populatePlanning($params)); } } else { $interv = $limititemtype::populatePlanning($params); } // Display Items $tmp = explode(":", $CFG_GLPI["planning_begin"]); $hour_begin = $tmp[0]; $tmp = explode(":", $CFG_GLPI["planning_end"]); $hour_end = $tmp[0]; if ($tmp[1] > 0) { $hour_end++; } switch ($type) { case "week": for ($hour = $hour_begin; $hour <= $hour_end; $hour++) { echo "<tr>"; for ($i = 1; $i <= 7; $i++) { echo "<td class='tab_bg_3 top' width='12%'>"; echo "<span class='b'>" . self::displayUsingTwoDigits($hour) . ":00</span><br>"; // From midnight if ($hour == $hour_begin) { $begin_time = date("Y-m-d H:i:s", strtotime($when) + ($i - $dayofweek) * DAY_TIMESTAMP); } else { $begin_time = date("Y-m-d H:i:s", strtotime($when) + ($i - $dayofweek) * DAY_TIMESTAMP + $hour * HOUR_TIMESTAMP); } // To midnight if ($hour == $hour_end) { $end_time = date("Y-m-d H:i:s", strtotime($when) + ($i - $dayofweek) * DAY_TIMESTAMP + 24 * HOUR_TIMESTAMP); } else { $end_time = date("Y-m-d H:i:s", strtotime($when) + ($i - $dayofweek) * DAY_TIMESTAMP + ($hour + 1) * HOUR_TIMESTAMP); } reset($interv); while ($data = current($interv)) { $type = ""; if ($data["begin"] >= $begin_time && $data["end"] <= $end_time) { $type = "in"; } else { if ($data["begin"] < $begin_time && $data["end"] > $end_time) { $type = "through"; } else { if ($data["begin"] >= $begin_time && $data["begin"] < $end_time) { $type = "begin"; } else { if ($data["end"] > $begin_time && $data["end"] <= $end_time) { $type = "end"; } } } } if (empty($type)) { next($interv); } else { self::displayPlanningItem($data, $who, $type); if ($type == "in") { unset($interv[key($interv)]); } else { next($interv); } } } echo "</td>"; } echo "</tr>\n"; } break; case "day": for ($hour = $hour_begin; $hour <= $hour_end; $hour++) { echo "<tr>"; $begin_time = date("Y-m-d H:i:s", strtotime($when) + $hour * HOUR_TIMESTAMP); $end_time = date("Y-m-d H:i:s", strtotime($when) + ($hour + 1) * HOUR_TIMESTAMP); echo "<td class='tab_bg_3 top' width='12%'>"; echo "<span class='b'>" . self::displayUsingTwoDigits($hour) . ":00</span><br>"; reset($interv); while ($data = current($interv)) { $type = ""; if ($data["begin"] >= $begin_time && $data["end"] <= $end_time) { $type = "in"; } else { if ($data["begin"] < $begin_time && $data["end"] > $end_time) { $type = "through"; } else { if ($data["begin"] >= $begin_time && $data["begin"] < $end_time) { $type = "begin"; } else { if ($data["end"] > $begin_time && $data["end"] <= $end_time) { $type = "end"; } } } } if (empty($type)) { next($interv); } else { self::displayPlanningItem($data, $who, $type, 1); if ($type == "in") { unset($interv[key($interv)]); } else { next($interv); } } } echo "</td></tr>"; } break; case "month": echo "<tr class='tab_bg_3'>"; // Display first day out of the month for ($i = 1; $i < $begin_month_day; $i++) { echo "<td style='background-color:#ffffff'> </td>"; } // Print real days if ($current_month < 10 && strlen($current_month) == 1) { $current_month = "0" . $current_month; } $begin_time = strtotime($begin); $end_time = strtotime($end); for ($time = $begin_time; $time < $end_time; $time += DAY_TIMESTAMP) { // Add 6 hours for midnight problem $day = date("d", $time + 6 * HOUR_TIMESTAMP); echo "<td height='100' class='tab_bg_3 top'>"; echo "<table class='center'><tr><td class='center'>"; echo "<span style='font-family: arial,helvetica,sans-serif; font-size: 14px; color: black'>" . $day . "</span></td></tr>"; echo "<tr class='tab_bg_3'>"; echo "<td class='tab_bg_3 top' width='12%'>"; $begin_day = date("Y-m-d H:i:s", $time); $end_day = date("Y-m-d H:i:s", $time + DAY_TIMESTAMP); reset($interv); while ($data = current($interv)) { $type = ""; if ($data["begin"] >= $begin_day && $data["end"] <= $end_day) { $type = "in"; } else { if ($data["begin"] < $begin_day && $data["end"] > $end_day) { $type = "through"; } else { if ($data["begin"] >= $begin_day && $data["begin"] < $end_day) { $type = "begin"; } else { if ($data["end"] > $begin_day && $data["end"] <= $end_day) { $type = "end"; } } } } if (empty($type)) { next($interv); } else { self::displayPlanningItem($data, $who, $type); if ($type == "in") { unset($interv[key($interv)]); } else { next($interv); } } } echo "</td></tr></table>"; echo "</td>"; // Add break line if (($day + $begin_month_day) % 7 == 1) { echo "</tr>\n"; if ($day != $nb_days[$current_month - 1]) { echo "<tr>"; } } } if ($end_month_day != 0) { for ($i = 0; $i < 7 - $end_month_day; $i++) { echo "<td style='background-color:#ffffff'> </td>"; } } echo "</tr>"; break; } echo "</table></div>"; }
/** * Show segments of a calendar * * @param $calendar Calendar object **/ static function showForCalendar(Calendar $calendar) { global $DB, $CFG_GLPI; $ID = $calendar->getField('id'); if (!$calendar->can($ID, READ)) { return false; } $canedit = $calendar->can($ID, UPDATE); $rand = mt_rand(); $query = "SELECT *\n FROM `glpi_calendarsegments`\n WHERE `calendars_id` = '{$ID}'\n ORDER BY `day`, `begin`, `end`"; $result = $DB->query($query); $numrows = $DB->numrows($result); if ($canedit) { echo "<div class='firstbloc'>"; echo "<form name='calendarsegment_form{$rand}' id='calendarsegment_form{$rand}' method='post'\n action='"; echo Toolbox::getItemTypeFormURL(__CLASS__) . "'>"; echo "<table class='tab_cadre_fixe'>"; echo "<tr class='tab_bg_1'><th colspan='7'>" . __('Add a schedule') . "</tr>"; echo "<tr class='tab_bg_2'><td class='center'>" . __('Day') . "</td><td>"; echo "<input type='hidden' name='calendars_id' value='{$ID}'>"; Dropdown::showFromArray('day', Toolbox::getDaysOfWeekArray()); echo "</td><td class='center'>" . __('Start') . '</td><td>'; Dropdown::showHours("begin", array('value' => date('H') . ":00")); echo "</td><td class='center'>" . __('End') . '</td><td>'; Dropdown::showHours("end", array('value' => date('H') + 1 . ":00")); echo "</td><td class='center'>"; echo "<input type='submit' name='add' value=\"" . _sx('button', 'Add') . "\" class='submit'>"; echo "</td></tr>"; echo "</table>"; Html::closeForm(); echo "</div>"; } echo "<div class='spaced'>"; if ($canedit && $numrows) { Html::openMassiveActionsForm('mass' . __CLASS__ . $rand); $massiveactionparams = array('num_displayed' => $numrows, 'container' => 'mass' . __CLASS__ . $rand); Html::showMassiveActions($massiveactionparams); } echo "<table class='tab_cadre_fixehov'>"; echo "<tr>"; if ($canedit && $numrows) { echo "<th width='10'>"; Html::checkAllAsCheckbox('mass' . __CLASS__ . $rand); echo "</th>"; } echo "<th>" . __('Day') . "</th>"; echo "<th>" . __('Start') . "</th>"; echo "<th>" . __('End') . "</th>"; echo "</tr>"; $daysofweek = Toolbox::getDaysOfWeekArray(); if ($numrows) { while ($data = $DB->fetch_assoc($result)) { echo "<tr class='tab_bg_1'>"; if ($canedit) { echo "<td>"; Html::showMassiveActionCheckBox(__CLASS__, $data["id"]); echo "</td>"; } echo "<td>"; echo $daysofweek[$data['day']]; echo "</td>"; echo "<td>" . $data["begin"] . "</td>"; echo "<td>" . $data["end"] . "</td>"; } echo "</tr>"; } echo "</table>"; if ($canedit && $numrows) { $massiveactionparams['ontop'] = false; Html::showMassiveActions($massiveactionparams); Html::closeForm(); } echo "</div>"; }
/** * @todo This must be moved in Timeslot class since a Task class is linked to a Timeslot and not * directly to a TimeslotEntry. The Timeslot class must be the entry point of any other class. * -- Kevin 'kiniou' Roy */ function showTimeSlot($timeslots_id) { echo "<div id='chart'></div>"; echo "<div id='startperiod'></div>"; echo "<div id='stopperiod'></div>"; $daysofweek = Toolbox::getDaysOfWeekArray(); $daysofweek[7] = $daysofweek[0]; unset($daysofweek[0]); $dates = array($daysofweek[1] => array(), $daysofweek[2] => array(), $daysofweek[3] => array(), $daysofweek[4] => array(), $daysofweek[5] => array(), $daysofweek[6] => array(), $daysofweek[7] => array()); for ($day = 1; $day <= 7; $day++) { $dbentries = getAllDatasFromTable('glpi_plugin_fusioninventory_timeslotentries', "`plugin_fusioninventory_timeslots_id`='" . $timeslots_id . "'\n AND `day`='" . $day . "'", '', '`begin` ASC'); foreach ($dbentries as $entries) { $dates[$daysofweek[$day]][] = array('start' => $entries['begin'], 'end' => $entries['end']); } } echo '<script>timeslot(\'' . json_encode($dates) . '\')</script>'; }