update.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /*
  3. *
  4. * OGP - Open Game Panel
  5. * Copyright (C) Copyright (C) 2008 - 2013 The OGP Development Team
  6. *
  7. * http://www.opengamepanel.org/
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * as published by the Free Software Foundation; either version 2
  12. * of the License, or any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  22. *
  23. */
  24. // todo, make checking and updating functions for updateing on the background.
  25. // todo, more specified updates in smaller packages
  26. function check_file($local_path, $remote_url)
  27. {
  28. // Load remote file contents in to variable
  29. $remote_file = file_get_contents($remote_url);
  30. // Load local file contents in to variable
  31. $local_file = file_get_contents($local_path);
  32. if( $remote_file != $local_file and preg_match("/exec_ogp_module/", $remote_file) )
  33. {
  34. // The file have changes, save them:
  35. if( ! file_put_contents($local_path, $remote_file) )
  36. {
  37. print_failure($local_path . ' has been changed, but the file can not be updated, you should ensure that your panel files are writeable and try again.');
  38. return False;
  39. }
  40. return True;
  41. }
  42. else
  43. {
  44. return "nochange";
  45. }
  46. }
  47. function exec_ogp_module()
  48. {
  49. if ($_SESSION['users_group'] != "admin")
  50. {
  51. print_failure(get_lang('no_access'));
  52. return;
  53. }
  54. global $db, $settings;
  55. define('REPONAME', 'OGP-Website');
  56. // GitHub URL
  57. if(function_exists("getOGPGitHubURL")){
  58. $gitHubUsername = $settings["custom_github_update_username"];
  59. $gitHubURL = getOGPGitHubURL($gitHubUsername, REPONAME);
  60. }else{
  61. $gitHubURL = "https://github.com/OpenGamePanel/";
  62. }
  63. define('RSS_REMOTE_PATH', $gitHubURL . REPONAME . '/commits/master.atom');
  64. define('MODULE_PATH', 'modules/'.$_GET['m'].'/');
  65. define('RSS_LOCAL_PATH', MODULE_PATH.'master.atom');
  66. if( is_writable(MODULE_PATH) )
  67. {
  68. if( ! file_put_contents(RSS_LOCAL_PATH, file_get_contents(RSS_REMOTE_PATH)))
  69. {
  70. print_failure('Unable to download : ' . RSS_REMOTE_PATH);
  71. }
  72. }
  73. if( file_exists(RSS_LOCAL_PATH) )
  74. {
  75. try {
  76. $feedXml = new SimpleXMLElement(file_get_contents(RSS_LOCAL_PATH), LIBXML_NOCDATA);
  77. $seed = basename( (string) $feedXml->entry[0]->link['href'] );
  78. unlink(RSS_LOCAL_PATH);
  79. } catch (Exception $e) {
  80. print_failure('Unable to update: '.$e->getMessage());
  81. return;
  82. }
  83. }
  84. else
  85. {
  86. print_failure('Unable to read : ' . RSS_LOCAL_PATH);
  87. return;
  88. }
  89. if(isset($seed))
  90. {
  91. /// Checking for changes in the main update files:
  92. $main_update_files = array( 'modules/update/update.php' => 'https://raw.githubusercontent.com/OpenGamePanel/'.REPONAME.'/'.$seed.'/modules/update/update.php',
  93. 'modules/update/updating.php' => 'https://raw.githubusercontent.com/OpenGamePanel/'.REPONAME.'/'.$seed.'/modules/update/updating.php' );
  94. $refresh = False;
  95. foreach($main_update_files as $local_path => $remote_url)
  96. {
  97. $result = check_file($local_path, $remote_url);
  98. if ($result === 'nochange')
  99. {
  100. continue;
  101. }
  102. elseif($result)
  103. {
  104. $refresh = True;
  105. }
  106. else
  107. {
  108. return;
  109. }
  110. }
  111. if($refresh)
  112. {
  113. header("Refresh:0");
  114. return;
  115. }
  116. echo "<h2>".get_lang('update')."</h2>";
  117. $pversion = $settings['ogp_version'];
  118. echo '<a href="?m='.$_GET['m'].'&p=blacklist" >'.get_lang('blacklist_files')."</a>&nbsp;".get_lang('blacklist_files_info')."</br></br>";
  119. echo get_lang('panel_version').": ".$pversion."</br></br>";
  120. echo get_lang('latest_version').": $seed</br></br>";
  121. if ( $seed != $pversion )
  122. {
  123. $dwl = $gitHubURL . REPONAME . '/archive/'.$seed.'.zip';
  124. $dwlHeaders = get_headers($dwl);
  125. if($dwlHeaders[0] != 'HTTP/1.1 302 Found')
  126. print_failure('The generated URL for the download returned a bad response code: ' . $dwlHeaders[0]);
  127. else
  128. echo "<form action='?m=".$_GET['m']."&amp;p=updating&amp;version=".$seed."' method='post'>\n".
  129. "<input type='submit' value='".get_lang('update_now')."' /></form><br><br>\n";
  130. }
  131. else
  132. {
  133. print_success(get_lang('the_panel_is_up_to_date'));
  134. }
  135. }
  136. }
  137. ?>