mirror of
https://github.com/openvk/openvk
synced 2024-11-15 11:39:13 +03:00
Compare commits
4 commits
3ffb158dd7
...
b69a19aea5
Author | SHA1 | Date | |
---|---|---|---|
|
b69a19aea5 | ||
|
bbef3a8518 | ||
|
c5644a51d6 | ||
|
4c78617a9c |
16 changed files with 136 additions and 24 deletions
|
@ -147,7 +147,7 @@ final class Friends extends VKAPIRequestHandler
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRequests(string $fields = "", int $offset = 0, int $count = 100, int $extended = 0): object
|
function getRequests(string $fields = "", int $out = 0, int $offset = 0, int $count = 100, int $extended = 0): object
|
||||||
{
|
{
|
||||||
if ($count >= 1000)
|
if ($count >= 1000)
|
||||||
$this->fail(100, "One of the required parameters was not passed or is invalid.");
|
$this->fail(100, "One of the required parameters was not passed or is invalid.");
|
||||||
|
@ -158,9 +158,18 @@ final class Friends extends VKAPIRequestHandler
|
||||||
$offset++;
|
$offset++;
|
||||||
$followers = [];
|
$followers = [];
|
||||||
|
|
||||||
foreach($this->getUser()->getFollowers($offset, $count) as $follower) {
|
if ($out != 0) {
|
||||||
$followers[$i] = $follower->getId();
|
foreach($this->getUser()->getFollowers($offset, $count) as $follower) {
|
||||||
$i++;
|
$followers[$i] = $follower->getId();
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach($this->getUser()->getRequests($offset, $count) as $follower) {
|
||||||
|
$followers[$i] = $follower->getId();
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = $followers;
|
$response = $followers;
|
||||||
|
|
|
@ -39,4 +39,25 @@ trait TSubscribable
|
||||||
$sub->delete();
|
$sub->delete();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function changeFlags(User $user, int $flags, bool $reverse): bool
|
||||||
|
{
|
||||||
|
$ctx = DatabaseConnection::i()->getContext();
|
||||||
|
$data = [
|
||||||
|
"follower" => $reverse ? $this->getId() : $user->getId(),
|
||||||
|
"model" => static::class,
|
||||||
|
"target" => $reverse ? $user->getId() : $this->getId(),
|
||||||
|
];
|
||||||
|
$sub = $ctx->table("subscriptions")->where($data);
|
||||||
|
|
||||||
|
bdump($data);
|
||||||
|
|
||||||
|
if (!$sub)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$sub->update([
|
||||||
|
'flags' => $flags
|
||||||
|
]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -592,6 +592,16 @@ class User extends RowModel
|
||||||
return $this->_abstractRelationCount("get-followers");
|
return $this->_abstractRelationCount("get-followers");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getRequests(int $page = 1, int $limit = 6): \Traversable
|
||||||
|
{
|
||||||
|
return $this->_abstractRelationGenerator("get-requests", $page, $limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRequestsCount(): int
|
||||||
|
{
|
||||||
|
return $this->_abstractRelationCount("get-requests");
|
||||||
|
}
|
||||||
|
|
||||||
function getSubscriptions(int $page = 1, int $limit = 6): \Traversable
|
function getSubscriptions(int $page = 1, int $limit = 6): \Traversable
|
||||||
{
|
{
|
||||||
return $this->_abstractRelationGenerator("get-subscriptions-user", $page, $limit);
|
return $this->_abstractRelationGenerator("get-subscriptions-user", $page, $limit);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
(SELECT DISTINCT(follower) AS __id FROM
|
(SELECT DISTINCT(follower) AS __id FROM
|
||||||
(SELECT follower FROM subscriptions WHERE target=? AND model="openvk\\Web\\Models\\Entities\\User") u0
|
(SELECT follower, flags FROM subscriptions WHERE target=? AND model="openvk\\Web\\Models\\Entities\\User") u0
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
(SELECT target FROM subscriptions WHERE follower=? AND model="openvk\\Web\\Models\\Entities\\User") u1
|
(SELECT target FROM subscriptions WHERE follower=? AND model="openvk\\Web\\Models\\Entities\\User") u1
|
||||||
ON u0.follower = u1.target WHERE u1.target IS NULL) u2
|
ON u0.follower = u1.target WHERE u1.target IS NULL) u2
|
||||||
|
|
6
Web/Models/sql/get-requests.tsql
Executable file
6
Web/Models/sql/get-requests.tsql
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
(SELECT DISTINCT(follower) AS __id FROM
|
||||||
|
(SELECT follower FROM subscriptions WHERE target=? AND flags=0 AND model="openvk\\Web\\Models\\Entities\\User") u0
|
||||||
|
LEFT JOIN
|
||||||
|
(SELECT target FROM subscriptions WHERE follower=? AND flags=0 AND model="openvk\\Web\\Models\\Entities\\User") u1
|
||||||
|
ON u0.follower = u1.target WHERE u1.target IS NULL) u2
|
||||||
|
INNER JOIN profiles ON profiles.id = u2.__id
|
|
@ -329,9 +329,12 @@ final class UserPresenter extends OpenVKPresenter
|
||||||
$user = $this->users->get((int) $this->postParam("id"));
|
$user = $this->users->get((int) $this->postParam("id"));
|
||||||
if(!$user) exit("Invalid state");
|
if(!$user) exit("Invalid state");
|
||||||
|
|
||||||
$user->toggleSubscription($this->user->identity);
|
if ($this->postParam("act") == "rej")
|
||||||
|
$user->changeFlags($this->user->identity, 0b10000000, true);
|
||||||
|
else
|
||||||
|
$user->toggleSubscription($this->user->identity);
|
||||||
|
|
||||||
$this->redirect($user->getURL());
|
$this->redirect($_SERVER['HTTP_REFERER']);
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSetAvatar()
|
function renderSetAvatar()
|
||||||
|
|
|
@ -178,9 +178,9 @@
|
||||||
<a href="/edit" class="link edit-button">{_edit_button}</a>
|
<a href="/edit" class="link edit-button">{_edit_button}</a>
|
||||||
<a href="{$thisUser->getURL()}" class="link" title="{_my_page} [Alt+Shift+.]" accesskey=".">{_my_page}</a>
|
<a href="{$thisUser->getURL()}" class="link" title="{_my_page} [Alt+Shift+.]" accesskey=".">{_my_page}</a>
|
||||||
<a href="/friends{$thisUser->getId()}" class="link">{_my_friends}
|
<a href="/friends{$thisUser->getId()}" class="link">{_my_friends}
|
||||||
<object type="internal/link" n:if="$thisUser->getFollowersCount() > 0">
|
<object type="internal/link" n:if="$thisUser->getRequestsCount() > 0">
|
||||||
<a href="/friends{$thisUser->getId()}?act=incoming" class="linkunderline">
|
<a href="/friends{$thisUser->getId()}?act=incoming" class="linkunderline">
|
||||||
(<b>{$thisUser->getFollowersCount()}</b>)
|
(<b>{$thisUser->getRequestsCount()}</b>)
|
||||||
</a>
|
</a>
|
||||||
</object>
|
</object>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
{include description, x => $dat}
|
{include description, x => $dat}
|
||||||
{/ifset}
|
{/ifset}
|
||||||
</td>
|
</td>
|
||||||
<td n:ifset="actions" valign="top" class="action_links" style="width: 150px;">
|
<td n:ifset="actions" valign="top" class="action_links" style="min-width: 150px;">
|
||||||
{include actions, x => $dat}
|
{include actions, x => $dat}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -4,11 +4,14 @@
|
||||||
{var $act = $_GET["act"] ?? "friends"}
|
{var $act = $_GET["act"] ?? "friends"}
|
||||||
|
|
||||||
{if $act == "incoming"}
|
{if $act == "incoming"}
|
||||||
{var $iterator = iterator_to_array($user->getFollowers($page))}
|
{var $iterator = iterator_to_array($user->getRequests($page))}
|
||||||
{var $count = $user->getFollowersCount()}
|
{var $count = $user->getRequestsCount()}
|
||||||
{elseif $act == "outcoming"}
|
{elseif $act == "outcoming"}
|
||||||
{var $iterator = iterator_to_array($user->getSubscriptions($page))}
|
{var $iterator = iterator_to_array($user->getSubscriptions($page))}
|
||||||
{var $count = $user->getSubscriptionsCount()}
|
{var $count = $user->getSubscriptionsCount()}
|
||||||
|
{elseif $act == "followers"}
|
||||||
|
{var $iterator = iterator_to_array($user->getFollowers($page))}
|
||||||
|
{var $count = $user->getFollowersCount()}
|
||||||
{elseif $act == "online"}
|
{elseif $act == "online"}
|
||||||
{var $iterator = iterator_to_array($user->getFriendsOnline($page))}
|
{var $iterator = iterator_to_array($user->getFriendsOnline($page))}
|
||||||
{var $count = $user->getFriendsOnlineCount()}
|
{var $count = $user->getFriendsOnlineCount()}
|
||||||
|
@ -22,6 +25,8 @@
|
||||||
{_incoming_req}
|
{_incoming_req}
|
||||||
{elseif $act == "outcoming"}
|
{elseif $act == "outcoming"}
|
||||||
{_outcoming_req}
|
{_outcoming_req}
|
||||||
|
{elseif $act == "followers"}
|
||||||
|
{_followers}
|
||||||
{elseif $act == "online"}
|
{elseif $act == "online"}
|
||||||
{_friends_online}
|
{_friends_online}
|
||||||
{else}
|
{else}
|
||||||
|
@ -38,6 +43,8 @@
|
||||||
{_incoming_req}
|
{_incoming_req}
|
||||||
{elseif $act == "outcoming"}
|
{elseif $act == "outcoming"}
|
||||||
{_outcoming_req}
|
{_outcoming_req}
|
||||||
|
{elseif $act == "followers"}
|
||||||
|
{_followers}
|
||||||
{elseif $act == "online"}
|
{elseif $act == "online"}
|
||||||
{_friends_online}
|
{_friends_online}
|
||||||
{else}
|
{else}
|
||||||
|
@ -53,18 +60,23 @@
|
||||||
<div n:attr="id => ($act === 'online' ? 'activetabs' : 'ki')" class="tab">
|
<div n:attr="id => ($act === 'online' ? 'activetabs' : 'ki')" class="tab">
|
||||||
<a n:attr="id => ($act === 'online' ? 'act_tab_a' : 'ki')" href="?act=online">{_online}</a>
|
<a n:attr="id => ($act === 'online' ? 'act_tab_a' : 'ki')" href="?act=online">{_online}</a>
|
||||||
</div>
|
</div>
|
||||||
<div n:if="!is_null($thisUser) && $user->getId() === $thisUser->getId()" n:attr="id => ($act === 'incoming' || $act === 'outcoming' ? 'activetabs' : 'ki')" class="tab">
|
<div n:if="!is_null($thisUser) && $user->getId() === $thisUser->getId()" n:attr="id => ($act === 'incoming' || $act === 'followers' || $act === 'outcoming' ? 'activetabs' : 'ki')" class="tab">
|
||||||
<a n:attr="id => ($act === 'incoming' || $act === 'outcoming' ? 'act_tab_a' : 'ki')" href="?act=incoming">{_req}</a>
|
<a n:attr="id => ($act === 'incoming' || $act === 'followers' || $act === 'outcoming' ? 'act_tab_a' : 'ki')" href="?act=incoming">{_req}</a>
|
||||||
</div>
|
</div>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
{block size}
|
{block size}
|
||||||
<div n:if="$act === 'incoming' || $act === 'outcoming'" class="mb_tabs">
|
<div n:if="$act === 'incoming' || $act === 'followers' || $act === 'outcoming'" class="mb_tabs">
|
||||||
<div n:attr="id => ($act === 'incoming' ? 'active' : 'ki')" class="mb_tab">
|
<div n:attr="id => ($act === 'incoming' ? 'active' : 'ki')" class="mb_tab">
|
||||||
<div>
|
<div>
|
||||||
<a href="?act=incoming">{_incoming_req}</a>
|
<a href="?act=incoming">{_incoming_req}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div n:attr="id => ($act === 'followers' ? 'active' : 'ki')" class="mb_tab">
|
||||||
|
<div>
|
||||||
|
<a href="?act=followers">{_followers}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div n:attr="id => ($act === 'outcoming' ? 'active' : 'ki')" class="mb_tab">
|
<div n:attr="id => ($act === 'outcoming' ? 'active' : 'ki')" class="mb_tab">
|
||||||
<div>
|
<div>
|
||||||
<a href="?act=outcoming">{_outcoming_req}</a>
|
<a href="?act=outcoming">{_outcoming_req}</a>
|
||||||
|
@ -78,6 +90,8 @@
|
||||||
{tr("req", $count)}
|
{tr("req", $count)}
|
||||||
{elseif $act == "outcoming"}
|
{elseif $act == "outcoming"}
|
||||||
{tr("req", $count)}
|
{tr("req", $count)}
|
||||||
|
{elseif $act == "followers"}
|
||||||
|
{tr("followers", $count)}
|
||||||
{elseif $act == "online"}
|
{elseif $act == "online"}
|
||||||
{tr("friends_list_online", $count)}
|
{tr("friends_list_online", $count)}
|
||||||
{else}
|
{else}
|
||||||
|
@ -131,21 +145,29 @@
|
||||||
{if ($x->getId() !== $thisUser->getId()) && ($thisUser->getId() === $user->getId())}
|
{if ($x->getId() !== $thisUser->getId()) && ($thisUser->getId() === $user->getId())}
|
||||||
{var $subStatus = $x->getSubscriptionStatus($thisUser)}
|
{var $subStatus = $x->getSubscriptionStatus($thisUser)}
|
||||||
{if $subStatus === 0}
|
{if $subStatus === 0}
|
||||||
<form action="/setSub/user" method="post" class="profile_link_form">
|
<form action="/setSub/user" method="post" class="profile_link_form" id="_submitUserSubscriptionAction">
|
||||||
<input type="hidden" name="act" value="add" />
|
<input type="hidden" name="act" value="add" />
|
||||||
<input type="hidden" name="id" value="{$x->getId()}" />
|
<input type="hidden" name="id" value="{$x->getId()}" />
|
||||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||||
<input type="submit" class="profile_link" value="{_friends_add}" />
|
<input type="submit" class="profile_link" value="{_friends_add}" />
|
||||||
</form>
|
</form>
|
||||||
{elseif $subStatus === 1}
|
{elseif $subStatus === 1}
|
||||||
<form action="/setSub/user" method="post" class="profile_link_form">
|
<form action="/setSub/user" method="post" class="profile_link_form" id="_submitUserSubscriptionAction">
|
||||||
<input type="hidden" name="act" value="add" />
|
<input type="hidden" name="act" value="add" />
|
||||||
<input type="hidden" name="id" value="{$x->getId()}" />
|
<input type="hidden" name="id" value="{$x->getId()}" />
|
||||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||||
<input type="submit" class="profile_link" value="{_friends_accept}" />
|
<input type="submit" class="profile_link" value="{_friends_accept}" />
|
||||||
</form>
|
</form>
|
||||||
|
{if $act !== 'followers'}
|
||||||
|
<form action="/setSub/user" method="post" class="profile_link_form" id="_submitUserSubscriptionAction">
|
||||||
|
<input type="hidden" name="act" value="rej" />
|
||||||
|
<input type="hidden" name="id" value="{$x->getId()}" />
|
||||||
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||||
|
<input type="submit" class="profile_link" value="{_friends_leave_in_flw}" />
|
||||||
|
</form>
|
||||||
|
{/if}
|
||||||
{elseif $subStatus === 2}
|
{elseif $subStatus === 2}
|
||||||
<form action="/setSub/user" method="post" class="profile_link_form">
|
<form action="/setSub/user" method="post" class="profile_link_form" id="_submitUserSubscriptionAction">
|
||||||
<input type="hidden" name="act" value="rem" />
|
<input type="hidden" name="act" value="rem" />
|
||||||
<input type="hidden" name="id" value="{$x->getId()}" />
|
<input type="hidden" name="id" value="{$x->getId()}" />
|
||||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||||
|
@ -153,7 +175,7 @@
|
||||||
</form>
|
</form>
|
||||||
{elseif $subStatus === 3}
|
{elseif $subStatus === 3}
|
||||||
<a href="/im?sel={$x->getId()}" class="profile_link">{_send_message}</a>
|
<a href="/im?sel={$x->getId()}" class="profile_link">{_send_message}</a>
|
||||||
<form action="/setSub/user" method="post" class="profile_link_form">
|
<form action="/setSub/user" method="post" class="profile_link_form" id="_submitUserSubscriptionAction">
|
||||||
<input type="hidden" name="act" value="rem" />
|
<input type="hidden" name="act" value="rem" />
|
||||||
<input type="hidden" name="id" value="{$x->getId()}" />
|
<input type="hidden" name="id" value="{$x->getId()}" />
|
||||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||||
|
|
|
@ -427,6 +427,22 @@ h1 {
|
||||||
text-transform: lowercase;
|
text-transform: lowercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.action_links.disable>a,
|
||||||
|
.action_links.disable>form>input,
|
||||||
|
.action_links.disable {
|
||||||
|
cursor: not-allowed;
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action_links.loading::after {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
background-image: url('/assets/packages/static/openvk/img/loading_mini.gif');
|
||||||
|
width: 30px;
|
||||||
|
height: 7px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.profile_link.disable>a,
|
.profile_link.disable>a,
|
||||||
.profile_link.disable {
|
.profile_link.disable {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
|
@ -2068,20 +2084,17 @@ table td[width="120"] {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mb_tab div {
|
.mb_tab div {
|
||||||
padding: 3px 7px;
|
padding: 5px 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mb_tab#active {
|
.mb_tab#active {
|
||||||
background-color: #898989;
|
background-color: #898989;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mb_tab#active div {
|
|
||||||
border: 2px solid #5f5f5f;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mb_tab#active a {
|
.mb_tab#active a {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,6 +167,23 @@ document.addEventListener("DOMContentLoaded", function() { //BEGIN
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
u("#_submitUserSubscriptionAction").handle("submit", async function(e) {
|
||||||
|
u(this).nodes[0].parentElement.classList.add('loading');
|
||||||
|
u(this).nodes[0].parentElement.classList.add('disable');
|
||||||
|
console.log(e.target);
|
||||||
|
const data = await fetch(u(this).attr('action'), { method: 'POST', body: new FormData(e.target) });
|
||||||
|
if (data.ok) {
|
||||||
|
u(this).nodes[0].parentElement.classList.remove('loading');
|
||||||
|
u(this).nodes[0].parentElement.classList.remove('disable');
|
||||||
|
if (e.target[0].value == "add") {
|
||||||
|
u(this).nodes[0].parentElement.innerHTML = tr("friends_add_msg");
|
||||||
|
} else if (e.target[0].value == "rej") {
|
||||||
|
u(this).nodes[0].parentElement.innerHTML = tr("friends_rej_msg");
|
||||||
|
} else if (e.target[0].value == "rem") {
|
||||||
|
u(this).nodes[0].parentElement.innerHTML = tr("friends_rem_msg");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}); //END ONREADY DECLS
|
}); //END ONREADY DECLS
|
||||||
|
|
||||||
async function repostPost(id, hash) {
|
async function repostPost(id, hash) {
|
||||||
|
|
1
install/sqls/00046-deny-request.sql
Executable file
1
install/sqls/00046-deny-request.sql
Executable file
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE `subscriptions` ADD `flags` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `target`
|
|
@ -131,6 +131,7 @@
|
||||||
"friends_delete" = "Выдаліць з сяброў";
|
"friends_delete" = "Выдаліць з сяброў";
|
||||||
"friends_reject" = "Адмяніць заяўку";
|
"friends_reject" = "Адмяніць заяўку";
|
||||||
"friends_accept" = "Прыняць заяўку";
|
"friends_accept" = "Прыняць заяўку";
|
||||||
|
"friends_leave_in_flw" = "Пакінуть у падпісчыках";
|
||||||
"send_message" = "Адправіць паведамленне";
|
"send_message" = "Адправіць паведамленне";
|
||||||
"incoming_req" = "Падпісанты";
|
"incoming_req" = "Падпісанты";
|
||||||
"outcoming_req" = "Заяўкі";
|
"outcoming_req" = "Заяўкі";
|
||||||
|
|
|
@ -259,6 +259,10 @@
|
||||||
"friends_delete" = "Remove from friends";
|
"friends_delete" = "Remove from friends";
|
||||||
"friends_reject" = "Reject request";
|
"friends_reject" = "Reject request";
|
||||||
"friends_accept" = "Accept request";
|
"friends_accept" = "Accept request";
|
||||||
|
"friends_leave_in_flw" = "Leave in followers";
|
||||||
|
"friends_add_msg" = "Now you're friends.";
|
||||||
|
"friends_rej_msg" = "You left this user as subscriber.";
|
||||||
|
"friends_rem_msg" = "You deleted this user from your friend list.";
|
||||||
"send_message" = "Send a message";
|
"send_message" = "Send a message";
|
||||||
"incoming_req" = "Pending";
|
"incoming_req" = "Pending";
|
||||||
"outcoming_req" = "Outgoing";
|
"outcoming_req" = "Outgoing";
|
||||||
|
|
|
@ -239,6 +239,10 @@
|
||||||
"friends_delete" = "Удалить из друзей";
|
"friends_delete" = "Удалить из друзей";
|
||||||
"friends_reject" = "Отменить заявку";
|
"friends_reject" = "Отменить заявку";
|
||||||
"friends_accept" = "Принять заявку";
|
"friends_accept" = "Принять заявку";
|
||||||
|
"friends_leave_in_flw" = "Оставить в подписчиках";
|
||||||
|
"friends_add_msg" = "Теперь вы друзья.";
|
||||||
|
"friends_rej_msg" = "Вы оставили пользователя в подписчиках.";
|
||||||
|
"friends_rem_msg" = "Вы удалили пользователя из списка своих друзей.";
|
||||||
"send_message" = "Отправить сообщение";
|
"send_message" = "Отправить сообщение";
|
||||||
"incoming_req" = "Входящие";
|
"incoming_req" = "Входящие";
|
||||||
"outcoming_req" = "Исходящие";
|
"outcoming_req" = "Исходящие";
|
||||||
|
|
|
@ -213,6 +213,7 @@
|
||||||
"friends_delete" = "Видалити з друзів";
|
"friends_delete" = "Видалити з друзів";
|
||||||
"friends_reject" = "Скасувати заявку";
|
"friends_reject" = "Скасувати заявку";
|
||||||
"friends_accept" = "Прийняти заявку";
|
"friends_accept" = "Прийняти заявку";
|
||||||
|
"friends_leave_in_flw" = "Залишити у підписниках";
|
||||||
"send_message" = "Відправити повідомлення";
|
"send_message" = "Відправити повідомлення";
|
||||||
"incoming_req" = "Підписники";
|
"incoming_req" = "Підписники";
|
||||||
"outcoming_req" = "Вихідні";
|
"outcoming_req" = "Вихідні";
|
||||||
|
|
Loading…
Reference in a new issue