/**
* Print generic search form
*
*@param $itemtype type to display the form
*@param $params parameters array may include field, contains, sort, is_deleted, link, link2, contains2, field2, type2
*
*@return nothing (displays)
*
**/
function showGenericSearch($params)
{
global $CFG_GLPI;
$itemtype = "PluginResourcesDirectory";
$itemtable = $this->table;
// Default values of parameters
$p['link'] = array();
//
$p['field'] = array();
$p['contains'] = array();
$p['searchtype'] = array();
$p['sort'] = '';
$p['is_deleted'] = 0;
$p['link2'] = '';
//
$p['contains2'] = '';
$p['field2'] = '';
$p['itemtype2'] = '';
$p['searchtype2'] = '';
foreach ($params as $key => $val) {
$p[$key] = $val;
}
$options = Search::getCleanedOptions("PluginResourcesDirectory");
$target = $CFG_GLPI["root_doc"] . "/plugins/resources/front/directory.php";
// Instanciate an object to access method
$item = NULL;
if (class_exists($itemtype)) {
$item = new $itemtype();
}
$linked = Search::getMetaItemtypeAvailable($itemtype);
echo "<form name='searchform{$itemtype}' method='get' action=\"{$target}\">";
echo "<table class='tab_cadre_fixe' >";
echo "<tr class='tab_bg_1'>";
echo "<td>";
echo "<table>";
// Display normal search parameters
for ($i = 0; $i < $_SESSION["glpisearchcount"][$itemtype]; $i++) {
echo "<tr><td class='left' width='50%'>";
// First line display add / delete images for normal and meta search items
if ($i == 0) {
echo "<input type='hidden' disabled id='add_search_count' name='add_search_count' value='1'>";
echo "<a href='#' onClick = \"document.getElementById('add_search_count').disabled=false;document.forms['searchform{$itemtype}'].submit();\">";
echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/plus.png\" alt='+' title='" . __s('Add a search criterion') . "'></a> ";
if ($_SESSION["glpisearchcount"][$itemtype] > 1) {
echo "<input type='hidden' disabled id='delete_search_count' name='delete_search_count' value='1'>";
echo "<a href='#' onClick = \"document.getElementById('delete_search_count').disabled=false;document.forms['searchform{$itemtype}'].submit();\">";
echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/moins.png\" alt='-' title='" . __s('Delete a search criterion') . "'></a> ";
}
if (is_array($linked) && count($linked) > 0) {
echo "<input type='hidden' disabled id='add_search_count2' name='add_search_count2' value='1'>";
echo "<a href='#' onClick = \"document.getElementById('add_search_count2').disabled=false;document.forms['searchform{$itemtype}'].submit();\">";
echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/meta_plus.png\" alt='+' title='" . __s('Add a global search criterion') . "'></a> ";
if ($_SESSION["glpisearchcount2"][$itemtype] > 0) {
echo "<input type='hidden' disabled id='delete_search_count2' name='delete_search_count2' value='1'>";
echo "<a href='#' onClick = \"document.getElementById('delete_search_count2').disabled=false;document.forms['searchform{$itemtype}'].submit();\">";
echo "<img src=\"" . $CFG_GLPI["root_doc"] . "/pics/meta_moins.png\" alt='-' title='" . __s('Delete a global search criterion') . "'></a> ";
}
}
$itemtable = getTableForItemType($itemtype);
}
// Display link item
if ($i > 0) {
echo "<select name='link[{$i}]'>";
echo "<option value='AND' ";
if (is_array($p["link"]) && isset($p["link"][$i]) && $p["link"][$i] == "AND") {
echo "selected";
}
echo ">AND</option>\n";
echo "<option value='OR' ";
if (is_array($p["link"]) && isset($p["link"][$i]) && $p["link"][$i] == "OR") {
echo "selected";
}
echo ">OR</option>\n";
echo "<option value='AND NOT' ";
if (is_array($p["link"]) && isset($p["link"][$i]) && $p["link"][$i] == "AND NOT") {
echo "selected";
}
echo ">AND NOT</option>\n";
echo "<option value='OR NOT' ";
if (is_array($p["link"]) && isset($p["link"][$i]) && $p["link"][$i] == "OR NOT") {
echo "selected";
}
echo ">OR NOT</option>";
echo "</select> ";
}
// display select box to define serach item
echo "<select id='Search{$itemtype}{$i}' name=\"field[{$i}]\" size='1'>";
echo "<option value='view' ";
if (is_array($p['field']) && isset($p['field'][$i]) && $p['field'][$i] == "view") {
echo "selected";
}
echo ">" . __('Items seen') . "</option>\n";
reset($options);
$first_group = true;
$selected = 'view';
foreach ($options as $key => $val) {
// print groups
if (!is_array($val)) {
if (!$first_group) {
echo "</optgroup>\n";
} else {
$first_group = false;
}
echo "<optgroup label='{$val}'>";
} else {
if (!isset($val['nosearch']) || $val['nosearch'] == false) {
echo "<option title=\"" . Html::cleanInputText($val["name"]) . "\" value='{$key}'";
if (is_array($p['field']) && isset($p['field'][$i]) && $key == $p['field'][$i]) {
echo "selected";
$selected = $key;
}
echo ">" . Toolbox::substr($val["name"], 0, 28) . "</option>\n";
}
}
}
if (!$first_group) {
echo "</optgroup>\n";
}
echo "<option value='all' ";
if (is_array($p['field']) && isset($p['field'][$i]) && $p['field'][$i] == "all") {
echo "selected";
}
echo ">" . __('All') . "</option>";
echo "</select> \n";
echo "</td><td class='left'>";
echo "<div id='SearchSpan{$itemtype}{$i}'>\n";
$_POST['itemtype'] = $itemtype;
$_POST['num'] = $i;
$_POST['field'] = $selected;
$_POST['searchtype'] = is_array($p['searchtype']) && isset($p['searchtype'][$i]) ? $p['searchtype'][$i] : "";
$_POST['value'] = is_array($p['contains']) && isset($p['contains'][$i]) ? stripslashes($p['contains'][$i]) : "";
include GLPI_ROOT . "/ajax/searchoption.php";
echo "</div>\n";
$params = array('field' => '__VALUE__', 'itemtype' => $itemtype, 'num' => $i, 'value' => $_POST["value"], 'searchtype' => $_POST["searchtype"]);
Ajax::updateItemOnSelectEvent("Search{$itemtype}{$i}", "SearchSpan{$itemtype}{$i}", $CFG_GLPI["root_doc"] . "/ajax/searchoption.php", $params, false);
echo "</td></tr>\n";
}
$metanames = array();
if (is_array($linked) && count($linked) > 0) {
for ($i = 0; $i < $_SESSION["glpisearchcount2"][$itemtype]; $i++) {
echo "<tr><td class='left'>";
$rand = mt_rand();
// Display link item (not for the first item)
echo "<select name='link2[{$i}]'>";
echo "<option value='AND' ";
if (is_array($p['link2']) && isset($p['link2'][$i]) && $p['link2'][$i] == "AND") {
echo "selected";
}
echo ">AND</option>\n";
echo "<option value='OR' ";
if (is_array($p['link2']) && isset($p['link2'][$i]) && $p['link2'][$i] == "OR") {
echo "selected";
}
echo ">OR</option>\n";
echo "<option value='AND NOT' ";
if (is_array($p['link2']) && isset($p['link2'][$i]) && $p['link2'][$i] == "AND NOT") {
echo "selected";
}
echo ">AND NOT</option>\n";
echo "<option value='OR NOT' ";
if (is_array($p['link2']) && isset($p['link2'][$i]) && $p['link2'][$i] == "OR NOT") {
echo "selected";
}
echo ">OR NOT</option>\n";
echo "</select> ";
// Display select of the linked item type available
echo "<select name='itemtype2[{$i}]' id='itemtype2_" . $itemtype . "_" . $i . "_{$rand}'>";
echo "<option value=''>" . Dropdown::EMPTY_VALUE . "</option>";
foreach ($linked as $key) {
if (!isset($metanames[$key])) {
$linkitem = new $key();
$metanames[$key] = $linkitem->getTypeName();
}
echo "<option value='{$key}'>" . Toolbox::substr($metanames[$key], 0, 20) . "</option>\n";
}
echo "</select> ";
echo "</td><td>";
// Ajax script for display search met& item
echo "<span id='show_" . $itemtype . "_" . $i . "_{$rand}'> </span>\n";
$params = array('itemtype' => '__VALUE__', 'num' => $i, 'field' => is_array($p['field2']) && isset($p['field2'][$i]) ? $p['field2'][$i] : "", 'value' => is_array($p['contains2']) && isset($p['contains2'][$i]) ? $p['contains2'][$i] : "", 'searchtype2' => is_array($p['searchtype2']) && isset($p['searchtype2'][$i]) ? $p['searchtype2'][$i] : "");
Ajax::updateItemOnSelectEvent("itemtype2_" . $itemtype . "_" . $i . "_{$rand}", "show_" . $itemtype . "_" . $i . "_{$rand}", $CFG_GLPI["root_doc"] . "/ajax/updateMetaSearch.php", $params, false);
if (is_array($p['itemtype2']) && isset($p['itemtype2'][$i]) && !empty($p['itemtype2'][$i])) {
$params['itemtype'] = $p['itemtype2'][$i];
Ajax::updateItem("show_" . $itemtype . "_" . $i . "_{$rand}", $CFG_GLPI["root_doc"] . "/ajax/updateMetaSearch.php", $params, false);
echo "<script type='text/javascript' >";
echo "window.document.getElementById('itemtype2_" . $itemtype . "_" . $i . "_{$rand}').value='" . $p['itemtype2'][$i] . "';";
echo "</script>\n";
}
echo "</td></tr></table>";
echo "</td></tr>\n";
}
}
echo "</table>\n";
echo "</td>\n";
echo "<td width='150px'>";
echo "<table width='100%'>";
// Display deleted selection
echo "<tr>";
// Display submit button
echo "<td width='80' class='center'>";
echo "<input type='submit' value=\"" . _sx('button', 'Search') . "\" class='submit' >";
echo "</td><td>";
Bookmark::showSaveButton(Bookmark::SEARCH, $itemtype);
echo "<a href='{$target}?reset=reset' >";
echo " <img title=\"" . __s('Blank') . "\" alt=\"" . __s('Blank') . "\" src='" . $CFG_GLPI["root_doc"] . "/templates/infotel/pics/reset.png' class='calendrier'></a>";
echo "</td></tr></table>\n";
echo "</td></tr>";
echo "</table>\n";
// For dropdown
echo "<input type='hidden' name='itemtype' value='{$itemtype}'>";
// Reset to start when submit new search
echo "<input type='hidden' name='start' value='0'>";
Html::closeForm();
}