mirror of
https://github.com/openvk/openvk
synced 2024-12-23 00:51:03 +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();
|
$pClub = DatabaseConnection::i()->getContext()->table("groups")->where("shortcode", $code)->fetch();
|
||||||
if(!is_null($pClub))
|
if(!is_null($pClub))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
$pAlias = DatabaseConnection::i()->getContext()->table("aliases")->where("shortcode", $code)->fetch();
|
||||||
|
if(!is_null($pAlias))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->stateChanges("shortcode", $code);
|
$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);
|
<?php declare(strict_types=1);
|
||||||
namespace openvk\Web\Models\Repositories;
|
namespace openvk\Web\Models\Repositories;
|
||||||
use openvk\Web\Models\Entities\Club;
|
use openvk\Web\Models\Entities\Club;
|
||||||
|
use openvk\Web\Models\Repositories\Aliases;
|
||||||
use Nette\Database\Table\ActiveRow;
|
use Nette\Database\Table\ActiveRow;
|
||||||
use Chandler\Database\DatabaseConnection;
|
use Chandler\Database\DatabaseConnection;
|
||||||
|
|
||||||
|
@ -22,7 +23,17 @@ class Clubs
|
||||||
|
|
||||||
function getByShortURL(string $url): ?Club
|
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
|
function get(int $id): ?Club
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php declare(strict_types=1);
|
<?php declare(strict_types=1);
|
||||||
namespace openvk\Web\Models\Repositories;
|
namespace openvk\Web\Models\Repositories;
|
||||||
use openvk\Web\Models\Entities\User;
|
use openvk\Web\Models\Entities\User;
|
||||||
|
use openvk\Web\Models\Repositories\Aliases;
|
||||||
use Nette\Database\Table\ActiveRow;
|
use Nette\Database\Table\ActiveRow;
|
||||||
use Chandler\Database\DatabaseConnection;
|
use Chandler\Database\DatabaseConnection;
|
||||||
use Chandler\Security\User as ChandlerUser;
|
use Chandler\Security\User as ChandlerUser;
|
||||||
|
@ -9,11 +10,13 @@ class Users
|
||||||
{
|
{
|
||||||
private $context;
|
private $context;
|
||||||
private $users;
|
private $users;
|
||||||
|
private $aliases;
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
$this->context = DatabaseConnection::i()->getContext();
|
$this->context = DatabaseConnection::i()->getContext();
|
||||||
$this->users = $this->context->table("profiles");
|
$this->users = $this->context->table("profiles");
|
||||||
|
$this->aliases = $this->context->table("aliases");
|
||||||
}
|
}
|
||||||
|
|
||||||
private function toUser(?ActiveRow $ar): ?User
|
private function toUser(?ActiveRow $ar): ?User
|
||||||
|
@ -28,7 +31,17 @@ class Users
|
||||||
|
|
||||||
function getByShortURL(string $url): ?User
|
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
|
function getByChandlerUser(ChandlerUser $user): ?User
|
||||||
|
|
|
@ -43,5 +43,6 @@ services:
|
||||||
- openvk\Web\Models\Repositories\Topics
|
- openvk\Web\Models\Repositories\Topics
|
||||||
- openvk\Web\Models\Repositories\Applications
|
- openvk\Web\Models\Repositories\Applications
|
||||||
- openvk\Web\Models\Repositories\ContentSearchRepository
|
- openvk\Web\Models\Repositories\ContentSearchRepository
|
||||||
|
- openvk\Web\Models\Repositories\Aliases
|
||||||
- openvk\Web\Models\Repositories\BannedLinks
|
- openvk\Web\Models\Repositories\BannedLinks
|
||||||
- openvk\Web\Presenters\MaintenancePresenter
|
- 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