Doctor.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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: Doctor.php 33991 2013-09-16 07:25:00Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class Cloud_Service_Doctor {
  12. protected static $_instance;
  13. public static function getInstance() {
  14. if (!(self::$_instance instanceof self)) {
  15. self::$_instance = new self();
  16. }
  17. return self::$_instance;
  18. }
  19. public function __construct() {
  20. }
  21. public function checkDNS($url) {
  22. if (empty($url)) {
  23. return false;
  24. }
  25. $matches = parse_url($url);
  26. $host = !empty($matches['host']) ? $matches['host'] : $matches['path'];
  27. if (!$host) {
  28. return false;
  29. }
  30. $ip = gethostbyname($host);
  31. if ($ip == $host) {
  32. return false;
  33. } else {
  34. return $ip;
  35. }
  36. }
  37. public function checkDNSResult($type = 1, $setting = array()) {
  38. switch ($type) {
  39. case 1:
  40. $setIP = $setting['cloud_api_ip'] ? cplang('cloud_doctor_setting_ip') . $setting['cloud_api_ip'] : '';
  41. $host = 'api.discuz.qq.com';
  42. break;
  43. case 2:
  44. $setIP = $setting['my_ip'] ? cplang('cloud_doctor_setting_ip') . $setting['my_ip'] : '';
  45. $host = 'api.manyou.com';
  46. break;
  47. case 3:
  48. $setIP = $setting['connect_api_ip'] ? cplang('cloud_doctor_setting_ip') . $setting['connect_api_ip'] : '';
  49. $host = 'openapi.qzone.qq.com';
  50. break;
  51. }
  52. $ip = $this->checkDNS($host);
  53. if ($ip) {
  54. return sprintf(cplang('cloud_doctor_dns_success'), $host, $ip, $setIP, ADMINSCRIPT);
  55. } else {
  56. return sprintf(cplang('cloud_doctor_dns_failure'), $host, $setIP, ADMINSCRIPT);
  57. }
  58. }
  59. public function showPlugins() {
  60. global $_G;
  61. $plugins = array();
  62. $identifiers = array('qqconnect', 'cloudstat', 'soso_smilies', 'cloudsearch', 'security', 'cloudcaptcha', 'cloudunion', 'manyou');
  63. $plugins = C::t('common_plugin')->fetch_all_by_identifier($identifiers);
  64. if ($plugins && count($plugins) == count($identifiers)) {
  65. $systemPluginStatus = cplang('cloud_doctor_result_success').' '.cplang('available');
  66. } else {
  67. $initsysFormHash = substr(md5(substr($_G['timestamp'], 0, -7).$_G['username'].$_G['uid'].$_G['authkey']), 8, 8);
  68. $systemPluginStatus = cplang('cloud_doctor_result_failure') . cplang('cloud_doctor_system_plugin_status_false', array('formhash' => $initsysFormHash));
  69. }
  70. showtablerow('', array('class="td24"'), array(
  71. '<strong>'.cplang('cloud_doctor_system_plugin_status').'</strong>',
  72. $systemPluginStatus
  73. ));
  74. foreach($plugins as $plugin) {
  75. $moduleStatus = cplang('cloud_doctor_plugin_module_error');
  76. $plugin['modules'] = @dunserialize($plugin['modules']);
  77. if(is_array($plugin['modules']) && $plugin['modules']) {
  78. $moduleStatus = '';
  79. }
  80. showtablerow('', array('class="td24"'), array(
  81. '<strong>'.$plugin['name'].'</strong>',
  82. cplang('version').' '.$plugin['version'].' '.$moduleStatus
  83. ));
  84. }
  85. }
  86. public function showCloudStatus($cloudStatus) {
  87. $cloudStatus = intval($cloudStatus);
  88. return cplang('cloud_doctor_status_' . $cloudStatus);
  89. }
  90. public function testAPI($type = 1, $ip = '', $setting = array()) {
  91. switch ($type) {
  92. case 1:
  93. $url = 'http://api.discuz.qq.com/site.php';
  94. $result = dfsockopen($url, 0, '', '', false, $ip ? $ip : $setting['cloud_api_ip'], 5);
  95. break;
  96. case 2:
  97. $url = 'http://api.manyou.com/uchome.php';
  98. $result = dfsockopen($url, 0, 'action=siteRefresh', '', false, $ip ? $ip : $setting['my_ip'], 5);
  99. break;
  100. case 3:
  101. $url = 'http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token';
  102. $result = dfsockopen($url, 0, '', '', false, $ip ? $ip : $setting['connect_api_ip'], 5);
  103. if($result) {
  104. return true;
  105. }
  106. break;
  107. }
  108. $result = trim($result);
  109. if(!$result) {
  110. return false;
  111. }
  112. $result = @dunserialize($result);
  113. if(!$result) {
  114. return false;
  115. }
  116. return true;
  117. }
  118. public function showTestJS($type = 1, $ip = '') {
  119. $html = sprintf('<div id="_doctor_apitest_%1$s_%2$s"></div><script type="text/javascript">ajaxget("%3$s?action=cloud&operation=doctor&op=apitest&api_type=%1$s&api_ip=%2$s", "_doctor_apitest_%1$s_%2$s");</script>', $type, $ip, ADMINSCRIPT);
  120. return $html;
  121. }
  122. public function showAPIJS() {
  123. echo '<script type="text/javascript" src="static/image/admincp/cloud/cloud.js"></script> <script type="text/javascript" src="http://cp.discuz.qq.com/cloud/apiIp" charset="utf-8"></script>';
  124. }
  125. public function showSiteTestAPIJS($position = 'doctor') {
  126. global $_G;
  127. require_once DISCUZ_ROOT.'./source/discuz_version.php';
  128. echo '<script type="text/javascript" src="http://cp.discuz.qq.com/cloud/siteTest?s_url=' . urlencode($_G['siteurl']) . '&charset=' . CHARSET . '&productVersion=' . DISCUZ_VERSION . '&position=' . $position . '" charset="utf-8"></script>';
  129. }
  130. public function showCloudDoctorJS($position = 'doctor') {
  131. global $_G;
  132. require_once DISCUZ_ROOT.'./source/discuz_version.php';
  133. $url = $_G['siteurl'];
  134. $charset = CHARSET;
  135. $version = DISCUZ_VERSION;
  136. $rand = rand();
  137. $time = time();
  138. $output = <<<EOF
  139. <script type="text/javascript">
  140. var discuzUrl = '$url';
  141. var discuzCharset = '$charset';
  142. var productVersion = '$version';
  143. var checkPosition = '$position';
  144. var discuzTime = '$time';
  145. </script>
  146. <script type="text/javascript" src="http://discuz.gtimg.cn/cloud/scripts/doctor.js?v=$rand" charset="utf-8"></script>
  147. EOF;
  148. echo $output;
  149. }
  150. public function fixGuestGroup($name) {
  151. $connect = C::t('common_setting')->fetch('connect', true);
  152. $guestGroupId = $connect['guest_groupid'];
  153. $group = C::t('common_usergroup')->fetch($guestGroupId);
  154. if ($group) {
  155. return true;
  156. }
  157. $userGroupData = array(
  158. 'type' => 'special',
  159. 'grouptitle' => $name,
  160. 'allowvisit' => 1,
  161. 'color' => '',
  162. 'stars' => '',
  163. );
  164. $newGroupId = C::t('common_usergroup')->insert($userGroupData, true);
  165. $dataField = array(
  166. 'groupid' => $newGroupId,
  167. 'allowsearch' => 2,
  168. 'readaccess' => 1,
  169. 'allowgetattach' => 1,
  170. 'allowgetimage' => 1,
  171. );
  172. C::t('common_usergroup_field')->insert($dataField);
  173. $connect['guest_groupid'] = $newGroupId;
  174. C::t('common_setting')->update('connect', serialize($connect));
  175. updatecache('usergroups');
  176. }
  177. public function checkGuestGroup() {
  178. $connect = C::t('common_setting')->fetch('connect', true);
  179. $guestGroupId = $connect['guest_groupid'];
  180. $group = C::t('common_usergroup')->fetch($guestGroupId);
  181. if ($group) {
  182. return true;
  183. }
  184. return false;
  185. }
  186. public function changeQQUrl() {
  187. global $_G;
  188. return 'http://cp.discuz.qq.com/platform/changeQQ?s_id='.$_G['setting']['my_siteid'].'&s_site_uid='.$_G['uid'];
  189. }
  190. }