glpi / src / plugins / vigilo / inc / template.class.php @ 09aac931
History | View | Annotate | Download (3.85 KB)
1 |
<?php
|
---|---|
2 |
|
3 |
class PluginVigiloTemplate extends CommonDBTM |
4 |
{ |
5 |
public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) |
6 |
{ |
7 |
return 'Vigilo'; |
8 |
} |
9 |
|
10 |
public static function showForm($params) |
11 |
{ |
12 |
global $DB, $CFG_GLPI; |
13 |
|
14 |
$item = $params['item']; |
15 |
$options = $params['options']; |
16 |
|
17 |
if (!in_array($item::getType(), array('Computer', 'Printer', 'NetworkEquipment'))) { |
18 |
return;
|
19 |
} |
20 |
|
21 |
if (array_key_exists('formfooter', $options) && false === $options['formfooter']) { |
22 |
return;
|
23 |
} |
24 |
|
25 |
$opts = array( |
26 |
"name" => "vigilo_template", |
27 |
"value" => 0, |
28 |
"url" => $CFG_GLPI["root_doc"] . "/plugins/vigilo/ajax/getTemplates.php" |
29 |
); |
30 |
|
31 |
$id = (int) $item->getID(); |
32 |
$query = <<<SQL |
33 |
SELECT `template`
|
34 |
FROM glpi_plugin_vigilo_template
|
35 |
WHERE `id` = $id;
|
36 |
SQL;
|
37 |
$result = $DB->query($query); |
38 |
if ($result) { |
39 |
$tpl = $DB->result($result, 0, "template"); |
40 |
$templates = static::getTemplates(); |
41 |
$index = array_search($tpl, $templates, true); |
42 |
if (false !== $index) { |
43 |
$opts['value'] = (int) $index; |
44 |
$opts['emptylabel'] = $tpl; |
45 |
} |
46 |
} |
47 |
|
48 |
echo "<tr><th colspan='4'>Vigilo NMS</th></tr>"; |
49 |
echo '<tr>'; |
50 |
echo '<td><label for="vigilo_template">Vigilo Template</td>'; |
51 |
echo '<td>'; |
52 |
Dropdown::show(__CLASS__, $opts); |
53 |
echo '</td></tr>'; |
54 |
} |
55 |
|
56 |
public static function filterFile($path) |
57 |
{ |
58 |
$tpl_dir = VIGILO_CONFDIR . DIRECTORY_SEPARATOR . 'hosttemplates'; |
59 |
$pattern = '#^(([^.][^/]+/)*[^.][^/]+\.xml)$#i'; |
60 |
// FIXME : l'utilisation de substr()+strlen() n'est pas idéale ici.
|
61 |
return preg_match($pattern, substr($path->getPathname(), strlen($tpl_dir))); |
62 |
} |
63 |
|
64 |
public static function getTemplates() |
65 |
{ |
66 |
$tpl_dir = VIGILO_CONFDIR . DIRECTORY_SEPARATOR . 'hosttemplates'; |
67 |
$templates = array(); |
68 |
$pattern = "/<template\\s+(?:.*?\\s+)?name=(['\"])([^'\"]+)\\1>/"; |
69 |
$dir_it = new RecursiveDirectoryIterator($tpl_dir, RecursiveDirectoryIterator::SKIP_DOTS); |
70 |
$it_it = new RecursiveIteratorIterator($dir_it); |
71 |
$files = new CallbackFilterIterator($it_it, array(__CLASS__, 'filterFile')); |
72 |
|
73 |
foreach ($files as $file) { |
74 |
$file = $file->getPathname(); |
75 |
|
76 |
if (!is_file($file)) { |
77 |
continue;
|
78 |
} |
79 |
|
80 |
$ok = preg_match_all($pattern, file_get_contents($file), $matches); |
81 |
if (!$ok) { |
82 |
continue;
|
83 |
} |
84 |
|
85 |
foreach ($matches[2] as $match) { |
86 |
$templates[] = $match; |
87 |
} |
88 |
} |
89 |
|
90 |
$templates = array_unique($templates); |
91 |
sort($templates, SORT_REGULAR); |
92 |
array_unshift($templates, '-----'); |
93 |
return $templates; |
94 |
} |
95 |
|
96 |
public static function getAjaxTemplates() |
97 |
{ |
98 |
$res = array(); |
99 |
foreach (static::getTemplates() as $index => $tpl) { |
100 |
$res[] = array("id" => $index, "text" => $tpl); |
101 |
} |
102 |
return $res; |
103 |
} |
104 |
|
105 |
public static function getTemplateIndexForItem(CommonDBTM $item) |
106 |
{ |
107 |
$tpl = self::getTemplateNameForItem($item); |
108 |
if (null === $tpl) { |
109 |
return null; |
110 |
} |
111 |
|
112 |
$templates = self::getTemplates(); |
113 |
$index = array_search($tpl, $templates, true); |
114 |
return (false !== $index ? $index : null); |
115 |
} |
116 |
|
117 |
public static function getTemplateNameForItem(CommonDBTM $item) |
118 |
{ |
119 |
global $DB; |
120 |
|
121 |
$id = (int) $item->getID(); |
122 |
$query = <<<SQL |
123 |
SELECT `template`
|
124 |
FROM glpi_plugin_vigilo_template
|
125 |
WHERE `id` = $id;
|
126 |
SQL;
|
127 |
|
128 |
$result = $DB->query($query); |
129 |
if (!$result) { |
130 |
return null; |
131 |
} |
132 |
|
133 |
return $DB->result($result, 0, "template"); |
134 |
} |
135 |
} |