glpi / src / plugins / vigilo / vigilo_hooks.php @ 166be9d2
History | View | Annotate | Download (6.3 KB)
1 |
<?php
|
---|---|
2 |
|
3 |
class VigiloHooks |
4 |
{ |
5 |
// Callbacks pour différents événements
|
6 |
// concernant les équipements supportés.
|
7 |
public function preItemUpdate($item) |
8 |
{ |
9 |
global $DB; |
10 |
|
11 |
$id = $item->getID(); |
12 |
$query = <<<SQL |
13 |
SELECT `template`
|
14 |
FROM glpi_plugin_vigilo_template
|
15 |
WHERE `item_id` = $id;
|
16 |
SQL;
|
17 |
|
18 |
$item->fields['vigilo_template'] = 0; |
19 |
$result = $DB->query($query); |
20 |
if ($result) { |
21 |
$tpl = $DB->result($result, 0, "template"); |
22 |
$templates = PluginVigiloTemplate::getTemplates(); |
23 |
$index = array_search($tpl, $templates, true); |
24 |
if (false !== $index) { |
25 |
$item->fields['vigilo_template'] = $index; |
26 |
} |
27 |
} |
28 |
} |
29 |
|
30 |
public function itemAddOrUpdate($item) |
31 |
{ |
32 |
global $DB; |
33 |
|
34 |
$templates = PluginVigiloTemplate::getTemplates(); |
35 |
$tplId = (int) $item->input['vigilo_template']; |
36 |
|
37 |
if ($tplId > 0 && $tplId < count($templates)) { |
38 |
$id = $item->getID(); |
39 |
$template = $DB->escape($templates[$tplId]); |
40 |
$query = <<<SQL |
41 |
INSERT INTO `glpi_plugin_vigilo_template`(`item_id`, `template`)
|
42 |
VALUES ($id, '$template')
|
43 |
ON DUPLICATE KEY UPDATE `template` = '$template';
|
44 |
SQL;
|
45 |
$DB->query($query); |
46 |
$item->fields['vigilo_template'] = $templates[$tplId]; |
47 |
} else {
|
48 |
$item->fields['vigilo_template'] = null; |
49 |
} |
50 |
|
51 |
$this->update($item); |
52 |
} |
53 |
|
54 |
public function itemPurge($item) |
55 |
{ |
56 |
global $DB; |
57 |
|
58 |
$id = $item->getID(); |
59 |
$query = "DELETE FROM `glpi_plugin_vigilo_template` WHERE `item_id` = $id;"; |
60 |
$DB->query($query); |
61 |
$this->unmonitor($item->getField('name')); |
62 |
} |
63 |
|
64 |
// Méthodes outils / annexes
|
65 |
public function writeVigiloConfig($obj, $objtype) |
66 |
{ |
67 |
$dirs = array(VIGILO_CONFDIR, $objtype, "managed"); |
68 |
$confdir = implode(DIRECTORY_SEPARATOR, $dirs); |
69 |
$file = $confdir . DIRECTORY_SEPARATOR . $obj->getName() . ".xml"; |
70 |
|
71 |
if (!file_exists($confdir)) { |
72 |
mkdir($confdir, 0770, true); |
73 |
} |
74 |
|
75 |
$res = file_put_contents($file, $obj, LOCK_EX); |
76 |
if (false !== $res) { |
77 |
chgrp($file, "vigiconf"); |
78 |
chmod($file, 0660); |
79 |
} |
80 |
} |
81 |
|
82 |
// @codingStandardsIgnoreStart
|
83 |
public function plugin_vigilo_getAddSearchOptions($itemtype) |
84 |
{ |
85 |
// Le nom de la méthode est imposé par GLPI.
|
86 |
// @codingStandardsIgnoreEnd
|
87 |
$options = array(); |
88 |
|
89 |
if (!in_array($itemtype, array('Computer', 'NetworkEquipment', 'Printer'))) { |
90 |
return $options; |
91 |
} |
92 |
|
93 |
$options['7007']['table'] = 'glpi_plugin_vigilo_template'; |
94 |
$options['7007']['field'] = 'template'; |
95 |
$options['7007']['linkfield'] = 'id'; |
96 |
$options['7007']['name'] = 'vigilo_template'; |
97 |
$options['7007']['massiveaction'] = true; |
98 |
$options['7007']['datatype'] = 'dropdown'; |
99 |
|
100 |
return $options; |
101 |
} |
102 |
|
103 |
// Méthodes d'ajout / mise à jour / suppression de la supervision
|
104 |
// pour un objet équipement supporté.
|
105 |
public function delete($computer) |
106 |
{ |
107 |
global $DB; |
108 |
|
109 |
$this->unmonitor($computer->fields["name"]); |
110 |
|
111 |
$query = "UPDATE `glpi_plugin_vigilo_config` SET `value` = 1 WHERE `key` = 'needs_deploy';"; |
112 |
$DB->query($query); |
113 |
} |
114 |
|
115 |
public function update($item) |
116 |
{ |
117 |
global $DB; |
118 |
|
119 |
if (isset($item->oldvalues["name"])) { |
120 |
$this->unmonitor($item->oldvalues["name"]); |
121 |
} |
122 |
|
123 |
$query = "UPDATE `glpi_plugin_vigilo_config` SET `value` = 1 WHERE `key` = 'needs_deploy';"; |
124 |
$DB->query($query); |
125 |
|
126 |
if ($item->getField("is_template")) { |
127 |
return;
|
128 |
} |
129 |
|
130 |
$cls = "PluginVigiloMonitored" . $item->getType(); |
131 |
if (class_exists($cls, true)) { |
132 |
$obj = new $cls($item); |
133 |
$this->writeVigiloConfig($obj, "hosts"); |
134 |
} |
135 |
} |
136 |
|
137 |
public function unmonitor($host) |
138 |
{ |
139 |
$dirs = array(VIGILO_CONFDIR, "hosts", "managed", $host . ".xml"); |
140 |
$filename = implode(DIRECTORY_SEPARATOR, $dirs); |
141 |
if (file_exists($filename)) { |
142 |
unlink($filename); |
143 |
} |
144 |
} |
145 |
|
146 |
// Méthodes de mise à jour d'un équipement
|
147 |
// lorsque l'un de ses composants change.
|
148 |
public function refreshSoftwareVersion($version) |
149 |
{ |
150 |
$computer = new Computer(); |
151 |
$computer->getFromDB($version->getField("computers_id")); |
152 |
$this->update($computer); |
153 |
} |
154 |
|
155 |
public function refreshSoftware($software) |
156 |
{ |
157 |
$softwareVer = new SoftwareVersion(); |
158 |
$idSoftwareVersion = $softwareVer->find('softwares_id=' . $software->getID()); |
159 |
foreach ($idSoftwareVersion as $idVersion) { |
160 |
if (!$idVersion['id']) { |
161 |
continue;
|
162 |
} |
163 |
|
164 |
$computerVer = new Computer_SoftwareVersion(); |
165 |
$goodField = 'softwareversions_id=' . $idVersion['id']; |
166 |
$updateComp = $computerVer->find($goodField); |
167 |
|
168 |
foreach ($updateComp as $idComputer) { |
169 |
if (-1 === $idComputer['computers_id']) { |
170 |
continue;
|
171 |
} |
172 |
|
173 |
$computer = new Computer(); |
174 |
$computer->getFromDB($idComputer['computers_id']); |
175 |
$this->update($computer); |
176 |
} |
177 |
} |
178 |
} |
179 |
|
180 |
public function refreshDisk($disk) |
181 |
{ |
182 |
$id = $disk->getField('computers_id'); |
183 |
$computer = new Computer(); |
184 |
$computer->getFromDB($id); |
185 |
$this->update($computer); |
186 |
} |
187 |
|
188 |
public function refreshAddress($address) |
189 |
{ |
190 |
$id = $address->getField('mainitems_id'); |
191 |
$itemtype = $address->getField('mainitemtype'); |
192 |
$item = new $itemtype(); |
193 |
$item->getFromDB($id); |
194 |
$this->update($item); |
195 |
} |
196 |
|
197 |
public function refreshDevice($device) |
198 |
{ |
199 |
$id = $device->getField('items_id'); |
200 |
$itemtype = $device->getField('itemtype'); |
201 |
$item = new $itemtype(); |
202 |
$item->getFromDB($id); |
203 |
$this->update($item); |
204 |
} |
205 |
|
206 |
// Méthode de mise à jour en cas d'évolution de l'emplacement,
|
207 |
// de l'entité ou du fabricant d'un équipement.
|
208 |
public function updateGroups($obj) |
209 |
{ |
210 |
$groups = new PluginVigiloGroups(); |
211 |
$this->writeVigiloConfig($groups, "groups"); |
212 |
} |
213 |
} |