process.ctrl.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. load()->func('communication');
  7. load()->model('cloud');
  8. $prepare = cloud_prepare();
  9. if (is_error($prepare)) {
  10. itoast($prepare['message'], url('cloud/profile'), 'error');
  11. }
  12. $step = $_GPC['step'];
  13. $steps = array('files', 'schemas', 'scripts');
  14. $step = in_array($step, $steps) ? $step : 'files';
  15. if ($step == 'files' && $_W['ispost']) {
  16. $ret = cloud_download($_GPC['path'], $_GPC['type']);
  17. if (!is_error($ret)) {
  18. exit('success');
  19. }
  20. exit($ret['message']);
  21. }
  22. if ($step == 'scripts' && $_W['ispost']) {
  23. $fname = trim($_GPC['fname']);
  24. $entry = IA_ROOT . '/data/update/' . $fname;
  25. if (is_file($entry) && preg_match('/^update\(\d{12}\-\d{12}\)\.php$/', $fname)) {
  26. $evalret = include $entry;
  27. if (!empty($evalret)) {
  28. cache_build_users_struct();
  29. cache_build_setting();
  30. @unlink($entry);
  31. exit('success');
  32. }
  33. }
  34. exit('failed');
  35. }
  36. if (!empty($_GPC['m'])) {
  37. $m = $_GPC['m'];
  38. $type = 'module';
  39. $is_upgrade = intval($_GPC['is_upgrade']);
  40. $packet = cloud_m_build($_GPC['m']);
  41. } elseif (!empty($_GPC['t'])) {
  42. $m = $_GPC['t'];
  43. $type = 'theme';
  44. $is_upgrade = intval($_GPC['is_upgrade']);
  45. $packet = cloud_t_build($_GPC['t']);
  46. } elseif (!empty($_GPC['w'])) {
  47. $m = $_GPC['w'];
  48. $type = 'webtheme';
  49. $is_upgrade = intval($_GPC['is_upgrade']);
  50. $packet = cloud_w_build($_GPC['w']);
  51. } else {
  52. $m = '';
  53. $packet = cloud_build();
  54. }
  55. if ($step == 'schemas' && $_W['ispost']) {
  56. $tablename = $_GPC['table'];
  57. foreach ($packet['schemas'] as $schema) {
  58. if (substr($schema['tablename'], 4) == $tablename) {
  59. $remote = $schema;
  60. break;
  61. }
  62. }
  63. if (!empty($remote)) {
  64. load()->func('db');
  65. $local = db_table_schema(pdo(), $tablename);
  66. $sqls = db_table_fix_sql($local, $remote);
  67. $error = false;
  68. foreach ($sqls as $sql) {
  69. if (pdo_query($sql) === false) {
  70. $error = true;
  71. $errormsg .= pdo_debug(false);
  72. break;
  73. }
  74. }
  75. if (!$error) {
  76. exit('success');
  77. }
  78. }
  79. exit;
  80. }
  81. if (!empty($packet) && (!empty($packet['upgrade']) || !empty($packet['install']))) {
  82. $schemas = array();
  83. if (!empty($packet['schemas'])) {
  84. foreach ($packet['schemas'] as $schema) {
  85. $schemas[] = substr($schema['tablename'], 4);
  86. }
  87. }
  88. $scripts = array();
  89. if (empty($packet['install'])) {
  90. $updatefiles = array();
  91. if (!empty($packet['scripts']) && empty($packet['type'])) {
  92. $updatedir = IA_ROOT . '/data/update/';
  93. load()->func('file');
  94. rmdirs($updatedir, true);
  95. mkdirs($updatedir);
  96. $cversion = IMS_VERSION;
  97. $crelease = IMS_RELEASE_DATE;
  98. foreach ($packet['scripts'] as $script) {
  99. if ($script['release'] <= $crelease) {
  100. continue;
  101. }
  102. $fname = "update({$crelease}-{$script['release']}).php";
  103. $crelease = $script['release'];
  104. $script['script'] = @base64_decode($script['script']);
  105. if (empty($script['script'])) {
  106. $script['script'] = <<<DAT
  107. <?php
  108. load()->model('setting');
  109. setting_upgrade_version('{$packet['family']}', '{$script['version']}', '{$script['release']}');
  110. return true;
  111. DAT;
  112. }
  113. $updatefile = $updatedir . $fname;
  114. file_put_contents($updatefile, $script['script']);
  115. $updatefiles[] = $updatefile;
  116. $s = array_elements(array('message', 'release', 'version'), $script);
  117. $s['fname'] = $fname;
  118. $scripts[] = $s;
  119. }
  120. }
  121. }
  122. } else {
  123. if (is_error($packet)) {
  124. itoast($packet['message'], '', 'error');
  125. } else {
  126. cache_delete('checkupgrade:system');
  127. cache_delete('cloud:transtoken');
  128. itoast('更新已完成. ', url('cloud/upgrade'), 'info');
  129. }
  130. }
  131. template('cloud/process');
  132. ?>