diff --git a/Web/Models/Entities/Club.php b/Web/Models/Entities/Club.php index 9d3e1d2c..65353fc7 100644 --- a/Web/Models/Entities/Club.php +++ b/Web/Models/Entities/Club.php @@ -89,6 +89,11 @@ class Club extends RowModel { return (new Users)->get($this->getRecord()->owner); } + + function getOwnerComment(): string + { + return is_null($this->getRecord()->owner_comment) ? "" : $this->getRecord()->owner_comment; + } function getDescription(): ?string { @@ -268,18 +273,6 @@ class Club extends RowModel { $rels = $this->getRecord()->related("group_coadmins.club")->page($page, 6); - foreach($rels as $rel) { - $rel = (new Users)->get($rel->user); - if(!$rel) continue; - - yield $rel; - } - } - - function getManagersWithComment(int $page = 1): \Traversable - { - $rels = $this->getRecord()->related("group_coadmins.club")->where("comment IS NOT NULL")->page($page, 10); - foreach($rels as $rel) { $rel = (new Managers)->get($rel->id); if(!$rel) continue; @@ -287,16 +280,16 @@ class Club extends RowModel yield $rel; } } + + function getManager(User $user): ?Manager + { + return (new Managers)->getByUserAndClub($user->getId(), $this->getId()); + } function getManagersCount(): int { return sizeof($this->getRecord()->related("group_coadmins.club")) + 1; } - - function getManagersCountWithComment(): int - { - return sizeof($this->getRecord()->related("group_coadmins.club")->where("comment IS NOT NULL")) + 1; - } function addManager(User $user, ?string $comment = NULL): void { diff --git a/Web/Models/Entities/Manager.php b/Web/Models/Entities/Manager.php index feefb69b..e58eef6e 100644 --- a/Web/Models/Entities/Manager.php +++ b/Web/Models/Entities/Manager.php @@ -17,7 +17,7 @@ class Manager extends RowModel return $this->getRecord()->id; } - function getUserId(): string + function getUserId(): int { return $this->getRecord()->user; } @@ -27,7 +27,7 @@ class Manager extends RowModel return (new Users)->get($this->getRecord()->user); } - function getClubId(): string + function getClubId(): int { return $this->getRecord()->club; } diff --git a/Web/Presenters/GroupPresenter.php b/Web/Presenters/GroupPresenter.php index 1042172d..16ac32ea 100644 --- a/Web/Presenters/GroupPresenter.php +++ b/Web/Presenters/GroupPresenter.php @@ -98,6 +98,7 @@ final class GroupPresenter extends OpenVKPresenter { $user = is_null($this->queryParam("user")) ? $this->postParam("user") : $this->queryParam("user"); $comment = $this->postParam("comment"); + $removeComment = $this->postParam("removeComment") === "1"; //$index = $this->queryParam("index"); if(!$user) $this->badRequest(); @@ -110,16 +111,34 @@ final class GroupPresenter extends OpenVKPresenter if(!$club->canBeModifiedBy($this->user->identity ?? NULL) && $club->getOwner()->getId() !== $user->getId()) $this->flashFail("err", "Ошибка доступа", "У вас недостаточно прав, чтобы изменять этот ресурс."); - /* if(!empty($index)){ - $manager = (new Managers)->get($index); - $manager->setComment($comment); + if($removeComment) { + if($club->getOwner()->getId() == $user->getId()) { + $club->setOwner_Comment(null); + $club->save(); + } else { + $manager = (new Managers)->getByUserAndClub($user->getId(), $club->getId()); + $manager->setComment(null); + $manager->save(); + } + + $this->flashFail("succ", "Операция успешна", "Комментарий к администратору удален"); + } elseif($comment) { + if(strlen($comment) > 36) { + $commentLength = (string) strlen($comment); + $this->flashFail("err", "Ошибка", "Комментарий слишком длинный ($commentLength символов вместо 36 символов)"); + return; + } + + if($club->getOwner()->getId() == $user->getId()) { + $club->setOwner_Comment($comment); + $club->save(); + } else { + $manager = (new Managers)->getByUserAndClub($user->getId(), $club->getId()); + $manager->setComment($comment); + $manager->save(); + } + $this->flashFail("succ", "Операция успешна", "Комментарий к администратору изменён"); - }else{ */ - if($comment) { - $manager = (new Managers)->getByUserAndClub($user->getId(), $club->getId()); - $manager->setComment($comment); - $manager->save(); - $this->flashFail("succ", "Операция успешна", "."); }else{ if($club->canBeModifiedBy($user)) { $club->removeManager($user); diff --git a/Web/Presenters/templates/Group/Followers.xml b/Web/Presenters/templates/Group/Followers.xml index c0eb8cca..f1d63a01 100644 --- a/Web/Presenters/templates/Group/Followers.xml +++ b/Web/Presenters/templates/Group/Followers.xml @@ -46,16 +46,36 @@ {$club->canBeModifiedBy($x) ? tr("administrator") : tr("follower")} - + {var manager = $club->getManager($x)} + + {_comment}: + + {if $club->getOwner()->getId() === $x->getId()} + {$club->getOwnerComment()} + {else} + {$manager->getComment()} + {/if} + + + {_actions}: - - {if $club->canBeModifiedBy($x)} + + {if $manager} {_devote} {else} {_promote_to_admin} {/if} + {if $manager} + | + + {_set_comment} + + {/if} + + {_set_comment} + diff --git a/Web/Presenters/templates/Group/View.xml b/Web/Presenters/templates/Group/View.xml index 5d809070..af761183 100644 --- a/Web/Presenters/templates/Group/View.xml +++ b/Web/Presenters/templates/Group/View.xml @@ -109,33 +109,56 @@
{_"creator"}
-
+
{var author = $club->getOwner()} - +
+ + + +
+ +
+ {$author->getCanonicalName()} +
{$club->getOwnerComment()}
+
{_"administrators"}
-
- {var author = $club->getOwner()} - +
+
+ {tr("administrators", $club->getManagersCount() + 1)} +
+
+
+ {var author = $club->getOwner()} +
+ + + +
+
+ {$author->getCanonicalName()} +
{$club->getOwnerComment()}
+
+
+
+ {var user = $manager->getUser()} +
+ + + +
+
+ {$user->getCanonicalName()} +
{$manager->getComment()}
+
+
+
diff --git a/Web/static/css/style.css b/Web/static/css/style.css index aad51de7..e5c8046d 100644 --- a/Web/static/css/style.css +++ b/Web/static/css/style.css @@ -1450,3 +1450,47 @@ body.scrolled .toTop:hover { .knowledgeBaseArticle { margin-top: -11px; /* this is very stupid fix but nah */ } + +.avatar-list { + padding: 4px 8px 4px 8px; +} + +.avatar-list-item { + padding: 4px 0 4px 0; +} + +.avatar-list-item::after { + content: '.'; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.avatar-list-item .avatar { + float: left; +} + +.avatar-list-item .avatar img { + width: 32px; + height: 32px; + object-fit: cover; +} + +.avatar-list-item .info { + float: left; + padding-left: 8px; +} + +.avatar-list-item .info-without-subtitle-centered { + padding-top: 8px; +} + +.avatar-list-item .info .title { + font-size: 11px; +} + +.avatar-list-item .info .subtitle { + color: rgb(128, 128, 128); + font-size: 10px; +} diff --git a/Web/static/js/openvk.cls.js b/Web/static/js/openvk.cls.js index 935cfb64..3ad0bab6 100644 --- a/Web/static/js/openvk.cls.js +++ b/Web/static/js/openvk.cls.js @@ -105,3 +105,23 @@ function repostPost(id, hash) { Function.noop ]); } + +function setClubAdminComment(clubId, adminId, hash) { + MessageBox("Изменить комментарий к администратору", ` +
+ + + +

+
+ `, ["Изменить", "Отменить"], [ + () => { + if (document.querySelector(`#uClubAdminCommentTextArea_${clubId}_${adminId}`).value === "") { + document.querySelector(`#uClubAdminCommentRemoveCommentInput_${clubId}_${adminId}`).value = "1"; + } + + document.querySelector(`#uClubAdminCommentForm_${clubId}_${adminId}`).submit(); + }, + Function.noop + ]); +} diff --git a/install/sqls/00006-group-owner-comment.sql b/install/sqls/00006-group-owner-comment.sql new file mode 100644 index 00000000..37439405 --- /dev/null +++ b/install/sqls/00006-group-owner-comment.sql @@ -0,0 +1 @@ +ALTER TABLE groups ADD COLUMN owner_comment VARCHAR(36) AFTER owner; diff --git a/locales b/locales index 81c1e5a6..ef1b7ab8 160000 --- a/locales +++ b/locales @@ -1 +1 @@ -Subproject commit 81c1e5a61af79bc661c6fe34974c73c99b262038 +Subproject commit ef1b7ab803b56a02df670d91d7c22b3e509e6779