From 62d33c67376c803612a1225ee8dac38c1e054c7f Mon Sep 17 00:00:00 2001 From: xander <63683502+xander113@users.noreply.github.com> Date: Tue, 29 Mar 2022 08:22:52 -1200 Subject: [PATCH] general shit added accepting/denying friend request. --- web/app/Http/Controllers/Controller.php | 27 ++++- web/app/Http/Controllers/HomeController.php | 51 ++++++++ web/app/Models/User.php | 128 +++++++++++++++++++- web/resources/js/layouts/App.js | 3 +- web/resources/js/pages/CreatePost.js | 2 +- web/resources/js/pages/Dashboard.js | 8 +- web/resources/js/pages/User.js | 54 ++++++++- web/resources/sass/Graphictoria.scss | 10 ++ web/routes/apis.php | 4 + 9 files changed, 271 insertions(+), 16 deletions(-) diff --git a/web/app/Http/Controllers/Controller.php b/web/app/Http/Controllers/Controller.php index 42c9400..8cc84c6 100644 --- a/web/app/Http/Controllers/Controller.php +++ b/web/app/Http/Controllers/Controller.php @@ -32,7 +32,7 @@ class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; - public function fetchCategoriesFP() { + public function fetchCategoriesFP(Request $request) { $user = AuthHelper::GetCurrentUser($request); @@ -53,7 +53,7 @@ class Controller extends BaseController } - public function fetchCategoriesCatalog() { + public function fetchCategoriesCatalog(Request $request) { $categories = CatalogCategory::get(); @@ -89,7 +89,7 @@ class Controller extends BaseController } - public function fetchCategoryCatalog($id) { + public function fetchCategoryCatalog(Request $request, $id) { $category = CatalogCategory::where('id', $id)->first(); @@ -104,7 +104,7 @@ class Controller extends BaseController return Response()->json(["data"=>$category, "items"=>$items]); } - public function fetchCategory($id) { + public function fetchCategory(Request $request, $id) { $category = Category::where('id', $id)->first(); @@ -119,7 +119,24 @@ class Controller extends BaseController return Response()->json(["data"=>$category, "posts"=>$posts]); } - public function fetchPost($id) { + public function fetchUser(Request $request, $id) { + + $meta = AuthHelper::GetCurrentUser($request); + + $user = User::where('id', $id)->first(); + + if (!$user) {return Response()->json('Error');} + + $array = $user->toArray(); + + if ($meta && $meta->id == $array['id']) $array['isMeta'] = true; else $array['isMeta'] = false; + + if ($meta && $meta->getFriends('pending', 'checkSent', $array['id'])) $array['isFriend'] = 'needToAccept'; elseif ($meta && array_intersect($meta->getFriends('pending', 'id', null), [$array['id']])) $array['isFriend'] = 'pending'; elseif ($meta && array_intersect($meta->getFriends('id', null, null), [$array['id']])) $array['isFriend'] = true; else $array['isFriend'] = false; + + return Response()->json(["data"=>$array]); + } + + public function fetchPost(Request $request, $id) { $post = Post::where('id', $id)->first(); diff --git a/web/app/Http/Controllers/HomeController.php b/web/app/Http/Controllers/HomeController.php index 5b431e1..738ad45 100644 --- a/web/app/Http/Controllers/HomeController.php +++ b/web/app/Http/Controllers/HomeController.php @@ -155,6 +155,57 @@ class HomeController extends Controller } + public function addFriend(Request $request, $id) { + + $user = User::where('id', $id)->first(); + + if (!$user) {return Response()->json(['message'=>'No user.', 'badInputs'=>['title']]);} + + $meta = AuthHelper::GetCurrentUser($request); + + if (!$meta) {return Response()->json(['message'=>'System error.', 'badInputs'=>['title']]);} + + if (!isset($_POST['decision'])) {return Response()->json(['message'=>'System error.', 'badInputs'=>['title']]);} + + switch($_POST['decision']) { + case 'remove': + if ($meta && !array_intersect($meta->getFriends('id', null, null), [$user->id])) + return Response()->json(['message'=>'Not Friends.', 'badInputs'=>['title']]); + elseif ($meta && array_intersect($meta->getFriends('pending', 'id', null), [$user->id])) + return Response()->json(['message'=>'Already Pending.', 'badInputs'=>['title']]); + + $friend = $meta->getFriends('remove', null, $user->id); + + return Response()->json(['message'=>'Success!', 'badInputs'=>[], "data"=>false]); + break; + case 'accept': + if ($meta && array_intersect($meta->getFriends('id', null, null), [$user->id])) + return Response()->json(['message'=>'Already Friends.', 'badInputs'=>['title']]); + + $friend = $meta->getFriends('accept', null, $user->id); + + return Response()->json(['message'=>'Success!', 'badInputs'=>[], "data"=>true]); + break; + case 'add': + if ($meta && array_intersect($meta->getFriends('id', null, null), [$user->id])) + return Response()->json(['message'=>'Already Friends.', 'badInputs'=>['title']]); + elseif ($meta && array_intersect($meta->getFriends('pending', 'id', null), [$user->id])) + return Response()->json(['message'=>'Already Pending.', 'badInputs'=>['title']]); + + $friend = new Friend; + $friend->sent_id = $meta->id; + $friend->recieved_id = $user->id; + $friend->status = 0; + $friend->save(); + + return Response()->json(['message'=>'Success!', 'badInputs'=>[], "data"=>'pending']); + break; + default: + break; + } + + } + public function createReply($id) { $data = $request->all(); diff --git a/web/app/Models/User.php b/web/app/Models/User.php index c45ef64..ee926f1 100644 --- a/web/app/Models/User.php +++ b/web/app/Models/User.php @@ -20,7 +20,133 @@ class User extends Model 'password', 'remember_token', 'email', - 'email_verified_at', + 'email_verified_at' ]; + public function getFriends($decision, $pending, $id) { + + switch($decision) { + case 'id': + $friends = Friend::where('status', 1)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id) { + array_push($actualFriends, $friend['sent_id']); + }else{ + array_push($actualFriends, $friend['recieved_id']); + } + } + + return $actualFriends; + + break; + case 'account': + $friends = Friend::where('status', 1)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id) { + $friendUser = User::where('id', $friend['sent_id'])->first(); + array_push($actualFriends, $friendUser); + }else{ + $friendUser = User::where('id', $friend['recieved_id'])->first(); + array_push($actualFriends, $friendUser); + } + } + + return $actualFriends; + + break; + case 'remove': + $friends = Friend::where('status', 1)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id) { + $friendUserMeta = Friend::where('sent_id', $id)->delete(); + }else{ + $friendUserMeta = Friend::where('recieved_id', $id)->delete(); + } + } + + return; + + break; + case 'accept': + $friends = Friend::where('status', 0)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id) { + $friendUserMeta = Friend::where('sent_id', $id)->first(); + $friendUserMeta->status = 1; + $friendUserMeta->save(); + }else{ + $friendUserMeta = Friend::where('recieved_id', $id)->first(); + $friendUserMeta->status = 1; + $friendUserMeta->save(); + } + } + + return; + + break; + case 'pending': + switch($pending) { + case 'id': + $friends = Friend::where('status', 0)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id) { + array_push($actualFriends, $friend['sent_id']); + }else{ + array_push($actualFriends, $friend['recieved_id']); + } + } + + return $actualFriends; + + break; + case 'account': + $friends = Friend::where('status', 0)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id) { + $friendUser = User::where('id', $friend['sent_id'])->first(); + array_push($actualFriends, $friendUser); + }else{ + $friendUser = User::where('id', $friend['recieved_id'])->first(); + array_push($actualFriends, $friendUser); + } + } + + return $actualFriends; + + break; + + case 'checkSent': + $friends = Friend::where('status', 0)->where('recieved_id', $this->id)->orWhere('sent_id', $this->id)->get()->toArray(); + $actualFriends = []; + + foreach ($friends as $friend) { + if ($friend['recieved_id'] == $this->id && $friend['sent_id'] == $id) { + return true; + }else{ + return false; + } + } + + break; + default: + break; + } + default: + break; + } + + } + } diff --git a/web/resources/js/layouts/App.js b/web/resources/js/layouts/App.js index 2714d9f..e8edc24 100644 --- a/web/resources/js/layouts/App.js +++ b/web/resources/js/layouts/App.js @@ -119,8 +119,7 @@ const App = () => { } useEffect(async ()=>{ - if (!getCookie('gtok')) {setCookie('gtok', null);} - fetchUser(); + await fetchUser(); updateBanners(); updateOfflineStatus(); setInterval(updateBanners, 2*60*1000 /* 2 mins */); diff --git a/web/resources/js/pages/CreatePost.js b/web/resources/js/pages/CreatePost.js index 689e196..b8caaa1 100644 --- a/web/resources/js/pages/CreatePost.js +++ b/web/resources/js/pages/CreatePost.js @@ -58,7 +58,7 @@ const CreatePost = (props) => { } return ( - waitingForSubmission || !categories.categories? : + waitingForSubmission || categories.categories.length <= 0 ? : Create a new Post
diff --git a/web/resources/js/pages/Dashboard.js b/web/resources/js/pages/Dashboard.js index 2c13736..9c5c54f 100644 --- a/web/resources/js/pages/Dashboard.js +++ b/web/resources/js/pages/Dashboard.js @@ -130,9 +130,10 @@ const Dashboard = (props) => {
: <> +
{feedState.posts.posts.map(feed=>( <> -
+

{feed.creatorName}

@@ -140,10 +141,11 @@ const Dashboard = (props) => {

"{feed.body}"

-
-
+ +
))} +
{feedState.posts.posts.length <= 0?

There isn't any posts right now!

: null} {feedState.posts.posts.length >= 1?
diff --git a/web/resources/js/pages/User.js b/web/resources/js/pages/User.js index 1c1ec35..91f8897 100644 --- a/web/resources/js/pages/User.js +++ b/web/resources/js/pages/User.js @@ -19,8 +19,10 @@ var protocol = Config.Protocol; const User = (props) => { + const [validity, setValidity] = useState({error: false, message: ``, inputs: []}); const [state, setState] = useState(true); const [user, setUser] = useState(); + const [isFriend, setFriend] = useState(false); const metaUser = props.user; const userId = useParams().id; const history = useHistory(); @@ -29,34 +31,78 @@ const User = (props) => { const body = new FormData(); body.append('userId', userId); body.append('decision', `fetchedUser`); - axios.post(`${protocol}apis.${url}/fetch/user`, body).then(async(data)=>{ + axios.get(`${protocol}apis.${url}/fetch/user/${userId}`, body).then(async(data)=>{ const res = data.data; if (!res) {history.push(`/`);} SetTitle(`${res.data.username}`); + setFriend(res.data.isFriend); await setUser(res.data); return; }); } + const addFriend = async (decision) => { + const body = new FormData(); + body.append('decision', decision); + setState(true); + axios.post(`${protocol}apis.${url}/api/add/user/${userId}`, body).then(async(data)=>{ + const res = data.data; + if (res.badInputs.length >= 1) { + setValidity({error: true, message:res.message, inputs: res.badInputs}); + setTimeout(()=>{setValidity({...validity, error: false, inputs: res.badInputs});}, 4000); + setFeedState({...feedState, loading: false}); + setState(false); + return; + } + await setFriend(res.data); + setState(false); + return; + }); + } + useEffect(async()=>{ await fetchUser(); setState(false); }, []); return ( - !user + !user || state ? :
+ {validity.error? +
+
+

{validity.message}

+
+
+ : null}
{user.username} -

[Avatar.]

+ +
+
+ { + !metaUser? null : + userId == metaUser.id?

This is you!

: + isFriend && isFriend == `pending`? + + : isFriend && isFriend == `needToAccept`? + + : isFriend? + + : + + } +
+
+

"{user.about? user.about : `${user.username} doesn't have an about section!`}" - {user.username}

-

"{user.about? user.about : `${user.username} doesn't have an about section!`}" - {user.username}

+

Something else idk.

); diff --git a/web/resources/sass/Graphictoria.scss b/web/resources/sass/Graphictoria.scss index d97af7a..e53dc2d 100644 --- a/web/resources/sass/Graphictoria.scss +++ b/web/resources/sass/Graphictoria.scss @@ -45,6 +45,16 @@ $web-font-path: "https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,w background-repeat: no-repeat; } +.a { + color: inherit !important; + text-decoration: none !important; +} + +.a:hover { + color: inherit !important; + text-decoration: none !important; +} + // Loader .gtoria-loader-center { diff --git a/web/routes/apis.php b/web/routes/apis.php index 638eb68..cd8e6ce 100644 --- a/web/routes/apis.php +++ b/web/routes/apis.php @@ -34,6 +34,8 @@ Route::post('/v1/user/login', 'AuthController@Login'); Route::post('/v1/user/logout', 'AuthController@Logout'); Route::get('/v1/user/settings', 'UserController@GetSettings'); +Route::get('/fetch/user/{id}', 'Controller@fetchUser'); + Route::get('/banners/data', 'BannerController@getBanners'); Route::get('/games/metadata', 'GamesController@isAvailable'); @@ -56,6 +58,8 @@ Route::get('/fetch/posts/{id}', 'Controller@fetchPosts'); Route::get('/fetch/post/{id}', 'Controller@fetchPost'); +Route::post('/api/add/user/{id}', 'HomeController@addFriend'); + Route::post('/api/create/forum', 'HomeController@createPost'); Route::post('/api/create/reply/{id}', 'HomeController@createReply');