mirror of
https://github.com/openvk/openvk
synced 2024-11-15 11:39:13 +03:00
791c36416d
- Теперь видосы работают как аудио, пользователи могут добавлять и удалять видео из коллекции. Но, правда, после обновления пользователи потеряют все свои видео, потом подумаю как исправить - Ещё теперь видео можно загружать в группу, жесть. И на странице группы теперь показывается 2 случайных видео из группы - Возможно, исправлена загрузка видео под виндовс (а может я её сломал) - У видосов теперь сохраняется ширина и высота, а так же длина - У прикреплённого видео рядом с названием показывается его длина - Видео теперь размещаются в masonry layout. Если помимо видео у поста есть другие фотографии или другие видео, то показывается только обложка видео и кнопка проигрывания - В класс video в api добавлена поддержка просмотра видеозаписей из групп
353 lines
No EOL
16 KiB
XML
353 lines
No EOL
16 KiB
XML
{extends "../@layout.xml"}
|
|
{var $backdrops = $club->getBackDropPictureURLs()}
|
|
|
|
{block title}{$club->getName()}{/block}
|
|
|
|
{block header}
|
|
{$club->getName()}
|
|
|
|
<img n:if="$club->isVerified()"
|
|
class="name-checkmark"
|
|
src="/assets/packages/static/openvk/img/checkmark.png"
|
|
alt="{_verified_page}"
|
|
/>
|
|
{/block}
|
|
|
|
{block content}
|
|
<div class="left_big_block">
|
|
<div n:if="!is_null($alert = $club->getAlert())" class="group-alert">{strpos($alert, "@") === 0 ? tr(substr($alert, 1)) : $alert}</div>
|
|
|
|
<div class="content_title_expanded" onclick="hidePanel(this);">
|
|
{_information}
|
|
</div>
|
|
|
|
<div class="page_info">
|
|
<table class="ugc-table">
|
|
<tbody>
|
|
<tr>
|
|
<td><span class="nobold">{_name_group}:</span></td>
|
|
<td><b>{$club->getName()}</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="nobold">{_description}:</span></td>
|
|
<td>{$club->getDescriptionHtml()|noescape}</td>
|
|
</tr>
|
|
<tr n:if="!is_null($club->getWebsite())">
|
|
<td><span class="nobold">{_website}: </span></td>
|
|
<td>
|
|
<a href="{$club->getWebsite()}" rel="ugc" target="_blank">
|
|
{$club->getWebsite()}
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div n:if="$club->getFollowersCount() > 0">
|
|
{var $followersCount = $club->getFollowersCount()}
|
|
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$followersCount});">
|
|
{_participants}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("participants", $followersCount)}
|
|
<div style="float:right;">
|
|
<a href="/club{$club->getId()}/followers">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div style="padding-left: 5px;" class="content_list long">
|
|
<div class="cl_element" n:foreach="$club->getFollowers(1) as $follower">
|
|
<div class="cl_avatar">
|
|
<a href="{$follower->getURL()}">
|
|
<img class="ava" src="{$follower->getAvatarUrl('miniscule')}" />
|
|
</a>
|
|
</div>
|
|
<a href="{$follower->getURL()}" class="cl_name">
|
|
<text class="cl_fname">{$follower->getFirstName()}</text>
|
|
<text class="cl_lname">{$follower->getLastName()}</text>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div n:if="($topicsCount > 0 || $club->isEveryoneCanCreateTopics() || ($thisUser && $club->canBeModifiedBy($thisUser))) && $club->isDisplayTopicsAboveWallEnabled()">
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$topicsCount});">
|
|
{_discussions}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("topics", $topicsCount)}
|
|
<div style="float: right;">
|
|
<a href="/board{$club->getId()}">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div n:foreach="$topics as $topic" class="topic-list-item" style="padding: 8px;">
|
|
<b><a href="/topic{$topic->getPrettyId()}">{$topic->getTitle()}</a></b><br>
|
|
<span class="nobold">{tr("updated_at", $topic->getUpdateTime())}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$audiosCount});">
|
|
{_audios}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("audios_count", $audiosCount)}
|
|
<div style="float:right;">
|
|
<a href="/audios-{$club->getId()}">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div class="content_list long">
|
|
<div class="audio" n:foreach="$audios as $audio" style="width: 100%;">
|
|
{include "../Audio/player.xml", audio => $audio}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div n:if="!is_null($suggestedPostsCountByUser) && $suggestedPostsCountByUser > 0" class="sugglist">
|
|
<a href="/club{$club->getId()}/suggested" id="cound_r">{tr("suggested_by_you", $suggestedPostsCountByUser)}</a>
|
|
</div>
|
|
|
|
<div n:if="!is_null($suggestedPostsCountByEveryone) && $suggestedPostsCountByEveryone > 0" class="sugglist">
|
|
<a href="/club{$club->getId()}/suggested" id="cound_r">{tr("suggested_by_everyone", $suggestedPostsCountByEveryone)}</a>
|
|
</div>
|
|
|
|
{presenter "openvk!Wall->wallEmbedded", -$club->getId()}
|
|
|
|
<script n:if="isset($thisUser) && $club->getWallType() == 2 && !$club->canBeModifiedBy($thisUser)">
|
|
document.querySelector("textarea").setAttribute("placeholder", tr("suggest_new"))
|
|
</script>
|
|
</div>
|
|
<div class="right_small_block">
|
|
{var $avatarPhoto = $club->getAvatarPhoto()}
|
|
{var $avatarLink = ((is_null($avatarPhoto) ? FALSE : $avatarPhoto->isAnonymous()) ? "/photo" . ("s/" . base_convert((string) $avatarPhoto->getId(), 10, 32)) : $club->getAvatarLink())}
|
|
<div class="avatar_block" style="position:relative;">
|
|
{var $hasAvatar = !str_contains($club->getAvatarUrl('miniscule'), "/assets/packages/static/openvk/img/camera_200.png")}
|
|
{if !is_null($thisUser) && $hasAvatar == false && $club->canBeModifiedBy($thisUser)}
|
|
<a href="javascript:addAvatarImage(true, {$club->getId()})" class="text_add_image">{_add_image_group}</a>
|
|
{elseif !is_null($thisUser) && $hasAvatar == true && $club->canBeModifiedBy($thisUser)}
|
|
<div class="avatar_controls">
|
|
<div class="avatarDelete">
|
|
<a id="upl" href="javascript:deleteAvatar('{$club->getAvatarPhoto()->getPrettyId()}')"><img src="/assets/packages/static/openvk/img/delete.png"/></a>
|
|
</div>
|
|
<div class="avatar_variants">
|
|
<div class="variant">
|
|
<img src="/assets/packages/static/openvk/img/upload.png" style="margin-left:15px;height: 10px;">
|
|
<a href="javascript:addAvatarImage(true, {$club->getId()})"><p>{_upload_new_picture}</p></a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{/if}
|
|
<a href="{$avatarLink|nocheck}">
|
|
<img src="{$club->getAvatarUrl('normal')}" id="thisGroupAvatar" style="width: 100%; image-rendering: -webkit-optimize-contrast;" />
|
|
</a>
|
|
</div>
|
|
<div n:ifset="$thisUser" id="profile_links">
|
|
{if $club->canBeModifiedBy($thisUser)}
|
|
<a href="/club{$club->getId()}/edit" id="profile_link">{_edit_group}</a>
|
|
<a href="/club{$club->getId()}/stats" id="profile_link">{_statistics}</a>
|
|
{/if}
|
|
{if $thisUser->getChandlerUser()->can("access")->model("admin")->whichBelongsTo(NULL)}
|
|
<a href="/admin/clubs/id{$club->getId()}" id="profile_link">{_manage_group_action}</a>
|
|
<a href="/admin/logs?obj_id={$club->getId()}&obj_type=Club" class="profile_link">Последние действия</a>
|
|
{/if}
|
|
{if $club->getSubscriptionStatus($thisUser) == false}
|
|
<form action="/setSub/club" method="post">
|
|
<input type="hidden" name="act" value="add" />
|
|
<input type="hidden" name="id" value="{$club->getId()}" />
|
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
|
<input type="submit" id="profile_link" value="{_join_community}" />
|
|
</form>
|
|
{else}
|
|
<form action="/setSub/club" method="post">
|
|
<input type="hidden" name="act" value="rem" />
|
|
<input type="hidden" name="id" value="{$club->getId()}" />
|
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
|
<input type="submit" id="profile_link" value="{_leave_community}" />
|
|
</form>
|
|
{/if}
|
|
{var $canReport = $thisUser->getId() != $club->getOwner()->getId()}
|
|
{if $canReport}
|
|
<a class="profile_link" style="display:block;" href="javascript:reportVideo()">{_report}</a>
|
|
|
|
<script>
|
|
function reportVideo() {
|
|
uReportMsgTxt = tr("going_to_report_club");
|
|
uReportMsgTxt += "<br/>"+tr("report_question_text");
|
|
uReportMsgTxt += "<br/><br/><b>"+tr("report_reason")+"</b>: <input type='text' id='uReportMsgInput' placeholder='" + tr("reason") + "' />"
|
|
|
|
MessageBox(tr("report_question"), uReportMsgTxt, [tr("confirm_m"), tr("cancel")], [
|
|
(function() {
|
|
res = document.querySelector("#uReportMsgInput").value;
|
|
xhr = new XMLHttpRequest();
|
|
xhr.open("GET", "/report/" + {$club->getId()} + "?reason=" + res + "&type=group", true);
|
|
xhr.onload = (function() {
|
|
if(xhr.responseText.indexOf("reason") === -1)
|
|
MessageBox(tr("error"), tr("error_sending_report"), ["OK"], [Function.noop]);
|
|
else
|
|
MessageBox(tr("action_successfully"), tr("will_be_watched"), ["OK"], [Function.noop]);
|
|
});
|
|
xhr.send(null);
|
|
}),
|
|
Function.noop
|
|
]);
|
|
}
|
|
</script>
|
|
{/if}
|
|
</div>
|
|
<div>
|
|
<div class="content_title_expanded" onclick="hidePanel(this);">
|
|
{_group_type}
|
|
</div>
|
|
<div style="padding:4px">
|
|
{_group_type_open}
|
|
</div>
|
|
</div>
|
|
<div n:if="$club->getAdministratorsListDisplay() == 0">
|
|
<div class="content_title_expanded" onclick="hidePanel(this);">
|
|
{_creator}
|
|
</div>
|
|
<div class="avatar-list-item" style="padding: 8px;">
|
|
{var $author = $club->getOwner()}
|
|
<div class="avatar">
|
|
<a href="{$author->getURL()}">
|
|
<img class="ava" src="{$author->getAvatarUrl()}" />
|
|
</a>
|
|
</div>
|
|
{* Это наверное костыль, ну да ладно *}
|
|
<div n:class="info, mb_strlen($author->getCanonicalName()) < 22 ? info-centered" n:if="empty($club->getOwnerComment())">
|
|
<a href="{$author->getURL()}" class="title">{$author->getCanonicalName()}</a>
|
|
</div>
|
|
<div class="info" n:if="!empty($club->getOwnerComment())">
|
|
<a href="{$author->getURL()}" class="title">{$author->getCanonicalName()}</a>
|
|
<div class="subtitle">{$club->getOwnerComment()}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div n:if="$club->getAdministratorsListDisplay() == 1">
|
|
{var $managersCount = $club->getManagersCount(true)}
|
|
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$managersCount});">
|
|
{_administrators}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("administrators", $managersCount)}
|
|
<div style="float: right;">
|
|
<a href="/club{$club->getId()}/followers?onlyAdmins=1">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div class="avatar-list">
|
|
<div class="avatar-list-item" n:if="!$club->isOwnerHidden()">
|
|
{var $author = $club->getOwner()}
|
|
<div class="avatar">
|
|
<a href="{$author->getURL()}">
|
|
<img class="ava" src="{$author->getAvatarUrl()}" />
|
|
</a>
|
|
</div>
|
|
<div class="info">
|
|
<a href="{$author->getURL()}" class="title">{$author->getCanonicalName()}</a>
|
|
<div class="subtitle" n:if="!empty($club->getOwnerComment())">{$club->getOwnerComment()}</div>
|
|
</div>
|
|
</div>
|
|
<div class="avatar-list-item" n:foreach="$club->getManagers(1, true) as $manager">
|
|
{var $user = $manager->getUser()}
|
|
<div class="avatar">
|
|
<a href="{$user->getURL()}">
|
|
<img height="32" class="ava" src="{$user->getAvatarUrl()}" />
|
|
</a>
|
|
</div>
|
|
<div class="info">
|
|
<a href="{$user->getURL()}" class="title">{$user->getCanonicalName()}</a>
|
|
<div class="subtitle" n:if="!empty($manager->getComment())">{$manager->getComment()}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div n:if="$albumsCount > 0 || ($thisUser && $club->canBeModifiedBy($thisUser))">
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$albumsCount});">
|
|
{_albums}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("albums", $albumsCount)}
|
|
<div style="float:right;">
|
|
<a href="/albums{$club->getId() * -1}">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div style="padding: 5px;">
|
|
<div class="ovk-album" style="display: inline-block;" n:foreach="$albums as $album">
|
|
<div style="text-align: center;float: left;height: 54pt;width: 100px;">
|
|
{var $cover = $album->getCoverPhoto()}
|
|
|
|
<img
|
|
src="{is_null($cover)?'/assets/packages/static/openvk/img/camera_200.png':$cover->getURL()}"
|
|
style="max-width: 80px; max-height: 54pt;" />
|
|
</div>
|
|
<div>
|
|
<b><a href="/album{$album->getPrettyId()}">{$album->getName()}</a></b><br>
|
|
<span class="nobold">{tr("updated_at", $album->getEditTime() ?? $album->getCreationTime())}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div n:if="$videosCount > 0 || ($thisUser && $club->canBeModifiedBy($thisUser))">
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$videosCount});">
|
|
{_videos}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("videos", $videosCount)}
|
|
<div style="float: right;">
|
|
<a href="/videos-{$club->getId()}">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div style="padding: 5px;">
|
|
<div class="ovk-video" n:foreach="$videos as $video">
|
|
<a href="/video{$video->getPrettyId()}" class="preview" align="center" id="videoOpen" data-id="{$video->getId()}">
|
|
<img
|
|
src="{$video->getThumbnailURL()}"
|
|
style="max-width: 170px; max-height: 127px; margin: auto;" />
|
|
</a>
|
|
<div>
|
|
<b><a href="/video{$video->getPrettyId()}" id="videoOpen" data-id="{$video->getId()}">{ovk_proc_strtr($video->getName(), 30)}</a></b><br>
|
|
<span style="font-size: 10px;">{$video->getPublicationTime()} | {_comments} ({$video->getCommentsCount()})</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div n:if="($topicsCount > 0 || $club->isEveryoneCanCreateTopics() || ($thisUser && $club->canBeModifiedBy($thisUser))) && !$club->isDisplayTopicsAboveWallEnabled()">
|
|
<div class="content_title_expanded" onclick="hidePanel(this, {$topicsCount});">
|
|
{_discussions}
|
|
</div>
|
|
<div>
|
|
<div class="content_subtitle">
|
|
{tr("topics", $topicsCount)}
|
|
<div style="float: right;">
|
|
<a href="/board{$club->getId()}">{_all_title}</a>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div n:foreach="$topics as $topic" class="topic-list-item">
|
|
<b><a href="/topic{$topic->getPrettyId()}">{$topic->getTitle()}</a></b><br>
|
|
<span class="nobold">{tr("updated_at", $topic->getUpdateTime())}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{/block}
|
|
|
|
{block bodyScripts}
|
|
{script "js/al_despacito_wall.js"}
|
|
{/block} |