569 lines
18 KiB
PHP
569 lines
18 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*
|
|
* $Id: Restful.php 29263 2012-03-31 05:45:08Z yexinhao $
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
define('MY_FRIEND_NUM_LIMIT', 2000);
|
|
|
|
Cloud::loadFile('Service_Server_RestfulException');
|
|
Cloud::loadFile('Service_Server_Response');
|
|
Cloud::loadFile('Service_Server_ErrorResponse');
|
|
|
|
abstract class Cloud_Service_Server_Restful {
|
|
|
|
protected static $_instance;
|
|
|
|
public static function getInstance() {
|
|
|
|
if (!(self::$_instance instanceof self)) {
|
|
self::$_instance = new self();
|
|
}
|
|
|
|
return self::$_instance;
|
|
}
|
|
|
|
protected function _myAddslashes($string) {
|
|
if(is_array($string)) {
|
|
foreach($string as $key => $val) {
|
|
$string[$key] = $this->_myAddslashes($val);
|
|
}
|
|
} else {
|
|
$string = ($string === null) ? null : addslashes($string);
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
protected function _myStripslashes($string) {
|
|
if(is_array($string)) {
|
|
foreach($string as $key => $val) {
|
|
$string[$key] = $this->_myStripslashes($val);
|
|
}
|
|
} else {
|
|
$string = ($string === null) ? null : stripslashes($string);
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
public function onUsersGetInfo($uIds, $fields = array(), $isExtra = false) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUsersGetFriendInfo($uId, $num = MY_FRIEND_NUM_LIMIT, $isExtra = false) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUsersGetExtraInfo($uIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUsersGetFormHash($uId, $userAgent) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onFriendsGet($uIds, $friendNum = MY_FRIEND_NUM_LIMIT) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onFriendsAreFriends($uId1, $uId2) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUserApplicationAdd($uId, $appId, $appName, $privacy, $allowSideNav, $allowFeed, $allowProfileLink, $defaultBoxType, $defaultMYML, $defaultProfileLink, $version, $displayMethod, $displayOrder = null, $userPanelArea = null, $canvasTitle = null, $isFullscreen = null , $displayUserPanel = null, $additionalStatus = null) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUserApplicationRemove($uId, $appIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUserApplicationUpdate($uId, $appIds, $appName, $privacy, $allowSideNav, $allowFeed, $allowProfileLink, $version, $displayMethod, $displayOrder = null, $userPanelArea = null, $canvasTitle = null, $isFullscreen = null, $displayUserPanel = null) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUserApplicationGetInstalled($uId) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUserApplicationGet($uId, $appIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSiteGetUpdatedUsers($num) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSiteGetUpdatedFriends($num) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSiteGetAllUsers($from, $num, $friendNum = MY_FRIEND_NUM_LIMIT) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSiteGetStat($beginDate = null, $num = null, $orderType = 'ASC') {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onFeedPublishTemplatizedAction($uId, $appId, $titleTemplate, $titleData, $bodyTemplate, $bodyData, $bodyGeneral = '', $image1 = '', $image1Link = '', $image2 = '', $image2Link = '', $image3 = '', $image3Link = '', $image4 = '', $image4Link = '', $targetIds = '', $privacy = '', $hashTemplate = '', $hashData = '', $specialAppid=0) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onNotificationsSend($uId, $recipientIds, $appId, $notification) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onNotificationsGet($uId) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onApplicationUpdate($appId, $appName, $version, $displayMethod, $displayOrder = null, $userPanelArea = null, $canvasTitle = null, $isFullscreen = null, $displayUserPanel = null, $additionalStatus = null) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onApplicationRemove($appIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onApplicationSetFlag($applications, $flag) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onCreditGet($uId) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onRequestSend($uId, $recipientIds, $appId, $requestName, $myml, $type) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onVideoAuthSetAuthStatus($uId, $status) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onVideoAuthAuth($uId, $picData, $picExt = 'jpg', $isReward = false) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetUserGroupPermissions($userGroupIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetUpdatedPosts($num, $lastPostIds = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchRemovePostLogs($pIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetPosts($pIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetNewPosts($num, $fromPostId = 0) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetAllPosts($num, $pId = 0, $orderType = 'ASC') {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchRecyclePosts($pIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetUpdatedThreads($num, $lastThreadIds = array(), $lastForumIds = array(), $lastUserIds = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchRemoveThreadLogs($lastThreadIds = array(), $lastForumIds = array(), $lastUserIds = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetThreads($tIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchRecycleThreads($tIds) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetNewThreads($num, $tId = 0) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetAllThreads($num, $tId = 0, $orderType = 'ASC') {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetForums($fIds = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchSetConfig($data = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchGetConfig($data = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onSearchSetHotWords($hotWords = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
|
|
public function onCommonGetNav($type = '') {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onCloudGetApps($appName = '') {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onCloudSetApp($app) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onCloudOpenCloud() {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onCloudGetStats() {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onConnectSetConfig($data = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
public function onUnionAddAdvs($advs = array()) {
|
|
return new Cloud_Service_Server_ErrorResponse('2', 'Method not implemented.');
|
|
}
|
|
|
|
|
|
protected function _convertPrivacy($privacy, $u2m = false) {
|
|
$privacys = array(0=>'public', 1=>'friends', 2=>'someFriends', 3=>'me', 4=>'passwd');
|
|
$privacys = ($u2m) ? $privacys : array_flip($privacys);
|
|
return $privacys[$privacy];
|
|
}
|
|
|
|
protected function _spaceInfo2Extra($rows) {
|
|
$privacy = dunserialize($rows['privacy']);
|
|
$profilePrivacy = $privacy['profile'];
|
|
|
|
$res = array();
|
|
$map = array(
|
|
'graduateschool' => array('edu', 'school', true),
|
|
'company' => array('work', 'company', true),
|
|
'lookingfor' => array('trainwith', 'value'),
|
|
'interest' => array('interest', 'value'),
|
|
'bio' => array('intro', 'value')
|
|
);
|
|
|
|
foreach ($map as $dzKey => $myKeys) {
|
|
if ($rows[$dzKey]) {
|
|
$data = array('privacy' => $this->_convertPrivacy($profilePrivacy[$dzKey], true), $myKeys[1] => $rows[$dzKey]);
|
|
if ($myKeys[2]) {
|
|
$res[$myKeys[0]][] = $data;
|
|
} else {
|
|
$res[$myKeys[0]] = $data;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
protected function _friends2friends($friends , $num, $isOnlyReturnId = false, $isFriendIdKey = false) {
|
|
$i = 1;
|
|
$res = array();
|
|
foreach($friends as $friend) {
|
|
if($num && $i > $num) {
|
|
break;
|
|
}
|
|
if ($isOnlyReturnId) {
|
|
$row = $friend['fuid'];
|
|
} else {
|
|
$row = array('uId' => $friend['fuid'],
|
|
'handle' => $friend['fusername']
|
|
);
|
|
}
|
|
if ($isFriendIdKey) {
|
|
$res[$friend['fuid']] = $row;
|
|
} else {
|
|
$res[] = $row;
|
|
}
|
|
$i++;
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
protected function _space2user($space) {
|
|
global $_G;
|
|
|
|
if(!$space) {
|
|
return array();
|
|
}
|
|
$founders = empty($_G['config']['admincp']['founder'])?array():explode(',', $_G['config']['admincp']['founder']);
|
|
$adminLevel = 'none';
|
|
if($space['groupid'] == 1 && $space['adminid'] == 1) {
|
|
$adminLevel = 'manager';
|
|
if($founders
|
|
&& (in_array($space['uid'], $founders)
|
|
|| (!is_numeric($space['username']) && in_array($space['username'], $founders)))) {
|
|
$adminLevel = 'founder';
|
|
}
|
|
}
|
|
|
|
$privacy = dunserialize($space['privacy']);
|
|
if (!$privacy) {
|
|
$privacy = array();
|
|
}
|
|
|
|
$profilePrivacy = array();
|
|
$map = array('affectivestatus' => 'relationshipStatus',
|
|
'birthday' => 'birthday',
|
|
'bloodtype' => 'bloodType',
|
|
'birthcity' => 'birthPlace',
|
|
'residecity' => 'residePlace',
|
|
'mobile' => 'mobile',
|
|
'qq' => 'qq',
|
|
'msn' => 'msn');
|
|
$privacys = dunserialize($space['privacy']);
|
|
foreach ($map as $dzKey => $myKey) {
|
|
$profilePrivacy[$myKey] = $this->_convertPrivacy($privacys['profile'][$dzKey], true);
|
|
}
|
|
|
|
$user = array(
|
|
'uId' => $space['uid'],
|
|
'handle' => $space['username'],
|
|
'action' => $space['action'],
|
|
'realName' => $space['realname'],
|
|
'realNameChecked' => $space['realname'] ? true : false,
|
|
'gender' => $space['gender'] == 1 ? 'male' : ($space['gender'] == 2 ? 'female' : 'unknown'),
|
|
'email' => $space['email'],
|
|
'qq' => $space['qq'],
|
|
'msn' => $space['msn'],
|
|
'birthday' => sprintf('%04d-%02d-%02d', $space['birthyear'], $space['birthmonth'], $space['birthday']),
|
|
'bloodType' => empty($space['bloodtype']) ? 'unknown' : $space['bloodtype'],
|
|
'relationshipStatus' => $space['affectivestatus'],
|
|
'birthProvince' => $space['birthprovince'],
|
|
'birthCity' => $space['birthcity'],
|
|
'resideProvince' => $space['resideprovince'],
|
|
'resideCity' => $space['residecity'],
|
|
'viewNum' => $space['views'],
|
|
'friendNum' => $space['friends'],
|
|
'feedfriend' => $space['feedfriend'],
|
|
'myStatus' => $space['spacenote'],
|
|
'lastActivity' => $space['lastactivity'],
|
|
'created' => $space['regdate'],
|
|
'credit' => $space['credits'],
|
|
'isUploadAvatar' => $space['avatarstatus'] ? true : false,
|
|
'adminLevel' => $adminLevel,
|
|
|
|
'homepagePrivacy' => $this->_convertPrivacy($privacy['view']['index'], true),
|
|
'profilePrivacyList' => $profilePrivacy,
|
|
'friendListPrivacy' => $this->_convertPrivacy($privacy['view']['friend'], true)
|
|
);
|
|
return $user;
|
|
}
|
|
|
|
protected function _getFriends($uId, $num = null) {
|
|
global $_G;
|
|
|
|
$fquery = C::t('home_friend')->fetch_all_by_uid($uId, 0, $num);
|
|
$friends = array();
|
|
foreach($fquery as $friend) {
|
|
$friends[] = $friend['fuid'];
|
|
}
|
|
return $friends;
|
|
}
|
|
|
|
|
|
public function refreshApplication($appId, $appName, $version, $userPanelArea, $canvasTitle, $isFullscreen, $displayUserPanel, $displayMethod, $narrow, $flag, $displayOrder, $additionalStatus) {
|
|
global $_G;
|
|
|
|
$fields = array();
|
|
if ($appName !== null && strlen($appName)>1) {
|
|
$fields['appname'] = $appName;
|
|
}
|
|
if ($version !== null) {
|
|
$fields['version'] = $version;
|
|
$fields['iconstatus'] = 0;
|
|
$fields['icondowntime'] = 0;
|
|
}
|
|
if ($displayMethod !== null) {
|
|
$fields['displaymethod'] = $displayMethod;
|
|
}
|
|
if ($narrow !== null) {
|
|
$fields['narrow'] = $narrow;
|
|
}
|
|
if ($flag !== null) {
|
|
$fields['flag'] = $flag;
|
|
}
|
|
if ($displayOrder !== null) {
|
|
$fields['displayorder'] = $displayOrder;
|
|
}
|
|
if ($userPanelArea !== null) {
|
|
$fields['userpanelarea'] = $userPanelArea;
|
|
}
|
|
if ($canvasTitle !== null) {
|
|
$fields['canvastitle'] = $canvasTitle;
|
|
}
|
|
if ($isFullscreen !== null) {
|
|
$fields['fullscreen'] = $isFullscreen;
|
|
}
|
|
if ($displayUserPanel !== null) {
|
|
$fields['displayuserpanel'] = $displayUserPanel;
|
|
}
|
|
if ($additionalStatus !== null) {
|
|
$fields['appstatus'] = $additionalStatus == 'new' ? 1 : ($additionalStatus == 'none' ? 0 : 2);
|
|
}
|
|
|
|
$result = false;
|
|
if($application = C::t('common_myapp')->fetch($appId)) {
|
|
$needUpdate = false;
|
|
foreach ($fields as $key => $value) {
|
|
if ($value != $application[$key]) {
|
|
$needUpdate = true;
|
|
break;
|
|
}
|
|
}
|
|
if ($needUpdate) {
|
|
C::t('common_myapp')->update($appId, $fields);
|
|
}
|
|
$result = true;
|
|
} else {
|
|
$fields['appid'] = $appId;
|
|
$result = C::t('common_myapp')->insert($fields, true);
|
|
$result = true;
|
|
}
|
|
require_once libfile('function/cache');
|
|
updatecache(array('myapp', 'userapp'));
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function getUsers($uIds, $spaces = array(), $isReturnSpaceField = true, $isExtra = true, $isReturnFriends = false, $friendNum = 500, $isOnlyReturnFriendId = false, $isFriendIdKey = false) {
|
|
if (!$uIds) {
|
|
return array();
|
|
}
|
|
|
|
if (!is_array($uIds)) {
|
|
$uIds = (array)$uIds;
|
|
}
|
|
|
|
if (!$spaces) {
|
|
$spaces = C::t('common_member')->fetch_all($uIds);
|
|
}
|
|
|
|
$totalFriendsNum = 0;
|
|
foreach(C::t('common_member_count')->fetch_all($uIds) as $uid => $row) {
|
|
$spaces[$uid] = array_merge($spaces[$uid], $row);
|
|
$totalFriendsNum += $row['friends'];
|
|
}
|
|
|
|
foreach(C::t('common_member_status')->fetch_all($uIds) as $uid => $row) {
|
|
$spaces[$uid] = array_merge($spaces[$uid], $row);
|
|
}
|
|
|
|
$spaceFields = array();
|
|
if ($isReturnSpaceField) {
|
|
$spaceFields = C::t('common_member_profile')->fetch_all($uIds);
|
|
}
|
|
|
|
foreach(C::t('common_member_field_home')->fetch_all($uIds) as $uid => $row) {
|
|
$spaces[$uid] = array_merge($spaces[$uid], $row);
|
|
$spaceFields[$uid] = array_merge($spaceFields[$uid], $row);
|
|
}
|
|
|
|
$friends = array();
|
|
if ($isReturnFriends) {
|
|
if ($totalFriendsNum <= 10000) {
|
|
$query = C::t('home_friend')->fetch_all_by_uid($uIds);
|
|
foreach($query as $row) {
|
|
$friends[$row['uid']][] = $row;
|
|
}
|
|
} else {
|
|
foreach ($uIds as $uId) {
|
|
$query = C::t('home_friend')->fetch_all_by_uid($uId, 0 , $friendNum);
|
|
foreach($query as $row) {
|
|
$friends[$uId][] = $row;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$users = array();
|
|
foreach($uIds as $uId) {
|
|
$space = $spaces[$uId];
|
|
if ($isReturnSpaceField) {
|
|
$space = array_merge($spaceFields[$uId], $space);
|
|
}
|
|
$user = $this->_space2user($space);
|
|
if (!$user) {
|
|
continue;
|
|
}
|
|
|
|
if ($isExtra) {
|
|
$user['extra'] = $this->_spaceInfo2Extra($spaceFields[$uId]);
|
|
}
|
|
|
|
if ($isReturnFriends) {
|
|
$user['friends'] = $this->_friends2friends($friends[$uId], $friendNum, $isOnlyReturnFriendId, $isFriendIdKey);
|
|
}
|
|
$users[] = $user;
|
|
}
|
|
return $users;
|
|
}
|
|
|
|
public function getExtraByUsers($uIds) {
|
|
if (!$uIds) {
|
|
return array();
|
|
}
|
|
|
|
if (!is_array($uIds)) {
|
|
$uIds = (array)$uIds;
|
|
}
|
|
|
|
$spaceFields = array();
|
|
$spaceFields = C::t('common_member_profile')->fetch_all($uIds);
|
|
|
|
foreach(C::t('common_member_field_home')->fetch_all($uIds) as $uid => $row) {
|
|
$spaceFields[$uid] = array_merge($spaceFields[$uid], $row);
|
|
}
|
|
|
|
$users = array();
|
|
foreach($uIds as $uId) {
|
|
$user = array('uId' => $uId,
|
|
'extra' => $this->_spaceInfo2Extra($spaceFields[$uId]));
|
|
$users[] = $user;
|
|
}
|
|
|
|
return $users;
|
|
}
|
|
|
|
function getUserSpace($uId) {
|
|
global $_G;
|
|
|
|
$space = getuserbyuid($uId);
|
|
if (!$space['uid']) {
|
|
return false;
|
|
}
|
|
|
|
$_G['uid'] = $space['uid'];
|
|
$_G['username'] = $space['username'];
|
|
|
|
return true;
|
|
}
|
|
|
|
} |