Skip to content
This repository was archived by the owner on Dec 4, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
540 changes: 264 additions & 276 deletions composer.lock

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions config/common/logger.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

use Psr\Log\LoggerInterface;
use Yiisoft\Log\Logger;
use Yiisoft\Log\Target\File\FileTarget;

return [
LoggerInterface::class => static fn (FileTarget $fileTarget) => new Logger([$fileTarget]),
];
2 changes: 1 addition & 1 deletion config/events-console.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

use Yiisoft\Arrays\Modifier\ReverseBlockMerge;
use Yiisoft\Composer\Config\Merger\Modifier\ReverseBlockMerge;

return [
ReverseBlockMerge::class => new ReverseBlockMerge(),
Expand Down
2 changes: 1 addition & 1 deletion config/events-web.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

use Yiisoft\Arrays\Modifier\ReverseBlockMerge;
use Yiisoft\Composer\Config\Merger\Modifier\ReverseBlockMerge;

return [
ReverseBlockMerge::class => new ReverseBlockMerge(),
Expand Down
2 changes: 1 addition & 1 deletion config/events.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

use Yiisoft\Arrays\Modifier\ReverseBlockMerge;
use Yiisoft\Composer\Config\Merger\Modifier\ReverseBlockMerge;

return [
ReverseBlockMerge::class => new ReverseBlockMerge(),
Expand Down
2 changes: 1 addition & 1 deletion config/providers-console.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

use Yiisoft\Arrays\Modifier\ReverseBlockMerge;
use Yiisoft\Composer\Config\Merger\Modifier\ReverseBlockMerge;

return [
ReverseBlockMerge::class => new ReverseBlockMerge(),
Expand Down
2 changes: 1 addition & 1 deletion config/providers-web.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/* @var array $params */

use App\Common\Application\Provider\BotManProvider;
use Yiisoft\Arrays\Modifier\ReverseBlockMerge;
use Yiisoft\Composer\Config\Merger\Modifier\ReverseBlockMerge;

return [
'app/botman' => BotManProvider::class,
Expand Down
2 changes: 1 addition & 1 deletion config/providers.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

/* @var array $params */

use Yiisoft\Arrays\Modifier\ReverseBlockMerge;
use Yiisoft\Composer\Config\Merger\Modifier\ReverseBlockMerge;

return [
'yiisoft/cycle-orm/repository-provider' => \Yiisoft\Yii\Cycle\Factory\RepositoryProvider::class,
Expand Down
2 changes: 2 additions & 0 deletions config/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@
Group::create('/link', [
Route::get('/suggestions[/{page:\d}]', [Admin\LinkController::class, 'pageSuggestionTable'])
->name(Admin\LinkController::PAGE_SUGGESTION_TABLE),
Route::get('/urls[/{page:\d}]', [Admin\LinkController::class, 'pageUrlTable'])
->name(Admin\LinkController::PAGE_URL_TABLE),
]),
])->addMiddleware(static fn (PermissionMiddleware $mw, UrlGeneratorInterface $urlGenerator) => $mw
->withPermission('admin_panel')
Expand Down
2 changes: 1 addition & 1 deletion public/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
// PHP built-in server routing.
if (PHP_SAPI === 'cli-server') {
// Serve static files as is.
if (is_file(__DIR__ . $_SERVER["REQUEST_URI"])) {
if (is_file(__DIR__ . $_SERVER['REQUEST_URI'])) {
return false;
}
// Explicitly set for URLs with dot.
Expand Down
81 changes: 81 additions & 0 deletions resources/migrations/20210129.111629_0_0_default_create_url.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?php

namespace App\Migration;

use Spiral\Migrations\Migration;

class OrmDefault20a08f747a3a55db85a005ee6aa5b299 extends Migration
{
protected const DATABASE = 'default';

public function up(): void
{
$this->table('link_url')
->addColumn('id', 'primary', [
'nullable' => false,
])
->addColumn('scheme', 'string', [
'nullable' => false,
'default' => 'https',
'size' => 10
])
->addColumn('host', 'string', [
'nullable' => false,
'size' => 64
])
->addColumn('path', 'string', [
'nullable' => false,
'default' => '',
'size' => 255
])
->addColumn('query', 'string', [
'nullable' => false,
'default' => '',
'size' => 255
])
->addColumn('created_at', 'datetime', [
'nullable' => false,
])
->addColumn('updated_at', 'datetime', [
'nullable' => false,
])
->addIndex(["host", "path", "query"], [
'name' => 'link_url_index_host_path_query_60180143ba089',
'unique' => true
])
->setPrimaryKeys(["id"])
->create();

$this->database()->table('link_suggestion')->delete()->run();

$this->table('link_suggestion')
->dropColumn('url')
->update();

$this->table('link_suggestion')
->addColumn('url_id', 'integer', [
'nullable' => false,
])
->addForeignKey(["url_id"], 'link_url', ["id"], [
'name' => 'link_suggestion_foreign_url_id_6013ee8d0af3a',
'delete' => 'CASCADE',
'update' => 'CASCADE'
])
->update();
}

public function down(): void
{
$this->table('link_suggestion')
->dropForeignKey(["url_id"])
->dropColumn('url_id')
->addColumn('url', 'string', [
'nullable' => false,
'default' => null,
'size' => 255,
])
->update();

$this->table('link_url')->drop();
}
}
12 changes: 9 additions & 3 deletions resources/views/admin/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,14 @@
* @var \Yiisoft\Auth\IdentityInterface $user
*/

$this->params['breadcrumbs'] = 'Data tables';
$this->params['breadcrumbs'] = 'Index';

$this->setTitle('Index');

?>
<ul>
<li><?= Html::a('URLs', $url->generate(LinkController::PAGE_URL_TABLE)) ?></li>
<li><?= Html::a('Suggestions', $url->generate(LinkController::PAGE_SUGGESTION_TABLE)) ?></li>
</ul>

$this->setTitle('Data tables');

echo Html::a('Suggested links', $url->generate(LinkController::PAGE_SUGGESTION_TABLE));
12 changes: 7 additions & 5 deletions resources/views/admin/link/suggestions.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
* @var \Yiisoft\Data\Paginator\OffsetPaginator<mixed, Suggestion> $paginator
*/

$this->params['breadcrumbs'] = 'Suggested links';
$this->params['breadcrumbs'] = 'Suggestions';

$this->setTitle('Suggested links');
$this->setTitle('Suggestions');

?>
<h3>Suggested links: <?= $paginator->getTotalItems() ?></h3>
Expand All @@ -43,9 +43,10 @@
<td class="text-nowrap fw-bold"><?= $link->id ?></td>
<td class="text-nowrap text-muted"><?= $link->created_at->format('d-m-Y') ?></td>
<td>
<code><?= Html::encode($link->url->__toString()) ?></code>
<?= Html::a(
Html::encode($link->url),
(null !== parse_url(https://github.com/%3C/span%3E$link->url%3Cspan%20class=%22x%20x-first%20x-last%22%3E,%20PHP_URL_SCHEME) ? '' : 'https://') . $link->url,
'<i class="fa fa-share"></i>',
$link->url->__toString(),
['rel' => 'nofollow noreferrer', 'target' => '_blank']
) ?>
<span class="ms-2"><?= Html::encode($link->description) ?></span>
Expand All @@ -63,4 +64,5 @@
</table>
<?= OffsetPagination::widget()
->paginator($paginator)
->urlGenerator(static fn ($page) => $url->generate(LinkController::PAGE_SUGGESTION_TABLE, ['page' => $page]));
->urlGenerator(static fn($page) => $url->generate(LinkController::PAGE_SUGGESTION_TABLE, ['page' => $page]))
->__toString();
59 changes: 59 additions & 0 deletions resources/views/admin/link/urls.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

declare(strict_types=1);

use App\Api\UI\Controller\Admin\LinkController;
use App\Api\UI\Widget\OffsetPagination;
use App\Api\UI\Widget\SourceIcon;
use App\Module\Link\Domain\Entity\Url;
use Yiisoft\Html\Html;

/**
* @var Yiisoft\Assets\AssetManager $assetManager
* @var Yiisoft\Router\UrlGeneratorInterface $url
* @var string|null $csrf
* @var Yiisoft\Form\Widget\Field $field
* @var \Yiisoft\Auth\IdentityInterface $user
* @var \Yiisoft\Data\Paginator\OffsetPaginator<mixed, Url> $paginator
*/

$this->params['breadcrumbs'] = 'Url list';

$this->setTitle('Url list');

?>
<h3>Total URLs: <?= $paginator->getTotalItems() ?></h3>
<table class="table table-hover table-sm">
<thead>
<tr>
<th>ID</th>
<th>URL</th>
<th class="text-end">Created at</th>
</tr>
</thead>
<tbody>
<?php
/** @var Url $link */
foreach ($paginator->read() as $link) {
?>
<tr>
<td class="text-nowrap fw-bold"><?= $link->id ?></td>
<td>
<code><?= Html::encode($link->__toString()) ?></code>
<?= Html::a(
'<i class="fa fa-share"></i>',
$link->__toString(),
['rel' => 'nofollow noreferrer', 'target' => '_blank']
) ?>
</td>
<td class="text-nowrap text-muted text-end"><?= $link->created_at->format('d-m-Y') ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?= OffsetPagination::widget()
->paginator($paginator)
->urlGenerator(static fn($page) => $url->generate(LinkController::PAGE_SUGGESTION_TABLE, ['page' => $page]))
->__toString();
14 changes: 7 additions & 7 deletions src/Api/External/Controller/LinkController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace App\Api\External\Controller;

use App\Api\External\Exception\HttpException;
use App\Module\Link\Api\UserLinkService;
use App\Module\Link\Api\LinkSuggestionService;
use App\Api\Common\Form\CreateLinkForm;
use App\Api\Common\Form\FindLinkForm;
use Psr\Http\Message\ServerRequestInterface;
Expand All @@ -15,24 +15,24 @@

final class LinkController extends ApiController
{
public function get(UserLinkService $service, ServerRequestInterface $request, FindLinkForm $form): array
public function get(LinkSuggestionService $service, ServerRequestInterface $request, FindLinkForm $form): array
{
$this->validateLinkForm($form, $request->getQueryParams());
$link = $service->getLink($form->getUrl(), $this->getIdentityFromRequest($request));
$link = $service->findSuggestion($form->getUrl(), $this->getIdentityFromRequest($request));

return ['url' => $link->url];
return ['url' => $link->url->__toString()];
}

public function post(UserLinkService $service, ServerRequestInterface $request, CreateLinkForm $form): void
public function post(LinkSuggestionService $service, ServerRequestInterface $request, CreateLinkForm $form): void
{
$this->validateLinkForm($form, (array)$request->getParsedBody());
$service->createSuggestion($form->withSource('api'), $this->getIdentityFromRequest($request));
}

public function delete(UserLinkService $service, ServerRequestInterface $request, FindLinkForm $form): void
public function delete(LinkSuggestionService $service, ServerRequestInterface $request, FindLinkForm $form): void
{
$this->validateLinkForm($form, $request->getQueryParams());
$service->deleteLink($form->getUrl(), $this->getIdentityFromRequest($request));
$service->deleteSuggestion($form->getUrl(), $this->getIdentityFromRequest($request));
}

private function validateLinkForm(FormModel $form, array $data): void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use App\Api\Telegram\Telegram\Command\FallbackCommand;
use App\Api\Telegram\Telegram\Command\StartCommand;
use App\Api\Telegram\Telegram\Command\SuggestLinkCommand;
use App\Module\Link\Api\UserLinkService;
use App\Module\Link\Api\LinkSuggestionService;
use BotMan\BotMan\Messages\Conversations\Conversation;
use BotMan\BotMan\Messages\Incoming\Answer;
use BotMan\Drivers\Telegram\Extensions\Keyboard;
Expand All @@ -36,14 +36,14 @@ final class SuggestLinkConversation extends Conversation
protected bool $finishing = false;

private FormMaker $formMaker;
private UserLinkService $userLinkService;
private LinkSuggestionService $userLinkService;
private TgIdentityService $identityService;
private ChatConfig $chatConfig;
private ValidatorInterface $validator;

public function __construct(
FormMaker $formMaker,
UserLinkService $userLinkService,
LinkSuggestionService $userLinkService,
TgIdentityService $identityService,
ChatConfig $chatConfig,
ValidatorInterface $validator
Expand Down
2 changes: 1 addition & 1 deletion src/Api/UI/Controller/Admin/CommonController.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class CommonController extends AbstractController
public const PAGE_INDEX = self::ROUTE_PREFIX . 'index';

/**
* Action for {@see P_INDEX}
* Action for {@see PAGE_INDEX}
*/
public function pageIndex(): ResponseInterface
{
Expand Down
Loading