admincp_cloud.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: admincp_cloud.php 33808 2013-08-15 11:22:45Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. @set_time_limit(600);
  12. cpheader();
  13. if(empty($admincp) || !is_object($admincp)) {
  14. exit('Access Denied');
  15. }
  16. $adminscript = ADMINSCRIPT;
  17. $cloudDomain = 'http://cp.discuz.qq.com';
  18. $utilService = Cloud::loadClass('Service_Util');
  19. $appService = Cloud::loadClass('Service_App');
  20. $cloudClient = Cloud::loadClass('Service_Client_Cloud');
  21. try {
  22. $cloudstatus = $appService->checkCloudStatus();
  23. } catch (Cloud_Service_AppException $e) {
  24. if($operation == 'doctor' || $operation == 'siteinfo') {
  25. } else {
  26. cpmsg_error('cloud_status_error');
  27. }
  28. }
  29. $forceOpen = !empty($_GET['force_open']) ? true : false;
  30. if(!$operation || $operation == 'open') {
  31. if($cloudstatus == 'cloud' && !$forceOpen) {
  32. cpmsg('cloud_turnto_applist', '', 'succeed', array(), '<p class="marginbot"><a href="###" onclick="top.location = \''.ADMINSCRIPT.'?frames=yes&action=cloud&operation=applist\'" class="lightlink">'.cplang('message_redirect').'</a></p><script type="text/JavaScript">setTimeout("top.location = \''.ADMINSCRIPT.'?frames=yes&action=cloud&operation=applist\'", 3000);</script>');
  33. } else {
  34. if ($_GET['getConfirmInfo']) {
  35. ajaxshowheader();
  36. ajaxshowfooter();
  37. }
  38. $step = max(1, intval($_GET['step']));
  39. $type = $cloudstatus == 'upgrade' ? 'upgrade' : 'open';
  40. if($step == 1) {
  41. $utilService->generateUniqueId();
  42. if($cloudstatus == 'upgrade' || ($cloudstatus == 'cloud' && $forceOpen)) {
  43. shownav('navcloud', 'menu_cloud_upgrade');
  44. $itemtitle = cplang('menu_cloud_upgrade');
  45. } else {
  46. shownav('navcloud', 'menu_cloud_open');
  47. $itemtitle = cplang('menu_cloud_open');
  48. }
  49. echo '
  50. <div class="itemtitle">
  51. <h3>'.$itemtitle.'</h3>
  52. <ul style="margin-right: 10px;" class="tab1"></ul>
  53. <ul class="stepstat" id="nav_steps"></ul>
  54. <ul class="tab1"></ul>
  55. </div>
  56. <div id="loading">
  57. <div id="loadinginner" style="display: block; padding: 100px 0; text-align: center; color: #999;">
  58. <img src="'.$_G['style']['imgdir'].'/loading.gif" alt="loading..." style="vertical-align: middle;" /> '.$lang['cloud_page_loading'].'
  59. </div>
  60. </div>
  61. <div style="display:none;" id="title"></div>';
  62. showformheader('', 'onsubmit="return submitForm();"');
  63. if($cloudstatus == 'upgrade' || ($cloudstatus == 'cloud' && $forceOpen)) {
  64. echo '<div style="margin-top:10px; color: red; padding-left: 10px;" id="manyou_update_tips"></div>';
  65. }
  66. showtableheader('', '', 'id="mainArea" style="display:none;"');
  67. echo '
  68. <tr><td id="" style="border:none;"><div id="msg" class="tipsblock"></div></td></tr>
  69. <tr><td style="border-top:none;"><br />
  70. <label><input onclick="if(this.checked) {$(\'submit_submit\').disabled=false; $(\'submit_submit\').style.color=\'#000\';} else {$(\'submit_submit\').disabled=true; $(\'submit_submit\').style.color=\'#aaa\';}" id="agreeProtocal" class="checkbox" type="checkbox" checked="checked" value="1" />' . cplang('cloud_agree_protocal') . '</label><a id="protocal_url" href="javascript:;" target="_blank">' . cplang('read_protocal') . '</a>
  71. </td>
  72. </tr>';
  73. showsubmit('submit', 'cloud_will_open', '', '<script type="text/javascript">$(\'submit_submit\').disabled = true; $(\'submit_submit\').style.color = \'#aaa\';</script><span id="cloud_doctor_site_test_result_div"><img src="' . $_G['style']['imgdir'] . '/loading.gif" class="vm"> '.cplang('cloud_waiting').'</span>');
  74. showtablefooter();
  75. showformfooter();
  76. echo '
  77. <div id="siteInfo" style="display:none;;">
  78. <h3 class="flb"><em>'.cplang('message_title').'</em><span><a href="javascript:;" class="flbc" onclick="hideWindow(\'open_cloud\');" title="'.cplang('close').'">'.cplang('close').'</a></span></h3>';
  79. showformheader('cloud&operation=open&step=2'.(($cloudstatus == 'cloud' && $forceOpen) ? '&force_open=1' : ''), '');
  80. echo '
  81. <div class="c">
  82. <div class="tplw">
  83. <p class="mbn tahfx">
  84. <strong>'.cplang('jump_to_cloud').'</strong><input type="hidden" id="cloud_api_ip" name="cloud_api_ip" value="" />
  85. </p>
  86. </div>
  87. </div>
  88. <div class="o pns"><button type="submit" class="pn pnc" id="btn_1"><span>'.cplang('continue').'</span></button></div>';
  89. showformfooter();
  90. echo "</div>";
  91. echo <<<EOT
  92. <link rel="stylesheet" type="text/css" href="static/image/admincp/cloud/cloud.css" />
  93. <script type="text/javascript" src="static/image/admincp/cloud/cloud.js"></script>
  94. <script type="text/JavaScript">
  95. var cloudStatus = "$cloudstatus";
  96. var disallowfloat = 'siteInfo';
  97. var cloudApiIp = '';
  98. var dialogHtml = '';
  99. var getMsg = false;
  100. var millisec = 10 * 1000; //10秒
  101. var expirationText = '{$lang['cloud_time_out']}';
  102. expirationTimeout = setTimeout("expiration()", millisec);
  103. </script>
  104. EOT;
  105. $introUrl = $cloudDomain.'/cloud/introduction';
  106. if($cloudstatus == 'upgrade') {
  107. $params = array('type' => 'upgrade');
  108. if ($_G['setting']['my_app_status']) {
  109. $params['apps']['manyou'] = array('status' => true);
  110. }
  111. if (isset($_G['setting']['my_search_status'])) {
  112. $params['apps']['search'] = array('status' => !empty($_G['setting']['my_search_status']) ? true : false);
  113. $oldSiteId = empty($_G['setting']['my_siteid_old'])?'':$_G['setting']['my_siteid_old'];
  114. $oldSitekeySign = empty($_G['setting']['my_sitekey_sign_old'])?'':$_G['setting']['my_sitekey_sign_old'];
  115. if($oldSiteId && $oldSiteId != $_G['setting']['my_siteid'] && $oldSitekeySign) {
  116. $params['apps']['search']['oldSiteId'] = $oldSiteId;
  117. $params['apps']['search']['searchSig'] = $oldSitekeySign;
  118. }
  119. }
  120. if (isset($_G['setting']['connect'])) {
  121. $params['apps']['connect'] = array('status' => !empty($_G['setting']['connect']['allow']) ? true : false);
  122. $oldSiteId = empty($_G['setting']['connectsiteid'])?'':$_G['setting']['connectsiteid'];
  123. $oldSitekey = empty($_G['setting']['connectsitekey'])?'':$_G['setting']['connectsitekey'];
  124. if($oldSiteId && $oldSiteId != $_G['setting']['my_siteid'] && $oldSitekey) {
  125. $params['apps']['connect']['oldSiteId'] = $oldSiteId;
  126. $params['apps']['connect']['connectSig'] = substr(md5(substr(md5($oldSiteId.'|'.$oldSitekey), 0, 16)), 16, 16);
  127. }
  128. }
  129. $params['ADTAG'] = 'CP.DISCUZ.INTRODUCTION';
  130. $signUrl = $utilService->generateSiteSignUrl($params);
  131. $introUrl .= '?'.$signUrl;
  132. }
  133. echo '<script type="text/JavaScript" charset="UTF-8" src="'.$introUrl.'"></script>';
  134. $doctorService = Cloud::loadClass('Service_Doctor');
  135. $doctorService->showCloudDoctorJS('open');
  136. } elseif($step == 2) {
  137. $statsUrl = $cloudDomain . '/cloud/stats/registerclick';
  138. echo '<script type="text/JavaScript" charset="UTF-8" src="'.$statsUrl.'"></script>';
  139. try {
  140. if($_G['setting']['my_siteid'] && $_G['setting']['my_sitekey']) {
  141. if($_G['setting']['my_app_status']) {
  142. $manyouClient = Cloud::loadClass('Service_Client_Manyou');
  143. $manyouClient->sync();
  144. }
  145. $cloudClient->upgradeManyou(trim($_GET['cloud_api_ip']));
  146. } else {
  147. $cloudClient->registerCloud(trim($_GET['cloud_api_ip']));
  148. }
  149. } catch (Cloud_Service_Client_RestfulException $exception) {
  150. switch ($exception->getCode()) {
  151. case 1:
  152. cpmsg('cloud_unknown_dns', '', 'error');
  153. case 2:
  154. $msgValues = array(
  155. 'errorMessage' => $exception->getMessage(),
  156. 'errorCode' => $exception->getCode()
  157. );
  158. cpmsg('cloud_network_busy', '', 'error', $msgValues);
  159. default:
  160. $msgValues = array();
  161. $errorMessage = $exception->getMessage();
  162. $checkUrl = preg_match('/<a.+?>.+?<\/a>/i', $errorMessage, $results);
  163. if($checkUrl) {
  164. foreach($results as $key => $result) {
  165. $errorMessage = str_replace($result, '{replace_' . $key . '}', $errorMessage);
  166. $msgValues = array('replace_' . $key => $result);
  167. }
  168. }
  169. cpmsg($errorMessage, '', 'error', $msgValues);
  170. }
  171. }
  172. $params['ADTAG'] = 'CP.CLOUD.BIND.INDEX';
  173. $bindUrl = $cloudDomain . '/bind/index?' . $utilService->generateSiteSignUrl($params);
  174. echo '<script>top.location="' . $bindUrl . '";</script>';
  175. }
  176. }
  177. } elseif($operation == 'applist') {
  178. if($cloudstatus != 'cloud') {
  179. cpmsg('cloud_open_first', '', 'succeed', array(), '<p class="marginbot"><a href="###" onclick="top.location = \''.ADMINSCRIPT.'?frames=yes&action=plugins\'" class="lightlink">'.cplang('message_redirect').'</a></p><script type="text/JavaScript">setTimeout("top.location = \''.ADMINSCRIPT.'?frames=yes&action=plugins\'", 3000);</script>');
  180. }
  181. $signParams = array('refer' => $_G['siteurl'], 'ADTAG' => 'CP.DISCUZ.APPLIST');
  182. $signUrl = $utilService->generateSiteSignUrl($signParams);
  183. $utilService->redirect($cloudDomain . '/cloud/appList/?' . $signUrl);
  184. } elseif(in_array($operation, array('siteinfo', 'doctor'))) {
  185. require libfile("cloud/$operation", 'admincp');
  186. } elseif(in_array($operation, array('manyou', 'connect', 'security', 'stats', 'search', 'smilies', 'qqgroup', 'union', 'storage'))) {
  187. if($cloudstatus != 'cloud') {
  188. cpmsg('cloud_open_first', '', 'succeed', array(), '<p class="marginbot"><a href="###" onclick="top.location = \''.ADMINSCRIPT.'?frames=yes&action=plugins\'" class="lightlink">'.cplang('message_redirect').'</a></p><script type="text/JavaScript">setTimeout("top.location = \''.ADMINSCRIPT.'?frames=yes&action=plugins\'", 3000);</script>');
  189. }
  190. if($operation != 'security') {
  191. $apps = $appService->getCloudApps();
  192. if(empty($apps) || empty($apps[$operation]) || $apps[$operation]['status'] == 'close') {
  193. cpmsg('cloud_application_close', 'action=plugins', 'error');
  194. }
  195. if($apps[$operation]['status'] == 'disable') {
  196. cpmsg('cloud_application_disable', 'action=plugins', 'error');
  197. }
  198. }
  199. require libfile("cloud/$operation", 'admincp');
  200. } else {
  201. exit('Access Denied');
  202. }