diff --git a/VKAPI/Handlers/Wall.php b/VKAPI/Handlers/Wall.php index c39a3316..15284688 100644 --- a/VKAPI/Handlers/Wall.php +++ b/VKAPI/Handlers/Wall.php @@ -453,25 +453,37 @@ final class Wall extends VKAPIRequestHandler return (object)["post_id" => $post->getVirtualId()]; } - function repost(string $object, string $message = "") { + function repost(string $object, string $message = "", int $group_id = 0) { $this->requireUser(); $this->willExecuteWriteAction(); $postArray; if(preg_match('/wall((?:-?)[0-9]+)_([0-9]+)/', $object, $postArray) == 0) $this->fail(100, "One of the parameters specified was missing or invalid: object is incorrect"); - + $post = (new PostsRepo)->getPostById((int) $postArray[1], (int) $postArray[2]); if(!$post || $post->isDeleted()) $this->fail(100, "One of the parameters specified was missing or invalid"); - + $nPost = new Post; $nPost->setOwner($this->user->getId()); - $nPost->setWall($this->user->getId()); + if($group_id > 0) + { + $club = (new ClubsRepo)->get($group_id); + if(!$club || !$club->canBeModifiedBy($this->user)) + { + $this->fail(42, "Invalid group"); + } + $nPost->setWall($group_id*-1); + } + else + { + $nPost->setWall($this->user->getId()); + } $nPost->setContent($message); $nPost->setApi_Source_Name($this->getPlatform()); $nPost->save(); $nPost->attach($post); - + if($post->getOwner(false)->getId() !== $this->user->getId() && !($post->getOwner() instanceof Club)) (new RepostNotification($post->getOwner(false), $post, $this->user->identity))->emit(); @@ -483,6 +495,7 @@ final class Wall extends VKAPIRequestHandler ]; } + function getComments(int $owner_id, int $post_id, bool $need_likes = true, int $offset = 0, int $count = 10, string $fields = "sex,screen_name,photo_50,photo_100,online_info,online", string $sort = "asc", bool $extended = false) { $this->requireUser(); diff --git a/Web/Models/Repositories/Clubs.php b/Web/Models/Repositories/Clubs.php index edbe75c6..685152f3 100644 --- a/Web/Models/Repositories/Clubs.php +++ b/Web/Models/Repositories/Clubs.php @@ -1,7 +1,7 @@ getConnection()->query("SELECT * FROM `groups` WHERE `owner` = $id ORDER BY `id`"); + + foreach($result as $entry) + yield $this->get($entry->id); + } use \Nette\SmartObject; } diff --git a/Web/Presenters/UserPresenter.php b/Web/Presenters/UserPresenter.php index 3cf68757..5088ecd7 100644 --- a/Web/Presenters/UserPresenter.php +++ b/Web/Presenters/UserPresenter.php @@ -707,4 +707,23 @@ final class UserPresenter extends OpenVKPresenter $this->redirect("/settings"); } } + + function renderOwnedClubs(int $id) + { + if($this->user->id == $id) + { + $this->assertUserLoggedIn(); + $clubs = iterator_to_array((new Clubs)->getOwnedClubs($id)); + $json = array(); + foreach($clubs as $club) + { + $json[]=array("name"=>$club->getName(),"id"=>$club->getId()); + } + $this->returnJson($json); + } + else + { + $this->returnJson(["You are not allowed to see user-created groups"]); + } + } } diff --git a/Web/Presenters/WallPresenter.php b/Web/Presenters/WallPresenter.php index ffcec2a7..73101d1b 100644 --- a/Web/Presenters/WallPresenter.php +++ b/Web/Presenters/WallPresenter.php @@ -301,7 +301,7 @@ final class WallPresenter extends OpenVKPresenter if(!is_null($poll)) $post->attach($poll); - + if($wall > 0 && $wall !== $this->user->identity->getId()) (new WallPostNotification($wallOwner, $post, $this->user->identity))->emit(); @@ -364,20 +364,50 @@ final class WallPresenter extends OpenVKPresenter $post = $this->posts->getPostById($wall, $post_id); if(!$post || $post->isDeleted()) $this->notFound(); - + $where = $this->postParam("type") ?? "wall"; + $groupId = NULL; + $flags = 0; + if($where == "group") + { + $groupId = $this->postParam("groupId"); + } if(!is_null($this->user)) { $nPost = new Post; - $nPost->setOwner($this->user->id); - $nPost->setWall($this->user->id); + if($where == "wall") + { + $nPost->setOwner($this->user->id); + $nPost->setWall($this->user->id); + } + elseif($where == "group") + { + $nPost->setOwner($this->user->id); + + if($this->postParam("asGroup") == 1) + { + $flags |= 0b10000000; + } + if($this->postParam("signed") == 1) + { + $flags |= 0b01000000; + } + $nPost->setWall($groupId*-1); + } $nPost->setContent($this->postParam("text")); + $nPost->setFlags($flags); $nPost->save(); $nPost->attach($post); if($post->getOwner(false)->getId() !== $this->user->identity->getId() && !($post->getOwner() instanceof Club)) (new RepostNotification($post->getOwner(false), $post, $this->user->identity))->emit(); }; - - $this->returnJson(["wall_owner" => $this->user->identity->getId()]); + if($where == "wall") + { + $this->returnJson(["wall_owner" => $this->user->identity->getId()]); + } + else + { + $this->returnJson(["wall_owner" => $groupId*-1]); + } } function renderDelete(int $wall, int $post_id): void diff --git a/Web/Presenters/templates/components/post/microblogpost.xml b/Web/Presenters/templates/components/post/microblogpost.xml index 2f2fc2f1..5fbf07e7 100644 --- a/Web/Presenters/templates/components/post/microblogpost.xml +++ b/Web/Presenters/templates/components/post/microblogpost.xml @@ -96,7 +96,7 @@ {_comment}