function showMinimalList($params)
{
global $DB, $CFG_GLPI;
// Instanciate an object to access method
$item = NULL;
$itemtype = $this->getType();
$itemtable = $this->getTable();
if (class_exists($itemtype)) {
$item = new $itemtype();
}
// Default values of parameters
$p['link'] = array();
//
$p['field'] = array();
//
$p['contains'] = array();
//
$p['searchtype'] = array();
//
$p['sort'] = '1';
//
$p['order'] = 'ASC';
//
$p['start'] = 0;
//
$p['is_deleted'] = 0;
$p['export_all'] = 0;
$p['link2'] = '';
//
$p['contains2'] = '';
//
$p['field2'] = '';
//
$p['itemtype2'] = '';
$p['searchtype2'] = '';
foreach ($params as $key => $val) {
$p[$key] = $val;
}
if ($p['export_all']) {
$p['start'] = 0;
}
// Manage defautlt seachtype value : for bookmark compatibility
if (count($p['contains'])) {
foreach ($p['contains'] as $key => $val) {
if (!isset($p['searchtype'][$key])) {
$p['searchtype'][$key] = 'contains';
}
}
}
if (is_array($p['contains2']) && count($p['contains2'])) {
foreach ($p['contains2'] as $key => $val) {
if (!isset($p['searchtype2'][$key])) {
$p['searchtype2'][$key] = 'contains';
}
}
}
//$target = Toolbox::getItemTypeSearchURL($itemtype);
$target = $CFG_GLPI["root_doc"] . "/plugins/resources/front/resourceresting.php";
$limitsearchopt = Search::getCleanedOptions("PluginResourcesResourceResting");
$LIST_LIMIT = $_SESSION['glpilist_limit'];
// Set display type for export if define
$output_type = Search::HTML_OUTPUT;
if (isset($_GET['display_type'])) {
$output_type = $_GET['display_type'];
// Limit to 10 element
if ($_GET['display_type'] == Search::GLOBAL_SEARCH) {
$LIST_LIMIT = Search::GLOBAL_DISPLAY_COUNT;
}
}
$PluginResourcesResource = new PluginResourcesResource();
$entity_restrict = $PluginResourcesResource->isEntityAssign();
// Get the items to display
$toview = Search::addDefaultToView($itemtype);
// Add items to display depending of personal prefs
$displaypref = DisplayPreference::getForTypeUser("PluginResourcesResourceResting", Session::getLoginUserID());
if (count($displaypref)) {
foreach ($displaypref as $val) {
array_push($toview, $val);
}
}
// Add searched items
if (count($p['field']) > 0) {
foreach ($p['field'] as $key => $val) {
if (!in_array($val, $toview) && $val != 'all' && $val != 'view') {
array_push($toview, $val);
}
}
}
// Add order item
if (!in_array($p['sort'], $toview)) {
array_push($toview, $p['sort']);
}
// Clean toview array
$toview = array_unique($toview);
foreach ($toview as $key => $val) {
if (!isset($limitsearchopt[$val])) {
unset($toview[$key]);
}
}
$toview_count = count($toview);
//// 1 - SELECT
$query = "SELECT " . Search::addDefaultSelect($itemtype);
// Add select for all toview item
foreach ($toview as $key => $val) {
$query .= Search::addSelect($itemtype, $val, $key, 0);
}
$query .= "`" . $itemtable . "`.`id` AS id ";
//// 2 - FROM AND LEFT JOIN
// Set reference table
$query .= " FROM `" . $itemtable . "`";
// Init already linked tables array in order not to link a table several times
$already_link_tables = array();
// Put reference table
array_push($already_link_tables, $itemtable);
// Add default join
$COMMONLEFTJOIN = Search::addDefaultJoin($itemtype, $itemtable, $already_link_tables);
$query .= $COMMONLEFTJOIN;
$searchopt = array();
$searchopt[$itemtype] =& Search::getOptions($itemtype);
// Add all table for toview items
foreach ($toview as $key => $val) {
$query .= Search::addLeftJoin($itemtype, $itemtable, $already_link_tables, $searchopt[$itemtype][$val]["table"], $searchopt[$itemtype][$val]["linkfield"]);
}
// Search all case :
if (in_array("all", $p['field'])) {
foreach ($searchopt[$itemtype] as $key => $val) {
// Do not search on Group Name
if (is_array($val)) {
$query .= Search::addLeftJoin($itemtype, $itemtable, $already_link_tables, $searchopt[$itemtype][$key]["table"], $searchopt[$itemtype][$key]["linkfield"]);
}
}
}
//// 3 - WHERE
// default string
$COMMONWHERE = Search::addDefaultWhere($itemtype);
$first = empty($COMMONWHERE);
// Add deleted if item have it
if ($item && $item->maybeDeleted()) {
$LINK = " AND ";
if ($first) {
$LINK = " ";
$first = false;
}
$COMMONWHERE .= $LINK . "`{$itemtable}`.`is_deleted` = '" . $p['is_deleted'] . "' ";
}
// Remove template items
if ($item && $item->maybeTemplate()) {
$LINK = " AND ";
if ($first) {
$LINK = " ";
$first = false;
}
$COMMONWHERE .= $LINK . "`{$itemtable}`.`is_template` = '0' ";
}
// Add Restrict to current entities
if ($entity_restrict) {
$LINK = " AND ";
if ($first) {
$LINK = " ";
$first = false;
}
if ($itemtype == 'Entity') {
$COMMONWHERE .= getEntitiesRestrictRequest($LINK, $itemtable, 'id', '', true);
} else {
if (isset($CFG_GLPI["union_search_type"]["PluginResourcesResource"])) {
// Will be replace below in Union/Recursivity Hack
$COMMONWHERE .= $LINK . " ENTITYRESTRICT ";
} else {
$COMMONWHERE .= getEntitiesRestrictRequest($LINK, "glpi_plugin_resources_resources", '', '', $PluginResourcesResource->maybeRecursive());
}
}
}
///R�cup�ration des groupes de l'utilisateur connect�
$who = Session::getLoginUserID();
if (!plugin_resources_haveRight("all", "r")) {
$LINK = " AND ";
if ($first) {
$LINK = " ";
$first = false;
}
$COMMONWHERE .= $LINK . "(`glpi_plugin_resources_resources`.`users_id_recipient` = '{$who}' OR `glpi_plugin_resources_resources`.`users_id` = '{$who}') ";
}
$WHERE = "";
$HAVING = "";
// Add search conditions
// If there is search items
if ($_SESSION["glpisearchcount"][$itemtype] > 0 && count($p['contains']) > 0) {
for ($key = 0; $key < $_SESSION["glpisearchcount"][$itemtype]; $key++) {
// if real search (strlen >0) and not all and view search
if (isset($p['contains'][$key]) && strlen($p['contains'][$key]) > 0) {
// common search
if ($p['field'][$key] != "all" && $p['field'][$key] != "view") {
$LINK = " ";
$NOT = 0;
$tmplink = "";
if (is_array($p['link']) && isset($p['link'][$key])) {
if (strstr($p['link'][$key], "NOT")) {
$tmplink = " " . str_replace(" NOT", "", $p['link'][$key]);
$NOT = 1;
} else {
$tmplink = " " . $p['link'][$key];
}
} else {
$tmplink = " AND ";
}
if (isset($searchopt[$itemtype][$p['field'][$key]]["usehaving"])) {
// Manage Link if not first item
if (!empty($HAVING)) {
$LINK = $tmplink;
}
// Find key
$item_num = array_search($p['field'][$key], $toview);
$HAVING .= Search::addHaving($LINK, $NOT, $itemtype, $p['field'][$key], $p['searchtype'][$key], $p['contains'][$key], 0, $item_num);
} else {
// Manage Link if not first item
if (!empty($WHERE)) {
$LINK = $tmplink;
}
$WHERE .= Search::addWhere($LINK, $NOT, $itemtype, $p['field'][$key], $p['searchtype'][$key], $p['contains'][$key]);
}
// view and all search
} else {
$LINK = " OR ";
$NOT = 0;
$globallink = " AND ";
if (is_array($p['link']) && isset($p['link'][$key])) {
switch ($p['link'][$key]) {
case "AND":
$LINK = " OR ";
$globallink = " AND ";
break;
case "AND NOT":
$LINK = " AND ";
$NOT = 1;
$globallink = " AND ";
break;
case "OR":
$LINK = " OR ";
$globallink = " OR ";
break;
case "OR NOT":
$LINK = " AND ";
$NOT = 1;
$globallink = " OR ";
break;
}
} else {
$tmplink = " AND ";
}
// Manage Link if not first item
if (!empty($WHERE)) {
$WHERE .= $globallink;
}
$WHERE .= " ( ";
$first2 = true;
$items = array();
if ($p['field'][$key] == "all") {
$items = $searchopt[$itemtype];
} else {
// toview case : populate toview
foreach ($toview as $key2 => $val2) {
$items[$val2] = $searchopt[$itemtype][$val2];
}
}
foreach ($items as $key2 => $val2) {
if (is_array($val2)) {
// Add Where clause if not to be done in HAVING CLAUSE
if (!isset($val2["usehaving"])) {
$tmplink = $LINK;
if ($first2) {
$tmplink = " ";
$first2 = false;
}
$WHERE .= Search::addWhere($tmplink, $NOT, $itemtype, $key2, $p['searchtype'][$key], $p['contains'][$key]);
}
}
}
$WHERE .= " ) ";
}
}
}
}
if (!empty($WHERE) || !empty($COMMONWHERE)) {
if (!empty($COMMONWHERE)) {
$WHERE = ' WHERE ' . $COMMONWHERE . (!empty($WHERE) ? ' AND ( ' . $WHERE . ' )' : '');
} else {
$WHERE = ' WHERE ' . $WHERE . ' ';
}
$first = false;
}
$query .= $WHERE;
//// 7 - Manage GROUP BY
$GROUPBY = "";
// Meta Search / Search All / Count tickets
if (in_array('all', $p['field'])) {
$GROUPBY = " GROUP BY `" . $itemtable . "`.`id`";
}
if (empty($GROUPBY)) {
foreach ($toview as $key2 => $val2) {
if (!empty($GROUPBY)) {
break;
}
if (isset($searchopt[$itemtype][$val2]["forcegroupby"])) {
$GROUPBY = " GROUP BY `" . $itemtable . "`.`id`";
}
}
}
$query .= $GROUPBY;
//// 4 - ORDER
$ORDER = " ORDER BY `id` ";
foreach ($toview as $key => $val) {
if ($p['sort'] == $val) {
$ORDER = Search::addOrderBy($itemtype, $p['sort'], $p['order'], $key);
}
}
$query .= $ORDER;
// Get it from database
if ($result = $DB->query($query)) {
$numrows = $DB->numrows($result);
$globallinkto = Search::getArrayUrlLink("field", $p['field']) . Search::getArrayUrlLink("link", $p['link']) . Search::getArrayUrlLink("contains", $p['contains']) . Search::getArrayUrlLink("field2", $p['field2']) . Search::getArrayUrlLink("contains2", $p['contains2']) . Search::getArrayUrlLink("itemtype2", $p['itemtype2']) . Search::getArrayUrlLink("link2", $p['link2']);
$parameters = "sort=" . $p['sort'] . "&order=" . $p['order'] . $globallinkto;
if ($output_type == Search::GLOBAL_SEARCH) {
if (class_exists($itemtype)) {
echo "<div class='center'><h2>" . $this->getTypeName();
// More items
if ($numrows > $p['start'] + Search::GLOBAL_DISPLAY_COUNT) {
echo " <a href='{$target}?{$parameters}'>" . __('All') . "</a>";
}
echo "</h2></div>\n";
} else {
return false;
}
}
if ($p['start'] < $numrows) {
// Pager
if ($output_type == Search::HTML_OUTPUT) {
Html::printPager($p['start'], $numrows, $target, $parameters, $itemtype);
}
//massive action
$sel = "";
if (isset($_GET["select"]) && $_GET["select"] == "all") {
$sel = "checked";
}
// Add toview elements
$nbcols = $toview_count;
if ($output_type == Search::HTML_OUTPUT) {
// HTML display - massive modif
$nbcols++;
}
// Define begin and end var for loop
// Search case
$begin_display = $p['start'];
$end_display = $p['start'] + $LIST_LIMIT;
// Export All case
if ($p['export_all']) {
$begin_display = 0;
$end_display = $numrows;
}
// Display List Header
echo Search::showHeader($output_type, $end_display - $begin_display + 1, $nbcols);
$header_num = 1;
// Display column Headers for toview items
echo Search::showNewLine($output_type);
// Display column Headers for toview items
foreach ($toview as $key => $val) {
$linkto = '';
if (!isset($searchopt[$itemtype][$val]['nosort']) || !$searchopt[$itemtype][$val]['nosort']) {
$linkto = "{$target}?itemtype={$itemtype}&sort=" . $val . "&order=" . ($p['order'] == "ASC" ? "DESC" : "ASC") . "&start=" . $p['start'] . $globallinkto;
}
echo Search::showHeaderItem($output_type, $searchopt[$itemtype][$val]["name"], $header_num, $linkto, $p['sort'] == $val, $p['order']);
}
// End Line for column headers
echo Search::showEndLine($output_type);
$DB->data_seek($result, $p['start']);
// Define begin and end var for loop
// Search case
$i = $begin_display;
// Init list of items displayed
if ($output_type == Search::HTML_OUTPUT) {
Session::initNavigateListItems($itemtype);
}
// Num of the row (1=header_line)
$row_num = 1;
// Display Loop
while ($i < $numrows && $i < $end_display) {
$item_num = 1;
$data = $DB->fetch_array($result);
$i++;
$row_num++;
echo Search::showNewLine($output_type, $i % 2);
Session::addToNavigateListItems($itemtype, $data['id']);
foreach ($toview as $key => $val) {
echo Search::showItem($output_type, Search::giveItem($itemtype, $val, $data, $key), $item_num, $row_num, Search::displayConfigItem($itemtype, $val, $data, $key));
}
echo Search::showEndLine($output_type);
}
// Close Table
$title = "";
// Create title
if ($output_type == Search::PDF_OUTPUT_PORTRAIT || $output_type == Search::PDF_OUTPUT_LANDSCAPE) {
$title .= __('List of non contract periods', 'resources');
}
// Display footer
echo Search::showFooter($output_type, $title);
// Pager
if ($output_type == Search::HTML_OUTPUT) {
echo "<br>";
Html::printPager($p['start'], $numrows, $target, $parameters);
}
} else {
echo Search::showError($output_type);
}
}
}