mirror of
https://github.com/openvk/openvk
synced 2024-12-22 16:42:32 +03:00
Shortcode aliases (#690)
* Shortcode aliases * Fixes * Newline * Fixes + SQLs renamed * Fixed clubs aliases
This commit is contained in:
parent
753be2aaff
commit
5b3a1f50e9
8 changed files with 112 additions and 2 deletions
34
Web/Models/Entities/Alias.php
Normal file
34
Web/Models/Entities/Alias.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php declare(strict_types=1);
|
||||
namespace openvk\Web\Models\Entities;
|
||||
|
||||
use openvk\Web\Models\RowModel;
|
||||
use openvk\Web\Models\Entities\{User, Club};
|
||||
use openvk\Web\Models\Repositories\{Users, Clubs};
|
||||
|
||||
class Alias extends RowModel
|
||||
{
|
||||
protected $tableName = "aliases";
|
||||
|
||||
function getOwnerId(): int
|
||||
{
|
||||
return $this->getRecord()->owner_id;
|
||||
}
|
||||
|
||||
function getType(): string
|
||||
{
|
||||
if ($this->getOwnerId() < 0)
|
||||
return "club";
|
||||
|
||||
return "user";
|
||||
}
|
||||
|
||||
function getUser(): ?User
|
||||
{
|
||||
return (new Users)->get($this->getOwnerId());
|
||||
}
|
||||
|
||||
function getClub(): ?Club
|
||||
{
|
||||
return (new Clubs)->get($this->getOwnerId() * -1);
|
||||
}
|
||||
}
|
|
@ -908,6 +908,10 @@ class User extends RowModel
|
|||
$pClub = DatabaseConnection::i()->getContext()->table("groups")->where("shortcode", $code)->fetch();
|
||||
if(!is_null($pClub))
|
||||
return false;
|
||||
|
||||
$pAlias = DatabaseConnection::i()->getContext()->table("aliases")->where("shortcode", $code)->fetch();
|
||||
if(!is_null($pAlias))
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->stateChanges("shortcode", $code);
|
||||
|
|
35
Web/Models/Repositories/Aliases.php
Normal file
35
Web/Models/Repositories/Aliases.php
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php declare(strict_types=1);
|
||||
namespace openvk\Web\Models\Repositories;
|
||||
|
||||
use openvk\Web\Models\Entities\Alias;
|
||||
use Nette\Database\Table\ActiveRow;
|
||||
use Chandler\Database\DatabaseConnection as DB;
|
||||
use openvk\Web\Models\Entities\{Club, User};
|
||||
use openvk\Web\Models\Repositories\{Clubs, Users};
|
||||
|
||||
class Aliases
|
||||
{
|
||||
private $context;
|
||||
private $aliases;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->context = DB::i()->getContext();
|
||||
$this->aliases = $this->context->table("aliases");
|
||||
}
|
||||
|
||||
private function toAlias(?ActiveRow $ar): ?Alias
|
||||
{
|
||||
return is_null($ar) ? NULL : new Alias($ar);
|
||||
}
|
||||
|
||||
function get(int $id): ?Alias
|
||||
{
|
||||
return $this->toAlias($this->aliases->get($id));
|
||||
}
|
||||
|
||||
function getByShortcode(string $shortcode): ?Alias
|
||||
{
|
||||
return $this->toAlias($this->aliases->where("shortcode", $shortcode)->fetch());
|
||||
}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
<?php declare(strict_types=1);
|
||||
namespace openvk\Web\Models\Repositories;
|
||||
use openvk\Web\Models\Entities\Club;
|
||||
use openvk\Web\Models\Repositories\Aliases;
|
||||
use Nette\Database\Table\ActiveRow;
|
||||
use Chandler\Database\DatabaseConnection;
|
||||
|
||||
|
@ -22,7 +23,17 @@ class Clubs
|
|||
|
||||
function getByShortURL(string $url): ?Club
|
||||
{
|
||||
return $this->toClub($this->clubs->where("shortcode", $url)->fetch());
|
||||
$shortcode = $this->toClub($this->clubs->where("shortcode", $url)->fetch());
|
||||
|
||||
if ($shortcode)
|
||||
return $shortcode;
|
||||
|
||||
$alias = (new Aliases)->getByShortcode($url);
|
||||
|
||||
if (!$alias) return NULL;
|
||||
if ($alias->getType() !== "club") return NULL;
|
||||
|
||||
return $alias->getClub();
|
||||
}
|
||||
|
||||
function get(int $id): ?Club
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php declare(strict_types=1);
|
||||
namespace openvk\Web\Models\Repositories;
|
||||
use openvk\Web\Models\Entities\User;
|
||||
use openvk\Web\Models\Repositories\Aliases;
|
||||
use Nette\Database\Table\ActiveRow;
|
||||
use Chandler\Database\DatabaseConnection;
|
||||
use Chandler\Security\User as ChandlerUser;
|
||||
|
@ -9,11 +10,13 @@ class Users
|
|||
{
|
||||
private $context;
|
||||
private $users;
|
||||
private $aliases;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->context = DatabaseConnection::i()->getContext();
|
||||
$this->users = $this->context->table("profiles");
|
||||
$this->aliases = $this->context->table("aliases");
|
||||
}
|
||||
|
||||
private function toUser(?ActiveRow $ar): ?User
|
||||
|
@ -28,7 +31,17 @@ class Users
|
|||
|
||||
function getByShortURL(string $url): ?User
|
||||
{
|
||||
return $this->toUser($this->users->where("shortcode", $url)->fetch());
|
||||
$shortcode = $this->toUser($this->users->where("shortcode", $url)->fetch());
|
||||
|
||||
if ($shortcode)
|
||||
return $shortcode;
|
||||
|
||||
$alias = (new Aliases)->getByShortcode($url);
|
||||
|
||||
if (!$alias) return NULL;
|
||||
if ($alias->getType() !== "user") return NULL;
|
||||
|
||||
return $alias->getUser();
|
||||
}
|
||||
|
||||
function getByChandlerUser(ChandlerUser $user): ?User
|
||||
|
|
|
@ -43,5 +43,6 @@ services:
|
|||
- openvk\Web\Models\Repositories\Topics
|
||||
- openvk\Web\Models\Repositories\Applications
|
||||
- openvk\Web\Models\Repositories\ContentSearchRepository
|
||||
- openvk\Web\Models\Repositories\Aliases
|
||||
- openvk\Web\Models\Repositories\BannedLinks
|
||||
- openvk\Web\Presenters\MaintenancePresenter
|
||||
|
|
12
install/sqls/00033-shortcode-aliases.sql
Normal file
12
install/sqls/00033-shortcode-aliases.sql
Normal file
|
@ -0,0 +1,12 @@
|
|||
CREATE TABLE `aliases` (
|
||||
`id` bigint UNSIGNED NOT NULL,
|
||||
`owner_id` bigint NOT NULL,
|
||||
`shortcode` varchar(36) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
ALTER TABLE `aliases`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
ALTER TABLE `aliases`
|
||||
MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT;
|
||||
COMMIT;
|
Loading…
Reference in a new issue