/** * Print a nice HTML head for every page * * @param $title title of the page * @param $url not used anymore (default '') * @param $sector sector in which the page displayed is (default 'none') * @param $item item corresponding to the page displayed (default 'none') * @param $option option corresponding to the page displayed (default '') **/ static function header($title, $url = '', $sector = "none", $item = "none", $option = "") { global $CFG_GLPI, $PLUGIN_HOOKS, $HEADER_LOADED, $DB; // If in modal : display popHeader if (isset($_REQUEST['_in_modal']) && $_REQUEST['_in_modal']) { return self::popHeader($title, $url); } // Print a nice HTML-head for every page if ($HEADER_LOADED) { return; } $HEADER_LOADED = true; // Force lower case for sector and item $sector = strtolower($sector); $item = strtolower($item); self::includeHeader($title); $body_class = "layout_" . $_SESSION['glpilayout']; if (strpos($_SERVER['REQUEST_URI'], "form.php") !== false && isset($_GET['id']) && $_GET['id'] > 0) { if (!CommonGLPI::isLayoutExcludedPage()) { $body_class .= " form"; } else { $body_class = ""; } } // Body echo "<body class='{$body_class}'>"; // Generate array for menu and check right if (!isset($_SESSION['glpimenu']) || !is_array($_SESSION['glpimenu']) || count($_SESSION['glpimenu']) == 0) { // INVENTORY //don't change order in array $showallassets = false; $menu = self::getMenuInfos(); // Permit to plugins to add entry to others sector ! if (isset($PLUGIN_HOOKS["menu_toadd"]) && count($PLUGIN_HOOKS["menu_toadd"])) { foreach ($PLUGIN_HOOKS["menu_toadd"] as $plugin => $items) { if (count($items)) { foreach ($items as $key => $val) { if (isset($menu[$key])) { $menu[$key]['types'][] = $val; } } } } } foreach ($menu as $category => $datas) { if (isset($datas['types']) && count($datas['types'])) { foreach ($datas['types'] as $type) { if ($data = $type::getMenuContent()) { // Multi menu entries management if (isset($data['is_multi_entries']) && $data['is_multi_entries']) { if (!isset($menu[$category]['content'])) { $menu[$category]['content'] = array(); } $menu[$category]['content'] += $data; } else { $menu[$category]['content'][strtolower($type)] = $data; } } } } // Define default link : if (isset($menu[$category]['content']) && count($menu[$category]['content'])) { foreach ($menu[$category]['content'] as $val) { if (isset($val['page'])) { $menu[$category]['default'] = $val['page']; break; } } } } $allassets = array('Computer', 'Monitor', 'Peripheral', 'NetworkEquipment', 'Phone', 'Printer'); foreach ($allassets as $type) { if (isset($menu['assets']['content'][strtolower($type)])) { $menu['assets']['content']['allassets']['title'] = __('Global'); $menu['assets']['content']['allassets']['shortcut'] = ''; $menu['assets']['content']['allassets']['page'] = '/front/allassets.php'; $menu['assets']['content']['allassets']['links']['search'] = '/front/allassets.php'; break; } } // PLUGINS // if (isset($PLUGIN_HOOKS["menu_entry"]) && count($PLUGIN_HOOKS["menu_entry"])) { // $plugins = array(); // // foreach ($PLUGIN_HOOKS["menu_entry"] as $plugin => $active) { // if ($active) { // true or a string // $plugins[$plugin] = Plugin::getInfo($plugin); // } // } // // if (count($plugins)) { // $list = array(); // // foreach ($plugins as $key => $val) { // $list[$key] = $val["name"]; // } // asort($list); // // foreach ($list as $key => $val) { // $menu['plugins']['content'][$key]['title'] = $val; // $menu['plugins']['content'][$key]['page'] = '/plugins/'.$key.'/'; // // if (is_string($PLUGIN_HOOKS["menu_entry"][$key])) { // $menu['plugins']['content'][$key]['page'] .= $PLUGIN_HOOKS["menu_entry"][$key]; // } // // // Set default link for plugins // if (!isset($menu['plugins']['default'])) { // $menu['plugins']['default'] = $menu['plugins']['content'][$key]['page']; // } // // if (($sector == "plugins") // && ($item == $key)) { // // if (isset($PLUGIN_HOOKS["submenu_entry"][$key]) // && is_array($PLUGIN_HOOKS["submenu_entry"][$key])) { // // foreach ($PLUGIN_HOOKS["submenu_entry"][$key] as $name => $link) { // // New complete option management // if ($name == "options") { // $menu['plugins']['content'][$key]['options'] = $link; // } else { // Keep it for compatibility // // if (is_array($link)) { // // Simple link option // if (isset($link[$option])) { // $menu['plugins']['content'][$key]['links'][$name] // ='/plugins/'.$key.'/'.$link[$option]; // } // } else { // $menu['plugins']['content'][$key]['links'][$name] // ='/plugins/'.$key.'/'.$link; // } // } // } // } // } // } // } // } $_SESSION['glpimenu'] = $menu; // echo 'menu load'; } else { $menu = $_SESSION['glpimenu']; } $already_used_shortcut = array('1'); echo "<div id='header'>"; echo "<div id='header_top'>"; echo "<div id='c_logo'>"; echo Html::link('', $CFG_GLPI["root_doc"] . "/front/central.php", array('accesskey' => '1', 'title' => __('Home'))); echo "</div>"; /// Prefs / Logout link echo "<div id='c_preference' >"; echo "<ul>"; echo "<li id='deconnexion'>"; echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/logout.php"; /// logout witout noAuto login for extauth if (isset($_SESSION['glpiextauth']) && $_SESSION['glpiextauth']) { echo "?noAUTO=1"; } echo "' title=\"" . __s('Logout') . "\">"; echo "<span id='logout_icon' title=\"" . __s('Logout') . "\" alt=\"" . __s('Logout') . "\" class='button-icon' />"; echo "</a>"; echo "</li>\n"; echo "<li id='preferences_link'><a href='" . $CFG_GLPI["root_doc"] . "/front/preference.php' title=\"" . __s('My settings') . "\">"; echo "<span id='preferences_icon' title=\"" . __s('My settings') . "\" alt=\"" . __s('My settings') . "\" class='button-icon' /></span>"; // check user id : header used for display messages when session logout if (Session::getLoginUserID()) { echo "<span id='myname'>"; echo formatUserName(0, $_SESSION["glpiname"], $_SESSION["glpirealname"], $_SESSION["glpifirstname"], 0, 20); echo "</span>"; } echo "</a></li>"; /// Bookmark load echo "<li id='bookmark_link'>"; Ajax::createIframeModalWindow('loadbookmark', $CFG_GLPI["root_doc"] . "/front/bookmark.php?action=load", array('title' => __('Load a bookmark'), 'reloadonclose' => true)); echo "<a href='#' onClick=\"" . Html::jsGetElementbyID('loadbookmark') . ".dialog('open');\">"; echo "<span id='bookmark_icon' title=\"" . __s('Load a bookmark') . "\" alt=\"" . __s('Load a bookmark') . "\" class='button-icon' />"; echo "</a></li>"; echo "<li id='help_link'><a href='" . (empty($CFG_GLPI["central_doc_url"]) ? "http://glpi-project.org/help-central" : $CFG_GLPI["central_doc_url"]) . "' target='_blank' title=\"" . __s('Help') . "\">" . "<span id='help_icon' title=\"" . __s('Help') . "\" alt=\"" . __s('Help') . "\" class='button-icon' />"; "</a></li>"; echo "<li id='language_link'><a href='" . $CFG_GLPI["root_doc"] . "/front/preference.php?forcetab=User\$1' title=\"" . addslashes(Dropdown::getLanguageName($_SESSION['glpilanguage'])) . "\">" . Dropdown::getLanguageName($_SESSION['glpilanguage']) . "</a></li>"; /// Search engine echo "<li id='c_recherche'>\n"; if ($CFG_GLPI['allow_search_global']) { echo "<form method='get' action='" . $CFG_GLPI["root_doc"] . "/front/search.php'>\n"; echo "<span id='champRecherche'><input size='15' type='text' name='globalsearch'\n placeholder='" . __s('Search') . "'>"; echo "</span>"; Html::closeForm(); } echo "</li>"; echo "</ul>"; echo "</div>\n"; echo "</div>"; ///Main menu echo "<div id='c_menu'>"; echo "<ul id='menu'>"; // Get object-variables and build the navigation-elements $i = 1; foreach ($menu as $part => $data) { if (isset($data['content']) && count($data['content'])) { $menu_class = ""; if (isset($menu[$sector]) && $menu[$sector]['title'] == $data['title']) { $menu_class = "active"; } echo "<li id='menu{$i}' class='{$menu_class}' onmouseover=\"javascript:menuAff('menu{$i}','menu');\" >"; $link = "#"; if (isset($data['default']) && !empty($data['default'])) { $link = $CFG_GLPI["root_doc"] . $data['default']; } if (Toolbox::strlen($data['title']) > 14) { $data['title'] = Toolbox::substr($data['title'], 0, 14) . "..."; } echo "<a href='{$link}' class='itemP'>" . $data['title'] . "</a>"; echo "<ul class='ssmenu'>"; // list menu item foreach ($data['content'] as $key => $val) { $menu_class = ""; $tmp_active_item = explode("/", $item); $active_item = array_pop($tmp_active_item); if (isset($menu[$sector]['content']) && isset($menu[$sector]['content'][$active_item]) && isset($val['title']) && $menu[$sector]['content'][$active_item]['title'] == $val['title']) { $menu_class = "active"; } if (isset($val['page']) && isset($val['title'])) { echo "<li class='{$menu_class}'><a href='" . $CFG_GLPI["root_doc"] . $val['page'] . "'"; if (isset($val['shortcut']) && !empty($val['shortcut'])) { if (!isset($already_used_shortcut[$val['shortcut']])) { echo " accesskey='" . $val['shortcut'] . "'"; $already_used_shortcut[$val['shortcut']] = $val['shortcut']; } echo ">" . Toolbox::shortcut($val['title'], $val['shortcut']) . "</a></li>\n"; } else { echo ">" . $val['title'] . "</a></li>\n"; } } } echo "</ul></li>"; $i++; } } echo "</ul>"; // #menu // Display MENU ALL echo "<div id='show_all_menu' class='invisible'>"; $items_per_columns = 15; $i = -1; foreach ($menu as $part => $data) { if (isset($data['content']) && count($data['content'])) { echo "<table class='all_menu_block'>"; $link = "#"; if (isset($data['default']) && !empty($data['default'])) { $link = $CFG_GLPI["root_doc"] . $data['default']; } echo "<tr><td class='tab_bg_1 b'>"; echo "<a href='{$link}' title=\"" . $data['title'] . "\" class='itemP'>" . $data['title'] . "</a>"; echo "</td></tr>"; $i++; // list menu item foreach ($data['content'] as $key => $val) { /*if ($i > $items_per_columns) { $i = 0; echo "</table></td><td class='top'><table>"; }*/ if (isset($val['page']) && isset($val['title'])) { echo "<tr><td><a href='" . $CFG_GLPI["root_doc"] . $val['page'] . "'"; if (isset($data['shortcut']) && !empty($data['shortcut'])) { echo " accesskey='" . $val['shortcut'] . "'"; } echo ">" . $val['title'] . "</a></td></tr>\n"; $i++; } } echo "</table>"; } } echo "</div>"; Html::scriptStart(); echo self::jsGetElementbyID('show_all_menu') . ".dialog({\n height: 'auto',\n width: 'auto',\n modal: true,\n autoOpen: false\n });"; echo Html::scriptEnd(); /// MENU ALL echo "<a href='#' onClick=\"" . self::jsGetElementbyID('show_all_menu') . ".dialog('open');\"\n id='menu_all_button' class='button-icon'>"; echo "</a>"; echo "</div>"; // End navigation bar // End headline // Le fil d ariane echo "<div id='c_ssmenu2' >"; echo "<ul>"; // Display item echo "<li class='breadcrumb_item'><a href='" . $CFG_GLPI["root_doc"] . "/front/central.php' title=\"" . __s('Home') . "\">" . __('Home') . "</a></li>"; if (isset($menu[$sector])) { $link = "/front/central.php"; if (isset($menu[$sector]['default'])) { $link = $menu[$sector]['default']; } echo "<li class='breadcrumb_item'><a href='" . $CFG_GLPI["root_doc"] . $link . "' title=\"" . $menu[$sector]['title'] . "\">" . $menu[$sector]['title'] . "</a></li>"; } if (isset($menu[$sector]['content'][$item])) { // Title $with_option = false; if (!empty($option) && isset($menu[$sector]['content'][$item]['options'][$option]['title']) && isset($menu[$sector]['content'][$item]['options'][$option]['page'])) { $with_option = true; } if (isset($menu[$sector]['content'][$item]['page'])) { echo "<li class='breadcrumb_item'><a href='" . $CFG_GLPI["root_doc"] . $menu[$sector]['content'][$item]['page'] . "' " . ($with_option ? "" : "class='here'") . " title=\"" . $menu[$sector]['content'][$item]['title'] . "\" >" . $menu[$sector]['content'][$item]['title'] . "</a>" . "</li>"; } if ($with_option) { echo "<li class='breadcrumb_item'><a href='" . $CFG_GLPI["root_doc"] . $menu[$sector]['content'][$item]['options'][$option]['page'] . "' class='here' title=\"" . $menu[$sector]['content'][$item]['options'][$option]['title'] . "\" >"; echo self::resume_name($menu[$sector]['content'][$item]['options'][$option]['title'], 17); echo "</a></li>"; } $links = array(); // Item with Option case if (!empty($option) && isset($menu[$sector]['content'][$item]['options'][$option]['links']) && is_array($menu[$sector]['content'][$item]['options'][$option]['links'])) { $links = $menu[$sector]['content'][$item]['options'][$option]['links']; // Without option case : only item links } else { if (isset($menu[$sector]['content'][$item]['links']) && is_array($menu[$sector]['content'][$item]['links'])) { $links = $menu[$sector]['content'][$item]['links']; } } // Add item echo "<li class='icons_block'>"; echo "<span>"; if (isset($links['add'])) { echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_add.png", array('alt' => __('Add'), 'url' => $CFG_GLPI["root_doc"] . $links['add'])); } else { echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_add_off.png", array('alt' => __('Add'))); } echo "</span>"; // Search Item echo "<span>"; if (isset($links['search'])) { echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_search.png", array('alt' => __('Search'), 'url' => $CFG_GLPI["root_doc"] . $links['search'])); } else { echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_search_off.png", array('alt' => __('Search'))); } echo "</span>"; // Links if (count($links) > 0) { foreach ($links as $key => $val) { switch ($key) { case "add": case "search": break; case "template": echo "<span>"; echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_addtemplate.png", array('alt' => __('Manage templates...'), 'url' => $CFG_GLPI["root_doc"] . $val)); echo "</span>"; break; case "showall": echo "<span>"; echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_showall.png", array('alt' => __('Show all'), 'url' => $CFG_GLPI["root_doc"] . $val)); echo "</span>"; break; case "summary": echo "<span>"; echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_show.png", array('alt' => __('Summary'), 'url' => $CFG_GLPI["root_doc"] . $val)); echo "</span>"; break; case "config": echo "<span>"; echo Html::image($CFG_GLPI["root_doc"] . "/pics/menu_config.png", array('alt' => __('Setup'), 'url' => $CFG_GLPI["root_doc"] . $val)); echo "</span>"; break; default: echo "<span>" . Html::link($key, $CFG_GLPI["root_doc"] . $val) . "</span>"; break; } } } echo "</li>"; } else { echo "<li> </li>"; } // Add common items // Profile selector // check user id : header used for display messages when session logout if (Session::getLoginUserID()) { self::showProfileSelecter($CFG_GLPI["root_doc"] . "/front/central.php"); } echo "</ul>"; echo "</div>"; echo "</div>\n"; // fin header echo "<div id='page' >"; if ($DB->isSlave() && !$DB->first_connection) { echo "<div id='dbslave-float'>"; echo "<a href='#see_debug'>" . __('MySQL replica: read only') . "</a>"; echo "</div>"; } // Back to top Html::scriptStart(); echo "\$(document).ready(function(){\n BackToTop({\n text : '^',\n class: 'vsubmit',\n autoShow : true,\n timeEffect : 100,\n autoShowOffset : '0',\n appearMethod : '',\n effectScroll : 'linear'\n });\n });"; echo Html::scriptEnd(); // call static function callcron() every 5min CronTask::callCron(); self::displayMessageAfterRedirect(); }
/** * Display responsive menu * @since 0.90.1 * @param $menu array of menu items * - key : plugin system name * - value : array of options * * id : html id attribute * * default : defaul url * * title : displayed label * * content : menu sub items, array with theses options : * - page : url * - title : displayed label * - shortcut : keyboard shortcut letter */ static function displayMenuAll($menu = array()) { global $CFG_GLPI, $PLUGIN_HOOKS; // Display MENU ALL echo "<div id='show_all_menu' class='invisible'>"; $items_per_columns = 15; $i = -1; foreach ($menu as $part => $data) { if (isset($data['content']) && count($data['content'])) { echo "<table class='all_menu_block'>"; $link = "#"; if (isset($data['default']) && !empty($data['default'])) { $link = $CFG_GLPI["root_doc"] . $data['default']; } echo "<tr><td class='tab_bg_1 b'>"; echo "<a href='{$link}' title=\"" . $data['title'] . "\" class='itemP'>" . $data['title'] . "</a>"; echo "</td></tr>"; $i++; // list menu item foreach ($data['content'] as $key => $val) { if (isset($val['page']) && isset($val['title'])) { echo "<tr><td>"; if (isset($PLUGIN_HOOKS["helpdesk_menu_entry"][$key]) && is_string($PLUGIN_HOOKS["helpdesk_menu_entry"][$key])) { echo "<a href='" . $CFG_GLPI["root_doc"] . "/plugins/" . $key . $val['page'] . "'"; } else { echo "<a href='" . $CFG_GLPI["root_doc"] . $val['page'] . "'"; } if (isset($data['shortcut']) && !empty($data['shortcut'])) { echo " accesskey='" . $val['shortcut'] . "'"; } echo ">"; echo $val['title'] . "</a></td></tr>\n"; $i++; } } echo "</table>"; } } echo "</div>"; // init menu in jquery dialog Html::scriptStart(); echo self::jsGetElementbyID('show_all_menu') . ".dialog({\n height: 'auto',\n width: 'auto',\n modal: true,\n autoOpen: false\n });"; echo Html::scriptEnd(); /// Button to toggle responsive menu echo "<a href='#' onClick=\"" . self::jsGetElementbyID('show_all_menu') . ".dialog('open');\"\n id='menu_all_button' class='button-icon'>"; echo "</a>"; echo "</div>"; }
public function showForm($ID, $options = array()) { global $CFG_GLPI; $this->initForm($ID, $options); $this->showFormHeader($options); $relation = new PluginRelationRelation(); echo "<tr class='tab_bg_1'>"; //Nombre de la clase en GLPI echo "<td>" . __('Nombre de la clase', 'Nombre de la clase') . ": </td><td>"; //Html::autocompletionTextField($this,"name",array('size' => "15")); $relation->dropdownType("name", $relation->getIdDropdown($this->fields["name"])); echo "</td>"; //Nombre a mostrar en los desplegables para la clase echo "<td>" . __('Nombre a mostrar para la clase', 'Nombre a mostrar para la clase') . ": </td>"; echo "<td>"; Html::autocompletionTextField($this, "viewname", array('size' => "15")); echo "</td>"; echo "</tr>"; echo "<tr class='tab_bg_1'>"; //Descripción echo "<td>" . __('Descripción', 'Descripción') . ": </td><td>"; Html::autocompletionTextField($this, "comment", array('size' => "15")); echo "</td>"; //Imagen echo "<td>" . __('Imagen', 'Imagen') . ": </td>"; echo "<td>"; //file //$rep = "../plugins/relation/pics/"; $rep = '../plugins/relation/pics/'; $dir = opendir($rep); echo "<select name=\"img\" id=\"img\">"; $sel = ""; while ($f = readdir($dir)) { if (is_file($rep . $f)) { if ($f == rtrim($this->fields["img"])) { $sel = "selected"; } else { $sel = ""; } echo "<option value='" . $f . "' data-image='" . $_SESSION["glpiroot"] . "/plugins/relation/pics/" . $f . "' " . $sel . ">" . $f . "</option>"; } } echo "</select> "; closedir($dir); echo "</td>"; echo "</tr>"; echo "<tr class='tab_bg_1'>"; //Nombre de la clase en GLPI echo "<td>" . __('Es visible', 'Es visible') . "</td><td>"; //Html::autocompletionTextField($this,"name",array('size' => "15")); Dropdown::showYesNo('is_visible', $this->fields['is_visible']); echo "</td>"; //Nombre a mostrar en los desplegables para la clase echo "<td></td>"; echo "<td></td>"; echo "</tr>"; $this->showFormButtons($options); Html::scriptStart(); echo "\$(document).ready(function(e){\n\t\t\ttry {\n\t\t\t\$('#img').msDropDown();\n\t\t\t} catch(e) {\n\t\t\talert(e.message);\n\t\t\t}\n\t\t\t});"; echo Html::scriptEnd(); return true; }
/** * Print a nice HTML head for help page * * @param $title title of the page * @param $url not used anymore (default '') **/ static function helpHeader($title, $url = '') { global $CFG_GLPI, $HEADER_LOADED, $PLUGIN_HOOKS, $DB; // Print a nice HTML-head for help page if ($HEADER_LOADED) { return; } $HEADER_LOADED = true; self::includeHeader($title); // Body echo "<body>"; echo ' <nav class="navbar navbar-default" id="menuHeader"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="' . $CFG_GLPI["root_doc"] . '/front/central.php"> <img src="' . $CFG_GLPI["root_doc"] . '/pics/fd_logo1.png" style="margin-top:-4px;" /> <span class=\'invisible\'>Logo</span> </a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav">'; echo "<li id='menu1'>"; echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/helpdesk.public.php' title=\"" . __s('Home') . "\" class='itemP'>" . __('Home') . "</a>"; echo "</li>"; // Create ticket if (Session::haveRight("ticket", CREATE)) { echo "<li id='menu2'>"; echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/helpdesk.public.php?create_ticket=1' " . "title=\"" . __s('Create a ticket') . "\" class='itemP'>" . __('Create a ticket') . "</a>"; echo "</li>"; } // Suivi ticket if (Session::haveRight("ticket", Ticket::READMY) || Session::haveRight("followup", TicketFollowup::SEEPUBLIC)) { echo "<li id='menu3'>"; echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/ticket.php' title=\"" . __s('Ticket followup') . "\" class='itemP'>" . _n('Ticket', 'Tickets', Session::getPluralNumber()) . "</a>"; echo "</li>"; } // Reservation if (Session::haveRight("reservation", ReservationItem::RESERVEANITEM)) { echo "<li id='menu4'>"; echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/reservationitem.php' title=\"" . _sn('Reservation', 'Reservations', Session::getPluralNumber()) . "\" class='itemP'>" . _n('Reservation', 'Reservations', Session::getPluralNumber()) . "</a>"; echo "</li>"; } // FAQ if (Session::haveRight('knowbase', KnowbaseItem::READFAQ)) { echo "<li id='menu5' >"; echo "<a href='" . $CFG_GLPI["root_doc"] . "/front/helpdesk.faq.php' title=\"" . __s('FAQ') . "\" class='itemP'>" . __('FAQ') . "</a>"; echo "</li>"; } // PLUGINS $plugins = array(); if (isset($PLUGIN_HOOKS["helpdesk_menu_entry"]) && count($PLUGIN_HOOKS["helpdesk_menu_entry"])) { foreach ($PLUGIN_HOOKS["helpdesk_menu_entry"] as $plugin => $active) { if ($active) { $plugins[$plugin] = Plugin::getInfo($plugin); } } } if (isset($plugins) && count($plugins) > 0) { $list = array(); foreach ($plugins as $key => $val) { $list[$key] = $val["name"]; } asort($list); //echo "<li id='menu5' onmouseover=\"javascript:menuAff('menu5','menu');\">"; echo "<li id='menu5'>"; echo "<a href='#' title=\"" . _sn('Plugin', 'Plugins', Session::getPluralNumber()) . "\" class='itemP'>" . __('Plugins') . "</a>"; // default none echo "<ul class='ssmenu'>"; // list menu item foreach ($list as $key => $val) { $link = ""; if (is_string($PLUGIN_HOOKS["helpdesk_menu_entry"][$key])) { $link = $PLUGIN_HOOKS["helpdesk_menu_entry"][$key]; } echo "<li><a href='" . $CFG_GLPI["root_doc"] . "/plugins/" . $key . $link . "'>" . $plugins[$key]["name"] . "</a></li>\n"; } echo "</ul></li>"; } echo "<div class='sep'></div>"; echo '</ul>'; echo '<ul class="nav navbar-nav navbar-right">'; $sql_photo2 = "SELECT picture\n\t\t\t\t\t\t\t\tFROM glpi_users\n\t\t\t\t\t\t\t\tWHERE id = " . $_SESSION["glpiID"] . " "; $res_photo2 = $DB->query($sql_photo2); $pic2 = $DB->result($res_photo2, 0, 'picture'); $photo_url2 = User::getURLForPicture($pic2); echo '<li class="dropdown">'; echo '<a href="#" style="padding:0px; margin:0px;" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><img src="' . $photo_url2 . '" class="avatar" alt="" title="' . formatUserName(0, $_SESSION["glpiname"], $_SESSION["glpirealname"], $_SESSION["glpifirstname"], 0, 20) . '" /></a>'; echo "<ul class=\"dropdown-menu\" role=\"menu\">"; echo "<li><a href='" . (empty($CFG_GLPI["central_doc_url"]) ? "http://glpi-project.org/help-central" : $CFG_GLPI["central_doc_url"]) . "' target='_blank' title=\"" . __s('Help') . "\"><i class='fa fa-question-circle'></i> " . __('Help') . "</a></li>"; echo "<li><a href='" . $CFG_GLPI["root_doc"] . "/front/preference.php' title=\"" . __s('My settings') . "\"><i class='fa fa-cog'></i> " . __('My settings') . "</a></li>"; echo "<li><a href='" . $CFG_GLPI["root_doc"] . "/front/preference.php' title=\"" . addslashes(Dropdown::getLanguageName($_SESSION['glpilanguage'])) . "\"><i class='fa fa-flag'></i> " . Dropdown::getLanguageName($_SESSION['glpilanguage']) . "</a></li>"; echo "<li id='deconnexion'><a href='" . $CFG_GLPI["root_doc"] . "/front/logout.php"; // logout witout noAuto login for extauth if (isset($_SESSION['glpiextauth']) && $_SESSION['glpiextauth']) { echo "?noAUTO=1"; } echo "' title=\"" . __s('Logout') . "\"><i class='fa fa-lock'></i> " . __('Logout') . "</a>"; // check user id : header used for display messages when session logout if (Session::getLoginUserID()) { //echo " ("; // echo formatUserName (0, $_SESSION["glpiname"], $_SESSION["glpirealname"], $_SESSION["glpifirstname"], 0, 20); // echo ")"; } echo "</li>\n"; echo "</ul>"; echo ' </li>'; echo ' </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> '; echo '<nav class="navbar navbar-default nav2" style="margin-top: -20px;">'; // Display item echo "<div id='c_ssmenu2'>"; echo "<ul>"; echo "<li><a href='" . $CFG_GLPI["root_doc"] . "/front/helpdesk.public.php' title=\"" . __s('Home') . "\">" . __('Home') . "></a></li>"; echo "<li> </li>"; if (Session::haveRightsOr('ticketvalidation', array(TicketValidation::VALIDATEREQUEST, TicketValidation::VALIDATEINCIDENT))) { $opt = array(); $opt['reset'] = 'reset'; $opt['criteria'][0]['field'] = 55; // validation status $opt['criteria'][0]['searchtype'] = 'equals'; $opt['criteria'][0]['value'] = TicketValidation::WAITING; $opt['criteria'][0]['link'] = 'AND'; $opt['criteria'][1]['field'] = 59; // validation aprobator $opt['criteria'][1]['searchtype'] = 'equals'; $opt['criteria'][1]['value'] = Session::getLoginUserID(); $opt['criteria'][1]['link'] = 'AND'; $url_validate = $CFG_GLPI["root_doc"] . "/front/ticket.php?" . Toolbox::append_params($opt, '&'); $pic_validate = "<a href='{$url_validate}'>" . "<img title=\"" . __s('Ticket waiting for your approval') . "\" alt=\"" . __s('Ticket waiting for your approval') . "\" src='" . $CFG_GLPI["root_doc"] . "/pics/menu_showall.png'></a>"; echo "<li>{$pic_validate}</li>\n"; } echo "<li> </li>"; if (Session::haveRight('ticket', CREATE) && strpos($_SERVER['PHP_SELF'], "ticket")) { echo "<li><a href='" . $CFG_GLPI["root_doc"] . "/front/helpdesk.public.php?create_ticket=1'>"; echo "<img src='" . $CFG_GLPI["root_doc"] . "/pics/menu_add.png' title=\"" . __s('Add') . "\" alt=\"" . __s('Add') . "\"></a></li>"; } echo "<li> </li>"; /// Bookmark load echo "<li>"; Ajax::createIframeModalWindow('loadbookmark', $CFG_GLPI["root_doc"] . "/front/bookmark.php?action=load", array('title' => __('Load a bookmark'), 'reloadonclose' => true)); echo "<a href='#' onClick=\"" . Html::jsGetElementbyID('loadbookmark') . ".dialog('open');\"\">"; echo "<img src='" . $CFG_GLPI["root_doc"] . "/pics/bookmark.png' title=\"" . __s('Load a bookmark') . "\" alt=\"" . __s('Load a bookmark') . "\">"; echo "</a></li>"; // check user id : header used for display messages when session logout if (Session::getLoginUserID()) { self::showProfileSelecter($CFG_GLPI["root_doc"] . "/front/helpdesk.public.php"); } echo "</ul></div>"; //end c_ssmenu2 Html::scriptStart(); echo self::jsGetElementbyID('show_all_menu') . ".dialog({\n height: 'auto',\n width: 'auto',\n modal: true,\n autoOpen: false\n });"; echo Html::scriptEnd(); echo " "; // echo "</li>"; echo '</nav>'; }
/** * @param $item CommonITILObject * @param $type */ static function alertValidation(CommonITILObject $item, $type) { global $CFG_GLPI; // No alert for new item if ($item->isNewID($item->getID())) { return; } $status = array_merge($item->getClosedStatusArray(), $item->getSolvedStatusArray()); $message = __s("This item is waiting for approval, do you really want to resolve or close it?"); switch ($type) { case 'status': Html::scriptStart(); echo "\$('[name=\"status\"]').change(function() {\n var status_ko = 0;\n var input_status = \$(this).val();\n if (input_status != undefined) {\n if (("; $first = true; foreach ($status as $val) { if (!$first) { echo "||"; } echo "input_status == {$val}"; $first = false; } echo " )\n && input_status != " . $item->fields['status'] . "){\n status_ko = 1;\n }\n }\n if ((status_ko == 1)\n && ('" . $item->fields['global_validation'] . "' == '" . self::WAITING . "')) {\n alert('" . $message . "');\n }\n });"; echo Html::scriptEnd(); break; case 'solution': if (!in_array($item->fields['status'], $status) && $item->fields['global_validation'] == self::WAITING) { Html::displayTitle($CFG_GLPI['root_doc'] . "/pics/warning.png", $message, $message); } break; } }
static function showAssociated($item, $withtemplate = '') { global $DB, $CFG_GLPI; $display_entity = Session::isMultiEntitiesMode(); $numcols = 5; if ($display_entity) { $numcols++; } $ID = $item->getField('id'); $itemtype = get_Class($item); $entity = $item->getEntityID(); $showgroup = true; if (!class_exists($itemtype)) { $datatable = ""; $form = ""; } else { $objeto = new $itemtype(); $datatable = $objeto->getTable(); $form = Toolbox::getItemTypeFormURL($itemtype); } if ($showgroup) { $moreselect = ", g.name AS grp"; $morejoin = " LEFT JOIN glpi_groups AS g ON d.groups_id = g.id"; } else { $numcols--; $moreselect = ""; $morejoin = ""; } if ($withtemplate != 2) { //echo "<form method='post' action=\"".$CFG_GLPI["root_doc"]."/plugins/relation/front/relation.form.php\">"; echo "<form method='post' name='relation_form' id='add_relation_form' action=" . PluginRelationRelation::getFormURL(true) . ">"; } echo "<div align='center'><table class='tab_cadre_fixe'>"; // Children $query4 = "SELECT `name` FROM `{$datatable}` WHERE `id` = '{$ID}'"; $result4 = $DB->query($query4); $thisdata = $DB->fetch_array($result4); echo "<tr><th colspan='" . $numcols . "'>" . __('Elementos relacionados', 'Elementos relacionados') . "</th></tr>"; // CRI 26/11/2015 Cambio de orden de columna tipo de relacion echo "<tr>"; if ($showgroup) { echo "<th>" . __('Tipo Relacion', 'Tipo Relacion') . "</th>"; } echo "<th>" . __('Nombre', 'Nombre') . "</th>"; echo "<th>" . __('Estado', 'Estado') . "</th>"; // CRI 2.0 Añadir Estado del CI 11/12/2014 if ($display_entity) { echo "<th>" . __('Entidad', 'Entidad') . "</th>"; } echo "<th>" . __('Tipo', 'Tipo') . "</th>"; if (Session::haveRight("plugin_relation", CREATE)) { echo "<th> </th>"; } echo "</tr>"; //imprimo las relaciones directas $queryAssociated = "select r.id, r.items_id, r.itemtype, tr.name from glpi_plugin_relation_relations r left join glpi_plugin_relation_typerelations tr on r.relation_type=tr.id where r.parent_id="; $queryAssociated .= $ID . " and r.parent_type='" . $itemtype . "'order by 4,3,2"; $resultAssociated = $DB->query($queryAssociated); if ($DB->numrows($resultAssociated)) { while ($data = $DB->fetch_array($resultAssociated)) { //print_r($data); //echo "<br>"; $nombreClase = $data['itemtype']; $form = Toolbox::getItemTypeFormURL($nombreClase); $objAsociado = new $nombreClase(); $objAsociado->getFromDB($data['items_id']); echo '<tr class="tab_bg_1">'; // CRI 2.0 Cambio de orden de columna tipo de relacion if ($showgroup) { echo '<td align="center">' . $data['name'] . '</td>'; } if ($data['itemtype'] == "User") { $user = getUserName($data['items_id'], 2); echo '<td align="center"><a href="' . $form . '?id=' . $data['items_id'] . '">' . getUserName($data['items_id']) . ' (' . $objAsociado->fields['name'] . ") " . Html::showToolTip($user["comment"], array('link' => $user["link"], 'display' => false)); //getUserName($data['items_id']) echo '</a></td>'; } else { echo '<td align="center"><a href="' . $form . '?id=' . $data['items_id'] . '">' . $objAsociado->fields['name']; if ($_SESSION["glpiis_ids_visible"]) { echo " (" . $data["items_id"] . ")"; } echo '</a></td>'; } echo '<td align="center">' . PluginRelationRelation::getStatusItem($data['itemtype'], $data['items_id']) . '</td>'; //CRI 2.0 Añadir Estado del CI 11/12/2014 if ($display_entity) { if ($objAsociado->fields['entities_id'] == 0) { echo "<td align='center'>" . __('Entidad Raiz', 'Entidad Raiz') . "</td>"; } else { echo "<td align='center'>" . Dropdown::getDropdownName("glpi_entities", $objAsociado->fields['entities_id']) . "</td>"; } //echo "<td align='center'>".$objAsociado->fields['entities_id']."</td>"; } echo '<td align="center">' . PluginRelationRelation::getViewNameClass($data['itemtype']) . '</td>'; // Gobierno TI: [olb26s] uso de funcion getViewNameClass if (Session::haveRight('plugin_relation', CREATE)) { if ($withtemplate < 2) { echo "<td align='center' class='tab_bg_2'><a href='" . $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.form.php?deleterelation=deleterelation&id=" . $data['id'] . "'>" . __('Eliminar', 'Eliminar') . "</a></td>"; } } echo '</tr>'; } } //imprimo las relaciones inversas $queryAssociated = "select r.id, r.parent_id, r.parent_type, tr.invname from glpi_plugin_relation_relations r left join glpi_plugin_relation_typerelations tr on r.relation_type=tr.id where r.items_id="; $queryAssociated .= $ID . " and itemtype='" . $itemtype . "' order by 4,3,2"; $resultAssociated = $DB->query($queryAssociated); if ($DB->numrows($resultAssociated) > 0) { while ($data = $DB->fetch_array($resultAssociated)) { $nombreClase = $data['parent_type']; $form = Toolbox::getItemTypeFormURL($nombreClase); $objAsociado = new $nombreClase(); $objAsociado->getFromDB($data['parent_id']); echo '<tr class="tab_bg_1">'; // CRI 2.0 26/11/2015 Cambio de orden de columna tipo de relacion if ($showgroup) { echo '<td align="center">' . $data['invname'] . '</td>'; } if ($data['parent_type'] == "User") { $user = getUserName($data['parent_id'], 2); echo '<td align="center"><a href="' . $form . '?id=' . $data['parent_id'] . '">' . getUserName($data['parent_id']) . ' (' . $objAsociado->fields['name'] . ") " . Html::showToolTip($user["comment"], array('link' => $user["link"], 'display' => false)); echo '</a></td>'; } else { echo '<td align="center"><a href="' . $form . '?id=' . $data['parent_id'] . '">' . $objAsociado->fields['name']; if ($_SESSION["glpiis_ids_visible"]) { echo " (" . $data["parent_id"] . ")"; } echo '</a></td>'; } echo '<td align="center">' . PluginRelationRelation::getStatusItem($data['parent_type'], $data['parent_id']) . '</td>'; //CRI 2.0 Añadir Estado del CI 11/12/2014 if ($display_entity) { if ($objAsociado->fields['entities_id'] == 0) { echo "<td align='center'>" . __('Entidad Raiz', 'Entidad Raiz') . "</td>"; } else { echo "<td align='center'>" . Dropdown::getDropdownName("glpi_entities", $objAsociado->fields['entities_id']) . "</td>"; } } echo '<td align="center">' . PluginRelationRelation::getViewNameClass($data['parent_type']) . '</td>'; // Gobierno TI: [olb26s] uso de funcion getViewNameClass if (Session::haveRight('plugin_relation', CREATE)) { if ($withtemplate < 2) { echo "<td align='center' class='tab_bg_2'><a href='" . $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.form.php?deleterelation=deleterelation&id=" . $data['id'] . "'>" . __('Eliminar', 'Eliminar') . "</a></td>"; } } echo '</tr>'; } } if (Session::haveRight('plugin_relation', CREATE)) { echo '<tr class="tab_bg_1">'; echo '<td align="center" colspan="' . ($numcols - 1) . '">'; echo '<input type="hidden" name="id" value="' . $ID . '">'; echo '<input type="hidden" name="type" value="' . $itemtype . '">'; PluginRelationRelation::dropdown(array('name' => "childID", 'itemtype' => $itemtype, 'entity' => $entity)); echo '</td>'; echo '<td align="center"><input class="submit" type="submit" value="' . _sx('button', 'Add') . '" name="additem"/></td>'; echo '</tr>'; } if (!empty($withtemplate)) { echo "<input type='hidden' name='is_template' value='1'>"; } echo "</table></div>"; //echo "</form>"; Html::closeForm(); // Imprimir Grafico if (PluginRelationRelation::command_exists('dot') == true) { echo "<br><table class='tab_cadre' cellpadding='2'>"; echo "<tr><th>" . __('Grafico de la Relacion', 'Grafico de la Relacion') . "</th></tr>"; echo "<tr class='tab_bg_1'><td>"; $im = PluginRelationPrototype::relationGraphviz($ID, $itemtype); //echo '<img src="data:image/png;base64,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"/>'; //echo $im; echo "<div id=target></div>"; echo "<div align='center'>"; echo "<a onclick='view_relation_graphviz.dialog(\"open\");' href='#view_relation_graphviz' title='" . __('Relacion') . "'>" . __('Ver relacion', 'relation') . "</a>"; echo "</div>"; Ajax::createModalWindow('view_relation_graphviz', $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.test.php?item_id=" . $ID . "&item_type=" . $itemtype, array('title' => __('Ver Relaciones', 'relation'))); //echo '<img src="data:image/gif;base64,'.base64_encode($im).'"/>'; //echo $CFG_GLPI["root_doc"].'/plugins/relation/front/relation.test.php?item_id='.$ID.'&item_type='.$itemtype; //echo "<img src='".$CFG_GLPI["root_doc"]."/plugins/relation/front/relation.test.php?item_id=$ID&item_type=$itemtype' alt=''>"; //echo file_get_contents($CFG_GLPI["root_doc"]."/plugins/relation/front/relation.test.php?item_id=".$ID."&item_type=".$itemtype); echo "</td></tr>"; echo "</table>"; Html::scriptStart(); echo "\$(document).ready(function(){\n\t\t\t\t\$('#target').load('" . $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.test.php?item_id=" . $ID . "&item_type=" . $itemtype . "');\n\t\t\t\t});"; echo Html::scriptEnd(); } }