first commit
This commit is contained in:
429
inc/netpoint.class.php
Normal file
429
inc/netpoint.class.php
Normal file
@ -0,0 +1,429 @@
|
||||
<?php
|
||||
/**
|
||||
* ---------------------------------------------------------------------
|
||||
* GLPI - Gestionnaire Libre de Parc Informatique
|
||||
* Copyright (C) 2015-2020 Teclib' and contributors.
|
||||
*
|
||||
* http://glpi-project.org
|
||||
*
|
||||
* based on GLPI - Gestionnaire Libre de Parc Informatique
|
||||
* Copyright (C) 2003-2014 by the INDEPNET Development Team.
|
||||
*
|
||||
* ---------------------------------------------------------------------
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This file is part of GLPI.
|
||||
*
|
||||
* GLPI is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GLPI is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GLPI. If not, see <http://www.gnu.org/licenses/>.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
use Glpi\Event;
|
||||
|
||||
if (!defined('GLPI_ROOT')) {
|
||||
die("Sorry. You can't access this file directly");
|
||||
}
|
||||
|
||||
/// Netpoint class
|
||||
class Netpoint extends CommonDropdown {
|
||||
|
||||
// From CommonDBTM
|
||||
public $dohistory = true;
|
||||
|
||||
static $rightname = 'netpoint';
|
||||
|
||||
public $can_be_translated = false;
|
||||
|
||||
|
||||
function getAdditionalFields() {
|
||||
|
||||
return [['name' => 'locations_id',
|
||||
'label' => Location::getTypeName(1),
|
||||
'type' => 'dropdownValue',
|
||||
'list' => true]];
|
||||
}
|
||||
|
||||
|
||||
static function getTypeName($nb = 0) {
|
||||
return _n('Network outlet', 'Network outlets', $nb);
|
||||
}
|
||||
|
||||
|
||||
function rawSearchOptions() {
|
||||
$tab = parent::rawSearchOptions();
|
||||
|
||||
$tab = array_merge($tab, Location::rawSearchOptionsToAdd());
|
||||
|
||||
foreach ($tab as &$t) {
|
||||
if ($t['id'] == 3) {
|
||||
$t['datatype'] = 'itemlink';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $tab;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handled Multi add item
|
||||
*
|
||||
* @since 0.83 (before addMulti)
|
||||
*
|
||||
* @param $input array of values
|
||||
**/
|
||||
function executeAddMulti(array $input) {
|
||||
|
||||
$this->check(-1, CREATE, $input);
|
||||
for ($i=$input["_from"]; $i<=$input["_to"]; $i++) {
|
||||
$input["name"] = $input["_before"].$i.$input["_after"];
|
||||
$this->add($input);
|
||||
}
|
||||
Event::log(0, "dropdown", 5, "setup",
|
||||
sprintf(__('%1$s adds several netpoints'), $_SESSION["glpiname"]));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print out an HTML "<select>" for a dropdown with preselected value
|
||||
*
|
||||
* @param string $myname the name of the HTML select
|
||||
* @param integer $value the preselected value we want (default 0)
|
||||
* @param integer $locations_id default location ID for search (default -1)
|
||||
* @param boolean $display_comment display the comment near the dropdown (default 1)
|
||||
* @param integer $entity_restrict Restrict to a defined entity(default -1)
|
||||
* @param string $devtype (default '')
|
||||
*
|
||||
* @return integer random part of elements id
|
||||
**/
|
||||
static function dropdownNetpoint($myname, $value = 0, $locations_id = -1, $display_comment = 1,
|
||||
$entity_restrict = -1, $devtype = '') {
|
||||
global $CFG_GLPI;
|
||||
|
||||
$rand = mt_rand();
|
||||
$name = Dropdown::EMPTY_VALUE;
|
||||
$comment = "";
|
||||
if (empty($value)) {
|
||||
$value = 0;
|
||||
}
|
||||
if ($value > 0) {
|
||||
$tmpname = Dropdown::getDropdownName("glpi_netpoints", $value, 1);
|
||||
if ($tmpname["name"] != " ") {
|
||||
$name = $tmpname["name"];
|
||||
$comment = $tmpname["comment"];
|
||||
}
|
||||
}
|
||||
|
||||
$field_id = Html::cleanId("dropdown_".$myname.$rand);
|
||||
$param = ['value' => $value,
|
||||
'valuename' => $name,
|
||||
'entity_restrict' => $entity_restrict,
|
||||
'devtype' => $devtype,
|
||||
'locations_id' => $locations_id];
|
||||
echo Html::jsAjaxDropdown($myname, $field_id,
|
||||
$CFG_GLPI['root_doc']."/ajax/getDropdownNetpoint.php",
|
||||
$param);
|
||||
|
||||
// Display comment
|
||||
if ($display_comment) {
|
||||
$comment_id = Html::cleanId("comment_".$myname.$rand);
|
||||
Html::showToolTip($comment, ['contentid' => $comment_id]);
|
||||
|
||||
$item = new self();
|
||||
if ($item->canCreate()) {
|
||||
echo "<span class='fa fa-plus pointer' title=\"".__s('Add')."\" ".
|
||||
"onClick=\"".Html::jsGetElementbyID('netpoint'.$rand).".dialog('open');\">" .
|
||||
"<span class='sr-only'>" . __s('Add') . "</span></span>";
|
||||
Ajax::createIframeModalWindow('netpoint'.$rand,
|
||||
$item->getFormURL());
|
||||
|
||||
}
|
||||
$paramscomment = ['value' => '__VALUE__',
|
||||
'table' => "glpi_netpoints"];
|
||||
echo Ajax::updateItemOnSelectEvent($field_id, $comment_id,
|
||||
$CFG_GLPI["root_doc"]."/ajax/comments.php",
|
||||
$paramscomment, false);
|
||||
}
|
||||
return $rand;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check if a netpoint already exists (before import)
|
||||
*
|
||||
* @param $input array of value to import (name, locations_id, entities_id)
|
||||
*
|
||||
* @return integer the ID of the new (or -1 if not found)
|
||||
**/
|
||||
function findID(array &$input) {
|
||||
global $DB;
|
||||
|
||||
if (!empty($input["name"])) {
|
||||
$iterator = $DB->request([
|
||||
'SELECT' => 'id',
|
||||
'FROM' => $this->getTable(),
|
||||
'WHERE' => [
|
||||
'name' => $input['name'],
|
||||
'locations_id' => $input["locations_id"] ?? 0
|
||||
] + getEntitiesRestrictCriteria($this->getTable(), $input['entities_id'], $this->maybeRecursive())
|
||||
]);
|
||||
|
||||
// Check twin :
|
||||
if (count($iterator)) {
|
||||
$result = $iterator->next();
|
||||
return $result['id'];
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
function post_addItem() {
|
||||
|
||||
$parent = $this->fields['locations_id'];
|
||||
if ($parent) {
|
||||
$changes[0] = '0';
|
||||
$changes[1] = '';
|
||||
$changes[2] = addslashes($this->getNameID());
|
||||
Log::history($parent, 'Location', $changes, $this->getType(), Log::HISTORY_ADD_SUBITEM);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function post_deleteFromDB() {
|
||||
|
||||
$parent = $this->fields['locations_id'];
|
||||
if ($parent) {
|
||||
$changes[0] = '0';
|
||||
$changes[1] = addslashes($this->getNameID());
|
||||
$changes[2] = '';
|
||||
Log::history($parent, 'Location', $changes, $this->getType(), Log::HISTORY_DELETE_SUBITEM);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
|
||||
|
||||
if (!$withtemplate) {
|
||||
$nb = 0;
|
||||
switch ($item->getType()) {
|
||||
case 'Location' :
|
||||
if ($_SESSION['glpishow_count_on_tabs']) {
|
||||
$nb = countElementsInTable($this->getTable(),
|
||||
['locations_id' => $item->getID()]);
|
||||
}
|
||||
return self::createTabEntry(self::getTypeName(Session::getPluralNumber()), $nb);
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) {
|
||||
|
||||
if ($item->getType() == 'Location') {
|
||||
self::showForLocation($item);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print the HTML array of the Netpoint associated to a Location
|
||||
*
|
||||
* @param $item Location
|
||||
*
|
||||
* @return void
|
||||
**/
|
||||
static function showForLocation($item) {
|
||||
global $DB;
|
||||
|
||||
$ID = $item->getField('id');
|
||||
$netpoint = new self();
|
||||
$item->check($ID, READ);
|
||||
$canedit = $item->canEdit($ID);
|
||||
|
||||
if (isset($_GET["start"])) {
|
||||
$start = intval($_GET["start"]);
|
||||
} else {
|
||||
$start = 0;
|
||||
}
|
||||
$number = countElementsInTable('glpi_netpoints', ['locations_id' => $ID ]);
|
||||
|
||||
if ($canedit) {
|
||||
echo "<div class='first-bloc'>";
|
||||
// Minimal form for quick input.
|
||||
echo "<form action='".$netpoint->getFormURL()."' method='post'>";
|
||||
echo "<br><table class='tab_cadre_fixe'>";
|
||||
echo "<tr class='tab_bg_2 center'>";
|
||||
echo "<td class='b'>"._n('Network outlet', 'Network outlets', 1)."</td>";
|
||||
echo "<td>".__('Name')."</td><td>";
|
||||
Html::autocompletionTextField($item, "name", ['value' => '']);
|
||||
echo "<input type='hidden' name='entities_id' value='".$_SESSION['glpiactive_entity']."'>";
|
||||
echo "<input type='hidden' name='locations_id' value='$ID'></td>";
|
||||
echo "<td><input type='submit' name='add' value=\""._sx('button', 'Add')."\" class='submit'>";
|
||||
echo "</td></tr>\n";
|
||||
echo "</table>\n";
|
||||
Html::closeForm();
|
||||
|
||||
// Minimal form for massive input.
|
||||
echo "<form action='".$netpoint->getFormURL()."' method='post'>";
|
||||
echo "<table class='tab_cadre_fixe'>";
|
||||
echo "<tr class='tab_bg_2 center'>";
|
||||
echo "<td class='b'>"._n('Network outlet', 'Network outlets', Session::getPluralNumber())."</td>";
|
||||
echo "<td>".__('Name')."</td><td>";
|
||||
echo "<input type='text' maxlength='100' size='10' name='_before'> ";
|
||||
Dropdown::showNumber('_from', ['value' => 0,
|
||||
'min' => 0,
|
||||
'max' => 400]);
|
||||
echo " --> ";
|
||||
Dropdown::showNumber('_to', ['value' => 0,
|
||||
'min' => 0,
|
||||
'max' => 400]);
|
||||
echo " <input type='text' maxlength='100' size='10' name='_after'><br>";
|
||||
echo "<input type='hidden' name='entities_id' value='".$_SESSION['glpiactive_entity']."'>";
|
||||
echo "<input type='hidden' name='locations_id' value='$ID'>";
|
||||
echo "<input type='hidden' name='_method' value='AddMulti'></td>";
|
||||
echo "<td><input type='submit' name='execute' value=\""._sx('button', 'Add')."\"
|
||||
class='submit'>";
|
||||
echo "</td></tr>\n";
|
||||
echo "</table>\n";
|
||||
Html::closeForm();
|
||||
echo "</div>";
|
||||
}
|
||||
|
||||
echo "<div class='spaced'>";
|
||||
|
||||
if ($number < 1) {
|
||||
echo "<table class='tab_cadre_fixe'>";
|
||||
echo "<tr><th>".self::getTypeName(1)."</th>";
|
||||
echo "<th>".__('No item found')."</th></tr>";
|
||||
echo "</table>\n";
|
||||
} else {
|
||||
Html::printAjaxPager(sprintf(__('Network outlets for %s'), $item->getTreeLink()),
|
||||
$start, $number);
|
||||
|
||||
if ($canedit) {
|
||||
$rand = mt_rand();
|
||||
Html::openMassiveActionsForm('mass'.__CLASS__.$rand);
|
||||
$massiveactionparams
|
||||
= ['num_displayed'
|
||||
=> min($_SESSION['glpilist_limit'], $number),
|
||||
'container'
|
||||
=> 'mass'.__CLASS__.$rand,
|
||||
'specific_actions'
|
||||
=> ['purge' => _x('button', 'Delete permanently')]];
|
||||
Html::showMassiveActions($massiveactionparams);
|
||||
}
|
||||
|
||||
echo "<table class='tab_cadre_fixe'><tr>";
|
||||
|
||||
if ($canedit) {
|
||||
echo "<th width='10'>";
|
||||
echo Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand);
|
||||
echo "</th>";
|
||||
}
|
||||
|
||||
echo "<th>".__('Name')."</th>"; // Name
|
||||
echo "<th>".__('Comments')."</th>"; // Comment
|
||||
echo "</tr>\n";
|
||||
|
||||
$crit = ['locations_id' => $ID,
|
||||
'ORDER' => 'name',
|
||||
'START' => $start,
|
||||
'LIMIT' => $_SESSION['glpilist_limit']];
|
||||
|
||||
Session::initNavigateListItems('Netpoint',
|
||||
//TRANS : %1$s is the itemtype name, %2$s is the name of the item (used for headings of a list)
|
||||
sprintf(__('%1$s = %2$s'),
|
||||
$item->getTypeName(1), $item->getName()));
|
||||
|
||||
foreach ($DB->request('glpi_netpoints', $crit) as $data) {
|
||||
Session::addToNavigateListItems('Netpoint', $data["id"]);
|
||||
echo "<tr class='tab_bg_1'>";
|
||||
|
||||
if ($canedit) {
|
||||
echo "<td>".Html::getMassiveActionCheckBox(__CLASS__, $data["id"])."</td>";
|
||||
}
|
||||
|
||||
echo "<td><a href='".$netpoint->getFormURL();
|
||||
echo '?id='.$data['id']."'>".$data['name']."</a></td>";
|
||||
echo "<td>".$data['comment']."</td>";
|
||||
echo "</tr>\n";
|
||||
}
|
||||
|
||||
echo "</table>\n";
|
||||
|
||||
if ($canedit) {
|
||||
$massiveactionparams['ontop'] = false;
|
||||
Html::showMassiveActions($massiveactionparams);
|
||||
Html::closeForm();
|
||||
}
|
||||
Html::printAjaxPager(sprintf(__('Network outlets for %s'), $item->getTreeLink()),
|
||||
$start, $number);
|
||||
|
||||
}
|
||||
|
||||
echo "</div>\n";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @since 0.84
|
||||
*
|
||||
* @param $itemtype
|
||||
* @param $base HTMLTableBase object
|
||||
* @param $super HTMLTableSuperHeader object (default NULL
|
||||
* @param $father HTMLTableHeader object (default NULL)
|
||||
* @param $options array
|
||||
**/
|
||||
static function getHTMLTableHeader($itemtype, HTMLTableBase $base,
|
||||
HTMLTableSuperHeader $super = null,
|
||||
HTMLTableHeader $father = null, array $options = []) {
|
||||
|
||||
$column_name = __CLASS__;
|
||||
|
||||
if (isset($options['dont_display'][$column_name])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$base->addHeader($column_name, _n('Network outlet', 'Network outlets', 1), $super, $father);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @since 0.84
|
||||
*
|
||||
* @param $row HTMLTableRow object (default NULL)
|
||||
* @param $item CommonDBTM object (default NULL)
|
||||
* @param $father HTMLTableCell object (default NULL)
|
||||
* @param $options array
|
||||
**/
|
||||
static function getHTMLTableCellsForItem(HTMLTableRow $row = null, CommonDBTM $item = null,
|
||||
HTMLTableCell $father = null, $options = []) {
|
||||
|
||||
$column_name = __CLASS__;
|
||||
|
||||
if (isset($options['dont_display'][$column_name])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$row->addCell($row->getHeaderByName($column_name),
|
||||
Dropdown::getDropdownName("glpi_netpoints", $item->fields["netpoints_id"]),
|
||||
$father);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user