hook.php 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887
  1. <?php
  2. /*
  3. * @version $Id: hook.php 234 2019-12-12 14:34:31Z yllen $
  4. -------------------------------------------------------------------------
  5. LICENSE
  6. This file is part of Archires plugin for GLPI.
  7. Archires is free software: you can redistribute it and/or modify
  8. it under the terms of the GNU Affero General Public License as published by
  9. the Free Software Foundation, either version 3 of the License, or
  10. (at your option) any later version.
  11. Archires is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU Affero General Public License for more details.
  15. You should have received a copy of the GNU Affero General Public License
  16. along with Archires. If not, see <http://www.gnu.org/licenses/>.
  17. @package archires
  18. @author Nelly Mahu-Lasson, Xavier Caillaud
  19. @copyright Copyright (c) 2016-2021 Archires plugin team
  20. @license AGPL License 3.0 or (at your option) any later version
  21. http://www.gnu.org/licenses/agpl-3.0-standalone.html
  22. @link https://forge.glpi-project.org/projects/archires
  23. @since version 2.2
  24. --------------------------------------------------------------------------
  25. */
  26. function plugin_archires_install() {
  27. global $DB;
  28. include_once (Plugin::getWebDir('archires')."/inc/profile.class.php");
  29. $update = false;
  30. if (!$DB->tableExists("glpi_plugin_archires_config")
  31. && !$DB->tableExists("glpi_plugin_archires_views")) {
  32. $DB->runFile(Plugin::getWebDir('archires')."/sql/empty-2.2.sql");
  33. } else {
  34. $update = true;
  35. // update to 1.3
  36. if ($DB->tableExists("glpi_plugin_archires_display")
  37. && !$DB->fieldExists("glpi_plugin_archires_display","display_ports")) {
  38. $migration = new Migration(13);
  39. $migration->addField("glpi_plugin_archires_display", "display_ports",
  40. "ENUM('1', '0') NOT NULL DEFAULT '0'");
  41. $migration->executeMigration();
  42. }
  43. // update to 1.4
  44. if ($DB->tableExists("glpi_plugin_archires_display")
  45. && !$DB->tableExists("glpi_plugin_archires_profiles")) {
  46. plugin_archires_updateTo14();
  47. }
  48. // update to 1.5
  49. if ($DB->tableExists("glpi_plugin_archires_display")
  50. && !$DB->tableExists("glpi_plugin_archires_image_device")) {
  51. plugin_archires_updateTo15();
  52. }
  53. // update to 1.7.0
  54. if ($DB->tableExists("glpi_plugin_archires_profiles")
  55. && $DB->fieldExists("glpi_plugin_archires_profiles","interface")) {
  56. plugin_archires_updateTo170();
  57. }
  58. // update to 1.7.2
  59. if ($DB->tableExists("glpi_plugin_archires_config")
  60. && $DB->FieldExists("glpi_plugin_archires_config","system")) {
  61. $migration = new Migration(172);
  62. $migration->dropField("glpi_plugin_archires_config", "system");
  63. $migration->executeMigration();
  64. }
  65. // update to 1.8.0
  66. if (!$DB->tableExists("glpi_plugin_archires_views")) {
  67. plugin_archires_updateTo180();
  68. }
  69. // update to 2.1.0
  70. if ($DB->tableExists("glpi_plugin_archires_appliancequeries")
  71. && !$DB->fieldExists("glpi_plugin_archires_appliancequeries", "plugin_appliances_appliances_id")) {
  72. plugin_archires_updateTo210();
  73. }
  74. // Update 2.2
  75. if ($DB->tableExists("glpi_plugin_archires_profiles")) {
  76. //Add new rights in glpi_profilerights table
  77. $profileRight = new ProfileRight();
  78. $query = ['FROM' => 'glpi_plugin_archires_profiles'];
  79. foreach ($DB->request($query) as $data) {
  80. $right['profiles_id'] = $data['profiles_id'];
  81. $right['name'] = "plugin_archires";
  82. $droit = $data['archires'];
  83. if ($droit == 'r') {
  84. $right['rights'] = 1;
  85. } else if ($droit == 'w') {
  86. $right['rights'] = ALLSTANDARDRIGHT;
  87. }
  88. $profileRight->add($right);
  89. }
  90. $DB->query("DROP TABLE `glpi_plugin_archires_profiles`");
  91. }
  92. }
  93. $rep_files_archires = realpath(GLPI_PLUGIN_DOC_DIR)."/archires";
  94. if (!is_dir($rep_files_archires)
  95. && !mkdir($rep_files_archires)) {
  96. die(sprintf(__('Failed to create the directory %s. Verify that you have the correct permission'),
  97. $rep_files_archires));
  98. }
  99. PluginArchiresProfile::createFirstAccess($_SESSION['glpiactiveprofile']['id']);
  100. return true;
  101. }
  102. function plugin_archires_updateTo14() {
  103. global $DB;
  104. $migration = new Migration(14);
  105. if (!$DB->tableExists("glpi_plugin_archires_color")) {
  106. $query = "CREATE TABLE `glpi_plugin_archires_color` (
  107. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  108. `iface` INT( 11 ) NOT NULL ,
  109. `color` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL
  110. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  111. $DB->queryOrDie($query,'1.4 add glpi_plugin_archires_color '.$DB->error());
  112. }
  113. if (!$DB->tableExists("glpi_plugin_archires_profiles")) {
  114. $query = "CREATE TABLE `glpi_plugin_archires_profiles` (
  115. `ID` int(11) NOT NULL auto_increment,
  116. `name` varchar(255) collate utf8_unicode_ci default NULL,
  117. `interface` varchar(50) collate utf8_unicode_ci NOT NULL default 'archires',
  118. `is_default` enum('0','1') NOT NULL default '0',
  119. `archires` char(1) default NULL,
  120. PRIMARY KEY (`ID`),
  121. KEY `interface` (`interface`)
  122. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  123. $DB->queryorDie($query,'1.4 add glpi_plugin_archires_profiles '.$DB->error());
  124. $query = "INSERT INTO `glpi_plugin_archires_profiles`
  125. (`ID`, `name` , `interface`, `is_default`, `archires`)
  126. VALUES ('1', 'post-only', 'archires', '1', NULL),
  127. ('2', 'normal', 'archires', '0', NULL),
  128. ('3', 'admin', 'archires', '0', 'r'),
  129. ('4', 'super-admin', 'archires', '0', 'r')";
  130. $DB->queryOrDie($query, '1.4 insert into glpi_plugin_archires_profiles '.$DB->error());
  131. }
  132. $migration->addField("glpi_plugin_archires_display", "display_ip",
  133. "ENUM('1', '0') NOT NULL DEFAULT '0'");
  134. $migration->addField("glpi_plugin_archires_display", "system",
  135. "ENUM('1', '0') NOT NULL DEFAULT '0'");
  136. $migration->executeMigration();
  137. }
  138. function plugin_archires_updateTo15() {
  139. global $DB;
  140. $migration = new Migration(15);
  141. $migration->changeField("glpi_plugin_archires_profiles", "is_default", "is_default",
  142. "smallint(6) NOT NULL default '0'");
  143. $query = "UPDATE `glpi_plugin_archires_profiles`
  144. SET `is_default` = '0'
  145. WHERE `is_default` = '1'";
  146. $DB->queryOrDie($query,'1.5 insert into glpi_plugin_archires_profiles '.$DB->error());
  147. $query = "UPDATE `glpi_plugin_archires_profiles`
  148. SET `is_default` = '1'
  149. WHERE `is_default` = '2'";
  150. $DB->queryOrDie($query, '1.5 insert into glpi_plugin_archires_profiles '.$DB->error());
  151. $migration->renameTable("glpi_plugin_archires_color", "glpi_plugin_archires_color_iface");
  152. $migration->renameTable("glpi_plugin_archires_config", "glpi_plugin_archires_image_device");
  153. $migration->dropTable("glpi_plugin_archires_display");
  154. if (!$DB->tableExists("glpi_plugin_archires_color_state")) {
  155. $query = "CREATE TABLE `glpi_plugin_archires_color_state` (
  156. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  157. `state` INT( 11 ) NOT NULL ,
  158. `color` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL
  159. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  160. $DB->queryOrDie($query, '1.5 create glpi_plugin_archires_color_state '.$DB->error());
  161. }
  162. if (!$DB->tableExists("glpi_plugin_archires_query_location")) {
  163. $query = "CREATE TABLE `glpi_plugin_archires_query_location` (
  164. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  165. `FK_entities` int(11) NOT NULL default '0',
  166. `name` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL,
  167. `location` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL DEFAULT '0',
  168. `child` smallint(6) NOT NULL default '0',
  169. `network` INT( 11 ) NOT NULL DEFAULT '0',
  170. `status` INT( 11 ) NOT NULL DEFAULT '0',
  171. `FK_group` INT( 11 ) NOT NULL DEFAULT '0',
  172. `FK_config` INT( 11 ) NOT NULL DEFAULT '0',
  173. `FK_vlan` INT( 11 ) NOT NULL DEFAULT '0',
  174. `link` smallint(6) NOT NULL default '1',
  175. `notes` LONGTEXT,
  176. `deleted` smallint(6) NOT NULL default '0'
  177. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  178. $DB->queryOrDie($query, '1.5 create glpi_plugin_archires_query_location '.$DB->error());
  179. }
  180. if (!$DB->tableExists("glpi_plugin_archires_query_switch")) {
  181. $query = "CREATE TABLE `glpi_plugin_archires_query_switch` (
  182. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  183. `FK_entities` int(11) NOT NULL default '0',
  184. `name` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL,
  185. `switch` INT( 11 ) NOT NULL DEFAULT '0',
  186. `network` INT( 11 ) NOT NULL DEFAULT '0',
  187. `status` INT( 11 ) NOT NULL DEFAULT '0',
  188. `FK_group` INT( 11 ) NOT NULL DEFAULT '0',
  189. `FK_config` INT( 11 ) NOT NULL DEFAULT '0',
  190. `FK_vlan` INT( 11 ) NOT NULL DEFAULT '0',
  191. `link` smallint(6) NOT NULL default '1',
  192. `notes` LONGTEXT,
  193. `deleted` smallint(6) NOT NULL default '0'
  194. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  195. $DB->queryOrDie($query, '1.5 create glpi_plugin_archires_query_switch '.$DB->error());
  196. }
  197. if (!$DB->tableExists("glpi_plugin_archires_query_applicatifs")) {
  198. $query = "CREATE TABLE `glpi_plugin_archires_query_applicatifs` (
  199. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  200. `FK_entities` int(11) NOT NULL default '0',
  201. `name` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL,
  202. `applicatifs` INT( 11 ) NOT NULL DEFAULT '0',
  203. `network` INT( 11 ) NOT NULL DEFAULT '0',
  204. `status` INT( 11 ) NOT NULL DEFAULT '0',
  205. `FK_group` INT( 11 ) NOT NULL DEFAULT '0',
  206. `FK_config` INT( 11 ) NOT NULL DEFAULT '0',
  207. `FK_vlan` INT( 11 ) NOT NULL DEFAULT '0',
  208. `link` smallint(6) NOT NULL default '1',
  209. `notes` LONGTEXT,
  210. `deleted` smallint(6) NOT NULL default '0'
  211. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  212. $DB->queryOrDie($query, '1.5 create glpi_plugin_archires_query_applicatifs '.$DB->error());
  213. }
  214. if (!$DB->tableExists("glpi_plugin_archires_query_type")) {
  215. $query = "CREATE TABLE `glpi_plugin_archires_query_type` (
  216. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  217. `type_query` INT( 11 ) NOT NULL ,
  218. `type` INT( 11 ) NOT NULL ,
  219. `device_type` INT( 11 ) NOT NULL,
  220. `FK_query` INT( 11 ) NOT NULL
  221. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  222. $DB->queryOrDie($query,'1.5 create glpi_plugin_archires_query_type '.$DB->error());
  223. }
  224. if (!$DB->tableExists("glpi_plugin_archires_config")) {
  225. $query = "CREATE TABLE `glpi_plugin_archires_config` (
  226. `ID` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  227. `FK_entities` int(11) NOT NULL default '0',
  228. `name` VARCHAR( 250 ) collate utf8_unicode_ci NOT NULL,
  229. `computer` smallint(6) NOT NULL default '0',
  230. `networking` smallint(6) NOT NULL default '0',
  231. `printer` smallint(6) NOT NULL default '0',
  232. `peripheral` smallint(6) NOT NULL default '0',
  233. `phone` smallint(6) NOT NULL default '0',
  234. `display_ports` smallint(6) NOT NULL default '0',
  235. `display_ip` smallint(6) NOT NULL default '0',
  236. `display_type` smallint(6) NOT NULL default '0',
  237. `display_state` smallint(6) NOT NULL default '0',
  238. `display_location` smallint(6) NOT NULL default '0',
  239. `display_entity` smallint(6) NOT NULL default '0',
  240. `system` smallint(6) NOT NULL default '0',
  241. `engine` smallint(6) NOT NULL default '0',
  242. `format` smallint(6) NOT NULL default '0',
  243. `deleted` smallint(6) NOT NULL default '0'
  244. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  245. $DB->queryOrDie($query, '1.5 create glpi_plugin_archires_config '.$DB->error());
  246. }
  247. $query = "INSERT INTO `glpi_plugin_archires_config`
  248. (`ID`,`FK_entities`,`name`, `computer` , `networking`, `printer`, `peripheral`,
  249. `phone`, `display_ports`, `display_ip`, `display_type`, `display_state`,
  250. `display_location`, `display_entity`, `system`,`engine`, `format`)
  251. VALUES ('1', '0', 'default', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0',
  252. '0', '0', '1')";
  253. $DB->queryOrDie($query, '1.5 insert into glpi_plugin_archires_config '.$DB->error());
  254. $query = "INSERT INTO `glpi_displaypreferences`
  255. (`ID` , `type` , `num` , `rank` , `FK_users` )
  256. VALUES (NULL, '3000', '2', '1', '0'),
  257. (NULL, '3000', '3', '2', '0'),
  258. (NULL, '3000', '4', '3', '0'),
  259. (NULL, '3000', '5', '4', '0'),
  260. (NULL, '3000', '6', '5', '0'),
  261. (NULL, '3000', '7', '6', '0'),
  262. (NULL, '3000', '8', '7', '0'),
  263. (NULL, '3000', '9', '8', '0'),
  264. (NULL, '3001', '2', '1', '0'),
  265. (NULL, '3001', '3', '2', '0'),
  266. (NULL, '3001', '4', '3', '0'),
  267. (NULL, '3001', '5', '4', '0'),
  268. (NULL, '3001', '6', '5', '0'),
  269. (NULL, '3001', '7', '6', '0'),
  270. (NULL, '3001', '8', '7', '0'),
  271. (NULL, '3002', '2', '1', '0'),
  272. (NULL, '3002', '3', '2', '0'),
  273. (NULL, '3002', '4', '3', '0'),
  274. (NULL, '3002', '5', '4', '0'),
  275. (NULL, '3002', '6', '5', '0'),
  276. (NULL, '3002', '7', '6', '0'),
  277. (NULL, '3002', '8', '7', '0')";
  278. $DB->queryOrDie($query, '1.5 insert into glpi_displaypreferences '.$DB->error());
  279. $migration->executeMigration();
  280. }
  281. function plugin_archires_updateTo170() {
  282. global $DB;
  283. $migration = new Migration(170);
  284. $migration->addKey("glpi_plugin_archires_query_location", "deleted");
  285. $migration->addKey("glpi_plugin_archires_query_switch", "deleted");
  286. $migration->addKey("glpi_plugin_archires_query_applicatifs", "deleted");
  287. $migration->addKey("glpi_plugin_archires_image_device", "device_type");
  288. $migration->addKey("glpi_plugin_archires_query_type", "FK_query");
  289. $migration->addKey("glpi_plugin_archires_query_type", "type_query");
  290. $migration->addKey("glpi_plugin_archires_query_type", "type");
  291. $migration->addKey("glpi_plugin_archires_query_type", "device_type");
  292. $migration->addKey("glpi_plugin_archires_color_iface", "iface");
  293. $migration->addKey("glpi_plugin_archires_config", "deleted");
  294. $migration->addKey("glpi_plugin_archires_config", "FK_entities");
  295. $migration->addKey("glpi_plugin_archires_config", "name");
  296. $migration->addField("glpi_plugin_archires_config", "color", "smallint(6) NOT NULL default '0'");
  297. if (!$DB->tableExists("glpi_plugin_archires_color_vlan")) {
  298. $query = "CREATE TABLE `glpi_plugin_archires_color_vlan` (
  299. `ID` INT( 11 ) NOT NULL auto_increment,
  300. `vlan` INT( 11 ) NOT NULL ,
  301. `color` VARCHAR( 50 ) collate utf8_unicode_ci NOT NULL,
  302. PRIMARY KEY (`ID`)
  303. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
  304. $DB->queryOrDie($query, '1.7.0 create glpi_plugin_archires_color_vlan '.$DB->error());
  305. }
  306. $migration->dropField("glpi_plugin_archires_profiles", "interface");
  307. $migration->dropField("glpi_plugin_archires_profiles", "is_default");
  308. $migration->changeField("glpi_plugin_archires_query_location", "`status", "state", 'integer');
  309. $migration->changeField("glpi_plugin_archires_query_switch", "`status", "state", 'integer');
  310. $migration->changeField("glpi_plugin_archires_query_applicatifs", "`status", "state", 'integer');
  311. $migration->executeMigration();
  312. }
  313. function plugin_archires_updateTo180() {
  314. $migration = new Migration(180);
  315. $migration->renameTable("glpi_plugin_archires_query_location",
  316. "glpi_plugin_archires_locationqueries");
  317. $migration->renameTable("glpi_plugin_archires_query_switch",
  318. "glpi_plugin_archires_networkequipmentqueries");
  319. $migration->renameTable("glpi_plugin_archires_query_applicatifs",
  320. "glpi_plugin_archires_appliancequeries");
  321. $migration->renameTable("glpi_plugin_archires_image_device", "glpi_plugin_archires_imageitems");
  322. $migration->renameTable("glpi_plugin_archires_query_type", "glpi_plugin_archires_querytypes");
  323. $migration->renameTable("glpi_plugin_archires_color_iface",
  324. "glpi_plugin_archires_networkinterfacecolors");
  325. $migration->renameTable("glpi_plugin_archires_color_state", "glpi_plugin_archires_statecolors");
  326. $migration->renameTable("glpi_plugin_archires_color_vlan", "glpi_plugin_archires_vlancolors");
  327. $migration->renameTable("glpi_plugin_archires_config", "glpi_plugin_archires_views");
  328. $migration->dropKey("glpi_plugin_archires_locationqueries", "deleted");
  329. $migration->changeField("glpi_plugin_archires_locationqueries", "ID", "id", 'autoincrement');
  330. $migration->changeField("glpi_plugin_archires_locationqueries", "name", "name", 'string');
  331. $migration->changeField("glpi_plugin_archires_locationqueries", "FK_entities", "entities_id",
  332. 'integer');
  333. $migration->changeField("glpi_plugin_archires_locationqueries", "location", "locations_id",
  334. 'integer', ['comment' => 'RELATION to glpi_locations (id)']);
  335. $migration->changeField("glpi_plugin_archires_locationqueries", "network", "networks_id",
  336. 'integer', ['comment' => 'RELATION to glpi_networks (id)']);
  337. $migration->changeField("glpi_plugin_archires_locationqueries", "state", "states_id",
  338. 'integer', ['comment' => 'RELATION to glpi_states (id)']);
  339. $migration->changeField("glpi_plugin_archires_locationqueries", "FK_group", "groups_id",
  340. 'integer', ['comment' => 'RELATION to glpi_groups (id)']);
  341. $migration->changeField("glpi_plugin_archires_locationqueries", "FK_config",
  342. "plugin_archires_views_id", 'integer',
  343. ['comment' => 'RELATION to glpi_plugin_archires_views (id)']);
  344. $migration->changeField("glpi_plugin_archires_locationqueries", "FK_vlan", "vlans_id",
  345. 'integer', ['comment' => 'RELATION to glpi_vlans (id)']);
  346. $migration->changeField("glpi_plugin_archires_locationqueries", "deleted", "is_deleted", 'bool');
  347. $migration->changeField("glpi_plugin_archires_locationqueries", "notes", "notepad", 'longtext');
  348. $migration->dropField("glpi_plugin_archires_locationqueries", "link");
  349. $migration->addKey("glpi_plugin_archires_locationqueries", "name");
  350. $migration->addKey("glpi_plugin_archires_locationqueries", "entities_id");
  351. $migration->addKey("glpi_plugin_archires_locationqueries", "locations_id");
  352. $migration->addKey("glpi_plugin_archires_locationqueries", "networks_id");
  353. $migration->addKey("glpi_plugin_archires_locationqueries", "groups_id");
  354. $migration->addKey("glpi_plugin_archires_locationqueries", "plugin_archires_views_id");
  355. $migration->addKey("glpi_plugin_archires_locationqueries", "states_id");
  356. $migration->addKey("glpi_plugin_archires_locationqueries", "vlans_id");
  357. $migration->addKey("glpi_plugin_archires_locationqueries", "is_deleted");
  358. $migration->dropKey("glpi_plugin_archires_networkequipmentqueries", "deleted");
  359. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "ID", "id",
  360. 'autoincrement');
  361. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "name", "name", 'string');
  362. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "FK_entities",
  363. "entities_id", 'integer');
  364. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "switch",
  365. "networkequipments_id", 'integer',
  366. ['comment' => 'RELATION to glpi_networkequipments (id)']);
  367. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "network", "networks_id",
  368. 'integer', ['comment' => 'RELATION to glpi_networks (id)']);
  369. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "state", "states_id",
  370. 'integer', ['comment' => 'RELATION to glpi_states (id)']);
  371. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "FK_group", "groups_id",
  372. 'integer', ['comment' => 'RELATION to glpi_groups (id)']);
  373. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "FK_config",
  374. "plugin_archires_views_id", 'integer',
  375. ['comment' => 'RELATION to glpi_plugin_archires_views (id)']);
  376. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "FK_vlan", "vlans_id",
  377. 'integer', ['comment' => 'RELATION to glpi_vlans (id)']);
  378. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "deleted", "is_deleted",
  379. 'bool');
  380. $migration->changeField("glpi_plugin_archires_networkequipmentqueries", "notes", "notepad",
  381. 'longtext');
  382. $migration->dropField("glpi_plugin_archires_networkequipmentqueries", "link");
  383. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "name");
  384. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "entities_id");
  385. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "networkequipments_id");
  386. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "networks_id");
  387. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "groups_id");
  388. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "plugin_archires_views_id");
  389. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "states_id");
  390. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "vlans_id");
  391. $migration->addKey("glpi_plugin_archires_networkequipmentqueries", "is_deleted");
  392. $migration->dropKey("glpi_plugin_archires_appliancequeries", "deleted");
  393. $migration->changeField("glpi_plugin_archires_appliancequeries", "ID", "id", 'autoincrement');
  394. $migration->changeField("glpi_plugin_archires_appliancequeries", "name", "name", 'string');
  395. $migration->changeField("glpi_plugin_archires_appliancequeries", "FK_entities", "entities_id",
  396. 'integer');
  397. $migration->changeField("glpi_plugin_archires_appliancequeries", "applicatifs", "appliances_id",
  398. 'integer', ['comment' => 'RELATION to glpi_plugin_appliances (id)']);
  399. $migration->changeField("glpi_plugin_archires_appliancequeries", "network", "networks_id",
  400. 'integer', ['comment' => 'RELATION to glpi_networks (id)']);
  401. $migration->changeField("glpi_plugin_archires_appliancequeries", "state", "states_id",
  402. 'integer', ['comment' => 'RELATION to glpi_states (id)']);
  403. $migration->changeField("glpi_plugin_archires_appliancequeries", "FK_group", "groups_id",
  404. 'integer', ['comment' => 'RELATION to glpi_groups (id)']);
  405. $migration->changeField("glpi_plugin_archires_appliancequeries", "FK_config",
  406. "plugin_archires_views_id", 'integer',
  407. ['comment' => 'RELATION to glpi_plugin_archires_views (id)']);
  408. $migration->changeField("glpi_plugin_archires_appliancequeries", "FK_vlan", "vlans_id",
  409. 'integer', ['comment' => 'RELATION to glpi_vlans (id)']);
  410. $migration->changeField("glpi_plugin_archires_appliancequeries", "deleted", "is_deleted", 'bool');
  411. $migration->changeField("glpi_plugin_archires_appliancequeries", "notes", "notepad", 'longtext');
  412. $migration->dropField("glpi_plugin_archires_appliancequeries", "link");
  413. $migration->addKey("glpi_plugin_archires_appliancequeries", "name");
  414. $migration->addKey("glpi_plugin_archires_appliancequeries", "entities_id");
  415. $migration->addKey("glpi_plugin_archires_appliancequeries", "appliances_id");
  416. $migration->addKey("glpi_plugin_archires_appliancequeries", "networks_id");
  417. $migration->addKey("glpi_plugin_archires_appliancequeries", "groups_id");
  418. $migration->addKey("glpi_plugin_archires_appliancequeries", "plugin_archires_views_id");
  419. $migration->addKey("glpi_plugin_archires_appliancequeries", "states_id");
  420. $migration->addKey("glpi_plugin_archires_appliancequeries", "vlans_id");
  421. $migration->addKey("glpi_plugin_archires_appliancequeries", "is_deleted");
  422. $migration->dropKey("glpi_plugin_archires_imageitems", "device_type");
  423. $migration->changeField("glpi_plugin_archires_imageitems", "ID", "id", 'autoincrement');
  424. $migration->changeField("glpi_plugin_archires_imageitems", "type", "type", 'integer');
  425. $migration->changeField("glpi_plugin_archires_imageitems", "device_type", "itemtype",
  426. "varchar(100) collate utf8_unicode_ci NOT NULL",
  427. ['comment' => 'see .class.php file']);
  428. $migration->dropKey("glpi_plugin_archires_querytypes", "FK_query");
  429. $migration->dropKey("glpi_plugin_archires_querytypes", "type");
  430. $migration->dropKey("glpi_plugin_archires_querytypes", "type_query");
  431. $migration->dropKey("glpi_plugin_archires_querytypes", "device_type");
  432. $migration->changeField("glpi_plugin_archires_querytypes", "ID", "id", 'autoincrement');
  433. $migration->changeField("glpi_plugin_archires_querytypes", "type_query", "querytype",
  434. "varchar(100) collate utf8_unicode_ci NOT NULL",
  435. ['comment' => 'RELATION to the 3 type of archires (type)']);
  436. $migration->changeField("glpi_plugin_archires_querytypes", "type", "type", 'integer');
  437. $migration->changeField("glpi_plugin_archires_querytypes", "device_type", "itemtype",
  438. "varchar(100) collate utf8_unicode_ci NOT NULL",
  439. ['comment' => 'see .class.php file']);
  440. $migration->changeField("glpi_plugin_archires_querytypes", "FK_query",
  441. "plugin_archires_queries_id", 'integer',
  442. ['comment' => 'RELATION to the 3 queries tables (id)']);
  443. $migration->addKey("glpi_plugin_archires_querytypes", "querytype");
  444. $migration->addKey("glpi_plugin_archires_querytypes", "type");
  445. $migration->addKey("glpi_plugin_archires_querytypes", "itemtype");
  446. $migration->addKey("glpi_plugin_archires_querytypes", "plugin_archires_queries_id");
  447. $migration->migrationOneTable("glpi_plugin_archires_querytypes");
  448. $query = "UPDATE `glpi_plugin_archires_querytypes`
  449. SET `querytype` = 'PluginArchiresLocationQuery'
  450. WHERE `querytype` = 0";
  451. $DB->queryOrDie($query, '1.8.0 update glpi_plugin_archires_querytypes (querytype) '.$DB->error());
  452. $query = "UPDATE `glpi_plugin_archires_querytypes`
  453. SET `querytype` = 'PluginArchiresNetworkEquipmentQuery'
  454. WHERE `querytype` = 1";
  455. $DB->queryOrDie($query, '1.8.0 update glpi_plugin_archires_querytypes (querytype) '.$DB->error());
  456. $query = "UPDATE `glpi_plugin_archires_querytypes`
  457. SET `querytype` = 'PluginArchiresApplianceQuery'
  458. WHERE `querytype` = 2";
  459. $DB->queryOrDie($query, '1.8.0 update glpi_plugin_archires_querytypes (querytype) '.$DB->error());
  460. $migration->dropKey("glpi_plugin_archires_networkinterfacecolors", "iface");
  461. $migration->changeField("glpi_plugin_archires_networkinterfacecolors", "ID", "id",
  462. 'autoincrement');
  463. $migration->changeField("glpi_plugin_archires_networkinterfacecolors", "iface",
  464. "networkinterfaces_id", 'integer',
  465. ['comment' => 'RELATION to glpi_networkinterfaces (id)']);
  466. $migration->addKey("glpi_plugin_archires_networkinterfacecolors", "networkinterfaces_id");
  467. $migration->changeField("glpi_plugin_archires_statecolors", "ID", "id", 'autoincrement');
  468. $migration->changeField("glpi_plugin_archires_statecolors", "state", "states_id", 'integer',
  469. ['comment' => 'RELATION to glpi_states (id)']);
  470. $migration->addKey("glpi_plugin_archires_statecolors", "states_id");
  471. $migration->changeField("glpi_plugin_archires_vlancolors", "ID", "id", 'autoincrement');
  472. $migration->changeField("glpi_plugin_archires_vlancolors", "vlan", "vlans_id", 'integer',
  473. ['comment' => 'RELATION to glpi_vlans (id)']);
  474. $migration->addKey("glpi_plugin_archires_vlancolors", "vlans_id");
  475. $migration->dropKey("glpi_plugin_archires_views", "deleted");
  476. $migration->dropKey("glpi_plugin_archires_views", "FK_entities");
  477. $migration->changeField("glpi_plugin_archires_views", "ID", "id", 'autoincrement');
  478. $migration->changeField("glpi_plugin_archires_views", "name", "name", 'string');
  479. $migration->changeField("glpi_plugin_archires_views", "FK_entities", "entities_id", 'integer');
  480. $migration->changeField("glpi_plugin_archires_views", "deleted", "is_deleted", 'bool');
  481. $migration->addKey("glpi_plugin_archires_views", "entities_id");
  482. $migration->addKey("glpi_plugin_archires_views", "is_deleted");
  483. $migration->changeField("glpi_plugin_archires_profiles", "ID", "id", 'autoincrement');
  484. $migration->addField("glpi_plugin_archires_profiles", "profiles_id", 'integer',
  485. ['comment' => 'RELATION to glpi_profiles (id)']);
  486. $migration->changeField("glpi_plugin_archires_profiles", "archires", "archires", 'char');
  487. $migration->addKey("glpi_plugin_archires_profiles", "profiles_id");
  488. $query = "DELETE
  489. FROM `glpi_displaypreferences`
  490. WHERE `itemtype` = 3000 AND `num` = 9";
  491. $DB->queryOrDie($query, '1.8.0 delete glpi_displaypreferences (itemtype) '.$DB->error());
  492. $query = "DELETE
  493. FROM `glpi_displaypreferences`
  494. WHERE `itemtype` = 3001 AND `num` = 8";
  495. $DB->queryOrDie($query, '1.8.0 delete glpi_displaypreferences (itemtype) '.$DB->error());
  496. $query = "DELETE
  497. FROM `glpi_displaypreferences`
  498. WHERE `itemtype` = 3002 AND `num` = 8";
  499. $DB->queryOrDie($query, '1.8.0 delete glpi_displaypreferences (itemtype) '.$DB->error());
  500. $migration->executeMigration();
  501. }
  502. function plugin_archires_updateTo210() {
  503. $migration = new Migration(210);
  504. $migration->changeField("glpi_plugin_archires_appliancequeries", "appliances_id",
  505. "plugin_appliances_appliances_id",
  506. 'integer', ['comment' => 'RELATION to glpi_plugin_appliances (id)']);
  507. $migration->executeMigration();
  508. }
  509. function plugin_archires_uninstall() {
  510. global $DB;
  511. $tables = ["glpi_plugin_archires_imageitems",
  512. "glpi_plugin_archires_views",
  513. "glpi_plugin_archires_networkinterfacecolors",
  514. "glpi_plugin_archires_vlancolors",
  515. "glpi_plugin_archires_statecolors",
  516. "glpi_plugin_archires_profiles",
  517. "glpi_plugin_archires_locationqueries",
  518. "glpi_plugin_archires_networkequipmentqueries",
  519. "glpi_plugin_archires_appliancequeries",
  520. "glpi_plugin_archires_querytypes"];
  521. foreach ($tables as $table) {
  522. $DB->query("DROP TABLE IF EXISTS `$table`;");
  523. }
  524. //old versions
  525. $tables = ["glpi_plugin_archires_query_location",
  526. "glpi_plugin_archires_query_switch",
  527. "glpi_plugin_archires_query_applicatifs",
  528. "glpi_plugin_archires_image_device",
  529. "glpi_plugin_archires_query_type",
  530. "glpi_plugin_archires_color_iface",
  531. "glpi_plugin_archires_color_state",
  532. "glpi_plugin_archires_config",
  533. "glpi_plugin_archires_color_vlan"];
  534. foreach ($tables as $table) {
  535. $DB->query("DROP TABLE IF EXISTS `$table`;");
  536. }
  537. $rep_files_archires = GLPI_PLUGIN_DOC_DIR."/archires";
  538. Toolbox::deleteDir($rep_files_archires);
  539. $tables_glpi = ["glpi_displaypreferences",
  540. "glpi_documents_items",
  541. "glpi_bookmarks",
  542. "glpi_logs"];
  543. foreach ($tables_glpi as $table_glpi)
  544. $DB->query("DELETE FROM `$table_glpi`
  545. WHERE `itemtype` = 'PluginArchiresLocationQuery'
  546. OR `itemtype` = 'PluginArchiresNetworkEquipmentQuery'
  547. OR `itemtype` = 'PluginArchiresApplianceQuery'
  548. OR `itemtype` = 'PluginArchiresView';");
  549. return true;
  550. }
  551. // Define dropdown relations
  552. function plugin_archires_getDatabaseRelations() {
  553. $plugin = new Plugin();
  554. if ($plugin->isActivated("archires")) {
  555. return ["glpi_locations" => ["glpi_plugin_archires_locationqueries" => "locations_id"],
  556. "glpi_networks" => ["glpi_plugin_archires_locationqueries" => "networks_id",
  557. "glpi_plugin_archires_appliancequeries" => "networks_id",
  558. "glpi_plugin_archires_networkequipmentqueries" => "networks_id"],
  559. "glpi_states" => ["glpi_plugin_archires_locationqueries" => "states_id",
  560. "glpi_plugin_archires_appliancequeries" => "states_id",
  561. "glpi_plugin_archires_networkequipmentqueries" => "states_id",
  562. "glpi_plugin_archires_statecolors" => "states_id"],
  563. "glpi_groups" => ["glpi_plugin_archires_locationqueries" => "groups_id",
  564. "glpi_plugin_archires_appliancequeries" => "groups_id",
  565. "glpi_plugin_archires_networkequipmentqueries" => "groups_id"],
  566. "glpi_vlans" => ["glpi_plugin_archires_locationqueries" => "vlans_id",
  567. "glpi_plugin_archires_appliancequeries" => "vlans_id",
  568. "glpi_plugin_archires_networkequipmentqueries" => "vlans_id",
  569. "glpi_plugin_archires_vlancolors" => "vlans_id"],
  570. "glpi_entities" => ["glpi_plugin_archires_locationqueries" => "entities_id",
  571. "glpi_plugin_archires_networkequipmentqueries" => "entities_id",
  572. "glpi_plugin_archires_appliancequeries" => "entities_id",
  573. "glpi_plugin_archires_views" => "entities_id"],
  574. "glpi_plugin_archires_views"
  575. => ["glpi_plugin_archires_locationqueries" => "plugin_archires_views_id",
  576. "glpi_plugin_archires_networkequipmentqueries" => "plugin_archires_views_id",
  577. "glpi_plugin_archires_appliancequeries" => "plugin_archires_views_id"],
  578. "glpi_plugin_appliances_appliances"
  579. => ["glpi_plugin_archires_appliancequeries" => "appliances_id"],
  580. "glpi_profiles" => ["glpi_plugin_addressing_profiles" => "profiles_id"],
  581. "glpi_networkinterfaces"
  582. => ["glpi_plugin_archires_networkinterfacecolors" => "networkinterfaces_id"]];
  583. }
  584. return [];
  585. }
  586. ////// SEARCH FUNCTIONS ///////() {
  587. function plugin_archires_giveItem($type,$ID,$data,$num) {
  588. $searchopt = &Search::getOptions($type);
  589. $table = $searchopt[$ID]["table"];
  590. $field = $searchopt[$ID]["field"];
  591. switch ($table.'.'.$field) {
  592. case "glpi_locations.completename" :
  593. if (empty($data["ITEM_$num"])) {
  594. $out = __('All root locations', 'archires');
  595. } else {
  596. $out = $data["ITEM_$num"];
  597. }
  598. return $out;
  599. case "glpi_networks.name" :
  600. case "glpi_states.name" :
  601. case "glpi_vlans.name" :
  602. if (empty($data["ITEM_$num"])) {
  603. $out = __('All');
  604. } else {
  605. $out = $data["ITEM_$num"];
  606. }
  607. return $out;
  608. case "glpi_networkequipments.name" :
  609. case "glpi_plugin_appliances_appliances.name" :
  610. if (empty($data["ITEM_$num"])) {
  611. $out = __('None');
  612. } else {
  613. $out = $data["ITEM_$num"];
  614. }
  615. return $out;
  616. case "glpi_plugin_archires_views.display_ports" :
  617. if (empty($data["ITEM_$num"])) {
  618. $out = __('No');
  619. } else if ($data["ITEM_$num"] == '1') {
  620. $out = __('See numbers', 'archires');
  621. } else if ($data["ITEM_$num"] == '2') {
  622. $out = __('See names', 'archires');
  623. }
  624. return $out;
  625. case "glpi_plugin_archires_views.engine" :
  626. if (empty($data["ITEM_$num"])) {
  627. $out = "Dot";
  628. } else if ($data["ITEM_$num"] == '1') {
  629. $out = "Neato";
  630. }
  631. return $out;
  632. case "glpi_plugin_archires_views.format" :
  633. if ($data["ITEM_$num"] == PluginArchiresView::PLUGIN_ARCHIRES_JPEG_FORMAT) {
  634. $out = "jpeg";
  635. } else if ($data["ITEM_$num"] == PluginArchiresView::PLUGIN_ARCHIRES_PNG_FORMAT) {
  636. $out = "png";
  637. } else if ($data["ITEM_$num"] == PluginArchiresView::PLUGIN_ARCHIRES_GIF_FORMAT) {
  638. $out = "gif";
  639. }
  640. return $out;
  641. case "glpi_plugin_archires_views.color" :
  642. if (empty($data["ITEM_$num"])) {
  643. $out = __('Type of network', 'archires');
  644. } else if ($data["ITEM_$num"] == '1') {
  645. $out = __('VLAN');
  646. }
  647. return $out;
  648. }
  649. return "";
  650. }
  651. ////// SPECIFIC MODIF MASSIVE FUNCTIONS ///////
  652. function plugin_archires_MassiveActions($type) {
  653. // Specific one
  654. switch ($type) {
  655. case 'PluginArchiresLocationQuery' :
  656. case 'PluginArchiresNetworkEquipmentQuery' :
  657. case 'PluginArchiresApplianceQuery' :
  658. case 'PluginArchiresView' :
  659. return ["plugin_archires_duplicate" => __('Duplicate'),
  660. "plugin_archires_transfert" => __('Transfer')];
  661. }
  662. return [];
  663. }
  664. // How to display specific actions ?
  665. function plugin_archires_MassiveActionsDisplay($options=[]) {
  666. switch ($options['itemtype']) {
  667. case 'PluginArchiresLocationQuery':
  668. case 'PluginArchiresNetworkEquipmentQuery' :
  669. case 'PluginArchiresApplianceQuery' :
  670. case 'PluginArchiresView':
  671. switch ($options['action']) {
  672. // No case for add_document : use GLPI core one
  673. case "plugin_archires_duplicate" :
  674. case "plugin_archires_transfert" :
  675. Dropdown::show('Entity');
  676. echo "&nbsp;<input type='submit' name='massiveaction' class='submit' value='".
  677. _sx('button', 'Post')."'>";
  678. break;
  679. }
  680. break;
  681. }
  682. return "";
  683. }
  684. // How to process specific actions ?
  685. function plugin_archires_MassiveActionsProcess($data) {
  686. global $DB;
  687. switch ($data['action']) {
  688. case 'plugin_archires_duplicate' :
  689. if (($data['itemtype'] == 'PluginArchiresLocationQuery')
  690. || ($data['itemtype']=='PluginArchiresNetworkEquipmentQuery')
  691. || ($data['itemtype']=='PluginArchiresApplianceQuery')
  692. || ($data['itemtype']=='PluginArchiresView')) {
  693. $item = new $data['itemtype']();
  694. foreach ($data['item'] as $key => $val) {
  695. if (($val == 1) && $item->getFromDB($key)) {
  696. unset($item->fields["id"]);
  697. $item->fields["entities_id"] = $data["entities_id"];
  698. if ($item->can(-1,'w',$item->fields)) {
  699. $item->add($item->fields);
  700. }
  701. }
  702. }
  703. }
  704. break;
  705. case 'plugin_archires_transfert' :
  706. if (($data['itemtype']=='PluginArchiresLocationQuery')
  707. || ($data['itemtype']=='PluginArchiresNetworkEquipmentQuery')
  708. || ($data['itemtype']=='PluginArchiresApplianceQuery')
  709. || ($data['itemtype']=='PluginArchiresView')) {
  710. $item = new $data['itemtype']();
  711. foreach ($data["item"] as $key => $val) {
  712. if ($val == 1) {
  713. $values["id"] = $key;
  714. $values["entities_id"] = $data['entities_id'];
  715. $item->update($values);
  716. }
  717. }
  718. }
  719. break;
  720. }
  721. }