From be65f81a4aa3a26ad221f34c0c46b88d9a1d0a63 Mon Sep 17 00:00:00 2001 From: mrilyew <99399973+mrilyew@users.noreply.github.com> Date: Fri, 28 Mar 2025 17:04:13 +0300 Subject: [PATCH] fix(audio, favorites): big patch #1259 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Аудио - Добавлена вкладка в аудио "загруженное" которую я забыл добавить в октябре 2023. Она показывает загруженные аудио в порядке возрастания. Есть так же идеи для вкладок "недавно прослушанное" и "ваши друзья слушают" (последняя добавит иммерсивности, или как это называется, персональности на сайт, хотя по факту она просто соберёт id всех друзей и выдаст их недавние добавления в коллекцию), но тогда будет нагромождение вкладок и придётся какое то сворачивание добавлять. - Если аудио больше 10 и ты на странице аудио, то показывается мелкая кнопка в правом нижнем углу которая развернёт счётчик и пагинатор. - Если аудио обрабатывается (processed как я назвал в css) то появится кнопка "всё равно хочу воспроизвести". - При переключении трека меняется заголовок вкладки - Если ты вызвал контекстное меню но оно ушло за экран, то оно будет повыше. # Уязвимости - Убрана уязвимость в audio api что можно было посмотреть айди владельца удалённого аудио. В целом непонятно использование id в тексте ошибки, поскольку он не должен изменятся и быть обобщённым, по типу access to audio denied. Но да ладно, коду три года всё таки. - Удалённый контент заменяется "[deleted]" в /fave. Я бы на самом деле не добавлял это, но меня испугал последний абзац fixed #1258 поэтому добавил. --- VKAPI/Handlers/Audio.php | 6 +-- Web/Presenters/AudioPresenter.php | 13 +++++ Web/Presenters/templates/Audio/List.xml | 32 +++++++++++- Web/Presenters/templates/Audio/bigplayer.xml | 4 ++ Web/Presenters/templates/Audio/tabs.xml | 3 +- Web/Presenters/templates/User/Fave.xml | 40 ++++++++------- Web/routes.yml | 2 + Web/static/css/audios.css | 30 ++++++++++- Web/static/css/main.css | 8 +++ Web/static/js/al_music.js | 53 +++++++++++++++++--- locales/en.strings | 10 +++- locales/ru.strings | 10 +++- 12 files changed, 180 insertions(+), 31 deletions(-) diff --git a/VKAPI/Handlers/Audio.php b/VKAPI/Handlers/Audio.php index b84475a4..df9cf935 100644 --- a/VKAPI/Handlers/Audio.php +++ b/VKAPI/Handlers/Audio.php @@ -18,7 +18,7 @@ final class Audio extends VKAPIRequestHandler if (!$audio) { $this->fail(0o404, "Audio not found"); } elseif (!$audio->canBeViewedBy($this->getUser())) { - $this->fail(201, "Access denied to audio(" . $audio->getPrettyId() . ")"); + $this->fail(201, "Access denied to audio(" . $audio->getId() . ")"); } # рофлан ебало @@ -201,7 +201,7 @@ final class Audio extends VKAPIRequestHandler $this->fail(15, "Access denied"); } - if ($uploaded_only) { + if ($uploaded_only && $owner_id == $this->getUser()->getRealId()) { return DatabaseConnection::i()->getContext()->table("audios") ->where([ "deleted" => false, @@ -283,7 +283,7 @@ final class Audio extends VKAPIRequestHandler } $dbCtx = DatabaseConnection::i()->getContext(); - if ($uploaded_only == 1) { + if ($uploaded_only == 1 && $owner_id == $this->getUser()->getRealId()) { if ($owner_id <= 0) { $this->fail(8, "uploaded_only can only be used with owner_id > 0"); } diff --git a/Web/Presenters/AudioPresenter.php b/Web/Presenters/AudioPresenter.php index db341f83..61b0edbb 100644 --- a/Web/Presenters/AudioPresenter.php +++ b/Web/Presenters/AudioPresenter.php @@ -78,6 +78,10 @@ final class AudioPresenter extends OpenVKPresenter } elseif ($mode === "new") { $audios = $this->audios->getNew(); $audiosCount = $audios->size(); + } elseif ($mode === "uploaded") { + $stream = $this->audios->getByUploader($this->user->identity); + $audios = $stream->page($page, 10); + $audiosCount = $stream->size(); } elseif ($mode === "playlists") { if ($owner < 0) { $entity = (new Clubs())->get(abs($owner)); @@ -130,6 +134,11 @@ final class AudioPresenter extends OpenVKPresenter } } + public function renderUploaded() + { + $this->renderList(null, "uploaded"); + } + public function renderEmbed(int $owner, int $id): void { $audio = $this->audios->getByOwnerAndVID($owner, $id); @@ -841,6 +850,10 @@ final class AudioPresenter extends OpenVKPresenter $audios = [$found_audio]; $audiosCount = 1; break; + case "uploaded": + $stream = $this->audios->getByUploader($this->user->identity); + $audios = $stream->page($page, $perPage); + $audiosCount = $stream->size(); } $pagesCount = ceil($audiosCount / $perPage); diff --git a/Web/Presenters/templates/Audio/List.xml b/Web/Presenters/templates/Audio/List.xml index 1483ce95..fe078cef 100644 --- a/Web/Presenters/templates/Audio/List.xml +++ b/Web/Presenters/templates/Audio/List.xml @@ -9,6 +9,8 @@ {/if} {elseif $mode == 'new'} {_audio_new} + {elseif $mode == 'uploaded'} + {_my_audios_small_uploaded} {elseif $mode == 'popular'} {_audio_popular} {elseif $mode == 'alone_audio'} @@ -32,6 +34,12 @@ +