/** * Create a new user * * @param Request $request * @return Response * @throws FacebookRequestException */ public function addAction(Request $request) { $data = $request->json()->get('User'); if (!$data) { return showErrorResponse('Incorrect request parameters', HTTP_UNPROCESSABLE_ENTITY); } try { $new_user = new Users(); $new_user->addUser($data); } catch (\Exception $e) { return showErrorResponse($e->getMessage()); } //Send push notifications to all Facebook friends who are using Masarap $fb_access_token = $data[CONSTANTS::KEY_FB_ACCESS_TOKEN]; if (!$fb_access_token) { return showErrorResponse('Failed to access Facebook account'); } FacebookSession::setDefaultApplication(Config::get('services.facebook.client_id'), Config::get('services.facebook.client_secret')); FacebookSession::enableAppSecretProof(false); $facebook_session = new FacebookSession($fb_access_token); $facebook_response = (new FacebookRequest($facebook_session, 'GET', '/me/friends/'))->execute(); $friend_list = $facebook_response->getResponse(); $failed_notifications = array(); foreach ($friend_list->data as $friend) { $friend_user = Users::getByFbId($friend->id); if (!$friend_user) { continue; } $params = array(CONSTANTS::KEY_USER_ID_FROM => $new_user->id, CONSTANTS::KEY_USER_ID_TO => $friend_user->id, CONSTANTS::KEY_TYPE => CONSTANTS::NOTIFICATION_TYPE_FRIEND_JOIN, CONSTANTS::KEY_TYPE_ID => $new_user->id); try { $notification = new Notification(); $notification->addGeneralNotification($params); } catch (\Exception $e) { $failed_notifications[] = $friend_user->id; } } $json_return[KeyParser::data] = array(KeyParser::user => ModelFormatter::userLongFormat($new_user), KeyParser::message => 'User successfully registered and push notifications are sent to Facebook friends', KeyParser::unsent_notifications => $failed_notifications); return response()->json($json_return); }
/** * Returns a list of Facebook friends who are using Masarap which you have not yet followed * * @param Request $request * @return Response * @throws FacebookRequestException */ public function followFBUsersAction(Request $request) { $json_return[KeyParser::data] = array(KeyParser::users => array()); $data = $request->json()->get('User'); if (!$data) { return showErrorResponse('Incorrect request parameters', HTTP_UNPROCESSABLE_ENTITY); } $user_id = $data[CONSTANTS::KEY_ID]; $fb_access_token = $data[CONSTANTS::KEY_FB_ACCESS_TOKEN]; if (!$fb_access_token) { return showErrorResponse('Failed to access Facebook account'); } FacebookSession::setDefaultApplication(Config::get('services.facebook.client_id'), Config::get('services.facebook.client_secret')); FacebookSession::enableAppSecretProof(false); $facebook_session = new FacebookSession($fb_access_token); $facebook_response = (new FacebookRequest($facebook_session, 'GET', '/me/friends?limit=5000'))->execute(); $friend_list = $facebook_response->getResponse(); $facebook_friends = array(); $followed_users = array(); $friend_count = 0; foreach ($friend_list->data as $friend) { $friend_user = Users::getByFbId($friend->id); if (!$friend_user) { continue; } $is_followed = Follow::isFollowed($user_id, $friend_user->id); $follower_count = Follow::getCountByUserId($friend_user->id, CONSTANTS::FOLLOW_FOLLOWER); $review_count = Reviews::getCountByUserId($friend_user->id); if (!$is_followed && $friend_user->id != $user_id) { $facebook_friends[$friend_count] = ModelFormatter::userFormat($friend_user); $facebook_friends[$friend_count] += array(KeyParser::follower_count => $follower_count, KeyParser::review_count => $review_count, KeyParser::is_followed_by_viewer => $is_followed); } elseif ($is_followed && $friend_user->id != $user_id) { $followed_users[$friend_count] = ModelFormatter::userFormat($friend_user); $followed_users[$friend_count] += array(KeyParser::follower_count => $follower_count, KeyParser::review_count => $review_count, KeyParser::is_followed_by_viewer => $is_followed); } $friend_count++; } $facebook_friends = array_merge($facebook_friends, $followed_users); $json_return[KeyParser::data][KeyParser::users] = $facebook_friends; return response()->json($json_return); }