From 6f0c06571f9d791518f497f11d8588d3cb6331a7 Mon Sep 17 00:00:00 2001 From: codekaar Date: Sun, 29 Jul 2018 22:39:43 +0545 Subject: [PATCH 1/3] add route, validation --- src/GraphJS/Controllers/FeedController.php | 30 ++++++++++++++++++++++ src/GraphJS/Router.php | 5 ++++ 2 files changed, 35 insertions(+) diff --git a/src/GraphJS/Controllers/FeedController.php b/src/GraphJS/Controllers/FeedController.php index 054e5f9..dd64508 100644 --- a/src/GraphJS/Controllers/FeedController.php +++ b/src/GraphJS/Controllers/FeedController.php @@ -53,4 +53,34 @@ public function generate(Request $request, Response $response, Kernel $kernel) "token" => $token ]); } + + public function addFeedItem(Request $request, Response $response, Kernel $kernel) + { + $data = $request->getQueryParams(); + $v = new Validator($data); + + $requiredRuleInputs = []; + $isMediaProvided = ! empty($data['photo']) + || ! empty($data['album']) + || ! empty($data['video']); + if (! $isMediaProvided) { + $requiredRuleInputs[] = 'text'; + } + + $urlRuleInputs = [ + 'photo', + 'album.*', + 'video', + ]; + $v->rule('required', $requiredRuleInputs); + $v->rule('url', $urlRuleInputs); + + if (! $v->validate()) { + $this->fail($response, "Type and/or id fields unavailable."); + return; + } + + return $this->succeed($response, [ + ]); + } } diff --git a/src/GraphJS/Router.php b/src/GraphJS/Router.php index 72795b5..f3341d6 100644 --- a/src/GraphJS/Router.php +++ b/src/GraphJS/Router.php @@ -79,6 +79,11 @@ protected static function initFeed(Server $server, array $controllers, Kernel $k $controllers["feed"]->generate($request, $response, $kernel); } ); + $server->get( + 'addFeedItem', function (Request $request, Response $response) use ($controllers, $kernel) { + $controllers["feed"]->addFeedItem($request, $response, $kernel); + } + ); } protected static function initAuthentication(Server $server, array $controllers, Kernel $kernel): void From e4b30ff1ecd3f3c7c8c3f5c2e1a36f925c88e996 Mon Sep 17 00:00:00 2001 From: codekaar Date: Mon, 30 Jul 2018 21:10:40 +0545 Subject: [PATCH 2/3] get user id from session --- src/GraphJS/Controllers/FeedController.php | 20 ++++++++++++++++++-- src/GraphJS/Router.php | 4 ++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/GraphJS/Controllers/FeedController.php b/src/GraphJS/Controllers/FeedController.php index dd64508..fd8a024 100644 --- a/src/GraphJS/Controllers/FeedController.php +++ b/src/GraphJS/Controllers/FeedController.php @@ -14,6 +14,7 @@ use CapMousse\ReactRestify\Http\Request; use CapMousse\ReactRestify\Http\Response; use CapMousse\ReactRestify\Http\Session; +use GetStream\Stream\Client; use Pho\Kernel\Kernel; use Valitron\Validator; use PhoNetworksAutogenerated\User; @@ -54,7 +55,7 @@ public function generate(Request $request, Response $response, Kernel $kernel) ]); } - public function addFeedItem(Request $request, Response $response, Kernel $kernel) + public function addFeedItem(Request $request, Response $response, Session $session, Kernel $kernel) { $data = $request->getQueryParams(); $v = new Validator($data); @@ -76,10 +77,25 @@ public function addFeedItem(Request $request, Response $response, Kernel $kernel $v->rule('url', $urlRuleInputs); if (! $v->validate()) { - $this->fail($response, "Type and/or id fields unavailable."); + $this->fail($response, "Invalid data. Text, photo, album or video required"); + return; + } + + $client = new Client(getenv("STREAM_KEY"), getenv("STREAM_SECRET")); + + if(is_null($userId = $this->dependOnSession($request, $response, $session))) { + $this->fail($response, "User not logged in"); return; } + $feed = $client->feed("wall", $userId); + $data = [ + "actor" => (string) $userId, + "verb" => "_construct", + "object" => "", + "txt" => null,//NodeFeedGenerator::process($feed), + ]; + $feed->addActivity($data); return $this->succeed($response, [ ]); } diff --git a/src/GraphJS/Router.php b/src/GraphJS/Router.php index f3341d6..ad7fd95 100644 --- a/src/GraphJS/Router.php +++ b/src/GraphJS/Router.php @@ -80,8 +80,8 @@ protected static function initFeed(Server $server, array $controllers, Kernel $k } ); $server->get( - 'addFeedItem', function (Request $request, Response $response) use ($controllers, $kernel) { - $controllers["feed"]->addFeedItem($request, $response, $kernel); + 'addFeedItem', function (Request $request, Response $response) use ($controllers, $session, $kernel) { + $controllers["feed"]->addFeedItem($request, $response, $session, $kernel); } ); } From 44e6e1a020e3b765c71481db8acbc4d4257fac44 Mon Sep 17 00:00:00 2001 From: codekaar Date: Tue, 31 Jul 2018 21:47:27 +0545 Subject: [PATCH 3/3] create feed in stream --- src/GraphJS/Controllers/FeedController.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/GraphJS/Controllers/FeedController.php b/src/GraphJS/Controllers/FeedController.php index fd8a024..80b484c 100644 --- a/src/GraphJS/Controllers/FeedController.php +++ b/src/GraphJS/Controllers/FeedController.php @@ -92,11 +92,13 @@ public function addFeedItem(Request $request, Response $response, Session $sessi $data = [ "actor" => (string) $userId, "verb" => "_construct", - "object" => "", - "txt" => null,//NodeFeedGenerator::process($feed), + "object" => "feed", + "txt" => $data["text"] ?? null, + "photo" => $data["photo"] ?? null, + "album" => $data["album"] ?? [], + "video" => $data["video"] ?? null, ]; - $feed->addActivity($data); - return $this->succeed($response, [ - ]); + $ret = $feed->addActivity($data); + return $this->succeed($response, $ret); } }