123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- <?php
- /**
- * UserController 用户相关api接口
- */
- class UserController extends ApiBaseController{
- public function beforeAction($action){
- $weixin_use = array('info');
- if(Yii::app()->getRequest()->getParam("request_from") == 'weixin' && in_array($action->id,$weixin_use)){
- return true;
- }
- return $this->verify();
- }
- //用户邮箱注册
- public function actionRegister(){
- $userAr = new RUser();
- $data = array();
- $data['user_name'] = trim(Yii::app()->request->getParam('user_name',''));
- $data['password'] = Yii::app()->request->getParam('password');
- $data['email'] = Yii::app()->request->getParam('email','');
- $data['avatar'] = Yii::app()->request->getParam('avatar','');
- $data['city_info'] = json_decode(Yii::app()->request->getParam('city_info'),true);
- $position = json_decode(Yii::app()->request->getParam('position'),true);
- $data['position'][0] = isset($position['lng'])?floatval($position['lng']):0;
- $data['position'][1] = isset($position['lat'])?floatval($position['lat']):0;
- //防止city_info出现非法数据
- if(!isset($data['city_info']['province'])){
- $data['city_info']['province'] = '';
- $data['city_info']['city'] = '';
- $data['city_info']['area'] = '';
- }elseif(!isset($data['city_info']['city'])){
- $data['city_info']['city'] = '';
- $data['city_info']['area'] = '';
- }elseif(!isset($data['city_info']['area'])){
- $data['city_info']['area'] = '';
- }
- $data['app_client_id'] = intval(Yii::app()->request->getParam('app_client_id'));
- $data['device_id'] = Yii::app()->request->getParam('device_id');
- $data['channel'] = Yii::app()->request->getParam('channel');
- $data['openid'] = Yii::app()->request->getParam('openid');
- $data['phone_type'] = Yii::app()->request->getParam('phone_type');
- $data['os_version'] = Yii::app()->request->getParam('os_version');
- $data['register_time'] = time();
- $data['last_visit_time'] = time();
- if(!preg_match(Yii::app()->params['emailReg'], $data['email'])){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','email_Illegal'));
- }
- $z_user = new ZUser();
- $z_user->validate_user_name($data['user_name']);
- if(strlen($data['password'])<6 || strlen($data['password'])>20){
- CommonFn::requestAjax(false, CommonFn::getMessage('user','password_length_6_20'));
- }
- $userAr->attributes = $data;
- $criteria = new EMongoCriteria();
- $criteria->email('==',$userAr->email);
- $olduser = RUser::model()->find($criteria);
- if($olduser){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','email_already_registered'));
- }
- $criteria = new EMongoCriteria();
- $criteria->user_name('==',$userAr->user_name);
- $olduser = RUser::model()->find($criteria);
- if($olduser){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','username_already_registered'));
- }
- $userAr->password = md5($userAr->password);
- //用户注册后默认关注几个圈子
- $z_group = new ZGroup();
- $userAr->groups = $z_group->get_default_fllow_group();
- if($userAr->save()){
- $data = RUser::model()->parseRow($userAr->attributes);
- CommonFn::requestAjax(true,CommonFn::getMessage('user','register_success'),$data);
- }else{
- CommonFn::requestAjax(false,CommonFn::getMessage('user','register_faild'));
- }
- }
- //微信用户的登录
- public function actionWeixinLogin(){
- $data = array();
- $data['user_name'] = mb_strtolower(Yii::app()->request->getParam('user_name',''));
- $data['avatar'] = Yii::app()->request->getParam('avatar','');
- $data['city_info'] = json_decode(Yii::app()->request->getParam('city_info'),true);
- $position = json_decode(Yii::app()->request->getParam('position'),true);
- //防止city_info出现非法数据
- if(!isset($data['city_info']['province']) || $data['city_info']['province'] == '未知'){
- $data['city_info']['province'] = '';
- $data['city_info']['city'] = '';
- $data['city_info']['area'] = '';
- }elseif(!isset($data['city_info']['city'])){
- $data['city_info']['city'] = '';
- $data['city_info']['area'] = '';
- }elseif(!isset($data['city_info']['area'])){
- $data['city_info']['area'] = '';
- }
- $data['position'][0] = isset($position['lng'])?floatval($position['lng']):0;
- $data['position'][1] = isset($position['lat'])?floatval($position['lat']):0;
- $data['app_client_id'] = intval(Yii::app()->request->getParam('app_client_id'));
- $data['device_id'] = Yii::app()->request->getParam('device_id');
- $data['channel'] = Yii::app()->request->getParam('channel');
- $data['phone_type'] = Yii::app()->request->getParam('phone_type');
- if($data['channel'] == 'appstore'){
- $data['phone_type'] = Yii::app()->request->getParam('device_model');
- }
- $data['app_version'] = Yii::app()->request->getParam('app_version');
- $data['os_version'] = Yii::app()->request->getParam('os_version');
- $data['openid'] = Yii::app()->request->getParam('openid','');
- $data['unionid'] = Yii::app()->request->getParam('unionid','');
- $data['sex'] = intval(Yii::app()->request->getParam('sex'));
- $data['register_time'] = time();
- $data['last_visit_time'] = time();
-
- if ($data['openid'] == ''){
- CommonFn::requestAjax(false, CommonFn::getMessage('user','weixin_login_faild'));
- }
- $criteria = new EMongoCriteria();
- if(isset($data['unionid']) && !empty($data['unionid'])){
- $criteria->unionid('==',$data['unionid']);//unionid保证账号统一
- }else{
- $criteria->openid('==',$data['openid']);
- }
- $user = RUser::model()->find($criteria);
- if($user){
- $user->os_version = $data['os_version'];
- $user->device_id = $data['device_id'];
- $user->app_client_id = $data['app_client_id'];
- $paraArr = array('os_version','device_id','app_client_id');
- if(!empty($data['position'])&&!empty($data['position'][0])&&!empty($data['position'][1])){
- $user->position = $data['position'];
- $paraArr[] = 'position';
- }
- if(!empty($data['city_info']['province'])){
- $user->city_info = $data['city_info'];
- $paraArr[] = 'city_info';
- }
- $user->update($paraArr,true);
- $data = RUser::model()->parseRow($user->attributes);
- $z_action_cat = new ZActionCat();
- $news_count = $z_action_cat->getUnReadNews($user->_id);
- $data['news'] = $news_count;
- CommonFn::requestAjax(true,CommonFn::getMessage('user','login_success'),$data);
- }else{
- $z_user = new ZUser();
- $z_user->validate_user_name($data['user_name']);
- $userAr = new RUser();
- $userAr->user_name = $data['user_name'];
- $userAr->avatar = $data['avatar'];
- $userAr->city_info = $data['city_info'];
- $userAr->position = $data['position'];
- $userAr->app_client_id = $data['app_client_id'];
- $userAr->device_id = $data['device_id'];
- $userAr->phone_type = $data['phone_type'];
- $userAr->app_version = $data['app_version'];
- $userAr->os_version = $data['os_version'];
- $userAr->channel = $data['channel'];
- $userAr->openid = $data['openid'];
- $userAr->unionid = $data['unionid'];
- $userAr->sex = $data['sex']?$data['sex']:3;
- $userAr->register_time = $data['register_time'];
- $userAr->last_visit_time = $data['last_visit_time'];
- try {
- $saveResult = $userAr->save();
- }catch(Exception $e){
- $userAr->user_name = 'wz_'.dechex(time());
- $saveResult = $userAr->save();
- }
- if($saveResult){
- $z_group = new ZGroup();
- $default_groups = $z_group->get_default_fllow_group();
- $userAr->groups = $default_groups;
- $userAr->update(array('groups'),true);
- $list = new ARedisList('after_user_reg');
- $user_id = (string)$userAr->_id;
- $list->push($user_id);
- $data = RUser::model()->parseRow($userAr->attributes);
- $news = [
- 'like'=>0,
- 'message'=>0,
- 'reply'=>0,
- 'notice'=>0,
- 'order'=>0,
- 'follow'=>0,
- 'new_topic'=>0,
- 'new_card'=>0,
- 'total'=>0
- ];
- $data['news'] = $news;
- CommonFn::requestAjax(true,CommonFn::getMessage('user','register_success'),$data,200,array('is_new'=>1));
- }else{
- CommonFn::requestAjax(false,CommonFn::getMessage('user','register_faild'));
- }
- }
- }
- //用户登陆
- public function actionLogin(){
- $password = md5(Yii::app()->request->getParam('password'),'');
- $email = preg_replace('/\0/','',Yii::app()->request->getParam('email',''));
- $email = str_replace(' ','',$email);
- if($password&&$email){
- $criteria = new EMongoCriteria();
- $criteria->email = new MongoRegex('/' . $email . '/i');
- try {
- $userAr = RUser::model()->find($criteria);
- } catch (Exception $e) {
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_exist'));
- }
- if(!$userAr){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_exist'));
- }
- if($password == $userAr->password){
- $userAr->last_visit_time = time();
- $userAr->update(array('last_visit_time'),true);
- $z_action_cat = new ZActionCat();
- $news_count = $z_action_cat->getUnReadNews($userAr->_id);
- $data = RUser::model()->parseRow($userAr->attributes);
- $data['news'] = $news_count;
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
- }else{
- CommonFn::requestAjax(false,CommonFn::getMessage('user','username_or_password_error'));
- }
- }else{
- CommonFn::requestAjax(false,CommonFn::getMessage('message','params_miss'));
- }
- }
- //用户登陆前验证
- public function actionValidate(){
- $email = Yii::app()->request->getParam('email');
- if(!$email){
- CommonFn::requestAjax(false,CommonFn::getMessage('message','params_miss'));
- }
- $criteria = new EMongoCriteria();
- if(preg_match(Yii::app()->params['emailReg'], $email)){
- $criteria->email('==',$email);
- }else{
- $criteria->user_name('==',$email);
- }
- $userAr = RUser::model()->find($criteria);
- if($userAr){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','email_already_registered'));
- }else{
- CommonFn::requestAjax(true,'');
- }
- }
- //用户信息
- public function actionInfo(){
- if(Yii::app()->request->getParam('app_client_id') == 2){
- $this->check_version();
- }
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $uid = Yii::app()->getRequest()->getParam("to_user_id");
- $user_name = Yii::app()->getRequest()->getParam("user_name");
- if($user_name){
- $criteria = new EMongoCriteria();
- $criteria->user_name('==',$user_name);
- $res = RUser::model()->find($criteria);
- if(!$res){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','user_not_exist'),204);
- }else{
- $uid = $res->_id;
- }
- }
- $page = intval(Yii::app()->getRequest()->getParam("page",1));
- if(empty($page)){
- $page = 1;
- }
- $notopic = Yii::app()->getRequest()->getParam("notopic");
- if(empty($user_id) && empty($uid)){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_empty'),201);
- }
- $add_score = $this->today_first_login($user_id);
- if($user_id){
- $id = $user_id;
- }
- $model = new RUser();
- if($uid){
- if($user_id){
- $user_node = new UserNodeRecord($user_id);
- $relation = $user_node->relation($uid);
- }
- $id = $uid;
- }
- $user = CommonFn::apigetObJ($id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- $user_data = $model->parseRow($user->attributes,array(),true);
- $user_data['relation'] = isset($relation)?$relation:0;
- $criteria = new EMongoCriteria();
- $criteria->user('==',$user->_id);
- $criteria->status("==",1);
- $criteria->limit(3)->sort('time',EMongoCriteria::SORT_DESC);
- $model = new Topic();
- $cursor = $model->findAll($criteria);
- $rows = CommonFn::getRows($cursor);
- $topics = $model->parse($rows);
- $feed = array();
- if($topics){
- $feed['pics'] = array();
- foreach ($topics as $topic) {
- $feed['pics'] = array_merge($feed['pics'],$topic['pics']);
- $feed['pics'] = array_slice($feed['pics'],0,3);
- }
- if($feed['pics']){
- $feed['type'] = 'pics';
- $user_data['feed'] = $feed;
- }elseif($topics[0]['content']){
- $feed['type'] = 'text';
- $feed['content'] = $topics[0]['content'];
- $user_data['feed'] = $feed;
- }else{
- $feed['type'] = 'text';
- $feed['content'] = '';
- $user_data['feed'] = $feed;
- }
- }else{
- $feed['type'] = 'text';
- $feed['content'] = '';
- $user_data['feed'] = $feed;
- }
- $z_action_cat = new ZActionCat();
- $news_count = $z_action_cat->getUnReadNews($user->_id);
- $user_data['news'] = $news_count;
- $data['user'] = $user_data;
- if(empty($notopic)){
- $conditions = array(
- 'user'=>array('==',$user->_id),
- 'status'=>array('==',1)
- );
- $order = array(
- 'time'=>'desc',
- );
- $model = new Topic();
- $pagedata = CommonFn::getPagedata($model,$page,20,$conditions,$order);
- $user_topics = $pagedata['res'];
- if(!empty($user_id)){
- foreach ($user_topics as $key => $topic) {
- $z_like = new ZLike();
- $like = $z_like->getLikeByLikeObj($user_id,$topic['id']);
- if(empty($like)){
- $user_topics[$key]['is_liked'] = false;
- }else{
- $user_topics[$key]['is_liked'] = true;
- }
- }
- if(Yii::app()->getRequest()->getParam("page_size",0)==1){
- if(isset($user_topics[0]['pics'])&&count($user_topics[0]['pics'])<3){
- $criteria = new EMongoCriteria();
- $criteria->user('==',$user->_id);
- $criteria->status("==",1);
- $criteria->limit(2)->sort('time',EMongoCriteria::SORT_DESC)->offset(1);
- $model = new Topic();
- $cursor = $model->findAll($criteria);
- $rows = CommonFn::getRows($cursor);
- $topics = $model->parse($rows);
- foreach ($topics as $topic) {
- $user_topics[0]['pics'] = array_merge($user_topics[0]['pics'],$topic['pics']);
- $user_topics[0]['pics'] = array_slice($user_topics[0]['pics'],0,3);
- }
- }
- }
- }
- $data['topic_list'] = $user_topics;
- }
- if($add_score['status']){
- $score_info['score_change'] = $add_score['score'];
- $score_info['current_score'] = $add_score['current_score'];
- $score_info['score_type'] = '签到';
- if(isset($pagedata)){
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,303,array_merge($score_info,array('sum_count' => $pagedata['sum_count'],'sum_page'=>$pagedata['sum_page'],'page_size'=>$pagedata['page_size'],'current_page'=>$pagedata['current_page'])));
- }else{
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,303,$score_info);
- }
- }else{
- if(isset($pagedata)){
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,200,array('sum_count' => $pagedata['sum_count'],'sum_page'=>$pagedata['sum_page'],'page_size'=>$pagedata['page_size'],'current_page'=>$pagedata['current_page']));
- }else{
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
- }
- }
- }
-
- //修改用户资料
- public function actionEdit(){
- $data['_id'] = Yii::app()->getRequest()->getParam('user_id');
- if(!CommonFn::isMongoId($data['_id'])){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_exist'),201);
- }
- $model = new RUser();
- $user = CommonFn::apigetObJ($data['_id'],"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- //需要进行修改的数据内容
- $data['avatar'] = Yii::app()->getRequest()->getParam('avatar','');
- $data['mobile'] = Yii::app()->getRequest()->getParam('mobile','');
- $data['sex'] = intval(Yii::app()->getRequest()->getParam('sex'));
- $data['user_name']= Yii::app()->getRequest()->getParam('user_name','');
- $data['city_info'] = json_decode(Yii::app()->request->getParam('city_info'),true);
- //防止city_info出现非法数据
- if(!isset($data['city_info']['province'])){
- $data['city_info']['province'] = '';
- $data['city_info']['city'] = '';
- $data['city_info']['area'] = '';
- }elseif(!isset($data['city_info']['city'])){
- $data['city_info']['city'] = '';
- $data['city_info']['area'] = '';
- }elseif(!isset($data['city_info']['area'])){
- $data['city_info']['area'] = '';
- }
- if($data['avatar']){
- if(!CommonFn::checkPicFormat($data['avatar'])){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','user_avatar_illegal'));
- }
- }
- if($user->certify_status == 1 && $data['user_name'] && $user->user_name != $data['user_name']){
- CommonFn::requestAjax(false,'你已通过认证,不允许修改昵称');
- }
- //过滤user_id ,检测本接口所需参数是否完整
- $item_count = 0;
- unset($data['_id']);
- //用户名检测
- if(isset($data['user_name']) && $data['user_name']){
- if(mb_strlen($data['user_name'],'utf-8')<2||mb_strlen($data['user_name'],'utf-8')>16){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','username_length_illegal'));
- }
- $z_user = new ZUser();
- $z_user->validate_user_name($data['user_name']);
- $u_criteria = new EMongoCriteria();
- $u_criteria->user_name('==',$data['user_name']);
- $olduser = RUser::model()->find($u_criteria);
- if($olduser&&$olduser->_id!=$user->_id){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','username_already_registered'));
- }
- }elseif(empty($data['user_name'])){
- $data['user_name'] = $user->user_name;
- }
- foreach($data as $key => $val){
- if(!empty($val)){
- if($key=='city_info' && empty($val['province'])){
- continue;
- }
- $item_count++;
- $user->{$key} = $val;
- }
- }
- //更新数据
- if($item_count){
- if($user->save(true)){
- $data = $user->parseRow($user->attributes,array(),true);
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
- }else{
- CommonFn::requestAjax(false,CommonFn::getMessage('message','operation_faild'));
- }
- }else{
- CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
- }
- }
- }
|