12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010 |
- <?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 actionInfoByTimeline(){
- $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'),array(),204);
- }else{
- $uid = $res->_id;
- }
- }
- $page = intval(Yii::app()->getRequest()->getParam("page",1));
- if(empty($page)){
- $page = 1;
- }
- $offset = Yii::app()->getRequest()->getParam('offset',0);
- if(empty($user_id) && empty($uid)){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_empty'),201);
- }
- if($uid){
- if($user_id){
- $user_node = new UserNodeRecord($user_id);
- $relation = $user_node->relation($uid);
- }
- }
- if($user_id){
- $id = $user_id;
- }
- if($uid){
- $id = $uid;
- }
- $model = new RUser();
- $user_obj = CommonFn::apigetObJ($id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- $user_data = $model->parseRow($user_obj->attributes);
- $user_data['relation'] = isset($relation)?$relation:0;
- //获取用户帖子信息
- $topic_model = new ZTopic();
- $user_topics = array();
- $pagesize = 20;
- $page_offset = ($page - 1) * $pagesize;
- if(!$offset){
- $offset = $offset > 0 && $page_offset < $offset ? $offset : $page_offset;
- }
- $criteria = new EMongoCriteria();
- $criteria->user('==',$user_obj->_id);
- $criteria->status("==",1);
- $criteria->limit($pagesize)->sort('time',EMongoCriteria::SORT_DESC)->offset($offset);
- $model = new Topic();
- $cursor = $model->findAll($criteria);
- $rows = CommonFn::getRows($cursor);
- $rows = $model->parse($rows);
- //获取有追加数据
- if(count($rows)<1){
- $data = array(
- 'user' => $user_data,
- 'topic_list' => array(),
- 'offset' => $offset,
- );
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,200,array('is_more'=>0));
- }
- $last_topic = $rows[count($rows)-1];
- $append_data = $topic_model->getAppendDateByDate($uid,$last_topic['last_post_time']);
- if($append_data){
- $rows = array_merge($rows,$append_data);
- }
- //按时间顺序排列
- foreach($rows as $row ){
- $user_topics[$row['date']]['time'] = $row['date'];
- $user_topics[$row['date']]['data'][] = $row;
- }
- $user_topics = array_values($user_topics);
- $current_offset = count($rows)+$offset; //当前实际数据偏移值
- if(count($rows)<20){
- $is_more = 0;
- }else{
- $is_more = 1;
- }
- //追加到用户数据中
- $data = array(
- 'user' => $user_data,
- 'topic_list' => $user_topics,
- 'offset' => $current_offset
- );
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,200,array('is_more'=>$is_more));
- }
- //用户收藏信息接口
- public function actionFavList(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $page = intval(Yii::app()->getRequest()->getParam("page",1));
- if(empty($page)){
- $page = 1;
- }
- //获取用户收藏信息
- $user = CommonFn::apigetObJ($user_id,'ZUser',CommonFn::getMessage('user','id_not_exist'),201);
- $pagesize = Yii::app()->params['userFavsPageSize'];
- $conditions = array(
- 'user'=>array('==',$user->_id)
- );
- $order = array(
- 'time'=>'desc',
- );
- $model = new Fav();
- $pagedata = CommonFn::getPagedata($model,$page,$pagesize,$conditions,$order);
- $user_favs = $pagedata['res'];
- if(!empty($user_favs)){
- foreach ($user_favs as $key => $value) {
- if($value['fav_obj']['status']!=1){
- unset($user_favs[$key]);
- }
- }
- }
- $data = array();
- foreach($user_favs as $fav){
- $z_like = new ZLike();
- $like = $z_like->getLikeByLikeObj($user_id,$fav['fav_obj']['id']);
- if(empty($like)){
- $fav['fav_obj']['is_liked'] = false;
- }else{
- $fav['fav_obj']['is_liked'] = true;
- }
- $data[] = $fav['fav_obj'];
- }
- 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']));
- }
- //用户帖子列表页面
- public function actionTopicList(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $uid = Yii::app()->getRequest()->getParam("to_user_id");
- $page = intval(Yii::app()->getRequest()->getParam("page",1));
- if(empty($page)){
- $page = 1;
- }
- $offset = Yii::app()->getRequest()->getParam('offset',0);
- if(empty($user_id) && empty($uid)){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_empty'),201);
- }
- if($user_id){
- $id = $user_id;
- $time_list_flag = true;
- }
- if($uid){
- $id = $uid;
- $time_list_flag = false;
- }
- //获取用户帖子列表
- $topic_model = new ZTopic();
- $user_topics = array();
- $rows = $topic_model->getUserTopic($id,$page,$offset);
- if(count($rows)<1){
- $data = array(
- 'topic_list' => array(),
- 'offset' => $offset,
- );
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
- }
- if($time_list_flag){
- //获取有追加数据
- $last_topic = $rows[count($rows)-1];
- $append_data = $topic_model->getAppendDateByDate($id,$last_topic['last_post_time']);
- if($append_data){
- $rows = array_merge($rows,$append_data);
- }
- //按时间顺序排列
- foreach($rows as $row ){
- $user_topics[$row['date']]['time'] = $row['date'];
- $user_topics[$row['date']]['data'][] = $row;
- }
- $user_topics = array_values($user_topics);
- }else{
- $user_topics = $rows;
- }
- $current_offset = count($rows); //当前实际数据偏移值
- $data = array(
- 'topic_list' => $user_topics,
- 'offset' => $current_offset,
- );
- 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'));
- }
- }
- //用户爪币记录
- public function actionScoreLog(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $page = intval(Yii::app()->getRequest()->getParam("page",1));
- if(empty($page)){
- $page = 1;
- }
- if(empty($user_id) ){
- CommonFn::requestAjax(false,CommonFn::getMessage('user','id_not_exist'),201);
- }
- if($user_id){
- $id = $user_id;
- }
- $deviceid = Yii::app()->request->getParam('device_id');
- //设置首次访问时间,保证一次浏览的回复列表不变
- $actiontime = CommonFn::getFirstTime(ActionTimeRedis::TYPE_GET_SCORELOG,$deviceid,$page);
- $pagesize = Yii::app()->params['userScoreLogPageSize'];
- $conditions = array(
- 'user'=>array('==',$id),
- 'time'=>array('<=',$actiontime)
- );
- $order = array(
- 'time'=>'desc',
- );
- $model = new UserScoreLog();
- $pagedata = CommonFn::getPagedata($model,$page,$pagesize,$conditions,$order);
- $logs = $pagedata['res'];
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$logs,200,array('sum_count' => $pagedata['sum_count'],'sum_page'=>$pagedata['sum_page'],'page_size'=>$pagedata['page_size'],'current_page'=>$pagedata['current_page']));
- }
- //用户拒绝接受推送
- public function actionSetPush(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- if($user->receive_push == 0){
- $user->receive_push = 1;
- if($user->update(array('receive_push'),true)){
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),array('op'=>'receive'));
- }
- }else{
- $user->receive_push = 0;
- if($user->update(array('receive_push'),true)){
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),array('op'=>'unreceive'));
- }
- }
- }
- //用户分享成功后增加爪币
- public function actionShareSuccess(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- $add_score = $this->addScore($user_id,'score_share');
- $result = array();
- if($add_score['status']){
- $add_score['score_change'] = $add_score['score'];
- $add_score['current_score'] = $add_score['current_score'];
- $add_score['score_type'] = '分享成功';
- CommonFn::requestAjax(true,'分享增加爪币成功',array(),301,$add_score);
- }else{
- CommonFn::requestAjax(false,'分享增加爪币失败');
- }
- }
- //用户申请认证接口
- public function actionApplyCertify(){
- $data = array();
- $data['content'] = '您好,目前握爪仅开放认证宠物医生、营养师、训犬师、美容师,认证需要您相关的资格证书或学校就读证书照片及您与证书合影的照片,直接在私信里发给爪爪就好了。';
- $data['from_user'] = Yii::app()->params['kefu_user'];
- $data['to_user'] = Yii::app()->request->getParam('user_id','');
- $date = date('Ymd');
- $Key = HelperKey::generateUserActionKey('applycertify',$date,$data['to_user']);
- $status = UserActionRedis::get($Key);
- if($status){
- CommonFn::requestAjax(false,'你今天已提交过认证申请,请不要重复申请');
- }else{
- UserActionRedis::set($Key,true);
- }
- $data['voice'] = json_decode(Yii::app()->request->getParam('voice'),true);
- $data['video'] = json_decode(Yii::app()->request->getParam('video'),true);
- $data['pics'] = json_decode(Yii::app()->request->getParam('pics'),true);
- $z_message = new ZMessage();
- $result = $z_message->addMessage($data);
- if($result['status']){
- CommonFn::requestAjax(true,'已提交认证申请');
- }else{
- CommonFn::requestAjax(false,'提交申请失败,请重试');
- }
- }
- //用户加与取消关注接口
- public function actionFollow(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- $f_id = Yii::app()->getRequest()->getParam("to_user_id");
- $f_id_list = json_decode(Yii::app()->getRequest()->getParam("to_user_list"),true);
- if(!$f_id_list && !CommonFn::isMongoId($f_id)){
- CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
- }
- $user_node = new UserNodeRecord($user->_id);
- //批量关注
- if(is_array($f_id_list) && !empty($f_id_list)){
- foreach ($f_id_list as $value) {
- $user_node->follow($value);
- }
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),array('op'=>'follow','follow_count'=>$user_node->follow_count(),'fans_count'=>$user_node->follower_count()));
- }
- if($user_node->is_following($f_id)){
- $user_node->unfollow($f_id);
- $op = 'unfollow';
- $message = '取消关注成功';
- }else{
- $user_node->follow($f_id);
- $message = '关注成功';
- $op = 'follow';
- }
- CommonFn::requestAjax(true,$message,array('op'=>$op,'follow_count'=>$user_node->follow_count(),'fans_count'=>$user_node->follower_count()));
- }
- //好友帖子列表
- public function actionFriendsTopicList(){
- $last_obj_id = Yii::app()->getRequest()->getParam("last_object_id",'');
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- if(CommonFn::isMongoId($last_obj_id)){
- $last_topic_obj = Topic::get(new MongoId($last_obj_id));
- if($last_topic_obj){
- $last_obj_time = $last_topic_obj->time;
- }
- }else{
- $last_obj_time = time();
- }
- if(!isset($last_obj_time)){
- CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
- }
- //设置小红点
- // $cache = new ARedisCache();
- // $cache->set('friend_topic_'.$user_id,0);
- $user_node = new UserNodeRecord($user_id);
- $follow_list = $user_node->following();
- $f_ids = array();
- foreach ($follow_list as $key => $value) {
- $f_ids[] = new MongoId($value);
- }
- $conditions = array(
- 'user'=>array('in',$f_ids),
- 'status'=>array('==',1),
- 'time'=>array('<',$last_obj_time)
- );
- $order = array(
- '_id'=>'desc',
- );
- $model = new Topic();
- $pagedata = CommonFn::getPagedataById($model,20,$conditions,$order);
- $topics = $pagedata['res'];
- foreach ($topics as $key=>$value) {
- if($user){
- //判断用户是否收藏过该帖子
- $z_fav = new ZFav();
- $fav = $z_fav->getFavByFavObj($user_id,$value['id']);
- if(empty($fav)){
- $value['is_faved'] = false;
- }else{
- $value['is_faved'] = true;
- }
- //判断用户是否喜欢过该帖子
- $z_like = new ZLike();
- $like = $z_like->getLikeByLikeObj($user_id,$value['id']);
- if(empty($like)){
- $value['is_liked'] = false;
- }else{
- $value['is_liked'] = true;
- }
- }else{
- $value['is_faved'] = false;
- $value['is_liked'] = false;
- }
- $topics[$key] = $value;
- }
- $data['topic_list'] = $topics;
- CommonFn::requestAjax(true,'',$data,200,array('has_more' => $pagedata['has_more'],'page_size'=>$pagedata['page_size']));
- }
- //我的关注接口
- public function actionFollowList(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $to_user = Yii::app()->getRequest()->getParam("to_user_id");
- $page = Yii::app()->getRequest()->getParam("page");
- $page_size = Yii::app()->getRequest()->getParam("page_size",20);
- if($to_user){
- $uid = $to_user;
- $user_node = new UserNodeRecord($to_user);
- $current_user_node = new UserNodeRecord($user_id);
- $need_refresh = true;
- }else{
- $uid = $user_id;
- $user_node = new UserNodeRecord($user_id);
- }
- $follow_list = $user_node->following();
- $sum = count($follow_list);
- $follow_list = array_slice($follow_list,$page_size*($page-1),$page_size*$page);
- $user_model = new RUser();
- foreach ($follow_list as $key => $f_user) {
- $follow_list[$key] = $user_model->parseRow(RUser::get(new MongoId($f_user)),array('id','user_name','sex','avatar','level','city_info','pets','certify_status','certify_info','can_access'));
- if(isset($need_refresh)){
- $follow_list[$key]['relation'] = $current_user_node->relation($f_user);
- }else{
- $follow_list[$key]['relation'] = $user_node->relation($f_user);
- }
- }
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$follow_list,200,array('sum_count' => $sum ,'sum_page'=> ceil($sum/$page_size),'page_size'=>$page_size,'current_page'=>$page));
- }
- //粉丝列表
- public function actionFansList(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $to_user = Yii::app()->getRequest()->getParam("to_user_id");
- $page = Yii::app()->getRequest()->getParam("page");
- $page_size = Yii::app()->getRequest()->getParam("page_size",20);
- if($to_user){
- $uid = $to_user;
- $user_node = new UserNodeRecord($to_user);
- $current_user_node = new UserNodeRecord($user_id);
- $need_refresh = true;
- }else{
- $uid = $user_id;
- $user_node = new UserNodeRecord($user_id);
- }
- $followed_by = $user_node->followed_by();
- $sum = count($followed_by);
- $followed_by = array_slice($followed_by,$page_size*($page-1),$page_size*$page);
- $user_model = new RUser();
- foreach ($followed_by as $key => $f_user) {
- $followed_by[$key] = $user_model->parseRow(RUser::get(new MongoId($f_user)),array('id','user_name','sex','avatar','level','city_info','pets','certify_status','certify_info','can_access'));
- if(isset($need_refresh)){
- $followed_by[$key]['relation'] = $current_user_node->relation($f_user);
- }else{
- $followed_by[$key]['relation'] = $user_node->relation($f_user);
- }
- }
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$followed_by,200,array('sum_count' => $sum ,'sum_page'=> ceil($sum/$page_size),'page_size'=>$page_size,'current_page'=>$page));
- }
- //推荐关注用户
- public function actionRecommendUsers(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $city_info = Yii::app()->getRequest()->getParam("city_info");
- $city_info = json_decode($city_info,true);
- $user_obj = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
- $user_node = new UserNodeRecord($user_obj->_id);
- $follow_list = $user_node->following();
- $follow_users = array();
- foreach ($follow_list as $key => $value) {
- $follow_users[] = new MongoId($value);
- }
- $follow_users[] = $user_obj->_id;
- $criteria = new EMongoCriteria;
- $criteria->certify_status('==',1);
- $criteria->_id('notin',$follow_users);
- $criteria->is_fake_user('!=',1);
- $criteria->sort('last_visit_time',EMongoCriteria::SORT_DESC);
- $criteria->limit(5);
- $cursor = RUser::model()->findAll($criteria);
- $rows = RUser::model()->parse($cursor,true,array('id','user_name','sex','avatar','level','city_info','certify_status','certify_info','can_access'));
- $certify_users = array();
- foreach ($rows as $value) {
- $value['recommend_reason'] = $value['certify_info'];
- $certify_users[] = $value;
- }
- $criteria = new EMongoCriteria;
- if(isset($city_info['province']) && $city_info['province']){
- $criteria->city_info->province('==',$city_info['province']);
- }else{
- $criteria->city_info->province('==','上海市');
- }
- $criteria->_id('notin',$follow_users);
- $criteria->is_fake_user('!=',1);
- $criteria->certify_status('!=',1);
- $criteria->sort('last_visit_time',EMongoCriteria::SORT_DESC);
- $criteria->limit(10);
- $cursor = RUser::model()->findAll($criteria);
- $rows = RUser::model()->parse($cursor,true,array('id','user_name','sex','avatar','level','city_info','certify_status','certify_info','can_access'));
- $local_user = array();
- foreach ($rows as $value) {
- $value['recommend_reason'] = '同城用户';
- $local_user[] = $value;
- }
- $criteria = new EMongoCriteria;
- if(isset($city_info['province']) && $city_info['province']){
- $criteria->city_info->province('!=',$city_info['province']);
- }else{
- $criteria->city_info->province('!=','上海市');
- }
- $criteria->_id('notin',$follow_users);
- $criteria->is_fake_user('!=',1);
- $criteria->certify_status('!=',1);
- $criteria->sort('posts_count',EMongoCriteria::SORT_DESC);
- $criteria->sort('last_visit_time',EMongoCriteria::SORT_DESC);
- $criteria->limit(5);
- $cursor = RUser::model()->findAll($criteria);
- $rows = RUser::model()->parse($cursor,true,array('id','user_name','sex','avatar','level','city_info','certify_status','certify_info','can_access'));
- $hot_users = array();
- foreach ($rows as $value) {
- $value['recommend_reason'] = '活跃用户';
- $hot_users[] = $value;
- }
- $result = array_merge($certify_users,$local_user,$hot_users);
- shuffle($result);
- foreach ($result as $key => $user) {
- $result[$key]['relation'] = $user_node->relation($user['id']);
- }
- CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),array('recommend_list'=>$result));
- }
- //用户登出接口
- public function actionLogout(){
- $user_id = Yii::app()->getRequest()->getParam("user_id");
- $xinge_token = Yii::app()->getRequest()->getParam("xinge_token");
- $app_client_id = Yii::app()->getRequest()->getParam("app_client_id");
- require_once(APP_PATH."/protected/vendors/tencent/XingeApp.php");
- if($app_client_id == '2'){
- $xinge_config = Yii::app()->params['xingeConfig']['android'];
- $push = new XingeApp($xinge_config['accessId'],$xinge_config['secretKey']);
- $ret = $push->DeleteTokenOfAccount($user_id,$xinge_token);
- CommonFn::requestAjax(true,'注销成功');
- }elseif($app_client_id == '1'){
- $xinge_ios_config = Yii::app()->params['xingeConfig']['ios'];
- $push = new XingeApp($xinge_ios_config['accessId'],$xinge_ios_config['secretKey']);
- $ret = $push->DeleteTokenOfAccount($user_id,$xinge_token);
- CommonFn::requestAjax(true,'注销成功');
- }else{
- CommonFn::requestAjax(false,'操作失败');
- }
- }
- }
|