openvk/Web/Presenters/templates/Audio/tabs.xml
mrilyew be65f81a4a
fix(audio, favorites): big patch #1259
# Аудио
- Добавлена вкладка в аудио "загруженное" которую я забыл добавить в
октябре 2023. Она показывает загруженные аудио в порядке возрастания.
Есть так же идеи для вкладок "недавно прослушанное" и "ваши друзья
слушают" (последняя добавит иммерсивности, или как это называется,
персональности на сайт, хотя по факту она просто соберёт id всех друзей
и выдаст их недавние добавления в коллекцию), но тогда будет
нагромождение вкладок и придётся какое то сворачивание добавлять.
- Если аудио больше 10 и ты на странице аудио, то показывается мелкая
кнопка в правом нижнем углу которая развернёт счётчик и пагинатор.
- Если аудио обрабатывается (processed как я назвал в css) то появится
кнопка "всё равно хочу воспроизвести".
- При переключении трека меняется заголовок вкладки
- Если ты вызвал контекстное меню но оно ушло за экран, то оно будет
повыше.

# Уязвимости
- Убрана уязвимость в audio api что можно было посмотреть айди владельца
удалённого аудио. В целом непонятно использование id в тексте ошибки,
поскольку он не должен изменятся и быть обобщённым, по типу access to
audio denied. Но да ладно, коду три года всё таки.
- Удалённый контент заменяется "[deleted]" в /fave. Я бы на самом деле
не добавлял это, но меня испугал последний абзац fixed #1258 поэтому
добавил.
2025-03-28 17:04:13 +03:00

42 lines
2.7 KiB
XML

<div class='verticalGrayTabsWrapper'>
<div class="verticalGrayTabs">
<div class='with_padding'>
<a n:if="isset($thisUser)" n:attr="id => $mode === 'list' && $isMy ? 'used' : 'ki'" href="/audios{$thisUser->getId()}">{_my_music}</a>
<a n:attr="id => $mode === 'uploaded' ? 'used' : 'ki'" href="/audios/uploaded">{_my_audios_small_uploaded}</a>
{* TODO: show upload link as and plusick (little plus) in button up*}
<a n:if="isset($thisUser)" href="/player/upload{if $isMyClub}?gid={abs($ownerId)}{/if}">{_upload_audio}</a>
<a n:if="isset($thisUser)" n:attr="id => $mode === 'new' ? 'used' : 'ki'" href="/search?section=audios">{_audio_new}</a>
<a n:if="isset($thisUser)" n:attr="id => $mode === 'popular' ? 'used' : 'ki'" href="/search?section=audios&order=listens">{_audio_popular}</a>
<hr n:if="isset($thisUser)">
<a n:attr="id => $mode === 'playlists' && $ownerId == $thisUser->getId() ? 'used' : 'ki'" href="/playlists{$thisUser->getId()}" n:if="isset($thisUser)">{_my_playlists}</a>
<a n:if="isset($thisUser)" href="/audios/newPlaylist">{_new_playlist}</a>
{if !$isMy && $mode !== 'popular' && $mode !== 'new' && $mode != 'alone_audio' && $mode != 'uploaded'}
<hr>
<a n:if="!$isMy" n:attr="id => $mode === 'list' ? 'used' : 'ki'" href="/audios{$ownerId}">{if $ownerId > 0}{_music_user}{else}{_music_club}{/if}</a>
<a href="/player/upload?gid={abs($ownerId)}" n:if="isset($thisUser) && isset($club) && $club->canUploadAudio($thisUser)">{_upload_audio}</a>
<a n:attr="id => $mode === 'playlists' && $ownerId != $thisUser->getId() ? 'used' : 'ki'" class='noOverflow' href="/playlists{$ownerId}" n:if="isset($thisUser) && isset($ownerId) && !$isMy">{if $ownerId > 0}{_playlists_user}{else}{_playlists_club}{/if}</a>
<a href="/audios/newPlaylist{if $isMyClub}?gid={abs($ownerId)}{/if}" n:if="isset($thisUser) && $isMyClub">{_new_playlist}</a>
{/if}
</div>
{if $friendsAudios}
<div class="friendsAudiosList">
<a href="/audios{$friend->getRealId()}" n:foreach="$friendsAudios as $friend">
<div class="elem">
<img src="{$friend->getAvatarURL()}" />
<div class="additionalInfo">
<span class="name noOverflow">{$friend->getCanonicalName()}</span>
<span class="desc">{$audioStatus ? $audioStatus->getName() : tr("audios_count", $friend->getAudiosCollectionSize())}</span>
</div>
</div>
</a>
</div>
{/if}
</div>
</div>