PageRenderTime 96ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/root/includes/acp/acp_k_version_check.php

https://github.com/dravekx/stargate-portal
PHP | 204 lines | 148 code | 29 blank | 27 comment | 25 complexity | 73c327f733d82e0f330fc2d62eda2785 MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package acp
  5. * @version $Id: acp_k_version_check.php 312 2009-01-02 02:51:12Z Michealo $
  6. * @copyright (c) 2007 StarTrekGuide
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. * @ignore
  12. */
  13. if (!defined('IN_PHPBB'))
  14. {
  15. exit;
  16. }
  17. /**
  18. * @package acp
  19. */
  20. class acp_version_check
  21. {
  22. var $u_action;
  23. function main($id, $mode)
  24. {
  25. global $user, $template;
  26. global $phpbb_admin_path, $phpEx;
  27. $phpbb_root_path = ''; // mpv fix?
  28. $phpEx = ''; // mpv fix?
  29. $this->tpl_name = 'acp_version_check';
  30. $this->page_title = 'ACP_MOD_VERSION_CHECK';
  31. // load version files
  32. $class_functions = array();
  33. $mod_directory = $phpbb_admin_path . 'mods/';
  34. $dh = @opendir($mod_directory);
  35. if (!$dh)
  36. {
  37. trigger_error('NO_ACCESS_MODS_DIRECTORY');
  38. }
  39. while (($file = readdir($dh)) !== false)
  40. {
  41. if (preg_match('/^(.+)_version.' . $phpEx . '$/', $file))
  42. {
  43. include($phpbb_root_path . $mod_directory . $file . $phpEx);
  44. $class_name = substr($file, 0, -(strlen($phpEx) + 1));
  45. $class_functions[] = call_user_func(array($class_name, 'version'));
  46. }
  47. }
  48. closedir($dh);
  49. foreach ($class_functions as $var)
  50. {
  51. // Get current and latest version
  52. $errstr = '';
  53. $errno = 0;
  54. $mod_version = $user->lang['NO_INFO'];
  55. $data = array(
  56. 'title' => $var['title'],
  57. 'description' => $user->lang['NO_INFO'],
  58. 'download' => $user->lang['NO_INFO'],
  59. 'announcement' => $user->lang['NO_INFO'],
  60. );
  61. $file = get_remote_file($var['file'][0], '/' . $var['file'][1], $var['file'][2], $errstr, $errno);
  62. if ($file)
  63. {
  64. if (version_compare(PHP_VERSION, '5.0.0', '<'))
  65. {
  66. $row = array();
  67. $data_array = $this->setup_array($file);
  68. $row = $data_array['mods'][$var['tag']];
  69. $mod_version = $row['mod_version'];
  70. $mod_version = $mod_version['major'] . '.' . $mod_version['minor'] . '.' . $mod_version['revision'] . $mod_version['release'];
  71. $data = array(
  72. 'title' => $row['title'],
  73. 'description' => $row['description'],
  74. 'download' => $row['download'],
  75. 'announcement' => $row['announcement'],
  76. );
  77. }
  78. else
  79. {
  80. // let's not stop the page from loading if a mod author messed up their mod check file
  81. // also take care of one of the easiest ways to mess up an xml file: "&"
  82. $mod = @simplexml_load_string(str_replace('&', '&amp;', $file));
  83. if (isset($mod->$var['tag']))
  84. {
  85. $row = $mod->$var['tag'];
  86. $mod_version = $row->mod_version->major . '.' . $row->mod_version->minor . '.' . $row->mod_version->revision . $row->mod_version->release;
  87. $data = array(
  88. 'title' => $row->title,
  89. 'description' => $row->description,
  90. 'download' => $row->download,
  91. 'announcement' => $row->announcement,
  92. );
  93. }
  94. }
  95. }
  96. // remove spaces from the version in the mod file stored locally
  97. $version = str_replace(' ', '', $var['version']);
  98. $version_compare = (version_compare($version, $mod_version, '<')) ? false : true;
  99. $template->assign_block_vars('mods', array(
  100. 'ANNOUNCEMENT' => $data['announcement'],
  101. 'AUTHOR' => $var['author'],
  102. 'CURRENT_VERSION' => $version,
  103. 'DESCRIPTION' => $data['description'],
  104. 'DOWNLOAD' => $data['download'],
  105. 'LATEST_VERSION' => $mod_version,
  106. 'TITLE' => $data['title'],
  107. 'UP_TO_DATE' => sprintf((!$version_compare) ? $user->lang['NOT_UP_TO_DATE'] : $user->lang['UP_TO_DATE'], $data['title']),
  108. 'S_UP_TO_DATE' => $version_compare,
  109. 'U_AUTHOR' => 'http://www.phpbb.com/community/memberlist.php?mode=viewprofile&un=' . $var['author'],
  110. ));
  111. }
  112. }
  113. /**
  114. * this is for php4 only
  115. * kind of a dirty hack, but since I get the say on how the xml is done, I can have 4 levels max
  116. */
  117. function setup_array($xml)
  118. {
  119. // Fire up the built-in XML parser
  120. $values = $index = array();
  121. $parser = xml_parser_create();
  122. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  123. // this takes care of one possible xml error
  124. $xml = str_replace('&', '&amp;', $xml);
  125. // Set tag names and values
  126. xml_parse_into_struct($parser, $xml, $values, $index);
  127. // Close down XML parser
  128. xml_parser_free($parser);
  129. $ary = array();
  130. foreach ($values as $value)
  131. {
  132. switch (trim($value['level']))
  133. {
  134. case 1:
  135. if ($value['type'] == 'open')
  136. {
  137. $one = $value['tag'];
  138. }
  139. else if ($value['type'] == 'complete')
  140. {
  141. $ary[$value['tag']] = $value['value'];
  142. }
  143. break;
  144. case 2:
  145. if ($value['type'] == 'open')
  146. {
  147. $two = $value['tag'];
  148. }
  149. else if ($value['type'] == 'complete')
  150. {
  151. $ary[$one][$value['tag']] = $value['value'];
  152. }
  153. break;
  154. case 3:
  155. if ($value['type'] == 'open')
  156. {
  157. $three = $value['tag'];
  158. }
  159. else if ($value['type'] == 'complete')
  160. {
  161. $ary[$one][$two][$value['tag']] = $value['value'];
  162. }
  163. break;
  164. case 4:
  165. if ($value['type'] == 'complete')
  166. {
  167. $ary[$one][$two][$three][$value['tag']] = isset($value['value']) ? $value['value'] : '';
  168. }
  169. break;
  170. }
  171. }
  172. return $ary;
  173. }
  174. }
  175. ?>