/** * @see NotificationTargetCommonITILObject::getDatasForObject() **/ function getDatasForObject(CommonDBTM $item, array $options, $simple = false) { global $CFG_GLPI; // Common ITIL datas $datas = parent::getDatasForObject($item, $options, $simple); $datas['##ticket.description##'] = Html::clean($datas['##ticket.description##']); $datas['##ticket.description##'] = $item->convertContentForNotification($datas['##ticket.description##'], $item); $datas['##ticket.content##'] = $datas['##ticket.description##']; // Specific datas $datas['##ticket.urlvalidation##'] = $this->formatURL($options['additionnaloption']['usertype'], "ticket_" . $item->getField("id") . "_TicketValidation\$1"); $datas['##ticket.globalvalidation##'] = TicketValidation::getStatus($item->getField('global_validation')); $datas['##ticket.type##'] = Ticket::getTicketTypeName($item->getField('type')); $datas['##ticket.requesttype##'] = Dropdown::getDropdownName('glpi_requesttypes', $item->getField('requesttypes_id')); $autoclose_value = Entity::getUsedConfig('autoclose_delay', $this->getEntity(), '', Entity::CONFIG_NEVER); $datas['##ticket.autoclose##'] = __('Never'); $datas['##lang.ticket.autoclosewarning##'] = ""; if ($autoclose_value > 0) { $datas['##ticket.autoclose##'] = $autoclose_value; $datas['##lang.ticket.autoclosewarning##'] = sprintf(_n('Without a reply, the ticket will be automatically closed after %s day', 'Without a reply, the ticket will be automatically closed after %s days', $autoclose_value), $autoclose_value); } $datas['##ticket.sla##'] = ''; if ($item->getField('slas_id')) { $datas['##ticket.sla##'] = Dropdown::getDropdownName('glpi_slas', $item->getField('slas_id')); } $datas['##ticket.location##'] = ''; if ($item->getField('locations_id')) { $datas['##ticket.location##'] = Dropdown::getDropdownName('glpi_locations', $item->getField('locations_id')); $locations = new Location(); $locations->getFromDB($item->getField('locations_id')); if ($locations->getField('comment')) { $datas['##ticket.location.comment##'] = $locations->getField('comment'); } if ($locations->getField('room')) { $datas['##ticket.location.room##'] = $locations->getField('room'); } if ($locations->getField('building')) { $datas['##ticket.location.building##'] = $locations->getField('building'); } if ($locations->getField('latitude')) { $datas['##ticket.location.latitude##'] = $locations->getField('latitude'); } if ($locations->getField('longitude')) { $datas['##ticket.location.longitude##'] = $locations->getField('longitude'); } if ($locations->getField('altitude')) { $datas['##ticket.location.altitude##'] = $locations->getField('altitude'); } } // is ticket deleted $datas['##ticket.isdeleted##'] = Dropdown::getYesNo($item->getField('is_deleted')); //Tags associated with the object linked to the ticket $datas['##ticket.itemtype##'] = ''; $datas['##ticket.item.name##'] = ''; $datas['##ticket.item.serial##'] = ''; $datas['##ticket.item.otherserial##'] = ''; $datas['##ticket.item.location##'] = ''; $datas['##ticket.item.locationcomment##'] = ''; $datas['##ticket.item.locationroom##'] = ''; $datas['##ticket.item.locationbuilding##'] = ''; $datas['##ticket.item.locationlatitude##'] = ''; $datas['##ticket.item.locationlongitude##'] = ''; $datas['##ticket.item.locationaltitude##'] = ''; $datas['##ticket.item.contact##'] = ''; $datas['##ticket.item.contactnumber##'] = ''; $datas['##ticket.item.user##'] = ''; $datas['##ticket.item.group##'] = ''; $datas['##ticket.item.model##'] = ''; $item_ticket = new Item_Ticket(); $items = $item_ticket->find("`tickets_id` = '" . $item->getField('id') . "'"); $datas['items'] = array(); if (count($items)) { foreach ($items as $val) { if (isset($val['itemtype']) && ($hardware = getItemForItemtype($val['itemtype'])) && isset($val["items_id"]) && $hardware->getFromDB($val["items_id"])) { $tmp = array(); //Object type $tmp['##ticket.itemtype##'] = $hardware->getTypeName(); //Object name $tmp['##ticket.item.name##'] = $hardware->getField('name'); //Object serial if ($hardware->isField('serial')) { $tmp['##ticket.item.serial##'] = $hardware->getField('serial'); } //Object contact if ($hardware->isField('contact')) { $tmp['##ticket.item.contact##'] = $hardware->getField('contact'); } //Object contact num if ($hardware->isField('contact_num')) { $tmp['##ticket.item.contactnumber##'] = $hardware->getField('contact_num'); } //Object otherserial if ($hardware->isField('otherserial')) { $tmp['##ticket.item.otherserial##'] = $hardware->getField('otherserial'); } //Object location if ($hardware->isField('locations_id')) { $tmp['##ticket.item.location##'] = Dropdown::getDropdownName('glpi_locations', $hardware->getField('locations_id')); $locations = new Location(); $locations->getFromDB($hardware->getField('locations_id')); if ($hardware->getField('comment')) { $datas['##ticket.item.locationcomment##'] = $locations->getField('comment'); } if ($hardware->getField('room')) { $datas['##ticket.item.locationroom##'] = $locations->getField('room'); } if ($hardware->getField('building')) { $datas['##ticket.item.locationbuilding##'] = $locations->getField('building'); } if ($hardware->getField('latitude')) { $datas['##ticket.item.locationlatitude##'] = $locations->getField('latitude'); } if ($hardware->getField('longitude')) { $datas['##ticket.item.locationlongitude##'] = $locations->getField('longitude'); } if ($hardware->getField('altitude')) { $datas['##ticket.item.locationaltitude##'] = $locations->getField('altitude'); } } //Object user if ($hardware->getField('users_id')) { $user_tmp = new User(); if ($user_tmp->getFromDB($hardware->getField('users_id'))) { $tmp['##ticket.item.user##'] = $user_tmp->getName(); } } //Object group if ($hardware->getField('groups_id')) { $tmp['##ticket.item.group##'] = Dropdown::getDropdownName('glpi_groups', $hardware->getField('groups_id')); } $modeltable = getSingular($hardware->getTable()) . "models"; $modelfield = getForeignKeyFieldForTable($modeltable); if ($hardware->isField($modelfield)) { $tmp['##ticket.item.model##'] = Dropdown::getDropdownName($modeltable, $hardware->getField($modelfield)); } $datas['items'][] = $tmp; } } } $datas['##ticket.numberofitems##'] = count($datas['items']); // Get followups, log, validation, satisfaction, linked tickets if (!$simple) { // Linked tickets $linked_tickets = Ticket_Ticket::getLinkedTicketsTo($item->getField('id')); $datas['linkedtickets'] = array(); if (count($linked_tickets)) { $linkedticket = new Ticket(); foreach ($linked_tickets as $data) { if ($linkedticket->getFromDB($data['tickets_id'])) { $tmp = array(); $tmp['##linkedticket.id##'] = $data['tickets_id']; $tmp['##linkedticket.link##'] = Ticket_Ticket::getLinkName($data['link']); $tmp['##linkedticket.url##'] = $this->formatURL($options['additionnaloption']['usertype'], "ticket_" . $data['tickets_id']); $tmp['##linkedticket.title##'] = $linkedticket->getField('name'); $tmp['##linkedticket.content##'] = $linkedticket->getField('content'); $datas['linkedtickets'][] = $tmp; } } } $datas['##ticket.numberoflinkedtickets##'] = count($datas['linkedtickets']); $restrict = "`tickets_id`='" . $item->getField('id') . "'"; $problems = getAllDatasFromTable('glpi_problems_tickets', $restrict); $datas['problems'] = array(); if (count($problems)) { $problem = new Problem(); foreach ($problems as $data) { if ($problem->getFromDB($data['problems_id'])) { $tmp = array(); $tmp['##problem.id##'] = $data['problems_id']; $tmp['##problem.date##'] = $problem->getField('date'); $tmp['##problem.title##'] = $problem->getField('name'); $tmp['##problem.url##'] = $this->formatURL($options['additionnaloption']['usertype'], "problem_" . $data['problems_id']); $tmp['##problem.content##'] = $problem->getField('content'); $datas['problems'][] = $tmp; } } } $datas['##ticket.numberofproblems##'] = count($datas['problems']); $restrict = "`tickets_id`='" . $item->getField('id') . "'"; $changes = getAllDatasFromTable('glpi_changes_tickets', $restrict); $datas['changes'] = array(); if (count($changes)) { $change = new Change(); foreach ($changes as $data) { if ($change->getFromDB($data['changes_id'])) { $tmp = array(); $tmp['##change.id##'] = $data['changes_id']; $tmp['##change.date##'] = $change->getField('date'); $tmp['##change.title##'] = $change->getField('name'); $tmp['##change.url##'] = $this->formatURL($options['additionnaloption']['usertype'], "change_" . $data['changes_id']); $tmp['##change.content##'] = $change->getField('content'); $datas['changes'][] = $tmp; } } } $datas['##ticket.numberofchanges##'] = count($datas['changes']); if (!isset($options['additionnaloption']['show_private']) || !$options['additionnaloption']['show_private']) { $restrict .= " AND `is_private` = '0'"; } $restrict .= " ORDER BY `date` DESC, `id` ASC"; //Followup infos $followups = getAllDatasFromTable('glpi_ticketfollowups', $restrict); $datas['followups'] = array(); foreach ($followups as $followup) { $tmp = array(); $tmp['##followup.isprivate##'] = Dropdown::getYesNo($followup['is_private']); $tmp['##followup.author##'] = Html::clean(getUserName($followup['users_id'])); $tmp['##followup.requesttype##'] = Dropdown::getDropdownName('glpi_requesttypes', $followup['requesttypes_id']); $tmp['##followup.date##'] = Html::convDateTime($followup['date']); $tmp['##followup.description##'] = $followup['content']; $datas['followups'][] = $tmp; } $datas['##ticket.numberoffollowups##'] = count($datas['followups']); // Approbation of solution $restrict .= " LIMIT 1"; $replysolved = getAllDatasFromTable('glpi_ticketfollowups', $restrict); $data = current($replysolved); $datas['##ticket.solution.approval.description##'] = $data['content']; $datas['##ticket.solution.approval.date##'] = Html::convDateTime($data['date']); $datas['##ticket.solution.approval.author##'] = Html::clean(getUserName($data['users_id'])); //Validation infos $restrict = "`tickets_id`='" . $item->getField('id') . "'"; if (isset($options['validation_id']) && $options['validation_id']) { $restrict .= " AND `glpi_ticketvalidations`.`id` = '" . $options['validation_id'] . "'"; } $restrict .= " ORDER BY `submission_date` DESC, `id` ASC"; $validations = getAllDatasFromTable('glpi_ticketvalidations', $restrict); $datas['validations'] = array(); foreach ($validations as $validation) { $tmp = array(); $tmp['##validation.submission.title##'] = sprintf(__('An approval request has been submitted by %s'), Html::clean(getUserName($validation['users_id']))); $tmp['##validation.answer.title##'] = sprintf(__('An answer to an an approval request was produced by %s'), Html::clean(getUserName($validation['users_id_validate']))); $tmp['##validation.author##'] = Html::clean(getUserName($validation['users_id'])); $tmp['##validation.status##'] = TicketValidation::getStatus($validation['status']); $tmp['##validation.storestatus##'] = $validation['status']; $tmp['##validation.submissiondate##'] = Html::convDateTime($validation['submission_date']); $tmp['##validation.commentsubmission##'] = $validation['comment_submission']; $tmp['##validation.validationdate##'] = Html::convDateTime($validation['validation_date']); $tmp['##validation.validator##'] = Html::clean(getUserName($validation['users_id_validate'])); $tmp['##validation.commentvalidation##'] = $validation['comment_validation']; $datas['validations'][] = $tmp; } // Ticket Satisfaction $inquest = new TicketSatisfaction(); $datas['##satisfaction.type##'] = ''; $datas['##satisfaction.datebegin##'] = ''; $datas['##satisfaction.dateanswered##'] = ''; $datas['##satisfaction.satisfaction##'] = ''; $datas['##satisfaction.description##'] = ''; if ($inquest->getFromDB($item->getField('id'))) { // internal inquest if ($inquest->fields['type'] == 1) { $datas['##ticket.urlsatisfaction##'] = $this->formatURL($options['additionnaloption']['usertype'], "ticket_" . $item->getField("id") . '_Ticket$3'); // external inquest } else { if ($inquest->fields['type'] == 2) { $datas['##ticket.urlsatisfaction##'] = Entity::generateLinkSatisfaction($item); } } $datas['##satisfaction.type##'] = $inquest->getTypeInquestName($inquest->getfield('type')); $datas['##satisfaction.datebegin##'] = Html::convDateTime($inquest->fields['date_begin']); $datas['##satisfaction.dateanswered##'] = Html::convDateTime($inquest->fields['date_answered']); $datas['##satisfaction.satisfaction##'] = $inquest->fields['satisfaction']; $datas['##satisfaction.description##'] = $inquest->fields['comment']; } } return $datas; }
/** * @covers Dropdown::import * @covers CommonTreeDropdown::import * @dataProvider dataTestTreeImport */ public function testTreeImport($input, $result, $complete, $msg) { $id = Dropdown::import('Location', $input); if ($result) { $this->assertGreaterThan(0, $id, $msg); $ut = new Location(); $this->assertTrue($ut->getFromDB($id), $msg); $this->assertEquals($result, $ut->getField('name'), $msg); $this->assertEquals($complete, $ut->getField('completename'), $msg); } else { $this->assertLessThanOrEqual(0, $id, $msg); } }
/** Generate bigdump : Create networkport ethernet * * @since version 0.84 * * @param $itemtype item type * @param $items_id item ID * @param $entities_id item entity ID * @param $locations_id ID of the location trying to link with network equipment (default 0) **/ function addNetworkEthernetPort($itemtype, $items_id, $entities_id, $locations_id=0) { global $NET_LOC, $NET_PORT, $MAX, $VLAN_LOC; // Add networking ports $newIP = getNextIP(); $newMAC = getNextMAC(); if (($itemtype == 'NetworkEquipment') && $locations_id) { // Find father locations_id; $loc = new Location(); if ($loc->getFromDB($locations_id)) { $locations_id = $loc->getField('locations_id'); } else { $locations_id = 0; } } //insert netpoint $netpoint = new NetPoint(); $netpointID = $netpoint->add(toolbox::addslashes_deep( array('entities_id' => $entities_id, 'locations_id' => $locations_id, 'name' => getNextNETPOINT(), 'comment' => "comment 'netpoint $locations_id"))); if ($locations_id && !isset($VLAN_LOC[$locations_id])) { $vlanID = mt_rand(1,$MAX["vlan"]); $VLAN_LOC[$locations_id] = $vlanID; } if (!isset($NET_PORT[$itemtype][$items_id])) { $NET_PORT[$itemtype][$items_id]=0; } $np = new NetworkPort(); $nv = new NetworkPort_Vlan(); $newportname = "port of $itemtype-$items_id"; $refportID = 0; if ($locations_id && isset($NET_LOC[$locations_id]) && $NET_LOC[$locations_id]) { $refportname = "link 'port to $itemtype-$items_id"; $newportname .= " link to 'NetworkEquipment' -".$NET_LOC[$locations_id]; $newMAC2 = getNextMAC(); $newIP2 = getNextIP(); // Create new port on ref item $param = toolbox::addslashes_deep( array('itemtype' => 'NetworkEquipment', 'items_id' => $NET_LOC[$locations_id], 'entities_id' => $entities_id, 'logical_number' => $NET_PORT['NetworkEquipment'][$NET_LOC[$locations_id]]++, 'name' => "name '$refportname", 'instantiation_type' => 'NetworkPortEthernet', 'mac' => $newMAC2, 'comment' => "comment '$refportname", 'netpoints_id' => $netpointID, 'NetworkName_name' => "NetworkEquipment$itemtype-$items_id-$entities_id", 'NetworkName__ipaddresses' => array(-100 => $newIP2['ip']), )); $np->splitInputForElements($param); $refportID = $np->add($param); $np->updateDependencies(1); if (isset($VLAN_LOC[$locations_id]) && $refportID) { $nv->add(array('networkports_id' => $refportID, 'vlans_id' => $VLAN_LOC[$locations_id])); } } // $query = "INSERT INTO `glpi_networkports` // VALUES (NULL, '$netwID', 'NetworkEquipment', '$ID_entity', '0', // '".$NET_PORT['NetworkEquipment'][$netwID]++."', // 'link port to netw ".$NET_LOC[$data['locations_id']]."', // '".$newIP['ip']."', '$newMAC', '$iface', '$netpointID', // '".$newIP['netwmask']."', '".$newIP['gateway']."', // '".$newIP['subnet']."','comment')"; // $DB->query($query) or die("PB REQUETE ".$query); $param = toolbox::addslashes_deep( array('itemtype' => $itemtype, 'items_id' => $items_id, 'entities_id' => $entities_id, 'logical_number' => $NET_PORT[$itemtype][$items_id]++, 'name' => "name '$newportname", 'instantiation_type' => 'NetworkPortEthernet', 'mac' => $newMAC, 'comment' => "comment '$newportname", 'netpoints_id' => $netpointID, 'NetworkName_name' => "$itemtype-$items_id-$entities_id", 'NetworkName__ipaddresses' => array(-100 => $newIP['ip']), )); $np->splitInputForElements($param); $newportID = $np->add($param); $np->updateDependencies(1); if (isset($VLAN_LOC[$locations_id]) && $newportID) { $nv->add(array('networkports_id' => $newportID, 'vlans_id' => $VLAN_LOC[$locations_id])); } if ($locations_id && $refportID && $newportID) { // link ports $nn = new Networkport_Networkport(); $nn->add(array('networkports_id_1' => $refportID, 'networkports_id_2' => $newportID,)); } else { if ($locations_id) { } } }
/** * @covers Dropdown::import * @covers CommonTreeDropdown::import * @dataProvider dataTestTreeImport */ public function testTreeImport($input, $result, $complete, $msg) { $input['entities_id'] = getItemByTypeName('Entity', '_test_root_entity', true); $id = Dropdown::import('Location', $input); if ($result) { $this->assertGreaterThan(0, $id, $msg); $ut = new Location(); $this->assertTrue($ut->getFromDB($id), $msg); $this->assertEquals($result, $ut->getField('name'), $msg); $this->assertEquals($complete, $ut->getField('completename'), $msg); } else { $this->assertLessThanOrEqual(0, $id, $msg); } }