PageRenderTime 29ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 1ms

/functions/functions-tools.php

https://bitbucket.org/bertramtruong/b-ipam
PHP | 859 lines | 458 code | 212 blank | 189 comment | 59 complexity | 4595f8898f40dd9f96e9d99cf09a0d46 MD5 | raw file
  1. <?php
  2. /**
  3. * Functions for tools
  4. *
  5. */
  6. /* @IPCalc functions ---------------- */
  7. /**
  8. * ipCalc calculations
  9. */
  10. function calculateIpCalcResult ($cidr)
  11. {
  12. /* first verify address type */
  13. $type = IdentifyAddress( $cidr );
  14. /* IPv4 */
  15. if ($type == "IPv4")
  16. {
  17. $net = Net_IPv4::parseAddress( $cidr );
  18. //set ip address type
  19. $out['Type'] = 'IPv4';
  20. //calculate network details
  21. $out['IP address'] = $net->ip; // 192.168.0.50
  22. $out['Network'] = $net->network; // 192.168.0.0
  23. $out['Broadcast'] = $net->broadcast; // 192.168.255.255
  24. $out['Subnet bitmask'] = $net->bitmask; // 16
  25. $out['Subnet netmask'] = $net->netmask; // 255.255.0.0
  26. //calculate min/max IP address
  27. $out['Min host IP'] = long2ip(ip2long($out['Network']) + 1);
  28. $out['Max host IP'] = long2ip(ip2long($out['Broadcast']) - 1);
  29. $out['Numbet of hosts'] = ip2long($out['Broadcast']) - ip2long($out['Min host IP']);
  30. //subnet class
  31. $out['Subnet Class'] = checkIpv4AddressType ($out['Network'], $out['Broadcast']);
  32. //if IP == subnet clear the Host fields
  33. if ($out['IP address'] == $out['Network']) {
  34. $out['IP address'] = "/";
  35. }
  36. }
  37. /* IPv6 */
  38. else
  39. {
  40. //set ip address type
  41. $out['Type'] = 'IPv6';
  42. //calculate network details
  43. /* $out['Host address'] = Net_IPv6::removeNetmaskSpec ( $cidr ); */
  44. $out['Host address'] = $cidr;
  45. $out['Host address'] = Net_IPv6::compress ( $out['Host address'], 1 );
  46. $out['Host address (uncompressed)'] = Net_IPv6::uncompress ( $out['Host address'] );
  47. $mask = Net_IPv6::getNetmaskSpec( $cidr );
  48. $subnet = Net_IPv6::getNetmask( $cidr );
  49. $out['Subnet prefix'] = Net_IPv6::compress ( $subnet ) .'/'. $mask;
  50. $out['Prefix length'] = Net_IPv6::getNetmaskSpec( $cidr );
  51. //if IP == subnet clear the Host fields
  52. if ($out['Host address'] == $out['Subnet prefix']) {
  53. $out['Host address'] = '/';
  54. $out['Host address (uncompressed)'] = '/';
  55. }
  56. //min / max hosts
  57. $maxIp = gmp_strval( gmp_add(gmp_sub(gmp_pow(2, 128 - $mask) ,1),ip2long6 ($subnet)));
  58. $out['Min host IP'] = long2ip6 ( gmp_strval (gmp_add(ip2long6($subnet),1)) );
  59. $out['Max host IP'] = long2ip6 ($maxIp);
  60. $out['Number of hosts'] = MaxHosts( $mask, 1);
  61. //address type
  62. $out['Address type'] = Net_IPv6::getAddressType( $cidr );
  63. $out['Address type'] = checkIpv6AddressType ($out['Address type']);
  64. }
  65. /* return results */
  66. return($out);
  67. }
  68. /**
  69. * Check IPv4 class type
  70. */
  71. function checkIpv4AddressType ($ipStart, $ipStop)
  72. {
  73. /* define classes */
  74. $classes['private A'] = '10.0.0.0/8';
  75. $classes['private B'] = '172.16.0.0/12';
  76. $classes['private C'] = '192.168.0.0/16';
  77. $classes['Loopback'] = '127.0.0.0/8';
  78. $classes['Link-local'] = '169.254.0.0/16';
  79. $classes['Reserved (IANA)'] = '192.0.0.0/24';
  80. $classes['TEST-NET-1'] = '192.0.2.0/24';
  81. $classes['IPv6 to IPv4 relay'] = '192.88.99.0/24';
  82. $classes['Network benchmark'] = '198.18.0.0/15';
  83. $classes['TEST-NET-2'] = '198.51.100.0/24';
  84. $classes['TEST-NET-3'] = '203.0.113.0/24';
  85. $classes['Multicast'] = '224.0.0.0/4'; //Multicast
  86. $classes['Reserved'] = '240.0.0.0/4'; //Reserved - research
  87. /* check if it is in array */
  88. foreach( $classes as $key=>$class )
  89. {
  90. if (Net_IPv4::ipInNetwork($ipStart, $class))
  91. {
  92. if (Net_IPv4::ipInNetwork($ipStop, $class)) {
  93. return($key);
  94. }
  95. }
  96. }
  97. /* no match */
  98. return false;
  99. }
  100. /**
  101. * Check IPv6 address type
  102. */
  103. function checkIpv6AddressType ($subnet)
  104. {
  105. switch ($subnet) {
  106. case 10: $response = "NET_IPV6_NO_NETMASK"; break;
  107. /* case 1 : $response = "NET_IPV6_UNASSIGNED"; break; */
  108. case 1 : $response = "NET_IPV6"; break;
  109. case 11: $response = "NET_IPV6_RESERVED"; break;
  110. case 12: $response = "NET_IPV6_RESERVED_NSAP"; break;
  111. case 13: $response = "NET_IPV6_RESERVED_IPX"; break;
  112. case 14: $response = "NET_IPV6_RESERVED_UNICAST_GEOGRAPHIC"; break;
  113. case 22: $response = "NET_IPV6_UNICAST_PROVIDER";break;
  114. case 31: $response = "NET_IPV6_MULTICAST"; break;
  115. case 42: $response = "NET_IPV6_LOCAL_LINK"; break;
  116. case 43: $response = "NET_IPV6_LOCAL_SITE"; break;
  117. case 51: $response = "NET_IPV6_IPV4MAPPING"; break;
  118. case 51: $response = "NET_IPV6_UNSPECIFIED"; break;
  119. case 51: $response = "NET_IPV6_LOOPBACK"; break;
  120. case 51: $response = "NET_IPV6_UNKNOWN_TYPE"; break;
  121. }
  122. return $response;
  123. }
  124. /* @log functions ---------------- */
  125. /**
  126. * Update log table
  127. */
  128. function updateLogTable ($command, $details = NULL, $severity = 0)
  129. {
  130. global $db; # get variables from config file
  131. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  132. /* set variable */
  133. $date = date("Y-m-d h:i:s");
  134. $user = getActiveUserDetails();
  135. $user = $user['username'];
  136. /* set query */
  137. $query = 'insert into logs '. "\n";
  138. $query .= '(`severity`, `date`,`username`,`ipaddr`,`command`,`details`)'. "\n";
  139. $query .= 'values'. "\n";
  140. $query .= '("'. $severity .'", "'. $date .'", "'. $user .'", "'. $_SERVER['REMOTE_ADDR'] .'", "'. $command .'", "'. $details .'");';
  141. /* execute */
  142. try {
  143. $database->executeMultipleQuerries($query);
  144. }
  145. catch (Exception $e) {
  146. $error = $e->getMessage();
  147. die('<div class="alert alert-error">'. $error .'</div>');
  148. }
  149. return true;
  150. }
  151. /**
  152. * Get log details by Id
  153. */
  154. function getLogByID ($logId)
  155. {
  156. global $db; # get variables from config file
  157. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  158. /* set query */
  159. $query = "select * from `logs` where `id` = '$logId';";
  160. /* execute */
  161. try {
  162. $logs = $database->getArray($query);
  163. }
  164. catch (Exception $e) {
  165. $error = $e->getMessage();
  166. die('<div class="alert alert-error">'. $error .'</div>');
  167. }
  168. return $logs[0];
  169. }
  170. /**
  171. * Get all logs
  172. */
  173. function getAllLogs($logCount, $direction = NULL, $lastId = NULL, $highestId = NULL, $informational, $notice, $warning)
  174. {
  175. global $db; # get variables from config file
  176. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  177. /* query start */
  178. $query = 'select * from ('. "\n";
  179. $query .= 'select * from logs '. "\n";
  180. /* append severities */
  181. $query .= 'where (`severity` = "'. $informational .'" or `severity` = "'. $notice .'" or `severity` = "'. $warning .'" )'. "\n";
  182. /* set query based on direction */
  183. if( ($direction == "next") && ($lastId != $highestId) ) {
  184. $query .= 'and `id` < '. $lastId .' '. "\n";
  185. $query .= 'order by `id` desc limit '. $logCount . "\n";
  186. }
  187. else if( ($direction == "prev") && ($lastId != $highestId)) {
  188. $query .= 'and `id` > '. $lastId .' '. "\n";
  189. $query .= 'order by `id` asc limit '. $logCount . "\n";
  190. }
  191. else {
  192. $query .= 'order by `id` desc limit '. $logCount . "\n";
  193. }
  194. /* append limit and order */
  195. $query .= ') as test '. "\n";
  196. $query .= 'order by `id` desc limit '. $logCount .';'. "\n";
  197. /* execute */
  198. try {
  199. $logs = $database->getArray($query);
  200. }
  201. catch (Exception $e) {
  202. $error = $e->getMessage();
  203. die('<div class="alert alert-error">'. $error .'</div>');
  204. }
  205. /* return vlans */
  206. return $logs;
  207. }
  208. /**
  209. * Get all logs for export
  210. */
  211. function getAllLogsForExport()
  212. {
  213. global $db; # get variables from config file
  214. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  215. /* increase memory size */
  216. ini_set('memory_limit', '512M');
  217. /* query start */
  218. $query = 'select * from `logs` order by `id` desc;'. "\n";
  219. /* execute */
  220. try {
  221. $logs = $database->getArray($query);
  222. }
  223. catch (Exception $e) {
  224. $error = $e->getMessage();
  225. die('<div class="alert alert-error">'. $error .'</div>');
  226. }
  227. /* return vlans */
  228. return $logs;
  229. }
  230. /**
  231. * Clear all logs
  232. */
  233. function clearLogs()
  234. {
  235. global $db; # get variables from config file
  236. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  237. /* query start */
  238. $query = 'truncate table logs;'. "\n";
  239. /* execute */
  240. try {
  241. $logs = $database->executeQuery($query);
  242. }
  243. catch (Exception $e) {
  244. $error = $e->getMessage();
  245. die('<div class="alert alert-error">'. $error .'</div>');
  246. }
  247. /* return result */
  248. return true;
  249. }
  250. /**
  251. * Count all logs
  252. */
  253. function countAllLogs ()
  254. {
  255. global $db; # get variables from config file
  256. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  257. /* set query */
  258. $query = 'select count(*) from logs;';
  259. $logs = $database->getArray($query);
  260. /* return vlans */
  261. return $logs[0]['count(*)'];
  262. }
  263. /**
  264. * Prepare log file from array
  265. */
  266. function prepareLogFromArray ($logs)
  267. {
  268. $result = "";
  269. /* reformat */
  270. foreach($logs as $key=>$req) {
  271. //ignore __ and PHPSESSID
  272. if( (substr($key,0,2) == '__') || (substr($key,0,9) == 'PHPSESSID') ) {
  273. }
  274. else {
  275. $result .= " ". $key . ": " . $req . "<br>";
  276. }
  277. }
  278. /* return result */
  279. return $result;
  280. }
  281. /**
  282. * Get highest log id
  283. */
  284. function getHighestLogId()
  285. {
  286. global $db; # get variables from config file
  287. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  288. /* set query */
  289. $query = 'select id from logs order by id desc limit 1;';
  290. $logs = $database->getArray($query);
  291. /* return vlans */
  292. return $logs[0]['id'];
  293. }
  294. /* @ search functions ---------------- */
  295. /**
  296. * Search function
  297. */
  298. function searchAddresses ($query)
  299. {
  300. global $db; # get variables from config file
  301. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  302. /* execute query */
  303. $logs = $database->getArray($query);
  304. /* return result */
  305. return $logs;
  306. }
  307. /**
  308. * Search subnets
  309. */
  310. function searchSubnets ($searchterm, $searchTermEdited = "")
  311. {
  312. global $db; # get variables from config file
  313. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  314. /* set query */
  315. $query = 'select * from `subnets` where `description` like "%'. $searchterm .'%" or `subnet` between "'. $searchTermEdited['low'] .'" and "'. $searchTermEdited['high'] .'";';
  316. /* execute query */
  317. $search = $database->getArray($query);
  318. /* return result */
  319. return $search;
  320. }
  321. /**
  322. * Search VLANS
  323. */
  324. function searchVLANs ($searchterm)
  325. {
  326. global $db; # get variables from config file
  327. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  328. /* set query */
  329. $query = 'select * from `vlans` where `name` like "%'. $searchterm .'%" or `description` like "%'. $searchterm .'%" or `number` like "%'. $searchterm .'%";';
  330. /* execute query */
  331. $search = $database->getArray($query);
  332. /* return result */
  333. return $search;
  334. }
  335. /**
  336. * Reformat incomplete IPv4 address to decimal for search!
  337. */
  338. function reformatIPv4forSearch ($ip)
  339. {
  340. //remove % sign if present
  341. $ip = str_replace("%", "", $ip);
  342. //remove last .
  343. $size = count($ip);
  344. $lastChar = substr($ip, -1);
  345. if ($lastChar == ".") {
  346. $ip = substr($ip, 0, - 1);
  347. }
  348. /* check if subnet provided, then we have all we need */
  349. $subnet = strpos($ip, "/");
  350. if ($subnet) {
  351. require_once 'PEAR/Net/IPv4.php';
  352. $net = Net_IPv4::parseAddress($subnet);
  353. $result['low'] = $net->network;
  354. $result['high'] = $net->broadcast;
  355. }
  356. else {
  357. /* if subnet is not provided maye wildcard is, so explode it to array */
  358. $ip = explode(".", $ip);
  359. //4 is ok
  360. if (sizeof($ip) == 4) {
  361. $temp = implode(".", $ip);
  362. $result['low'] = $result['high'] = transform2decimal($temp);
  363. }
  364. //3 we need to modify
  365. else if (sizeof($ip) == 3) {
  366. $ip[3] = 0;
  367. $result['low'] = transform2decimal(implode(".", $ip));
  368. $ip[3] = 255;
  369. $result['high'] = transform2decimal(implode(".", $ip));
  370. }
  371. //2 also
  372. else if (sizeof($ip) == 2) {
  373. $ip[2] = 0;
  374. $ip[3] = 0;
  375. $result['low'] = transform2decimal(implode(".", $ip));
  376. $ip[2] = 255;
  377. $ip[3] = 255;
  378. $result['high'] = transform2decimal(implode(".", $ip));
  379. }
  380. //1 also
  381. else if (sizeof($ip) == 1) {
  382. $ip[1] = 0;
  383. $ip[2] = 0;
  384. $ip[3] = 0;
  385. $result['low'] = transform2decimal(implode(".", $ip));
  386. $ip[1] = 255;
  387. $ip[2] = 255;
  388. $ip[3] = 255;
  389. $result['high'] = transform2decimal(implode(".", $ip));
  390. }
  391. //else return same value
  392. else {
  393. $result['low'] = implode(".", $ip);
  394. $result['high'] = implode(".", $ip);
  395. }
  396. }
  397. //return result!
  398. return $result;
  399. }
  400. /**
  401. * Reformat incomplete IPv6 address to decimal for search!
  402. */
  403. function reformatIPv6forSearch ($ip)
  404. {
  405. //split network and subnet part
  406. $ip = explode("/", $ip);
  407. //if subnet is not provided we are looking for host!
  408. if (sizeof($ip) < 2) {
  409. $return['low'] = Transform2decimal($ip[0]);
  410. $return['high'] = Transform2decimal($ip[0]);
  411. }
  412. //if network part ends with :: we must search the complete provided subnet!
  413. $lastChars = substr($ip[0], -2);
  414. if ($lastChars == "::") {
  415. $return['low'] = Transform2decimal ($ip[0]);
  416. //set highest IP address
  417. $subnet = substr($ip[0], 0, -2);
  418. $subnet = Transform2decimal ($subnet);
  419. //calculate all possible hosts in subnet mask
  420. $maskHosts = gmp_strval(gmp_sub(gmp_pow(2, 128 - $ip[1]) ,1));
  421. $return['high'] = gmp_strval(gmp_add($return['low'], $maskHosts));
  422. }
  423. return $return;
  424. }
  425. /* @ IP requests -------------- */
  426. /**
  427. * Is IP already requested?
  428. */
  429. function isIPalreadyRequested($ip)
  430. {
  431. global $db; # get variables from config file
  432. /* set query, open db connection and fetch results */
  433. $query = 'select * from requests where `ip_addr` = "'. $ip .'" and `processed` = 0;';
  434. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  435. $details = $database->getArray($query);
  436. /* return true is IP already in procedure */
  437. if(sizeof($details) != 0) {
  438. return true;
  439. }
  440. else {
  441. return false;
  442. }
  443. }
  444. /**
  445. * Count number of requested IP addresses
  446. */
  447. function countRequestedIPaddresses()
  448. {
  449. global $db; # get variables from config file
  450. /* set query, open db connection and fetch results */
  451. $query = 'select count(*) from requests where `processed` = 0;';
  452. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  453. $details = $database->getArray($query);
  454. return $details[0]['count(*)'];
  455. }
  456. /**
  457. * Get all active IP requests
  458. */
  459. function getAllActiveIPrequests()
  460. {
  461. global $db; # get variables from config file
  462. /* set query, open db connection and fetch results */
  463. $query = 'select * from requests where `processed` = 0 order by `id` desc;';
  464. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  465. $activeRequests = $database->getArray($query);
  466. return $activeRequests;
  467. }
  468. /**
  469. * Get all IP requests
  470. */
  471. function getAllIPrequests($limit = 20)
  472. {
  473. global $db; # get variables from config file
  474. /* set query, open db connection and fetch results */
  475. $query = 'select * from requests order by `id` desc;';
  476. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  477. $activeRequests = $database->getArray($query);
  478. return $activeRequests;
  479. }
  480. /**
  481. * Get IP request by id
  482. */
  483. function getIPrequestById ($id)
  484. {
  485. global $db; # get variables from config file
  486. /* set query, open db connection and fetch results */
  487. $query = 'select * from requests where `id` = "'. $id .'";';
  488. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  489. $activeRequests = $database->getArray($query);
  490. return $activeRequests[0];
  491. }
  492. /**
  493. * Insert new IP request
  494. */
  495. function addNewRequest ($request)
  496. {
  497. global $db; # get variables from config file
  498. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  499. /* set query */
  500. $query = 'insert into requests ' . "\n";
  501. $query .= '(`subnetId`, `ip_addr`,`description`,`dns_name`,`owner`,`requester`,`comment`,`processed`) ' . "\n";
  502. $query .= 'values ' . "\n";
  503. $query .= '("'. $request['subnetId'] .'", "'. $request['ip_addr'] .'", "'. $request['description'] .'", '. "\n";
  504. $query .= ' "'. $request['dns_name'] .'", "'. $request['owner'] .'", "'. $request['requester'] .'", "'. $request['comment'] .'", "0");';
  505. /* set log file */
  506. $log = prepareLogFromArray ($request);
  507. /* execute query */
  508. if (!$database->executeQuery($query)) {
  509. updateLogTable ('Failed to add new IP request', $log, 2);
  510. return false;
  511. }
  512. else {
  513. updateLogTable ('New IP request added', $log, 1);
  514. return true;
  515. }
  516. }
  517. /**
  518. * reject IP request
  519. */
  520. function rejectIPrequest($id, $comment)
  521. {
  522. global $db; # get variables from config file
  523. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  524. /* set query */
  525. $query = 'update requests set `processed` = "1", `accepted` = "0", `adminComment` = "'. $comment .'" where `id` = "'. $id .'";' . "\n";
  526. /* execute query */
  527. if (!$database->executeQuery($query)) {
  528. updateLogTable ('Failed to reject IP address id '. $id, 'Failed to reject IP address id '. $id, 2);
  529. return false;
  530. }
  531. else {
  532. updateLogTable ('IP address id '. $id .' rejected', 'IP address id '. $id . " rejected with comment". $comment, 1);
  533. return true;
  534. }
  535. }
  536. /**
  537. * accept IP request
  538. */
  539. function acceptIPrequest($request)
  540. {
  541. global $db; # get variables from config file
  542. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  543. /* first update request */
  544. $query = 'update requests set `processed` = "1", `accepted` = "1", `adminComment` = "'. $request['adminComment'] .'" where `id` = "'. $request['requestId'] .'";' . "\n";
  545. /* insert to ip database */
  546. $query .= "insert into ipaddresses ";
  547. $query .= "(`subnetId`,`description`,`ip_addr`, `dns_name`, `owner`, `state`, `switch`, `port`) ";
  548. $query .= "values ";
  549. $query .= "('". $request['subnetId'] ."', '". $request['description'] ."', '". $request['ip_addr'] ."', '". $request['dns_name'] ."', '". $request['owner'] ."', '". $request['state'] ."', '". $request['switch'] ."', '". $request['port'] ."');";
  550. /* set log file */
  551. foreach($request as $key=>$req) {
  552. $log .= " ". $key . ": " . $req . "<br>";
  553. }
  554. /* execute query */
  555. if (!$database->executeMultipleQuerries($query)) {
  556. updateLogTable ('Failed to accept IP request', $log, 2);
  557. return false;
  558. }
  559. else {
  560. updateLogTable ('IP request accepted', $log, 1);
  561. return true;
  562. }
  563. }
  564. /* @switch functions ------------------- */
  565. /**
  566. * Get all unique devices
  567. */
  568. function getAllUniqueSwitches ()
  569. {
  570. global $db; # get variables from config file
  571. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  572. /* get all vlans, descriptions and subnets */
  573. $query = 'SELECT `hostname`,`id`,`sections` FROM `switches` order by `hostname` ASC;';
  574. $devices = $database->getArray($query);
  575. /* return unique devices */
  576. return $devices;
  577. }
  578. /**
  579. * Get switch details by hostname
  580. */
  581. function getSwitchDetailsByHostname($hostname)
  582. {
  583. global $db; # get variables from config file
  584. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  585. /* get all vlans, descriptions and subnets */
  586. $query = 'SELECT * FROM `switches` where `hostname` = "'. $hostname .'" limit 1;';
  587. $ip = $database->getArray($query);
  588. /* return details */
  589. if($ip) {
  590. return $ip[0];
  591. }
  592. else {
  593. return false;
  594. }
  595. }
  596. /**
  597. * Get switch details by id
  598. */
  599. function getSwitchDetailsById($id)
  600. {
  601. global $db; # get variables from config file
  602. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  603. /* get all vlans, descriptions and subnets */
  604. $query = 'SELECT * FROM `switches` where `id` = "'. $id .'";';
  605. $switch = $database->getArray($query);
  606. /* return details */
  607. if($switch) {
  608. return $switch[0];
  609. }
  610. else {
  611. return false;
  612. }
  613. }
  614. /* @other functions ------------------- */
  615. /**
  616. * fetch instructions
  617. */
  618. function fetchInstructions ()
  619. {
  620. global $db; # get variables from config file
  621. $database = new database($db['host'], $db['user'], $db['pass'], $db['name']);
  622. /* execute query */
  623. $query = "select * from instructions;";
  624. $instructions = $database->getArray($query);
  625. /* return result */
  626. return $instructions;
  627. }
  628. /**
  629. * version check
  630. */
  631. function getLatestPHPIPAMversion()
  632. {
  633. /* fetch page */
  634. $handle = fopen("http://mihap.si/phpipamversion.php", "r");
  635. while (!feof($handle)) {
  636. $version = fgets($handle);
  637. }
  638. fclose($handle);
  639. /* return version */
  640. if(is_numeric($version)) {
  641. return $version;
  642. }
  643. else {
  644. return false;
  645. }
  646. }
  647. ?>