static function giveItem($itemtype, $ID, array $data, $num, $meta = 0, array $addobjectparams = array())
{
global $CFG_GLPI, $LANG, $PLUGIN_HOOKS;
$searchopt =& Search::getOptions($itemtype);
if (isset($CFG_GLPI["union_search_type"][$itemtype]) && $CFG_GLPI["union_search_type"][$itemtype] == $searchopt[$ID]["table"]) {
return PluginMobileSearch::giveItem($data["TYPE"], $ID, $data, $num, $meta);
}
// Plugin can override core definition for its type
if ($plug = isPluginItemType($itemtype)) {
$function = 'plugin_' . $plug['plugin'] . '_giveItem';
if (function_exists($function)) {
$out = $function($itemtype, $ID, $data, $num);
if (!empty($out)) {
return $out;
}
}
}
$NAME = "ITEM_";
if ($meta) {
$NAME = "META_";
}
$table = $searchopt[$ID]["table"];
$field = $searchopt[$ID]["field"];
$linkfield = $searchopt[$ID]["linkfield"];
switch ($table . '.' . $field) {
case "glpi_users_validation.name":
case "glpi_users.name":
// USER search case
if ($itemtype != 'User' && isset($searchopt[$ID]["forcegroupby"]) && $searchopt[$ID]["forcegroupby"]) {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$count_display = 0;
$added = array();
for ($k = 0; $k < count($split); $k++) {
if ($split[$k] > 0) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
if ($itemtype == 'Ticket') {
$userdata = getUserNameMobile($split[$k], 2);
$out .= $userdata['name'] . " ";
} else {
$out .= getUserNameMobile($split[$k], 1);
}
}
}
return $out;
} else {
if (!empty($linkfield)) {
$toadd = '';
if ($itemtype == 'Ticket' && $data[$NAME . $num . "_3"] > 0) {
$userdata = getUserNameMobile($data[$NAME . $num . "_3"], 2);
$toadd = " ";
}
//Stevenes
$name1 = explode("\$\$", $data[$NAME . $num]);
// return $name1['0'].' ('.$name1['1'].')';
$link_user = $_SESSION['mobileSearchLastLink'] = "<a href=" . $CFG_GLPI["root_doc"] . "/plugins/mobile/front/item.php?itemtype=user&menu=admin&ssmenu=user&id=" . $name1['1'] . ">" . $name1['0'] . " (" . $name1['1'] . ")</a>";
return $link_user;
// return formatUserNameMobile($data[$NAME.$num."_3"],$data[$NAME.$num],$data[$NAME.$num."_2"], $data[$NAME.$num."_4"],1).$toadd;
}
}
break;
case "glpi_profiles.interface":
return Profile::getInterfaceName($data[$NAME . $num]);
break;
case "glpi_profiles.name":
if ($itemtype == 'User') {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$split2 = explode("\$\$\$\$", $data[$NAME . $num . "_2"]);
$split3 = explode("\$\$\$\$", $data[$NAME . $num . "_3"]);
$count_display = 0;
$added = array();
for ($k = 0; $k < count($split); $k++) {
if (strlen(trim($split[$k])) > 0) {
$text = $split[$k] . " - " . $split2[$k];
if ($split3[$k]) {
$text .= " (R)";
}
if (!in_array($text, $added)) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
$out .= $text;
$added[] = $text;
}
}
}
return $out;
}
break;
case "glpi_entities.completename":
if ($itemtype == 'User') {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$split2 = explode("\$\$\$\$", $data[$NAME . $num . "_2"]);
$split3 = explode("\$\$\$\$", $data[$NAME . $num . "_3"]);
$added = array();
$count_display = 0;
for ($k = 0; $k < count($split); $k++) {
if (strlen(trim($split[$k])) > 0) {
$text = $split[$k] . " - " . $split2[$k];
if ($split3[$k]) {
$text .= " (R)";
}
if (!in_array($text, $added)) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
$out .= $text;
$added[] = $text;
}
}
}
return $out;
} else {
if ($data[$NAME . $num . "_2"] == 0) {
// Set name for Root entity
$data[$NAME . $num] = $LANG['entity'][2];
}
}
break;
case "glpi_documenttypes.icon":
if (!empty($data[$NAME . $num])) {
return "<img class='middle' alt='' src='" . $CFG_GLPI["typedoc_icon_dir"] . "/" . $data[$NAME . $num] . "'>";
}
return " ";
case "glpi_documents.filename":
$doc = new Document();
if ($doc->getFromDB($data['id'])) {
return $doc->getDownloadLink();
}
return NOT_AVAILABLE;
case "glpi_deviceharddrives.specificity":
case "glpi_devicememories.specificity":
case "glpi_deviceprocessors.specificity":
return $data[$NAME . $num];
case "glpi_networkports.mac":
$out = "";
if ($itemtype == 'Computer') {
$displayed = array();
if (!empty($data[$NAME . $num . "_2"])) {
$split = explode("\$\$\$\$", $data[$NAME . $num . "_2"]);
$count_display = 0;
for ($k = 0; $k < count($split); $k++) {
$lowstr = utf8_strtolower($split[$k]);
if (strlen(trim($split[$k])) > 0 && !in_array($lowstr, $displayed)) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
$out .= $split[$k];
$displayed[] = $lowstr;
}
}
if (!empty($data[$NAME . $num])) {
$out .= "<br>";
}
}
if (!empty($data[$NAME . $num])) {
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$count_display = 0;
for ($k = 0; $k < count($split); $k++) {
$lowstr = utf8_strtolower($split[$k]);
if (strlen(trim($split[$k])) > 0 && !in_array($lowstr, $displayed)) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
$out .= $split[$k];
$displayed[] = $lowstr;
}
}
}
return $out;
}
break;
case "glpi_contracts.duration":
case "glpi_contracts.notice":
case "glpi_contracts.periodicity":
case "glpi_contracts.billing":
if (!empty($data[$NAME . $num])) {
$split = explode('$$$$', $data[$NAME . $num]);
$output = "";
foreach ($split as $duration) {
$output .= (empty($output) ? '' : '<br>') . $duration . " " . $LANG['financial'][57];
}
return $output;
}
return " ";
case "glpi_contracts.renewal":
return Contract::getContractRenewalName($data[$NAME . $num]);
case "glpi_infocoms.sink_time":
if (!empty($data[$NAME . $num])) {
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
$out .= empty($out) ? '' : '<br>';
if ($val > 0) {
$out .= $val . " " . $LANG['financial'][9];
}
}
return $out;
}
return " ";
case "glpi_infocoms.warranty_duration":
if (!empty($data[$NAME . $num])) {
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
$out .= empty($out) ? '' : '<br>';
if ($val > 0) {
$out .= $val . " " . $LANG['financial'][57];
}
if ($val < 0) {
$out .= $LANG['financial'][2];
}
}
return $out;
}
return " ";
case "glpi_infocoms.sink_type":
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
$out .= (empty($out) ? '' : '<br>') . Infocom::getAmortTypeName($val);
}
return $out;
case "glpi_infocoms.alert":
if ($data[$NAME . $num] == pow(2, Alert::END)) {
return $LANG['financial'][80];
}
return "";
case "glpi_contracts.alert":
switch ($data[$NAME . $num]) {
case pow(2, Alert::END):
return $LANG['buttons'][32];
case pow(2, Alert::NOTICE):
return $LANG['financial'][10];
case pow(2, Alert::END) + pow(2, Alert::NOTICE):
return $LANG['buttons'][32] . " + " . $LANG['financial'][10];
}
return "";
case "glpi_tickets.count":
if ($data[$NAME . $num] > 0 && Session::haveRight("ticket", Ticket::READALL)) {
$options['field'][0] = 12;
$options['searchtype'][0] = 'equals';
$options['contains'][0] = 'all';
$options['link'][0] = 'AND';
$options['itemtype2'][0] = $itemtype;
$options['field2'][0] = self::getOptionNumber($itemtype, 'name');
$options['searchtype2'][0] = 'equals';
$options['contains2'][0] = $data['id'];
$options['link2'][0] = 'AND';
$options['reset'] = 'reset';
$out = "<a href=\"" . $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($options) . "\" data-back='false'>";
$out .= $data[$NAME . $num];
$out .= "</a>";
} else {
$out = $data[$NAME . $num];
}
return $out;
case "glpi_softwarelicenses.number":
if ($data[$NAME . $num . "_2"] == -1) {
return $LANG['software'][4];
}
if (empty($data[$NAME . $num])) {
return 0;
}
return $data[$NAME . $num];
case "glpi_auth_tables.name":
return Auth::getMethodName($data[$NAME . $num], $data[$NAME . $num . "_2"], 1, $data[$NAME . $num . "_3"] . $data[$NAME . $num . "_4"]);
case "glpi_reservationitems.comment":
if (empty($data[$NAME . $num])) {
return "<a title='" . $LANG['reservation'][22] . "'\n href='" . $CFG_GLPI["root_doc"] . "/front/reservationitem.form.php?id=" . $data["refID"] . "' data-back='false'>" . $LANG['common'][49] . "</a>";
}
return "<a title='" . $LANG['reservation'][22] . "'\n href='" . $CFG_GLPI["root_doc"] . "/front/reservationitem.form.php?id=" . $data['refID'] . "' data-back='false'>" . resume_text($data[$NAME . $num]) . "</a>";
case 'glpi_notifications.mode':
return Notification::getMode($data[$NAME . $num]);
case 'glpi_notifications.event':
$item = NotificationTarget::getInstanceByType($data['itemtype']);
if ($item) {
$events = $item->getAllEvents();
return $events[$data[$NAME . $num]];
}
return '';
case 'glpi_crontasks.description':
$tmp = new CronTask();
return $tmp->getDescription($data['id']);
case 'glpi_crontasks.state':
return CronTask::getStateName($data[$NAME . $num]);
case 'glpi_crontasks.mode':
return CronTask::getModeName($data[$NAME . $num]);
case 'glpi_crontasks.itemtype':
if ($plug = isPluginItemType($data[$NAME . $num])) {
return $plug['plugin'];
}
return '';
case 'glpi_tickets.status':
$status = Ticket::getStatus($data[$NAME . $num]);
// status Stevenes Donato
if ($data[$NAME . $num] == "1") {
$data[$NAME . $num] = "new";
}
if ($data[$NAME . $num] == "2") {
$data[$NAME . $num] = "assign";
}
if ($data[$NAME . $num] == "3") {
$data[$NAME . $num] = "plan";
}
if ($data[$NAME . $num] == "4") {
$data[$NAME . $num] = "waiting";
}
if ($data[$NAME . $num] == "5") {
$data[$NAME . $num] = "solved";
}
if ($data[$NAME . $num] == "6") {
$data[$NAME . $num] = "closed";
}
//
return "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/" . $data[$NAME . $num] . ".png\"\n alt='{$status}' title='{$status}'> {$status}";
case 'glpi_tickets.priority':
return Ticket::getPriorityName($data[$NAME . $num]);
case 'glpi_tickets.urgency':
return Ticket::getUrgencyName($data[$NAME . $num]);
case 'glpi_tickets.impact':
return Ticket::getImpactName($data[$NAME . $num]);
case 'glpi_tickets.items_id':
if (!empty($data[$NAME . $num . "_2"]) && class_exists($data[$NAME . $num . "_2"])) {
$item = new $data[$NAME . $num . "_2"]();
if ($item->getFromDB($data[$NAME . $num])) {
return $item->getLink(true);
}
}
return ' ';
case 'glpi_tickets.id':
$link = getItemTypeFormURLMobile('Ticket');
$out = "<a id='ticket" . $data[$NAME . $num . "_2"] . "' href=\"" . $link;
$out .= strstr($link, '?') ? '&' : '?';
$out .= 'id=' . $data[$NAME . $num];
//$out .= 'id='.$data[$NAME.$num."_2"];
$out .= "\" data-back='false'>" . $data[$NAME . $num];
if ($_SESSION["glpiis_ids_visible"] || empty($data[$NAME . $num])) {
//$out .= " (".$data[$NAME.$num."_2"].")";
$out .= $data[$NAME . $num . "_2"];
}
$out .= "</a>";
return $out;
case 'glpi_ticketvalidations.status':
case "glpi_tickets.global_validation":
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
$status = TicketValidation::getStatus($val);
$bgcolor = TicketValidation::getStatusColor($val);
$out .= (empty($out) ? '' : '<br>') . "<div style=\"background-color:" . $bgcolor . ";\">" . $status . '</div>';
}
return $out;
case 'glpi_notimportedemails.reason':
return NotImportedEmail::getReason($data[$NAME . $num]);
case 'glpi_notimportedemails.messageid':
$clean = array('<' => '', '>' => '');
return strtr($data[$NAME . $num], $clean);
}
//// Default case
// Link with plugin tables : need to know left join structure
if (preg_match("/^glpi_plugin_([a-z0-9]+)/", $table . '.' . $field, $matches)) {
if (count($matches) == 2) {
$plug = $matches[1];
$function = 'plugin_' . $plug . '_giveItem';
if (function_exists($function)) {
$out = $function($itemtype, $ID, $data, $num);
if (!empty($out)) {
return $out;
}
}
}
}
$unit = '';
if (isset($searchopt[$ID]['unit'])) {
$unit = $searchopt[$ID]['unit'];
}
// Preformat items
if (isset($searchopt[$ID]["datatype"])) {
switch ($searchopt[$ID]["datatype"]) {
case "itemlink":
if (!empty($data[$NAME . $num . "_2"])) {
if (isset($searchopt[$ID]["itemlink_type"])) {
$link = getItemTypeFormURLMobile($searchopt[$ID]["itemlink_type"]);
} else {
$link = getItemTypeFormURLMobile($itemtype);
}
$out = "<a id='" . $itemtype . "_" . $data[$NAME . $num . "_2"] . "' href=\"" . $link;
$out .= strstr($link, '?') ? '&' : '?';
$out .= 'id=' . $data[$NAME . $num . "_2"] . "\" data-back='false'>";
$out .= $data[$NAME . $num] . $unit;
if ($_SESSION["glpiis_ids_visible"] || empty($data[$NAME . $num])) {
$out .= " (" . $data[$NAME . $num . "_2"] . ")";
}
$out .= "</a>";
return $out;
} else {
if (isset($searchopt[$ID]["itemlink_type"])) {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$count_display = 0;
$separate = '<br>';
if (isset($searchopt[$ID]['splititems']) && $searchopt[$ID]['splititems']) {
$separate = '<hr>';
}
for ($k = 0; $k < count($split); $k++) {
if (strlen(trim($split[$k])) > 0) {
$split2 = explode("\$\$", $split[$k]);
if (isset($split2[1]) && $split2[1] > 0) {
if ($count_display) {
$out .= $separate;
}
$count_display++;
$page = getItemTypeFormURLMobile($searchopt[$ID]["itemlink_type"]);
$page .= strpos($page, '?') ? '&id' : '?id';
$out .= "<a id='" . $searchopt[$ID]["itemlink_type"] . "_" . $split2[1] . "'\n href='{$page}=" . $split2[1] . "' data-back='false'>";
$out .= $split2[0] . $unit;
if ($_SESSION["glpiis_ids_visible"] || empty($split2[0])) {
$out .= " (" . $split2[1] . ")";
}
$out .= "</a>";
}
}
}
return $out;
}
}
break;
case "text":
$separate = '<br>';
if (isset($searchopt[$ID]['splititems']) && $searchopt[$ID]['splititems']) {
$separate = '<hr>';
}
return str_replace('$$$$', $separate, nl2br($data[$NAME . $num]));
case "date":
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
$out .= (empty($out) ? '' : '<br>') . convDate($val);
}
return $out;
case "datetime":
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
$out .= (empty($out) ? '' : '<br>') . Html::convDateTime($val);
}
return $out;
case "timestamp":
return timestampToString($data[$NAME . $num]);
case "realtime":
return Ticket::getRealtime($data[$NAME . $num]);
case "date_delay":
$split = explode('$$$$', $data[$NAME . $num]);
$out = '';
foreach ($split as $val) {
if (strpos($val, ',')) {
list($dat, $dur) = explode(',', $val);
if (!empty($dat)) {
$out .= (empty($out) ? '' : '<br>') . getWarrantyExpir($dat, $dur);
}
}
}
return empty($out) ? " " : $out;
case "email":
// Stevenes
// $email=trim($data[$NAME.$num]);
$email = explode('$$', $data[$NAME . $num]);
if (!empty($email['0'])) {
return $email['0'];
//return "<a href='mailto:$email'>$email</a>";
}
return " ";
case "weblink":
$orig_link = trim($data[$NAME . $num]);
if (!empty($orig_link)) {
// strip begin of link
$link = preg_replace('/https?:\\/\\/(www[^\\.]*\\.)?/', '', $orig_link);
$link = preg_replace('/\\/$/', '', $link);
if (utf8_strlen($link) > 30) {
$link = Toolbox::substr($link, 0, 30) . "...";
}
//return "<a href=\"".formatOutputWebLink($orig_link)."\" target='_blank'>$link</a>";
return $orig_link;
}
return " ";
case "number":
if (isset($searchopt[$ID]['forcegroupby']) && $searchopt[$ID]['forcegroupby']) {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$count_display = 0;
for ($k = 0; $k < count($split); $k++) {
if (strlen(trim($split[$k])) > 0) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
$out .= str_replace(' ', ' ', Html::formatNumber($split[$k], false, 0)) . $unit;
}
}
return $out;
}
return str_replace(' ', ' ', Html::formatNumber($data[$NAME . $num], false, 0)) . $unit;
case "decimal":
if (isset($searchopt[$ID]['forcegroupby']) && $searchopt[$ID]['forcegroupby']) {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$count_display = 0;
for ($k = 0; $k < count($split); $k++) {
if (strlen(trim($split[$k])) > 0) {
if ($count_display) {
$out .= "<br>";
}
$count_display++;
$out .= str_replace(' ', ' ', Html::formatNumber($split[$k])) . $unit;
}
}
return $out;
}
return str_replace(' ', ' ', Html::formatNumber($data[$NAME . $num])) . $unit;
case "bool":
return Dropdown::getYesNo($data[$NAME . $num]) . $unit;
case "right":
return Profile::getRightValue($data[$NAME . $num]);
case "itemtypename":
if (class_exists($data[$NAME . $num])) {
$obj = new $data[$NAME . $num]();
return $obj->getTypeName();
} else {
return "";
}
case "language":
if (isset($CFG_GLPI['languages'][$data[$NAME . $num]])) {
return $CFG_GLPI['languages'][$data[$NAME . $num]][0];
} else {
return $LANG['setup'][46];
}
break;
}
}
// Manage items with need group by / group_concat
if (isset($searchopt[$ID]['forcegroupby']) && $searchopt[$ID]['forcegroupby']) {
$out = "";
$split = explode("\$\$\$\$", $data[$NAME . $num]);
$count_display = 0;
$separate = '<br>';
if (isset($searchopt[$ID]['splititems']) && $searchopt[$ID]['splititems']) {
$separate = '<hr>';
}
for ($k = 0; $k < count($split); $k++) {
if (strlen(trim($split[$k])) > 0) {
if ($count_display) {
$out .= $separate;
}
$count_display++;
$out .= $split[$k] . $unit;
}
}
return $out;
}
return $data[$NAME . $num] . $unit;
}