예제 #1
0
 /**
  * 静态方法, 单例统一访问入口
  * @return object  返回对象的唯一实例
  */
 public static function getInstance()
 {
     if (is_null(self::$_instance) || !isset(self::$_instance)) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
예제 #2
0
 public function getOnlineUsers($refresh = false)
 {
     $data = array();
     if (empty($this->items) || $refresh) {
         $devices = MiniOnlineDevice::getInstance()->getOnlineDevices();
         foreach ($devices as $item) {
             $appId = $item["application_id"];
             $device = MiniUserDevice::getInstance()->getUserDevice($item["device_id"]);
             $user = MiniUser::getInstance()->getUser($device["user_id"]);
             $online = array("name" => $user["user_name"], "nick" => $user['nick'], "appname" => $appId, "deviceName" => $device["user_device_name"], "deviceType" => $device["user_device_type"], "lastLoginTime" => $item["updated_at"], "avatar" => $user["avatar"]);
             array_push($this->items, $online);
         }
     }
     $data['list'] = $this->items;
     $data['total'] = MiniOnlineDevice::getInstance()->getOnlineCount();
     return $data;
 }
예제 #3
0
 /**
  * 控制器执行主逻辑函数
  * @param null $uri
  * @throws MException
  * @return mixed $value 返回最终需要执行完的结果
  */
 public function invoke($uri = null)
 {
     // 解析控制器中对应操作名称
     $urlManager = new MUrlManager();
     $urlArray = $urlManager->parseActionFromUrl();
     if ($urlArray === false) {
         throw new MException(Yii::t('api', '{class} do not call an action', array('{class}' => get_class($this))));
     }
     $action = $urlArray["action"];
     $this->commonUri = $urlArray["uri"];
     self::$namespace = "api.{$action}";
     // 进行程序执行之前首先进行oauth用户身份信息验证
     // 排除指定動作可以匿名訪問
     $canAnonymous = false;
     if ($action == "info" || $action == "report") {
         $canAnonymous = true;
     }
     if ($action == "link") {
         $parts = explode("/", $this->commonUri);
         $subAction = $parts[2];
         if ($subAction == "selected") {
             $canAnonymous = true;
         }
     }
     if ($canAnonymous) {
         header('Access-Control-Allow-Origin: *');
         header('Access-Control-Allow-Methods: POST');
     }
     if (!$canAnonymous) {
         $filter = new MUserFilter();
         $filter->invoke($this->commonUri);
         // 过滤器,检查空间剩余
         $spaceFilter = new MActionFilter();
         $spaceFilter->action = $action;
         $spaceFilter->invoke($this->commonUri);
         // 修改在线用户状态
         $this->user = MUserManager::getInstance()->getCurrentUser();
         $this->device = MUserManager::getInstance()->getCurrentDevice();
         //更新设备在线状态
         MiniOnlineDevice::getInstance()->setOnlineDeviceValue($this->user["id"], $this->user["appId"], $this->device["id"]);
     }
     $this->{$action}();
 }
예제 #4
0
 /**
  *根据ID删除设备
  * @param $deviceId
  * @return boolean
  */
 public function deleteDevice($deviceId)
 {
     //删除设备的Meta
     MiniUserDeviceMeta::getInstance()->deleteMeta($deviceId);
     //删除设备的Token
     MiniToken::getInstance()->deleteToken($deviceId);
     if ($this->hasCache === true) {
         //删除设备的cache
         $this->deleteCache($this->getCacheKey($deviceId));
     }
     //把在线设备清单进行删除
     MiniOnlineDevice::getInstance()->deleteOnlineDevice($deviceId);
     //把设备ID资源暂存到Options表中
     $this->temporary2Option($deviceId);
     //删除设备自己,这里不能修改为sql模式,因为设备ID在删除的时候,自动将ID记录到了Options表中
     $device = UserDevice::model()->findByPk($deviceId);
     if (isset($device)) {
         $device->delete();
     }
     return true;
 }
예제 #5
0
 /**
  * 获取当前用户的信息
  */
 public function getCurrentUser()
 {
     $needSetOnline = false;
     if (MiniHttp::clientIsBrowser()) {
         //javascript判断用户是否登录,在服务器端本地进行用户初始化
         $this->_current_user = NULL;
         $userIdentity = new UserIdentity(NULL, NULL);
         $userIdentity->cookieLogin();
         $sessionUser = Yii::app()->session["user"];
         $this->_current_user = $sessionUser;
         $needSetOnline = true;
     } else {
         if (empty($this->_current_user)) {
             $sessionUser = Yii::app()->session["user"];
             $this->_current_user = $sessionUser;
             $needSetOnline = true;
         }
     }
     if ($needSetOnline) {
         $appId = Yii::app()->session["appId"];
         $deviceId = Yii::app()->session["deviceId"];
         $userId = $this->_current_user['id'];
         MiniOnlineDevice::getInstance()->setOnlineDeviceValue($userId, $appId, $deviceId);
     }
     return $this->_current_user;
 }
예제 #6
0
 /**
  * 获取用户数统计
  */
 public function getUserCount()
 {
     $data = array();
     $userModel = new User();
     $data['online_user_count'] = MiniOnlineDevice::getInstance()->getOnlineCount();
     $data['user_count'] = $userModel->count();
     $data['disabled_count'] = $userModel->disabledCount();
     $data['admin_count'] = $userModel->adminCount();
     return $data;
 }