diff --git a/src/GraphJS/Controllers/FeedController.php b/src/GraphJS/Controllers/FeedController.php index 054e5f9..80b484c 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; @@ -53,4 +54,51 @@ public function generate(Request $request, Response $response, Kernel $kernel) "token" => $token ]); } + + public function addFeedItem(Request $request, Response $response, Session $session, 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, "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" => "feed", + "txt" => $data["text"] ?? null, + "photo" => $data["photo"] ?? null, + "album" => $data["album"] ?? [], + "video" => $data["video"] ?? null, + ]; + $ret = $feed->addActivity($data); + return $this->succeed($response, $ret); + } } diff --git a/src/GraphJS/Router.php b/src/GraphJS/Router.php index 72795b5..ad7fd95 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, $session, $kernel) { + $controllers["feed"]->addFeedItem($request, $response, $session, $kernel); + } + ); } protected static function initAuthentication(Server $server, array $controllers, Kernel $kernel): void