/** * Return array with all data * * @param Ticket $ticket * @param type $type 'user' or 'group' * @param type $withblank option to fill blank zones * * @return type */ static function getDetails(Ticket $ticket, $type, $withblank = 1) { if ($type == 'group') { $palette = array(array('250', '151', '186'), array('255', '211', '112'), array('183', '210', '118'), array('117', '199', '187'), array('188', '168', '208'), array('186', '213', '118'), array('124', '169', '0'), array('168', '208', '49'), array('239', '215', '113'), array('235', '155', '0'), array('235', '249', '255'), array('193', '228', '250'), array('164', '217', '250'), array('88', '195', '240'), array('0', '156', '231'), array('198', '229', '111'), array('234', '38', '115'), array('245', '122', '160'), array('255', '208', '220')); } else { if ($type == 'user') { $palette = array(array('164', '53', '86'), array('137', '123', '78'), array('192', '114', '65'), array('143', '102', '98'), array('175', '105', '93'), array('186', '127', '61'), array('174', '104', '92'), array('213', '113', '63'), array('185', '168', '122'), array('233', '168', '112'), array('199', '133', '99'), array('80', '24', '69'), array('133', '39', '65'), array('120', '22', '61'), array('114', '59', '82'), array('245', '229', '195')); } } $ptState = new PluginTimelineticketState(); $a_ret = PluginTimelineticketDisplay::getTotaltimeEnddate($ticket); $totaltime = $a_ret['totaltime']; if ($type == 'group') { $ptItem = new PluginTimelineticketAssignGroup(); } else { if ($type == 'user') { $ptItem = new PluginTimelineticketAssignUser(); } } $a_states = array(); $a_item_palette = array(); $a_dbstates = $ptState->find("`tickets_id`='" . $ticket->getField('id') . "'", "date"); $end_previous = 0; foreach ($a_dbstates as $a_dbstate) { $end_previous += $a_dbstate['delay']; if ($a_dbstate['old_status'] == '') { $a_dbstate['old_status'] = 0; } if (isset($a_states[$end_previous])) { $end_previous++; } $a_states[$end_previous] = $a_dbstate['old_status']; } if (isset($a_dbstate['new_status']) && $a_dbstate['new_status'] != Ticket::CLOSED) { $a_states[$totaltime] = $a_dbstate['new_status']; } $a_itemsections = array(); $a_dbitems = $ptItem->find("`tickets_id`='" . $ticket->getField('id') . "'", "`date`"); foreach ($a_dbitems as $a_dbitem) { if ($type == 'group') { $items_id = 'groups_id'; } else { if ($type == 'user') { $items_id = 'users_id'; } } if (!isset($a_itemsections[$a_dbitem[$items_id]])) { $a_itemsections[$a_dbitem[$items_id]] = array(); $last_statedelay = 0; } else { foreach ($a_itemsections[$a_dbitem[$items_id]] as $data) { $last_statedelay = $data['End']; } } if (!isset($a_item_palette[$a_dbitem[$items_id]])) { $a_item_palette[$a_dbitem[$items_id]] = array_shift($palette); } $color_R = $a_item_palette[$a_dbitem[$items_id]][0]; $color_G = $a_item_palette[$a_dbitem[$items_id]][1]; $color_B = $a_item_palette[$a_dbitem[$items_id]][2]; $gbegin = $a_dbitem['begin']; if ($a_dbitem['delay'] == '') { $gdelay = $totaltime; } else { $gdelay = $a_dbitem['begin'] + $a_dbitem['delay']; } $mem = 0; $old_delay = 0; foreach ($a_states as $delay => $statusname) { if ($mem == 1) { if ($gdelay > $delay) { // all time of the state $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $gbegin, 'End' => $delay, "Caption" => "", "Status" => $statusname, "R" => $color_R, "G" => $color_G, "B" => $color_B); $gbegin = $delay; } else { if ($gdelay == $delay) { // end of status = end of group $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $gbegin, 'End' => $delay, "Caption" => "", "Status" => $statusname, "R" => $color_R, "G" => $color_G, "B" => $color_B); $mem = 2; } else { // end of status is after end of group $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $gbegin, 'End' => $gdelay, "Caption" => "", "Status" => $statusname, "R" => $color_R, "G" => $color_G, "B" => $color_B); $mem = 2; } } } else { if ($mem == 0 && $gbegin < $delay) { if ($withblank && $gbegin != $last_statedelay) { $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $last_statedelay, 'End' => $gbegin, "Caption" => "", "Status" => "", "R" => 235, "G" => 235, "B" => 235); } if ($gdelay > $delay) { // all time of the state $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $gbegin, 'End' => $delay, "Caption" => "", "Status" => $statusname, "R" => $color_R, "G" => $color_G, "B" => $color_B); $gbegin = $delay; $mem = 1; } else { if ($gdelay == $delay) { // end of status = end of group $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $gbegin, 'End' => $delay, "Caption" => "", "Status" => $statusname, "R" => $color_R, "G" => $color_G, "B" => $color_B); $mem = 2; } else { // end of status is after end of group $a_itemsections[$a_dbitem[$items_id]][] = array('Start' => $gbegin, 'End' => $gdelay, "Caption" => "", "Status" => $statusname, "R" => $color_R, "G" => $color_G, "B" => $color_B); $mem = 2; } } } } $old_delay = $delay; } } if ($withblank) { end($a_states); $verylastdelayStateDB = key($a_states); foreach ($a_itemsections as $items_id => $data_f) { $last = 0; $R = 235; $G = 235; $B = 235; $statusname = ''; $a_end = end($data_f); $last = $a_end['End']; if ($ticket->fields['status'] != Ticket::CLOSED && $last == $verylastdelayStateDB) { $R = $a_end['R']; $G = $a_end['G']; $B = $a_end['B']; $statusname = $a_end['Status']; } if ($last < $totaltime) { $a_itemsections[$items_id][] = array('Start' => $last, 'End' => $totaltime, "Caption" => "", "Status" => $statusname, "R" => $R, "G" => $G, "B" => $B); } } } return $a_itemsections; }
static function getTotaltimeEnddate(CommonGLPI $ticket) { $totaltime = 0; $ptState = new PluginTimelineticketState(); $a_states = $ptState->find("`tickets_id`='" . $ticket->getField('id') . "'", "date"); $last_date = ''; foreach ($a_states as $a_state) { $totaltime += $a_state['delay']; $last_date = $a_state['date']; } if ($ticket->fields['status'] != Ticket::CLOSED && isset($a_state['date'])) { $totaltime += PluginTimelineticketDisplay::getPeriodTime($ticket, $a_state['date'], date("Y-m-d H:i:s")); } $end_date = $totaltime; return array('totaltime' => $totaltime, 'end_date' => $end_date); }
You should have received a copy of the GNU Affero General Public License along with TimelineTicket plugin. If not, see <http://www.gnu.org/licenses/>. ------------------------------------------------------------------------ @package TimelineTicket plugin @copyright Copyright (c) 2013-2016 TimelineTicket team @license AGPL License 3.0 or (at your option) any later version http://www.gnu.org/licenses/agpl-3.0-standalone.html @link https://github.com/pluginsGLPI/timelineticket @since 2013 ------------------------------------------------------------------------ */ include '../../../inc/includes.php'; Html::header(PluginTimelineticketDisplay::getTypeName(2), $_SERVER["PHP_SELF"], "plugins", "timelineticket"); if (Session::haveRight("config", READ) || Session::haveRight("plugin_timelineticket_ticket", UPDATE)) { $ptConfig = new PluginTimelineticketConfig(); $grplevel = new PluginTimelineticketGroupLevel(); if (isset($_POST["reconstructStates"])) { ini_set("max_execution_time", "0"); ini_set("memory_limit", "-1"); $ptState = new PluginTimelineticketState(); $ptState->reconstructTimeline(); Html::back(); } else { if (isset($_POST["reconstructGroups"])) { ini_set("max_execution_time", "0"); ini_set("memory_limit", "-1"); $ptGroup = new PluginTimelineticketAssignGroup(); $ptGroup->reconstrucTimeline();
private function displayGroups($closed = true) { global $DB, $CFG_GLPI; $DB->connect(); $CFG_GLPI['root_doc'] = "http://127.0.0.1/fusion0.83/"; Session::loadLanguage("en_GB"); $ticket = new Ticket(); $ptAssignGroup = new PluginTimelineticketAssignGroup(); $a_storedate_temp = self::$storedate; $ticket->getFromDB(1); // $a_data = PluginTimelineticketDisplay::getTotaltimeEnddate($ticket); // ob_start(); // $a_data = $ptAssignGroup->showTimeline($ticket, $a_data); // ob_end_clean(); $a_data = PluginTimelineticketToolbox::getDetails($ticket, 'group', 0); foreach ($a_data as $num => $data) { foreach ($data as $num2 => $data2) { unset($data2['Caption']); unset($data2['R']); unset($data2['G']); unset($data2['B']); $a_data[$num][$num2] = $data2; } } $ticket_date = $ticket->fields['date']; $a_ref = array(); $a_ref[1] = array(array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[3]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[5]), 'Status' => Ticket::ASSIGNED), array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[5]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[7]), 'Status' => Ticket::WAITING), array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[13]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[16]), 'Status' => Ticket::WAITING), array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[16]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[18]), 'Status' => Ticket::ASSIGNED)); if ($closed) { $a_ref[1][] = array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[18]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[20]), 'Status' => Ticket::SOLVED); } $a_ref[2] = array(array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[9]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[11]), 'Status' => Ticket::ASSIGNED), array('Start' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[11]), 'End' => PluginTimelineticketDisplay::getPeriodTime($ticket, $ticket_date, $a_storedate_temp[13]), 'Status' => Ticket::WAITING)); $this->assertEquals($a_ref, $a_data, 'Data used to display groups in graph'); }