upgrade.ctrl.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. load()->model('cloud');
  8. load()->func('communication');
  9. load()->func('db');
  10. $r = cloud_prepare();
  11. if (is_error($r)) {
  12. itoast($r['message'], url('cloud/profile') , 'error');
  13. }
  14. $dos = array(
  15. 'upgrade'
  16. );
  17. $do = in_array($do, $dos) ? $do : 'upgrade';
  18. uni_user_permission_check('system_cloud_upgrade');
  19. if (empty($_W['setting']['site']['profile_perfect'])) {
  20. }
  21. if ($do == 'upgrade') {
  22. $_W['page']['title'] = '一键更新 - 云服务';
  23. if (empty($_W['setting']['cloudip']) || $_W['setting']['cloudip']['expire'] < TIMESTAMP) {
  24. $cloudip = gethostbyname('we7.cc');
  25. if (empty($cloudip) || !preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $cloudip)) {
  26. itoast('云服务域名解析失败,请查看服务器DNS设置或是在“云服务诊断”中手动设置云服务IP', url('cloud/diagnose') , 'error');
  27. }
  28. setting_save(array(
  29. 'ip' => $cloudip,
  30. 'expire' => TIMESTAMP + 3600
  31. ) , 'cloudip');
  32. }
  33. if (checksubmit('submit')) {
  34. $upgrade = cloud_build();
  35. if (is_error($upgrade)) {
  36. itoast($upgrade['message'], '', 'error');
  37. }
  38. if ($upgrade['upgrade']) {
  39. itoast("检测到新版本: <strong>{$upgrade['version']} (Release {$upgrade['release']})</strong>, 请立即更新.", 'refresh');
  40. } else {
  41. cache_delete('checkupgrade:system');
  42. cache_delete('cloud:transtoken');
  43. itoast('检查结果: 恭喜, 你的程序已经是最新版本. ', 'refresh');
  44. }
  45. }
  46. cache_load('upgrade');
  47. if (!empty($_W['cache']['upgrade'])) {
  48. $upgrade_cache = $_W['cache']['upgrade'];
  49. }
  50. if (!empty($upgrade_cache) || TIMESTAMP - $upgrade_cache['lastupdate'] >= 3600 * 24 || empty($upgrade_cache['data'])) {
  51. $upgrade = cloud_build();
  52. } else {
  53. $upgrade = $upgrade_cache['data'];
  54. }
  55. cache_delete('cloud:transtoken');
  56. if (!empty($upgrade['schemas'])) {
  57. $upgrade['database'] = array();
  58. foreach ($upgrade['schemas'] as $remote) {
  59. $row = array();
  60. $row['tablename'] = $remote['tablename'];
  61. $name = substr($remote['tablename'], 4);
  62. $local = db_table_schema(pdo() , $name);
  63. unset($remote['increment']);
  64. unset($local['increment']);
  65. if (empty($local)) {
  66. $row['new'] = true;
  67. } else {
  68. $row['new'] = false;
  69. $row['fields'] = array();
  70. $row['indexes'] = array();
  71. $diffs = db_schema_compare($local, $remote);
  72. if (!empty($diffs['fields']['less'])) {
  73. $row['fields'] = array_merge($row['fields'], $diffs['fields']['less']);
  74. }
  75. if (!empty($diffs['fields']['diff'])) {
  76. $row['fields'] = array_merge($row['fields'], $diffs['fields']['diff']);
  77. }
  78. if (!empty($diffs['indexes']['less'])) {
  79. $row['indexes'] = array_merge($row['indexes'], $diffs['indexes']['less']);
  80. }
  81. if (!empty($diffs['indexes']['diff'])) {
  82. $row['indexes'] = array_merge($row['indexes'], $diffs['indexes']['diff']);
  83. }
  84. $row['fields'] = implode($row['fields'], ' ');
  85. $row['indexes'] = implode($row['indexes'], ' ');
  86. }
  87. $upgrade['database'][] = $row;
  88. }
  89. }
  90. $path = IA_ROOT . '/data/patch/' . date('Ymd') . '/';
  91. if (is_dir($path)) {
  92. if ($handle = opendir($path)) {
  93. while (false !== ($patchpath = readdir($handle))) {
  94. if ($patchpath != '.' && $patchpath != '..') {
  95. if (is_dir($path . $patchpath)) {
  96. $patchs[] = $patchpath;
  97. }
  98. }
  99. }
  100. }
  101. if (!empty($patchs)) {
  102. sort($patchs, SORT_NUMERIC);
  103. }
  104. }
  105. }
  106. template('cloud/upgrade');
  107. ?>