mirror of
https://github.com/openvk/openvk
synced 2025-03-15 14:05:36 +03:00
Merge branch 'master' into feature-reports
This commit is contained in:
commit
bae42e5d10
63 changed files with 1541 additions and 694 deletions
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
custom: "https://openvk.su/donate"
|
|
@ -94,7 +94,7 @@
|
|||
<tr>
|
||||
<td>
|
||||
<center>
|
||||
<a href="http://{$_SERVER['HTTP_HOST']}/restore.pl?act=finish&key={rawurlencode($key)}" align="center" class="float-center">Сбросить пароль!</a>
|
||||
<a href="http://{$_SERVER['HTTP_HOST']}/restore?act=finish&key={rawurlencode($key)}" align="center" class="float-center">Сбросить пароль!</a>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -118,8 +118,8 @@
|
|||
<table class="callout">
|
||||
<tr>
|
||||
<th class="callout-inner primary">
|
||||
<a href="http://{$_SERVER['HTTP_HOST']}/restore.pl?act=finish&key={$key}" style="color: #000; text-decoration: none;">
|
||||
http://{$_SERVER['HTTP_HOST']}/restore.pl?act=finish&key={$key}
|
||||
<a href="http://{$_SERVER['HTTP_HOST']}/restore?act=finish&key={$key}" style="color: #000; text-decoration: none;">
|
||||
http://{$_SERVER['HTTP_HOST']}/restore?act=finish&key={$key}
|
||||
</a>
|
||||
</th>
|
||||
</tr>
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# <img align="right" src="https://github.com/openvk/openvk/raw/master/Web/static/img/logo_shadow.png" alt="openvk" title="openvk" width="15%">OpenVK
|
||||
|
||||
_[Русский](README_RU.md)_
|
||||
|
||||
**OpenVK** is an attempt to create a simple CMS that ~~cosplays~~ imitates old VK. Code provided here is not stable yet.
|
||||
|
||||
VKontakte belongs to Pavel Durov and VK Group.
|
||||
|
@ -16,16 +18,19 @@ Updating the source code is done with this command: `git pull`
|
|||
|
||||
* **[openvk.su](https://openvk.su/)**
|
||||
* [social.fetbuk.ru](http://social.fetbuk.ru/)
|
||||
* [openvk.zavsc.pw](https://openvk.zavsc.pw/)
|
||||
|
||||
## Can I create my own OpenVK instance?
|
||||
|
||||
Yes! And you're very welcome to.
|
||||
|
||||
However, OVK makes use of Chandler Application Server. This software requires extensions, that may not be provided by your hosting provider (namely, sodium and yaml. this extensions are available on most of ISPManager hostings).
|
||||
|
||||
If you want, you can add your instance to the list above so that people can register there.
|
||||
|
||||
### Installation procedure
|
||||
|
||||
1. Install PHP 7, web-server, Composer, Node.js, Yarn and [Chandler](https://github.com/openvk/chandler)
|
||||
1. Install PHP 7.4, web-server, Composer, Node.js, Yarn and [Chandler](https://github.com/openvk/chandler)
|
||||
* PHP 8 has **not** yet been tested, so you should not expect it to work.
|
||||
2. Install [commitcaptcha](https://github.com/openvk/commitcaptcha) and OpenVK as Chandler extensions like this:
|
||||
```
|
||||
|
@ -54,6 +59,7 @@ Full example installation instruction for CentOS 8 is also available [here](docs
|
|||
### If my website uses OpenVK, should I publish it's sources?
|
||||
|
||||
You are encouraged to do so. We don't enforce this though. You can keep your sources to yourself (unless you distribute your OpenVK distro to other people).
|
||||
|
||||
You also not required to publish source texts of your themepacks and plugins.
|
||||
|
||||
## Where can I get assistance?
|
||||
|
|
78
README_RU.md
Normal file
78
README_RU.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
# <img align="right" src="https://github.com/openvk/openvk/raw/master/Web/static/img/logo_shadow.png" alt="openvk" title="openvk" width="15%">OpenVK
|
||||
|
||||
_[English](README.md)_
|
||||
|
||||
**OpenVK** это попытка создать простую CMS, которая ~~косплеит~~ имитирует старый ВКонтакте. Представленный здесь код пока не стабилен.
|
||||
|
||||
ВКонтакте принадлежит Павлу Дурову и VK Group.
|
||||
|
||||
Честно говоря, мы даже не знаем, работает ли она вообще. Однако, эта версия поддерживается, и мы будем рады принять ваши сообщения об ошибках [в нашем баг-трекере](https://github.com/openvk/openvk/projects/1). Вы также можете отправлять их через [вкладку "Помощь"](https://openvk.su/support?act=new) (для этого вам понадобится учетная запись OVK).
|
||||
|
||||
## Когда релиз?
|
||||
|
||||
Пожалуйста, используйте ветку master, так как в ней больше всего изменений.
|
||||
|
||||
Обновление исходного кода выполняется с помощью этой команды: `git pull`.
|
||||
|
||||
## Инстанции
|
||||
|
||||
* **[openvk.su](https://openvk.su/)**
|
||||
* [social.fetbuk.ru](http://social.fetbuk.ru/)
|
||||
* [openvk.zavsc.pw](https://openvk.zavsc.pw/)
|
||||
|
||||
## Могу ли я создать свою собственную инстанцию OpenVK?
|
||||
|
||||
Да! И всегда пожалуйста.
|
||||
|
||||
Однако, OVK использует Chandler Application Server. Это программное обеспечение требует расширений, которые могут быть не предоставлены вашим хостинг-провайдером (а именно, sodium и yaml. эти расширения доступны на большинстве хостингов ISPManager).
|
||||
|
||||
Если вы хотите, вы можете добавить вашу инстанцию в список выше, чтобы люди могли зарегистрироваться там.
|
||||
|
||||
### Процедура установки
|
||||
|
||||
1. Установите PHP 7.4, веб-сервер, Composer, Node.js, Yarn и [Chandler](https://github.com/openvk/chandler)
|
||||
* PHP 8 еще **не** тестировался, поэтому не стоит ожидать, что он будет работать.
|
||||
2. Установите [commitcaptcha](https://github.com/openvk/commitcaptcha) и OpenVK в качестве расширений Chandler следующим образом:
|
||||
```
|
||||
git clone https://github.com/openvk/openvk /path/to/chandler/extensions/available/openvk
|
||||
git clone https://github.com/openvk/commitcaptcha /path/to/chandler/extensions/available/commitcaptcha
|
||||
```
|
||||
3. И включите их:
|
||||
```
|
||||
ln -s /path/to/chandler/extensions/available/commitcaptcha /path/to/chandler/extensions/enabled/
|
||||
ln -s /path/to/chandler/extensions/available/openvk /path/to/chandler/extensions/enabled/
|
||||
```
|
||||
4. Импортируйте `install/init-static-db.sql` в **ту же базу данных**, в которую вы установили Chandler
|
||||
5. Импортируйте `install/init-event-db.sql` в **отдельную базу данных**
|
||||
6. Скопируйте `openvk-example.yml` в `openvk.yml` и измените параметры
|
||||
7. Запустите `composer install` в директории OpenVK
|
||||
8. Перейдите в `Web/static/js` и выполните `yarn install`
|
||||
9. Установите `openvk` в качестве корневого приложения в файле `chandler.yml`
|
||||
|
||||
После этого вы можете войти как системный администратор в саму сеть (регистрация не требуется):
|
||||
* **Логин**: `admin@localhost.localdomain6`
|
||||
* **Пароль**: `admin`
|
||||
* Перед использованием встроенной учетной записи рекомендуется сменить пароль.
|
||||
|
||||
Полный пример инструкции по установке CentOS 8 также доступен [здесь](docs/centos8_install.md).
|
||||
|
||||
### Если мой сайт использует OpenVK, должен ли я публиковать его исходные тексты?
|
||||
|
||||
Вам рекомендуется это делать. Однако мы не следим за этим. Вы можете держать свои исходные тексты при себе (если только вы не распространяете свой дистрибутив OpenVK среди других людей).
|
||||
|
||||
Вы также не обязаны публиковать исходные тексты ваших тематических пакетов и плагинов.
|
||||
|
||||
## Где я могу получить помощь?
|
||||
|
||||
Вы можете связаться с нами через:
|
||||
* [Баг-трекер](https://github.com/openvk/openvk/projects/1)
|
||||
* [Помощь в OVK](https://openvk.su/support?act=new)
|
||||
* Telegram-чат: Перейдите на [наш канал](https://t.me/openvkch) и откройте обсуждение в меню нашего канала.
|
||||
* [Reddit](https://www.reddit.com/r/openvk/)
|
||||
* [Обсуждения](https://github.com/openvk/openvk/discussions)
|
||||
|
||||
**Внимание**: баг-трекер и телеграм-чат являются публичными местами, и жалобы в OVK обслуживается волонтерами. Если вам нужно сообщить о чем-то, что не должно быть раскрыто широкой публике (например, сообщение об уязвимости), пожалуйста, свяжитесь с нами напрямую по этому адресу: **openvk [at] tutanota [dot] com**.
|
||||
|
||||
<a href="https://codeberg.org/OpenVK/openvk">
|
||||
<img alt="Get it on Codeberg" src="https://codeberg.org/Codeberg/GetItOnCodeberg/media/branch/main/get-it-on-blue-on-white.png" height="60">
|
||||
</a>
|
|
@ -140,6 +140,11 @@ class Club extends RowModel
|
|||
return (bool) $this->getRecord()->display_topics_above_wall;
|
||||
}
|
||||
|
||||
function isHideFromGlobalFeedEnabled(): bool
|
||||
{
|
||||
return (bool) $this->getRecord()->hide_from_global_feed;
|
||||
}
|
||||
|
||||
function getType(): int
|
||||
{
|
||||
return $this->getRecord()->type;
|
||||
|
|
|
@ -354,6 +354,7 @@ class User extends RowModel
|
|||
"groups",
|
||||
"news",
|
||||
"links",
|
||||
"poster",
|
||||
],
|
||||
])->get($id);
|
||||
}
|
||||
|
@ -372,6 +373,7 @@ class User extends RowModel
|
|||
"friends.read",
|
||||
"friends.add",
|
||||
"wall.write",
|
||||
"messages.write",
|
||||
],
|
||||
])->get($id);
|
||||
}
|
||||
|
@ -756,6 +758,7 @@ class User extends RowModel
|
|||
"friends.read",
|
||||
"friends.add",
|
||||
"wall.write",
|
||||
"messages.write",
|
||||
],
|
||||
])->set($id, $status)->toInteger());
|
||||
}
|
||||
|
@ -772,6 +775,7 @@ class User extends RowModel
|
|||
"groups",
|
||||
"news",
|
||||
"links",
|
||||
"poster",
|
||||
],
|
||||
])->set($id, (int) $status)->toInteger();
|
||||
|
||||
|
|
|
@ -37,6 +37,24 @@ class Clubs
|
|||
|
||||
return new Util\EntityStream("Club", $result);
|
||||
}
|
||||
|
||||
function getCount(): int
|
||||
{
|
||||
return sizeof(clone $this->clubs);
|
||||
}
|
||||
|
||||
function getPopularClubs(): \Traversable
|
||||
{
|
||||
$query = "SELECT ROW_NUMBER() OVER (ORDER BY `subscriptions` DESC) as `place`, `target` as `id`, COUNT(`follower`) as `subscriptions` FROM `subscriptions` WHERE `model` = \"openvk\\\Web\\\Models\\\Entities\\\Club\" GROUP BY `target` ORDER BY `subscriptions` DESC, `id` LIMIT 10;";
|
||||
$entries = DatabaseConnection::i()->getConnection()->query($query);
|
||||
|
||||
foreach($entries as $entry)
|
||||
yield (object) [
|
||||
"place" => $entry["place"],
|
||||
"club" => $this->get($entry["id"]),
|
||||
"subscriptions" => $entry["subscriptions"],
|
||||
];
|
||||
}
|
||||
|
||||
use \Nette\SmartObject;
|
||||
}
|
||||
|
|
|
@ -105,4 +105,9 @@ class Posts
|
|||
{
|
||||
return sizeof($this->posts->where(["wall" => $user, "deleted" => 0]));
|
||||
}
|
||||
|
||||
function getCount(): int
|
||||
{
|
||||
return sizeof(clone $this->posts);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,8 +22,8 @@ class Tickets
|
|||
|
||||
function getTickets(int $state = 0, int $page = 1): \Traversable
|
||||
{
|
||||
foreach($this->tickets->where(["deleted" => 0, "type" => $state])->order("created DESC")->page($page, OPENVK_DEFAULT_PER_PAGE) as $t)
|
||||
yield new Ticket($t);
|
||||
foreach($this->tickets->where(["deleted" => 0, "type" => $state])->order("created DESC")->page($page, OPENVK_DEFAULT_PER_PAGE) as $ticket)
|
||||
yield new Ticket($ticket);
|
||||
}
|
||||
|
||||
function getTicketCount(int $state = 0): int
|
||||
|
@ -31,21 +31,23 @@ class Tickets
|
|||
return sizeof($this->tickets->where(["deleted" => 0, "type" => $state]));
|
||||
}
|
||||
|
||||
function getTicketsByuId(int $user_id): \Traversable
|
||||
function getTicketsByUserId(int $userId, int $page = 1): \Traversable
|
||||
{
|
||||
foreach($this->tickets->where(['user_id' => $user_id, 'deleted' => 0])->order("created DESC") as $ticket) yield new Ticket($ticket);
|
||||
foreach($this->tickets->where(["user_id" => $userId, "deleted" => 0])->order("created DESC")->page($page, OPENVK_DEFAULT_PER_PAGE) as $ticket) yield new Ticket($ticket);
|
||||
}
|
||||
|
||||
function getTicketsCountByuId(int $user_id, int $type = 0): int
|
||||
function getTicketsCountByUserId(int $userId, int $type = NULL): int
|
||||
{
|
||||
return sizeof($this->tickets->where(['user_id' => $user_id, 'deleted' => 0, 'type' => $type]));
|
||||
if(is_null($type))
|
||||
return sizeof($this->tickets->where(["user_id" => $userId, "deleted" => 0]));
|
||||
else
|
||||
return sizeof($this->tickets->where(["user_id" => $userId, "deleted" => 0, "type" => $type]));
|
||||
}
|
||||
|
||||
function getRequestById(int $req_id): ?Ticket
|
||||
function getRequestById(int $requestId): ?Ticket
|
||||
{
|
||||
$requests = $this->tickets->where(['id' => $req_id])->fetch();
|
||||
$requests = $this->tickets->where(["id" => $requestId])->fetch();
|
||||
if(!is_null($requests))
|
||||
|
||||
return new Req($requests);
|
||||
else
|
||||
return null;
|
||||
|
|
|
@ -69,6 +69,24 @@ class Users
|
|||
|
||||
return $this->getByShortUrl($address);
|
||||
}
|
||||
|
||||
/**
|
||||
* If you need to check if the user is an instance administrator, use `$user->getChandlerUser()->can("access")->model("admin")->whichBelongsTo(NULL)`.
|
||||
* This method is more suitable for instance administrators lists
|
||||
*/
|
||||
function getInstanceAdmins(bool $excludeHidden = true): \Traversable
|
||||
{
|
||||
$query = "SELECT DISTINCT(`profiles`.`id`) FROM `ChandlerACLRelations` JOIN `profiles` ON `ChandlerACLRelations`.`user` = `profiles`.`user` COLLATE utf8mb4_unicode_520_ci WHERE `ChandlerACLRelations`.`group` IN (SELECT `group` FROM `ChandlerACLGroupsPermissions` WHERE `model` = \"admin\" AND `permission` = \"access\")";
|
||||
|
||||
if($excludeHidden)
|
||||
$query .= " AND `ChandlerACLRelations`.`user` NOT IN (SELECT `user` FROM `ChandlerACLRelations` WHERE `group` IN (SELECT `group` FROM `ChandlerACLGroupsPermissions` WHERE `model` = \"hidden_admin\" AND `permission` = \"be\"))";
|
||||
|
||||
$query .= " ORDER BY `profiles`.`id`;";
|
||||
|
||||
$result = DatabaseConnection::i()->getConnection()->query($query);
|
||||
foreach($result as $entry)
|
||||
yield $this->get($entry->id);
|
||||
}
|
||||
|
||||
use \Nette\SmartObject;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php declare(strict_types=1);
|
||||
namespace openvk\Web\Presenters;
|
||||
use openvk\Web\Themes\Themepacks;
|
||||
use openvk\Web\Models\Repositories\{Users, Managers};
|
||||
use openvk\Web\Models\Repositories\{Users, Managers, Clubs, Posts};
|
||||
use openvk\Web\Util\Localizator;
|
||||
use Chandler\Session\Session;
|
||||
|
||||
|
@ -57,6 +57,15 @@ final class AboutPresenter extends OpenVKPresenter
|
|||
$this->template->themes = Themepacks::i()->getAllThemes();
|
||||
$this->template->languages = getLanguages();
|
||||
}
|
||||
|
||||
function renderAboutInstance(): void
|
||||
{
|
||||
$this->template->usersStats = (new Users)->getStatistics();
|
||||
$this->template->clubsCount = (new Clubs)->getCount();
|
||||
$this->template->postsCount = (new Posts)->getCount();
|
||||
$this->template->popularClubs = (new Clubs)->getPopularClubs();
|
||||
$this->template->admins = iterator_to_array((new Users)->getInstanceAdmins());
|
||||
}
|
||||
|
||||
function renderLanguage(): void
|
||||
{
|
||||
|
@ -83,4 +92,37 @@ final class AboutPresenter extends OpenVKPresenter
|
|||
{
|
||||
$this->template->languages = getLanguages();
|
||||
}
|
||||
|
||||
function renderRobotsTxt(): void
|
||||
{
|
||||
$text = "# robots.txt file for openvk\n"
|
||||
. "#\n"
|
||||
. "# this includes only those links that are not in any way\n"
|
||||
. "# covered from unauthorized persons (for example, due to\n"
|
||||
. "# lack of rights to access the admin panel)\n\n"
|
||||
. "User-Agent: *\n"
|
||||
. "Disallow: /rpc\n"
|
||||
. "Disallow: /language\n"
|
||||
. "Disallow: /badbrowser.php\n"
|
||||
. "Disallow: /logout\n"
|
||||
. "Disallow: /away.php\n"
|
||||
. "Disallow: /im?\n"
|
||||
. "Disallow: *query=\n"
|
||||
. "Disallow: *?lg=\n"
|
||||
. "Disallow: *hash=\n"
|
||||
. "Disallow: *?jReturnTo=\n"
|
||||
. "Disallow: /method/*\n"
|
||||
. "Disallow: /token*";
|
||||
header("Content-Type: text/plain");
|
||||
exit($text);
|
||||
}
|
||||
|
||||
function renderHumansTxt(): void
|
||||
{
|
||||
// :D
|
||||
|
||||
header("HTTP/1.1 302 Found");
|
||||
header("Location: https://github.com/openvk/openvk#readme");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,6 +72,8 @@ final class AdminPresenter extends OpenVKPresenter
|
|||
$user->setStatus($this->postParam("status"));
|
||||
$user->setVerified(empty($this->postParam("verify") ? 0 : 1));
|
||||
if($user->onlineStatus() != $this->postParam("online")) $user->setOnline(intval($this->postParam("online")));
|
||||
if(!$user->setShortCode(empty($this->postParam("shortcode")) ? NULL : $this->postParam("shortcode")))
|
||||
$this->flash("err", tr("error"), tr("error_shorturl_incorrect"));
|
||||
$user->save();
|
||||
break;
|
||||
|
||||
|
|
|
@ -215,6 +215,9 @@ final class AuthPresenter extends OpenVKPresenter
|
|||
|
||||
function renderRestore(): void
|
||||
{
|
||||
if(!is_null($this->user))
|
||||
$this->redirect("/id" . $this->user->id, static::REDIRECT_TEMPORARY);
|
||||
|
||||
if(($this->queryParam("act") ?? "default") === "finish")
|
||||
$this->pass("openvk!Auth->finishRestoringPassword");
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ final class CommentPresenter extends OpenVKPresenter
|
|||
$this->flashFail(
|
||||
"succ",
|
||||
"Успешно",
|
||||
"Этот комментарий больше не будет показыватся.<br/><a href='/al_comments.pl/spam?$id'>Отметить как спам</a>?"
|
||||
"Этот комментарий больше не будет показыватся.<br/><a href='/al_comments/spam?$id'>Отметить как спам</a>?"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -207,8 +207,8 @@ final class GroupPresenter extends OpenVKPresenter
|
|||
$club->setShortcode(empty($this->postParam("shortcode")) ? NULL : $this->postParam("shortcode"));
|
||||
$club->setWall(empty($this->postParam("wall")) ? 0 : 1);
|
||||
$club->setAdministrators_List_Display(empty($this->postParam("administrators_list_display")) ? 0 : $this->postParam("administrators_list_display"));
|
||||
$club->setEveryone_Can_Create_Topics(empty($this->postParam("everyone_can_create_topics")) ? 0 : 1);
|
||||
$club->setDisplay_Topics_Above_Wall(empty($this->postParam("display_topics_above_wall")) ? 0 : 1);;
|
||||
$club->setDisplay_Topics_Above_Wall(empty($this->postParam("display_topics_above_wall")) ? 0 : 1);
|
||||
$club->setHide_From_Global_Feed(empty($this->postParam("hide_from_global_feed")) ? 0 : 1);
|
||||
|
||||
$website = $this->postParam("website") ?? "";
|
||||
if(empty($website))
|
||||
|
|
|
@ -124,7 +124,7 @@ final class MessengerPresenter extends OpenVKPresenter
|
|||
}
|
||||
|
||||
$sel = $this->getCorrespondent($sel);
|
||||
if($sel->getId() !== $this->user->id && $sel->getSubscriptionStatus($this->user->identity) !== 3)
|
||||
if($sel->getId() !== $this->user->id && !$sel->getPrivacyPermission('messages.write', $this->user->identity))
|
||||
exit(header("HTTP/1.1 403 Forbidden"));
|
||||
|
||||
$cor = new Correspondence($this->user->identity, $sel);
|
||||
|
|
|
@ -220,7 +220,7 @@ abstract class OpenVKPresenter extends SimplePresenter
|
|||
$this->user->identity->save();
|
||||
}
|
||||
|
||||
$this->template->ticketAnsweredCount = (new Tickets)->getTicketsCountByuId($this->user->id, 1);
|
||||
$this->template->ticketAnsweredCount = (new Tickets)->getTicketsCountByUserId($this->user->id, 1);
|
||||
if($user->can("write")->model("openvk\Web\Models\Entities\TicketReply")->whichBelongsTo(0))
|
||||
$this->template->helpdeskTicketNotAnsweredCount = (new Tickets)->getTicketCount(0);
|
||||
}
|
||||
|
|
|
@ -70,9 +70,9 @@ final class PhotosPresenter extends OpenVKPresenter
|
|||
}
|
||||
|
||||
if($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||
if(empty($this->postParam("name"))) {
|
||||
if(empty($this->postParam("name")))
|
||||
$this->flashFail("err", tr("error"), tr("error_segmentation"));
|
||||
}
|
||||
|
||||
$album = new Album;
|
||||
$album->setOwner(isset($club) ? $club->getId() * -1 : $this->user->id);
|
||||
$album->setName($this->postParam("name"));
|
||||
|
@ -80,7 +80,10 @@ final class PhotosPresenter extends OpenVKPresenter
|
|||
$album->setCreated(time());
|
||||
$album->save();
|
||||
|
||||
$this->redirect("/album" . $album->getOwner()->getId() . "_" . $album->getId(), static::REDIRECT_TEMPORARY);
|
||||
if(isset($club))
|
||||
$this->redirect("/album-" . $album->getOwner()->getId() . "_" . $album->getId(), static::REDIRECT_TEMPORARY);
|
||||
else
|
||||
$this->redirect("/album" . $album->getOwner()->getId() . "_" . $album->getId(), static::REDIRECT_TEMPORARY);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -118,10 +121,11 @@ final class PhotosPresenter extends OpenVKPresenter
|
|||
if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity))
|
||||
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса.");
|
||||
|
||||
$name = $album->getName();
|
||||
$name = $album->getName();
|
||||
$owner = $album->getOwner();
|
||||
$album->delete();
|
||||
$this->flash("succ", "Альбом удалён", "Альбом $name был успешно удалён.");
|
||||
$this->redirect("/albums" . $this->user->id);
|
||||
$this->redirect("/albums" . ($owner instanceof Club ? "-" : "") . $owner->getId());
|
||||
}
|
||||
|
||||
function renderAlbum(int $owner, int $id): void
|
||||
|
|
|
@ -28,17 +28,19 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
$this->assertUserLoggedIn();
|
||||
$this->template->mode = in_array($this->queryParam("act"), ["faq", "new", "list"]) ? $this->queryParam("act") : "faq";
|
||||
|
||||
$tickets = $this->tickets->getTicketsByuId($this->user->id);
|
||||
if($tickets)
|
||||
$this->template->tickets = $tickets;
|
||||
$this->template->count = $this->tickets->getTicketsCountByUserId($this->user->id);
|
||||
if($this->template->mode === "list") {
|
||||
$this->template->page = (int) ($this->queryParam("p") ?? 1);
|
||||
$this->template->tickets = $this->tickets->getTicketsByUserId($this->user->id, $this->template->page);
|
||||
}
|
||||
|
||||
if($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||
if(!empty($this->postParam("name")) && !empty($this->postParam("text"))) {
|
||||
$this->assertNoCSRF();
|
||||
$this->willExecuteWriteAction();
|
||||
|
||||
$ticket = new Ticket;
|
||||
$ticket->setType(0);
|
||||
$ticket->setUser_id($this->user->id);
|
||||
$ticket->setUser_Id($this->user->id);
|
||||
$ticket->setName($this->postParam("name"));
|
||||
$ticket->setText($this->postParam("text"));
|
||||
$ticket->setcreated(time());
|
||||
|
@ -111,11 +113,11 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
if(!$ticket || $ticket->isDeleted() != 0 || $ticket->getUserId() !== $this->user->id && !$this->hasPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0)) {
|
||||
$this->notFound();
|
||||
} else {
|
||||
header("HTTP/1.1 302 Found");
|
||||
if($ticket->getUserId() !== $this->user->id && $this->hasPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0))
|
||||
header("Location: /support/tickets");
|
||||
$this->redirect("/support/tickets");
|
||||
else
|
||||
header("Location: /support");
|
||||
$this->redirect("/support");
|
||||
|
||||
$ticket->delete();
|
||||
}
|
||||
}
|
||||
|
@ -135,8 +137,7 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
if(!empty($this->postParam("text"))) {
|
||||
$ticket->setType(0);
|
||||
$ticket->save();
|
||||
|
||||
$this->assertNoCSRF();
|
||||
|
||||
$this->willExecuteWriteAction();
|
||||
|
||||
$comment = new TicketComment;
|
||||
|
@ -182,13 +183,12 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
if(!empty($this->postParam("text")) && !empty($this->postParam("status"))) {
|
||||
$ticket->setType($this->postParam("status"));
|
||||
$ticket->save();
|
||||
|
||||
$this->assertNoCSRF();
|
||||
|
||||
$comment = new TicketComment;
|
||||
$comment->setUser_id($this->user->id);
|
||||
$comment->setUser_type(1);
|
||||
$comment->setText($this->postParam("text"));
|
||||
$comment->setTicket_id($id);
|
||||
$comment->setTicket_Id($id);
|
||||
$comment->setCreated(time());
|
||||
$comment->save();
|
||||
} elseif(empty($this->postParam("text"))) {
|
||||
|
|
|
@ -329,6 +329,7 @@ final class UserPresenter extends OpenVKPresenter
|
|||
"friends.read",
|
||||
"friends.add",
|
||||
"wall.write",
|
||||
"messages.write",
|
||||
];
|
||||
foreach($settings as $setting) {
|
||||
$input = $this->postParam(str_replace(".", "_", $setting));
|
||||
|
@ -369,13 +370,14 @@ final class UserPresenter extends OpenVKPresenter
|
|||
$user->setNsfwTolerance((int) $this->postParam("nsfw"));
|
||||
} else if($_GET['act'] === "lMenu") {
|
||||
$settings = [
|
||||
"menu_bildoj" => "photos",
|
||||
"menu_filmetoj" => "videos",
|
||||
"menu_mesagoj" => "messages",
|
||||
"menu_notatoj" => "notes",
|
||||
"menu_grupoj" => "groups",
|
||||
"menu_novajoj" => "news",
|
||||
"menu_ligiloj" => "links",
|
||||
"menu_bildoj" => "photos",
|
||||
"menu_filmetoj" => "videos",
|
||||
"menu_mesagoj" => "messages",
|
||||
"menu_notatoj" => "notes",
|
||||
"menu_grupoj" => "groups",
|
||||
"menu_novajoj" => "news",
|
||||
"menu_ligiloj" => "links",
|
||||
"menu_standardo" => "poster",
|
||||
];
|
||||
foreach($settings as $checkbox => $setting)
|
||||
$user->setLeftMenuItemStatus($setting, $this->checkbox($checkbox));
|
||||
|
@ -446,11 +448,16 @@ final class UserPresenter extends OpenVKPresenter
|
|||
$this->template->secret = $secret;
|
||||
}
|
||||
|
||||
$issuer = OPENVK_ROOT_CONF["openvk"]["appearance"]["name"];
|
||||
$email = $this->user->identity->getEmail();
|
||||
$this->template->qrCode = substr((new QRCode(new QROptions([
|
||||
// Why are these crutch? For some reason, the QR code is not displayed if you just pass the render output to the view
|
||||
|
||||
$issuer = OPENVK_ROOT_CONF["openvk"]["appearance"]["name"];
|
||||
$email = $this->user->identity->getEmail();
|
||||
$qrCode = explode("base64,", (new QRCode(new QROptions([
|
||||
"imageTransparent" => false
|
||||
])))->render("otpauth://totp/$issuer:$email?secret=$secret&issuer=$issuer"), 22);
|
||||
])))->render("otpauth://totp/$issuer:$email?secret=$secret&issuer=$issuer"));
|
||||
|
||||
$this->template->qrCodeType = substr($qrCode[0], 5);
|
||||
$this->template->qrCodeData = $qrCode[1];
|
||||
}
|
||||
|
||||
function renderDisableTwoFactorAuth(): void
|
||||
|
|
|
@ -122,24 +122,24 @@ final class WallPresenter extends OpenVKPresenter
|
|||
|
||||
$page = (int) ($_GET["p"] ?? 1);
|
||||
$pPage = min((int) ($_GET["posts"] ?? OPENVK_DEFAULT_PER_PAGE), 50);
|
||||
$posts = DatabaseConnection::i()
|
||||
->getContext()
|
||||
->table("posts")
|
||||
->where("deleted", 0)
|
||||
->order("created DESC");
|
||||
|
||||
|
||||
$queryBase = "FROM `posts` LEFT JOIN `groups` ON GREATEST(`posts`.`wall`, 0) = 0 AND `groups`.`id` = ABS(`posts`.`wall`) WHERE (`groups`.`hide_from_global_feed` = 0 OR `groups`.`name` IS NULL) AND `posts`.`deleted` = 0";
|
||||
|
||||
if($this->user->identity->getNsfwTolerance() === User::NSFW_INTOLERANT)
|
||||
$posts = $posts->where("nsfw", false);
|
||||
$queryBase .= " AND `nsfw` = 0";
|
||||
|
||||
$posts = DatabaseConnection::i()->getConnection()->query("SELECT `posts`.`id` " . $queryBase . " ORDER BY `created` DESC LIMIT " . $pPage . " OFFSET " . ($page - 1) * $pPage);
|
||||
$count = DatabaseConnection::i()->getConnection()->query("SELECT COUNT(*) " . $queryBase)->fetch()->{"COUNT(*)"};
|
||||
|
||||
$this->template->_template = "Wall/Feed.xml";
|
||||
$this->template->globalFeed = true;
|
||||
$this->template->paginatorConf = (object) [
|
||||
"count" => sizeof($posts),
|
||||
"count" => $count,
|
||||
"page" => (int) ($_GET["p"] ?? 1),
|
||||
"amount" => sizeof($posts->page($page, $pPage)),
|
||||
"amount" => sizeof($posts),
|
||||
"perPage" => $pPage,
|
||||
];
|
||||
foreach($posts->page($page, $pPage) as $post)
|
||||
foreach($posts as $post)
|
||||
$this->template->posts[] = $this->posts->get($post->id);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
{var instance_name = OPENVK_ROOT_CONF['openvk']['appearance']['name']}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Произошёл троллинг... | OpenVK</title>
|
||||
<title>An error occurred - {$instance_name}</title>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no" />
|
||||
<style>
|
||||
@keyframes gradient {
|
||||
0% {
|
||||
background-position:0% 50%
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
|
||||
|
||||
50% {
|
||||
background-position:100% 50%
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
|
||||
|
||||
100% {
|
||||
background-position:0% 50%
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
background: linear-gradient(-30deg, #2b2b2b, #f479ff);
|
||||
color: #fff;
|
||||
|
@ -27,25 +29,25 @@
|
|||
animation: gradient 30s ease-in-out infinite;
|
||||
background-size: 400% 400%;
|
||||
}
|
||||
|
||||
|
||||
#error {
|
||||
width: 35rem;
|
||||
max-width: 85vw;
|
||||
}
|
||||
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
align-items: center;
|
||||
height: 97vh;
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
main {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
||||
main > p:first-of-type {
|
||||
display: none;
|
||||
}
|
||||
|
@ -56,7 +58,7 @@
|
|||
<!-- OpenVK ERROR REPORT: -->
|
||||
<!-- HTTP {$code} -->
|
||||
<!-- {$msg} -->
|
||||
|
||||
|
||||
<main>
|
||||
<p>{$desc}</p>
|
||||
<a href="/"><img src="/assets/packages/static/openvk/img/oof.apng" alt="Ouch" id="error" /></a>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{var instance_name = OPENVK_ROOT_CONF['openvk']['appearance']['name']}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html n:if="!isset($parentModule) || substr($parentModule, 0, 21) === 'libchandler:absolute.'">
|
||||
<head>
|
||||
<title>
|
||||
|
@ -9,28 +10,31 @@
|
|||
<link rel="shortcut icon" href="/assets/packages/static/openvk/img/icon.ico" />
|
||||
<meta name="application-name" content="{$instance_name}" />
|
||||
<meta n:ifset="$csrfToken" name="csrf" value="{$csrfToken}" />
|
||||
|
||||
<script src="/language/{php echo getLanguage()}.js" crossorigin="anonymous"></script>
|
||||
{script "js/node_modules/jquery/dist/jquery.min.js"}
|
||||
{script "js/node_modules/jquery/dist/jquery.min.js"}
|
||||
{script "js/node_modules/umbrellajs/umbrella.min.js"}
|
||||
{script "js/l10n.js"}
|
||||
{script "js/openvk.cls.js"}
|
||||
|
||||
|
||||
{ifset $thisUser}
|
||||
{if $thisUser->getNsfwTolerance() < 2}
|
||||
{css "css/nsfw-posts.css"}
|
||||
{/if}
|
||||
|
||||
|
||||
{if $theme !== null}
|
||||
{if $theme->inheritDefault()}
|
||||
{if $theme->inheritDefault()}
|
||||
{css "css/style.css"}
|
||||
{css "css/dialog.css"}
|
||||
{css "css/notifications.css"}
|
||||
|
||||
{if $isXmas}
|
||||
{css "css/xmas.css"}
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/themepack/{$theme->getId()}/{$theme->getVersion()}/stylesheet/styles.css" />
|
||||
|
||||
{if $isXmas}
|
||||
<link rel="stylesheet" href="/themepack/{$theme->getId()}/{$theme->getVersion()}/resource/xmas.css" />
|
||||
{/if}
|
||||
|
@ -38,34 +42,37 @@
|
|||
{css "css/style.css"}
|
||||
{css "css/dialog.css"}
|
||||
{css "css/notifications.css"}
|
||||
|
||||
{if $isXmas}
|
||||
{css "css/xmas.css"}
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
|
||||
{if $thisUser->getStyleAvatar() == 1}
|
||||
{css "css/avatar.1.css"}
|
||||
{/if}
|
||||
|
||||
{if $thisUser->getStyleAvatar() == 2}
|
||||
{css "css/avatar.2.css"}
|
||||
{css "css/avatar.2.css"}
|
||||
{/if}
|
||||
|
||||
|
||||
{if $thisUser->hasMicroblogEnabled() == 1}
|
||||
{css "css/microblog.css"}
|
||||
{css "css/microblog.css"}
|
||||
{/if}
|
||||
{else}
|
||||
{css "css/style.css"}
|
||||
{css "css/dialog.css"}
|
||||
{css "css/nsfw-posts.css"}
|
||||
{css "css/notifications.css"}
|
||||
|
||||
|
||||
{if $isXmas}
|
||||
{css "css/xmas.css"}
|
||||
{/if}
|
||||
{/ifset}
|
||||
|
||||
{ifset headIncludes}{include headIncludes}{/ifset}
|
||||
|
||||
{ifset headIncludes}
|
||||
{include headIncludes}
|
||||
{/ifset}
|
||||
</head>
|
||||
<body>
|
||||
<div id="sudo-banner" n:if="isset($thisUser) && $userTainted">
|
||||
|
@ -75,199 +82,170 @@
|
|||
Нажмите <a href="/setSID/unset?hash={rawurlencode($csrfToken)}">здесь</a>, чтобы выйти.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div n:if="OPENVK_ROOT_CONF['openvk']['preferences']['bellsAndWhistles']['testLabel']" id="test-label">FOR TESTING PURPOSES ONLY</div>
|
||||
<div class="notifications_global_wrap"></div>
|
||||
|
||||
<div class="notifications_global_wrap"></div>
|
||||
<div class="dimmer"></div>
|
||||
|
||||
<div class="toTop">
|
||||
⬆ Вверх
|
||||
</div>
|
||||
|
||||
|
||||
<div class="layout">
|
||||
<div id="xhead" class="dm"></div>
|
||||
<div class="page_header {if $instance_name != OPENVK_DEFAULT_INSTANCE_NAME}page_custom_header{/if}">
|
||||
<a href="/" class="home_button {if $instance_name != OPENVK_DEFAULT_INSTANCE_NAME}home_button_custom{/if}" title="{$instance_name}">{$instance_name}</a>
|
||||
<div n:if="isset($thisUser) ? !$thisUser->isBanned() : true" class="header_navigation">
|
||||
{ifset $thisUser}
|
||||
<div class="link">
|
||||
<a href="/">{_"header_home"}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/search?type=groups">{_"header_groups"}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/search">{_"header_search"}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/invite">
|
||||
{_"header_invite"}
|
||||
</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/support">
|
||||
{_"header_help"}
|
||||
<b n:if="$ticketAnsweredCount > 0">({$ticketAnsweredCount})</b>
|
||||
</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/logout?hash={urlencode($csrfToken)}">{_"header_log_out"}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<form action="/search" method="get">
|
||||
<input type="search" name="query" placeholder="{_"header_search"}" style="height: 20px;background: url('/assets/packages/static/openvk/img/search_icon.png') no-repeat 3px 4px; background-color: #fff; padding-left: 18px;width: 120px;" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="link">
|
||||
<a href="/">{_header_home}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/search?type=groups">{_header_groups}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/search">{_header_search}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/invite">{_header_invite}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/support">{_header_help} <b n:if="$ticketAnsweredCount > 0">({$ticketAnsweredCount})</b></a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/logout?hash={urlencode($csrfToken)}">{_header_log_out}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<form action="/search" method="get">
|
||||
<input type="search" name="query" placeholder="{_header_search}" style="height: 20px;background: url('/assets/packages/static/openvk/img/search_icon.png') no-repeat 3px 4px; background-color: #fff; padding-left: 18px;width: 120px;" />
|
||||
</form>
|
||||
</div>
|
||||
{else}
|
||||
<div class="link">
|
||||
<a href="/login">{_"header_login"}</a>
|
||||
<a href="/login">{_header_login}</a>
|
||||
</div>
|
||||
<div n:if="OPENVK_ROOT_CONF['openvk']['preferences']['registration']['enable']" class="link">
|
||||
<a href="/reg">{_"header_registration"}</a>
|
||||
<a href="/reg">{_header_registration}</a>
|
||||
</div>
|
||||
<div class="link">
|
||||
<a href="/support">{_"header_help"}</a>
|
||||
<a href="/support">{_header_help}</a>
|
||||
</div>
|
||||
{/ifset}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="sidebar">
|
||||
<div class="navigation">
|
||||
{ifset $thisUser}
|
||||
{if !$thisUser->isBanned()}
|
||||
<a href="/edit" class="link edit-button">{_"edit_button"}</a>
|
||||
<a href="{$thisUser->getURL()}" class="link">{_"my_page"}</a>
|
||||
<a href="/friends{$thisUser->getId()}" class="link">{_"my_friends"}
|
||||
{if $thisUser->getFollowersCount() > 0}
|
||||
<object type="internal/link">
|
||||
<a href="/friends{$thisUser->getId()}?act=incoming">
|
||||
(<b>{$thisUser->getFollowersCount()}</b>)
|
||||
{ifset $thisUser}
|
||||
{if !$thisUser->isBanned()}
|
||||
<a href="/edit" class="link edit-button">{_edit_button}</a>
|
||||
<a href="{$thisUser->getURL()}" class="link">{_my_page}</a>
|
||||
<a href="/friends{$thisUser->getId()}" class="link">{_my_friends}
|
||||
<object type="internal/link" n:if="$thisUser->getFollowersCount() > 0">
|
||||
<a href="/friends{$thisUser->getId()}?act=incoming">
|
||||
(<b>{$thisUser->getFollowersCount()}</b>)
|
||||
</a>
|
||||
</object>
|
||||
</a>
|
||||
</object>
|
||||
{/if}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('photos')" href="/albums{$thisUser->getId()}" class="link">{_"my_photos"}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('videos')" href="/videos{$thisUser->getId()}" class="link">{_"my_videos"}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('messages')" href="/im" class="link">{_"my_messages"}
|
||||
{if $thisUser->getUnreadMessagesCount() > 0}
|
||||
<object type="internal/link">
|
||||
(<b>{$thisUser->getUnreadMessagesCount()}</b>)
|
||||
</object>
|
||||
|
||||
{/if}
|
||||
</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('notes')" href="/notes{$thisUser->getId()}" class="link">{_"my_notes"}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('groups')" href="/groups{$thisUser->getId()}" class="link">{_"my_groups"}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('news')" href="/feed" class="link">{_"my_feed"}</a>
|
||||
<a href="/notifications" class="link">{_my_feedback}
|
||||
{if $thisUser->getNotificationsCount() > 0}
|
||||
(<b>{$thisUser->getNotificationsCount()}</b>)
|
||||
{/if}
|
||||
</a>
|
||||
<a href="/settings" class="link">{_"my_settings"}</a>
|
||||
{var canAccessAdminPanel = $thisUser->getChandlerUser()->can("access")->model("admin")->whichBelongsTo(NULL)}
|
||||
{var canAccessHelpdesk = $thisUser->getChandlerUser()->can("write")->model('openvk\Web\Models\Entities\TicketReply')->whichBelongsTo(0)}
|
||||
{var menuLinksAvaiable = sizeof(OPENVK_ROOT_CONF['openvk']['preferences']['menu']['links']) > 0 && $thisUser->getLeftMenuItemStatus('links')}
|
||||
<div n:if="$canAccessAdminPanel || $canAccessHelpdesk || $menuLinksAvaiable" class="menu_divider"></div>
|
||||
{if $canAccessAdminPanel}
|
||||
<a href="/admin" class="link">Админ-панель</a>
|
||||
{/if}
|
||||
{if $canAccessHelpdesk}
|
||||
<a href="/support/tickets" class="link">Helpdesk
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('photos')" href="/albums{$thisUser->getId()}" class="link">{_my_photos}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('videos')" href="/videos{$thisUser->getId()}" class="link">{_my_videos}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('messages')" href="/im" class="link">{_my_messages}
|
||||
<object type="internal/link" n:if="$thisUser->getUnreadMessagesCount() > 0">
|
||||
(<b>{$thisUser->getUnreadMessagesCount()}</b>)
|
||||
</object>
|
||||
</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('notes')" href="/notes{$thisUser->getId()}" class="link">{_my_notes}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('groups')" href="/groups{$thisUser->getId()}" class="link">{_my_groups}</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('news')" href="/feed" class="link">{_my_feed}</a>
|
||||
<a href="/notifications" class="link">{_my_feedback}
|
||||
{if $thisUser->getNotificationsCount() > 0}
|
||||
(<b>{$thisUser->getNotificationsCount()}</b>)
|
||||
{/if}
|
||||
</a>
|
||||
<a href="/settings" class="link">{_my_settings}</a>
|
||||
|
||||
{var canAccessAdminPanel = $thisUser->getChandlerUser()->can("access")->model("admin")->whichBelongsTo(NULL)}
|
||||
{var canAccessHelpdesk = $thisUser->getChandlerUser()->can("write")->model('openvk\Web\Models\Entities\TicketReply')->whichBelongsTo(0)}
|
||||
{var menuLinksAvaiable = sizeof(OPENVK_ROOT_CONF['openvk']['preferences']['menu']['links']) > 0 && $thisUser->getLeftMenuItemStatus('links')}
|
||||
<div n:if="$canAccessAdminPanel || $canAccessHelpdesk || $menuLinksAvaiable" class="menu_divider"></div>
|
||||
<a href="/admin" class="link" n:if="$canAccessAdminPanel">Админ-панель</a>
|
||||
<a href="/support/tickets" class="link" n:if="$canAccessHelpdesk">Helpdesk
|
||||
{if $helpdeskTicketNotAnsweredCount > 0}
|
||||
(<b>{$helpdeskTicketNotAnsweredCount}</b>)
|
||||
{/if}
|
||||
</a>
|
||||
<a href="/admin/reports" class="link">Reports</a>
|
||||
{/if}
|
||||
<a
|
||||
n:if="$thisUser->getLeftMenuItemStatus('links')"
|
||||
n:foreach="OPENVK_ROOT_CONF['openvk']['preferences']['menu']['links'] as $menuItem"
|
||||
href="{$menuItem['url']}"
|
||||
target="_blank"
|
||||
class="link">{strpos($menuItem["name"], "@") === 0 ? tr(substr($menuItem["name"], 1)) : $menuItem["name"]}</a>
|
||||
<div id="_groupListPinnedGroups">
|
||||
<div n:if="$thisUser->getPinnedClubCount() > 0" class="menu_divider"></div>
|
||||
<a
|
||||
n:foreach="$thisUser->getPinnedClubs() as $club"
|
||||
href="{$club->getURL()}"
|
||||
class="link group_link">{$club->getName()}</a>
|
||||
|
||||
</div>
|
||||
<a
|
||||
n:if="OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['enable']"
|
||||
href="{php echo OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['link']}" >
|
||||
<img
|
||||
src="{php echo OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['src']}"
|
||||
alt="{php echo OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['caption']}"
|
||||
class="psa-poster"
|
||||
style="max-width: 100%; margin-top: 50px;" />
|
||||
</a>
|
||||
<a n:if="$thisUser->getLeftMenuItemStatus('links')" n:foreach="OPENVK_ROOT_CONF['openvk']['preferences']['menu']['links'] as $menuItem" href="{$menuItem['url']}" target="_blank" class="link">{strpos($menuItem["name"], "@") === 0 ? tr(substr($menuItem["name"], 1)) : $menuItem["name"]}</a>
|
||||
|
||||
<div id="_groupListPinnedGroups">
|
||||
<div n:if="$thisUser->getPinnedClubCount() > 0" class="menu_divider"></div>
|
||||
<a n:foreach="$thisUser->getPinnedClubs() as $club" href="{$club->getURL()}" class="link group_link">{$club->getName()}</a>
|
||||
</div>
|
||||
<a n:if="OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['enable'] && $thisUser->getLeftMenuItemStatus('poster')" href="{php echo OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['link']}" >
|
||||
<img src="{php echo OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['src']}" alt="{php echo OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['caption']}" class="psa-poster" style="max-width: 100%; margin-top: 50px;" />
|
||||
</a>
|
||||
{else}
|
||||
<a href="/support" class="link">{_menu_support}</a>
|
||||
<a href="/logout?hash={urlencode($csrfToken)}" class="link">{_menu_logout}</a>
|
||||
{/if}
|
||||
{else}
|
||||
<a href="/support" class="link">{_"menu_support"}</a>
|
||||
<a href="/logout?hash={urlencode($csrfToken)}" class="link">{_"menu_logout"}</a>
|
||||
{/if}
|
||||
{else}
|
||||
<form id="fastLogin" action="/login" method="POST" enctype="multipart/form-data">
|
||||
<label for="login"><span>{_"email"}:</span></label>
|
||||
<input id="login" type="text" name="login" required />
|
||||
<label for="password"><span>{_"password"}:</span></label>
|
||||
<input id="password" type="password" name="password" required />
|
||||
<input type="hidden" name="jReturnTo" value="{$_SERVER['REQUEST_URI']}" />
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input type="submit" value="{_'log_in'}" class="button" style="display: inline-block;" />
|
||||
<a n:if="OPENVK_ROOT_CONF['openvk']['preferences']['registration']['enable']" href="/reg" class="button" style="display: inline-block;" >{_registration}</a><br><br>
|
||||
<a href="/restore.pl">{_"forgot_password"}</a>
|
||||
</form>
|
||||
{/ifset}
|
||||
<form id="fastLogin" action="/login" method="POST" enctype="multipart/form-data">
|
||||
<label for="login"><span>{_email}:</span></label>
|
||||
<input id="login" type="text" name="login" required />
|
||||
<label for="password"><span>{_password}:</span></label>
|
||||
<input id="password" type="password" name="password" required />
|
||||
<input type="hidden" name="jReturnTo" value="{$_SERVER['REQUEST_URI']}" />
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input type="submit" value="{_log_in}" class="button" style="display: inline-block;" />
|
||||
<a n:if="OPENVK_ROOT_CONF['openvk']['preferences']['registration']['enable']" href="/reg" class="button" style="display: inline-block;">{_registration}</a><br><br>
|
||||
<a href="/restore">{_forgot_password}</a>
|
||||
</form>
|
||||
{/ifset}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="page_body">
|
||||
<div id="wrapH">
|
||||
<div id="wrapHI">
|
||||
<div n:ifcontent class="page_yellowheader">
|
||||
{include header}
|
||||
{include header}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{ifset wrap}
|
||||
{ifset $flashMessage}
|
||||
<div class="msg msg_{$flashMessage->type}">
|
||||
|
||||
{ifset wrap}
|
||||
<div class="msg msg_{$flashMessage->type}" n:ifset="$flashMessage">
|
||||
<b>{$flashMessage->title}</b><br/>
|
||||
{$flashMessage->msg|noescape}
|
||||
</div>
|
||||
|
||||
{include wrap}
|
||||
{else}
|
||||
<div class="wrap2">
|
||||
<div class="wrap1">
|
||||
<div id="auth" class="page-wrap">
|
||||
<div class="page_content">
|
||||
<div class="msg msg_{$flashMessage->type}" n:ifset="$flashMessage">
|
||||
<b>{$flashMessage->title}</b><br/>
|
||||
{$flashMessage->msg|noescape}
|
||||
</div>
|
||||
{/ifset}
|
||||
|
||||
{include wrap}
|
||||
{else}
|
||||
<div class="wrap2">
|
||||
<div class="wrap1">
|
||||
<div id="auth" class="page-wrap">
|
||||
<div class="page_content">
|
||||
{ifset $flashMessage}
|
||||
<div class="msg msg_{$flashMessage->type}">
|
||||
<b>{$flashMessage->title}</b><br/>
|
||||
{$flashMessage->msg|noescape}
|
||||
</div>
|
||||
{/ifset}
|
||||
|
||||
{include content}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include content}
|
||||
</div>
|
||||
{/ifset}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/ifset}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="page_footer">
|
||||
{var dbVersion = \Chandler\Database\DatabaseConnection::i()->getConnection()->getPdo()->getAttribute(\PDO::ATTR_SERVER_VERSION)}
|
||||
|
||||
|
||||
<div class="navigation_footer">
|
||||
<a href="/about" class="link">{_footer_about_instance}</a>
|
||||
<a href="/blog" class="link">{_footer_blog}</a>
|
||||
<a href="/support" class="link">{_footer_help}</a>
|
||||
<a href="/dev" target="_blank" class="link">{_footer_developers}</a>
|
||||
|
@ -279,7 +257,7 @@
|
|||
{php echo OPENVK_ROOT_CONF["openvk"]["appearance"]["motd"]}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
{script "js/node_modules/msgpack-lite/dist/msgpack.min.js"}
|
||||
{script "js/node_modules/soundjs/lib/soundjs.min.js"}
|
||||
{script "js/node_modules/ky/umd.js"}
|
||||
|
@ -288,20 +266,20 @@
|
|||
{script "js/scroll.js"}
|
||||
{script "js/al_wall.js"}
|
||||
{script "js/al_api.js"}
|
||||
|
||||
|
||||
{ifset $thisUser}
|
||||
{script "js/al_notifs.js"}
|
||||
{/ifset}
|
||||
|
||||
<script src="https://unpkg.com/fartscroll@1.0.0/fartscroll.js"></script>
|
||||
<script n:if="OPENVK_ROOT_CONF['openvk']['preferences']['bellsAndWhistles']['fartscroll']">
|
||||
fartscroll(400);
|
||||
</script>
|
||||
|
||||
<script n:if="OPENVK_ROOT_CONF['openvk']['telemetry']['plausible']['enable']"
|
||||
async defer data-domain="{php echo OPENVK_ROOT_CONF['openvk']['telemetry']['plausible']['domain']}"
|
||||
src="{php echo OPENVK_ROOT_CONF['openvk']['telemetry']['plausible']['server']}js/plausible.js"></script>
|
||||
|
||||
|
||||
{if OPENVK_ROOT_CONF['openvk']['preferences']['bellsAndWhistles']['fartscroll']}
|
||||
<script src="https://unpkg.com/fartscroll@1.0.0/fartscroll.js"></script>
|
||||
<script>
|
||||
fartscroll(400);
|
||||
</script>
|
||||
{/if}
|
||||
|
||||
<script n:if="OPENVK_ROOT_CONF['openvk']['telemetry']['plausible']['enable']" async defer data-domain="{php echo OPENVK_ROOT_CONF['openvk']['telemetry']['plausible']['domain']}" src="{php echo OPENVK_ROOT_CONF['openvk']['telemetry']['plausible']['server']}js/plausible.js"></script>
|
||||
|
||||
{ifset bodyScripts}
|
||||
{include bodyScripts}
|
||||
{/ifset}
|
||||
|
@ -310,6 +288,6 @@
|
|||
|
||||
{if isset($parentModule) && substr($parentModule, 0, 21) !== 'libchandler:absolute.'}
|
||||
<!-- INCLUDING TEMPLATE FROM PARENTMODULE: {$parentModule} -->
|
||||
|
||||
|
||||
{include content}
|
||||
{/if}
|
||||
|
|
59
Web/Presenters/templates/About/AboutInstance.xml
Normal file
59
Web/Presenters/templates/About/AboutInstance.xml
Normal file
|
@ -0,0 +1,59 @@
|
|||
{extends "../@layout.xml"}
|
||||
{block title}{_about_this_instance}{/block}
|
||||
|
||||
{block header}
|
||||
{_about_this_instance}
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
<table width="100%" cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr valign="top">
|
||||
<td width="250" {if sizeof($admins) > 0}style="padding-right: 10px;"{/if}>
|
||||
<h4>{_statistics}</h4>
|
||||
<div style="margin-top: 5px;">
|
||||
{_on_this_instance_are}
|
||||
<ul>
|
||||
<li><span>{tr("about_users", $usersStats->all)|noescape}</span></li>
|
||||
<li><span>{tr("about_online_users", $usersStats->online)|noescape}</span></li>
|
||||
<li><span>{tr("about_active_users", $usersStats->active)|noescape}</span></li>
|
||||
<li><span>{tr("about_groups", $clubsCount)|noescape}</span></li>
|
||||
<li><span>{tr("about_wall_posts", $postsCount)|noescape}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td n:if="sizeof($admins) > 0">
|
||||
<h4>{_administrators}</h4>
|
||||
<div style="margin-left: 5px; margin-top: 5px;">
|
||||
<div n:foreach="$admins as $admin" class="avatar-list-item">
|
||||
<div class="avatar">
|
||||
<a href="{$admin->getURL()}">
|
||||
<img class="ava" src="{$admin->getAvatarUrl()}" />
|
||||
</a>
|
||||
</div>
|
||||
{* Это наверное костыль, ну да ладно *}
|
||||
<div n:class="info, mb_strlen($admin->getCanonicalName()) < 22 ? info-centered">
|
||||
<a href="{$admin->getURL()}" class="title">{$admin->getCanonicalName()}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4>{_most_popular_groups}</h4>
|
||||
<ol>
|
||||
<li n:foreach="$popularClubs as $entry" style="margin-top: 5px;">
|
||||
<a href="{$entry->club->getURL()}">{$entry->club->getName()}</a>
|
||||
<div>
|
||||
{tr("participants", $entry->subscriptions)}
|
||||
</div>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h4>{_rules}</h4>
|
||||
<div style="margin-top: 16px;">
|
||||
{presenter "openvk!Support->knowledgeBaseArticle", "rules"}
|
||||
</div>
|
||||
{/block}
|
|
@ -8,7 +8,7 @@
|
|||
{block content}
|
||||
<div class="navigation">
|
||||
{foreach $languages as $language}
|
||||
<a href="language?lg={$language['code']}&hash={urlencode($csrfToken)}" class="link"><img src="/assets/packages/static/openvk/img/flags/{$language['flag']}.gif"> {$language['native_name']}</a>
|
||||
<a href="language?lg={$language['code']}&hash={urlencode($csrfToken)}" class="link" rel="nofollow"><img src="/assets/packages/static/openvk/img/flags/{$language['flag']}.gif"> {$language['native_name']}</a>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/block}
|
||||
|
|
|
@ -28,8 +28,7 @@
|
|||
text-align: center !important;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
td, th {
|
||||
border: 1px solid #666;
|
||||
vertical-align: baseline;
|
||||
padding: 4px 5px;
|
||||
|
@ -62,7 +61,7 @@
|
|||
.h {
|
||||
background-color: #13599f;
|
||||
font-weight: bold;
|
||||
color: #fff
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.v {
|
||||
|
@ -90,7 +89,7 @@
|
|||
height: 1px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div class="center">
|
||||
<table>
|
||||
<tbody>
|
||||
|
@ -102,7 +101,7 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
|
@ -127,22 +126,22 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="v">
|
||||
<td>
|
||||
This program makes use of the Chandler open-source web application server:<br/>
|
||||
libchandler {=CHANDLER_VER} by rem-pai
|
||||
libchandler {=CHANDLER_VER} by Celestora
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h1>Configuration</h1>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -313,13 +312,13 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h1>Extensions</h1>
|
||||
|
||||
|
||||
<h2>Core</h2>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
|
@ -332,13 +331,13 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
{* TODO: add hook to let extensions to register themselves here *}
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h1>Themepacks</h1>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -362,7 +361,7 @@
|
|||
Default OpenVK look and feel.
|
||||
</td>
|
||||
<td class="v">
|
||||
Vladimir Barinov, Konstantin Kichulkin and Daniil Myslivets
|
||||
Vladimir Barinov, Konstantin Kichulkin and Daniel Myslivets
|
||||
</td>
|
||||
</tr>
|
||||
<tr n:foreach="$themes as $theme">
|
||||
|
@ -384,11 +383,11 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h1>OpenVK Credits</h1>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -396,14 +395,14 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="e">
|
||||
Vladimir Barinov (veselcraft), Alexandra Katunina (rem-pai), Konstantin Kichulkin (kosfurler),
|
||||
Nikita Volkov (sup_ban), Daniel Myslivets (myslivets), Alexander Kotov (l-lacker),
|
||||
Vladimir Barinov (veselcraft), Celestora, Konstantin Kichulkin (kosfurler),
|
||||
Nikita Volkov (sup_ban), Daniel Myslivets, Alexander Kotov (l-lacker),
|
||||
Alexey Assemblerov (BiosNod), Ilya Prokopenko (dsrev) and Maxim Leshchenko (maksales / maksalees)
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -417,7 +416,7 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -443,7 +442,7 @@
|
|||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -459,7 +458,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="e">Initial hosting</td>
|
||||
<td class="v">Ilya Prokopenko (dsrev) and Alexandra Katunina (rem-pai)</td>
|
||||
<td class="v">Ilya Prokopenko (dsrev) and Celestora</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="e">Initial bug-tracker hosting</td>
|
||||
|
@ -467,27 +466,23 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="e">Images</td>
|
||||
<td class="v">Vladimir Barinov (veselcraft), Konstantin Kichulkin (kosfurler) and Daniil Myslivets (myslivets)</td>
|
||||
<td class="v">Vladimir Barinov (veselcraft), Konstantin Kichulkin (kosfurler) and Daniel Myslivets</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="e">Illustrations</td>
|
||||
<td class="v">Ash Defenders</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="e">Soundtrack</td>
|
||||
<td class="v">Ash Defenders</td>
|
||||
<td class="v">Ash Defenders, Polina Katunina (RousPhaul)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="e">Best barmaid</td>
|
||||
<td class="v">Jill</td>
|
||||
<td class="v">Jill</td> {* I can agree ~~ dsrev *}
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="e">Helpdesk implementation</td>
|
||||
<td class="e">Initial Helpdesk implementation</td>
|
||||
<td class="v">Nikita Volkov (sup_ban)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="h">
|
||||
|
@ -495,17 +490,19 @@
|
|||
</tr>
|
||||
<tr class="e">
|
||||
<td>
|
||||
Vladimir Lapskiy (0x7d5), Alexander Minkin (WerySkok), Polina Katunina (RousPhaul),
|
||||
Egor Shevchenko, Dmitriy Daemon and Ilya Prokopenko (dsrev).
|
||||
kovaltim, Vladimir Lapskiy (0x7d5), Alexander Minkin (WerySkok), Polina Katunina (RousPhaul), veth,
|
||||
Egor Shevchenko, Vadim Korovin (yuni), Ash Defenders,
|
||||
Pavel Silaev, Dmitriy Daemon, Ilya Prokopenko (dsrev),
|
||||
cmed404 and unknown tester, who disappeared shortly after trying to upload post with cat.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
|
||||
<h1>OpenVK License</h1>
|
||||
|
||||
|
||||
<table>
|
||||
<tbody>
|
||||
<tr class="v">
|
||||
|
|
|
@ -63,6 +63,12 @@
|
|||
</label>
|
||||
<input class="text medium-field" type="email" id="email" name="email" value="{$user->getEmail()}" />
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="shortcode">
|
||||
Адрес страницы
|
||||
</label>
|
||||
<input class="text medium-field" type="text" id="shortcode" name="shortcode" value="{$user->getShortCode()}" />
|
||||
</div>
|
||||
<hr>
|
||||
<div class="field-group">
|
||||
<label for="city">
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
{block content}
|
||||
<div class="container_gray">
|
||||
<form method="POST" enctype="multipart/form-data" action="/club{$club->getId()}/setAdmin.jsp">
|
||||
<form method="POST" enctype="multipart/form-data" action="/club{$club->getId()}/setAdmin">
|
||||
<table cellspacing="7" cellpadding="0" width="40%" border="0" align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
|
|
@ -74,7 +74,8 @@
|
|||
<span class="nobold">{_wall}: </span>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" name="wall" value="1" {if $club->canPost()}checked{/if}/> {_group_allow_post_for_everyone}
|
||||
<input type="checkbox" name="wall" value="1" n:attr="checked => $club->canPost()" /> {_group_allow_post_for_everyone}<br>
|
||||
<input type="checkbox" name="hide_from_global_feed" value="1" n:attr="checked => $club->isHideFromGlobalFeedEnabled()" /> {_group_hide_from_global_feed}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
{var user = $x instanceof $Manager ? $x->getUser() : $x}
|
||||
{var manager = $x instanceof $Manager ? $x : $club->getManager($user, !$club->canBeModifiedBy($thisUser))}
|
||||
{if $club->canBeModifiedBy($thisUser ?? NULL)}
|
||||
<a class="profile_link" href="/club{$club->getId()}/setAdmin.jsp?user={$user->getId()}&hash={rawurlencode($csrfToken)}" n:if="$club->getOwner()->getId() !== $user->getId()">
|
||||
<a class="profile_link" href="/club{$club->getId()}/setAdmin?user={$user->getId()}&hash={rawurlencode($csrfToken)}" n:if="$club->getOwner()->getId() !== $user->getId()">
|
||||
{if $manager}
|
||||
{_devote}
|
||||
{else}
|
||||
|
@ -130,12 +130,12 @@
|
|||
{_set_comment}
|
||||
</a>
|
||||
{if $manager}
|
||||
<a class="profile_link" href="/club{$club->getId()}/setAdmin.jsp?user={$user->getId()}&hidden={(int) !$manager->isHidden()}&hash={rawurlencode($csrfToken)}">
|
||||
<a class="profile_link" href="/club{$club->getId()}/setAdmin?user={$user->getId()}&hidden={(int) !$manager->isHidden()}&hash={rawurlencode($csrfToken)}">
|
||||
{if $manager->isHidden()}{_hidden_yes}{else}{_hidden_no}{/if}
|
||||
</a>
|
||||
{/if}
|
||||
{if $club->getOwner()->getId() == $user->getId()}
|
||||
<a class="profile_link" href="/club{$club->getId()}/setAdmin.jsp?user={$user->getId()}&hidden={(int) !$club->isOwnerHidden()}&hash={rawurlencode($csrfToken)}">
|
||||
<a class="profile_link" href="/club{$club->getId()}/setAdmin?user={$user->getId()}&hidden={(int) !$club->isOwnerHidden()}&hash={rawurlencode($csrfToken)}">
|
||||
{if $club->isOwnerHidden()}{_hidden_yes}{else}{_hidden_no}{/if}
|
||||
</a>
|
||||
{/if}
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
</div>
|
||||
<div class="right_small_block">
|
||||
{var avatarPhoto = $club->getAvatarPhoto()}
|
||||
{var avatarLink = ($avatarPhoto->isAnonymous() ? "/photo" . ("s/" . base_convert((string) $avatarPhoto->getId(), 10, 32)) : $club->getAvatarLink())}
|
||||
{var avatarLink = ((is_null($avatarPhoto) ? FALSE : $avatarPhoto->isAnonymous()) ? "/photo" . ("s/" . base_convert((string) $avatarPhoto->getId(), 10, 32)) : $club->getAvatarLink())}
|
||||
<a href="{$avatarLink|nocheck}">
|
||||
<img src="{$club->getAvatarUrl()}" style="width: 100%; image-rendering: -webkit-optimize-contrast;" />
|
||||
</a>
|
||||
|
@ -189,7 +189,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div n:if="$albumsCount > 0">
|
||||
<div n:if="$albumsCount > 0 || ($thisUser && $club->canBeModifiedBy($thisUser))">
|
||||
<div class="content_title_expanded" onclick="hidePanel(this, {$albumsCount});">
|
||||
{_"albums"}
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<a href="/im">{_my_messages}</a> »
|
||||
<a href="{$correspondent->getURL()}">{$correspondent->getCanonicalName()}</a>
|
||||
<div n:if="($online = $correspondent->getOnline()->timestamp()) < time() + 2678400" style="float: right;">
|
||||
<div n:if="($online = $correspondent->getOnline()->timestamp()) + 2505600 > time()" style="float: right;">
|
||||
{var diff = date_diff(date_create(), date_create('@' . $online))}
|
||||
{if 5 >= $diff->i}
|
||||
<span><b>{_online}</b></span>
|
||||
|
@ -43,7 +43,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="messenger-app--input">
|
||||
{if $correspondent->getId() === $thisUser->getId() || ($correspondent->getSubscriptionStatus($thisUser) === 3)}
|
||||
{if $correspondent->getId() === $thisUser->getId() || $correspondent->getPrivacyPermission('messages.write', $thisUser)}
|
||||
<img class="ava" src="{$thisUser->getAvatarUrl()}" alt="{$thisUser->getCanonicalName()}" />
|
||||
<div class="messenger-app--input---messagebox">
|
||||
<textarea
|
||||
|
@ -54,7 +54,7 @@
|
|||
</div>
|
||||
<img class="ava" src="{$correspondent->getAvatarUrl()}" alt="{$correspondent->getCanonicalName()}" />
|
||||
{else}
|
||||
<div class="blocked" data-localized-text="Вы не можете писать сообщения {$correspondent->getCanonicalName()}, так как его нет в вашем списке друзей."></div>
|
||||
<div class="blocked" data-localized-text="Вы не можете писать сообщения {$correspondent->getCanonicalName()} из-за его настроек приватности."></div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</div>
|
||||
|
||||
<div class="container_gray">
|
||||
<form action="/im/search.pl" method="POST" style="margin: 0;">
|
||||
<form action="/im/search" method="POST" style="margin: 0;">
|
||||
<input type="text" name="pattern" placeholder="Поиск сообщений" required />
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
<div class="album-photo">
|
||||
<a
|
||||
n:if="!is_null($thisUser) && $album->canBeModifiedBy($thisUser)"
|
||||
href="/album{$album->getPrettyId()}/remove_photo.pl/{$photo->getId()}" class="album-photo--delete">
|
||||
href="/album{$album->getPrettyId()}/remove_photo/{$photo->getId()}" class="album-photo--delete">
|
||||
×
|
||||
</a>
|
||||
|
||||
|
|
|
@ -39,6 +39,6 @@
|
|||
</form>
|
||||
<hr/>
|
||||
<center>
|
||||
{_"you_can_also"} <a href="/album{$album->getOwner()->getId()}_{$album->getId()}/delete.pl?hash={rawurlencode($csrfToken)}">{_"delete_album"}</a>.
|
||||
{_"you_can_also"} <a href="/album{$album->getOwner() instanceof openvk\Web\Models\Entities\Club ? '-' : ''}{$album->getOwner()->getId()}_{$album->getId()}/delete?hash={rawurlencode($csrfToken)}">{_"delete_album"}</a>.
|
||||
</center>
|
||||
{/block}
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
{else}
|
||||
{tr("search_for_groups")}
|
||||
{/if}
|
||||
{if $_GET['query']}
|
||||
- {$_GET['query']}
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block header}
|
||||
|
@ -21,12 +24,12 @@
|
|||
|
||||
{block tabs}
|
||||
<div {if $type === "users"}id="activetabs"{/if} class="tab">
|
||||
<a {if $type === "users"}id="act_tab_a"{/if} href="/search?type=users">
|
||||
<a {if $type === "users"}id="act_tab_a"{/if} href="/search?type=users{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}">
|
||||
{_users}
|
||||
</a>
|
||||
</div>
|
||||
<div {if $type === "groups"}id="activetabs"{/if} class="tab">
|
||||
<a {if $type === "groups"}id="act_tab_a"{/if} href="/search?type=groups">
|
||||
<a {if $type === "groups"}id="act_tab_a"{/if} href="/search?type=groups{if $_GET['query']}&query={urlencode($_GET['query'])}{/if}">
|
||||
{_groups}
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -6,138 +6,129 @@
|
|||
{/block}
|
||||
|
||||
{block content}
|
||||
<div class="post-author">
|
||||
<a href="#" style="font-size:13px;">
|
||||
<b>
|
||||
{$ticket->getName()}
|
||||
</b>
|
||||
</a>
|
||||
<br></b>{_author}: <a href="/id{$ticket->getUser()->getId()}">{$ticket->getUser()->getFullName()}</a> | {$ticket->getUser()->getRegistrationIP()} | {_status}: {$ticket->getStatus()}.
|
||||
</div>
|
||||
<div class="text" style="padding-top: 10px;border-bottom: #ECECEC solid 1px;">
|
||||
{$ticket->getText()|noescape}
|
||||
<br></br>
|
||||
</div>
|
||||
<div style="padding-top: 5px;">
|
||||
{$ticket->getTime()} |
|
||||
<a href="/support/delete/{$id}?hash={$csrfToken}">{_delete}</a>
|
||||
</div><br/>
|
||||
<div>
|
||||
<form action="/al_comments.pl/create/support/reply/{$id}" method="post" style="margin:0;">
|
||||
<textarea name="text" id="answer_text" style="width: 100%;resize: vertical;"></textarea>
|
||||
<div>
|
||||
<!-- padding to fix <br/> bug -->
|
||||
</div>
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<br />
|
||||
<div style="float: left;">
|
||||
<input type="submit" value="{_write}" class="button">
|
||||
<select name="status" style="width: unset;">
|
||||
<option value="1">{_support_status_1}</option>
|
||||
<option value="2">{_support_status_2}</option>
|
||||
<option value="0">{_support_status_0}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div n:if="!is_null($fastAnswers)" style="float: right;">
|
||||
<a class="button" href="javascript:showSupportFastAnswerDialog(fastAnswers)">{_fast_answers}</a>
|
||||
</div>
|
||||
<br />
|
||||
</form>
|
||||
</div>
|
||||
<br/>
|
||||
<p n:if="!$comments">{_no_comments}</p>
|
||||
{var $printedSupportGreeting = false}
|
||||
<table n:foreach="$comments as $comment" border="0" style="font-size: 11px;" class="post">
|
||||
<tbody>
|
||||
<tr>
|
||||
{if $comment->getUType() === 0}
|
||||
<td width="54" valign="top">
|
||||
<img src="{$comment->getUser()->getAvatarUrl()}" width="50">
|
||||
</td>
|
||||
{else}
|
||||
<td width="54" valign="top">
|
||||
<img
|
||||
src="{$comment->getAvatar()}"
|
||||
style="max-width: 50px; filter: hue-rotate({$comment->getColorRotation()}deg);" />
|
||||
</td>
|
||||
{/if}
|
||||
<td width="645" valign="top">
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-author">
|
||||
<a href="{$comment->getUser()->getURL()}"><b>
|
||||
{$comment->getUser()->getFullName()}
|
||||
</b></a> {($comment->getUser()->isFemale() ? tr("post_writes_f") : tr("post_writes_m"))}<br>
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
<div class="post-author">
|
||||
<a href="#" style="font-size: 13px;"><b>{$ticket->getName()}</b></a><br />
|
||||
{_author}: <a href="/id{$ticket->getUser()->getId()}">{$ticket->getUser()->getFullName()}</a> | {$ticket->getUser()->getRegistrationIP()} | {_status}: {$ticket->getStatus()}.
|
||||
</div>
|
||||
<div class="text" style="padding-top: 10px; border-bottom: #ECECEC solid 1px;">
|
||||
{$ticket->getText()|noescape}
|
||||
<br /><br />
|
||||
</div>
|
||||
<div style="padding-top: 5px;">
|
||||
{$ticket->getTime()} |
|
||||
<a href="/support/delete/{$id}?hash={$csrfToken}">{_delete}</a>
|
||||
</div>
|
||||
<br />
|
||||
<div>
|
||||
<form action="/al_comments/create/support/reply/{$id}" method="post" style="margin: 0;">
|
||||
<textarea name="text" id="answer_text" style="width: 100%; resize: vertical;"></textarea>
|
||||
<br />
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<br />
|
||||
<div style="float: left;">
|
||||
<input type="submit" value="{_write}" class="button" />
|
||||
<select name="status" style="width: unset;">
|
||||
<option value="1">{_support_status_1}</option>
|
||||
<option value="2">{_support_status_2}</option>
|
||||
<option value="0">{_support_status_0}</option>
|
||||
</select>
|
||||
</div>
|
||||
{elseif ($comment->getUType() === 1)}
|
||||
<div class="post-author">
|
||||
<a href="javascript:false">
|
||||
<b>
|
||||
{$comment->getAuthorName()}
|
||||
</b>
|
||||
</a>
|
||||
{if $thisUser->getChandlerUser()->can("write")->model('openvk\Web\Models\Entities\TicketReply')->whichBelongsTo(0)}
|
||||
<a href="{$comment->getUser()->getURL()}">
|
||||
<span class="nobold">
|
||||
{var lastName = $comment->getUser()->getLastName()}
|
||||
{if empty(trim($lastName))}
|
||||
({$comment->getUser()->getFirstName()})
|
||||
{else}
|
||||
({$comment->getUser()->getFirstName()} {iconv_substr($lastName, 0, 1)}.)
|
||||
{/if}
|
||||
</span>
|
||||
</a>
|
||||
{/if}
|
||||
{_post_writes_m}<br>
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
<div n:if="!is_null($fastAnswers)" style="float: right;">
|
||||
<a class="button" href="javascript:showSupportFastAnswerDialog(fastAnswers)">{_fast_answers}</a>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="post-content" id="{$comment->getId()}">
|
||||
<div class="text" id="text{$comment->getId()}">
|
||||
{if $comment->getUType() === 1 && !$printedSupportGreeting}
|
||||
{var $printedSupportGreeting = true}
|
||||
{tr("support_greeting_hi", $ticket->getUser()->getFullName())}
|
||||
<br/>
|
||||
<br/>
|
||||
<br />
|
||||
</form>
|
||||
</div>
|
||||
<br />
|
||||
<p n:if="!$comments">{_no_comments}</p>
|
||||
{var $printedSupportGreeting = false}
|
||||
<table n:foreach="$comments as $comment" border="0" style="font-size: 11px;" class="post">
|
||||
<tbody>
|
||||
<tr>
|
||||
{if $comment->getUType() === 0}
|
||||
<td width="54" valign="top">
|
||||
<img src="{$comment->getUser()->getAvatarUrl()}" width="50" />
|
||||
</td>
|
||||
{else}
|
||||
<td width="54" valign="top">
|
||||
<img
|
||||
src="{$comment->getAvatar()}"
|
||||
style="max-width: 50px; filter: hue-rotate({$comment->getColorRotation()}deg);" />
|
||||
</td>
|
||||
{/if}
|
||||
<td width="645" valign="top">
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-author">
|
||||
<a href="{$comment->getUser()->getURL()}"><b>
|
||||
{$comment->getUser()->getFullName()}
|
||||
</b></a> {($comment->getUser()->isFemale() ? tr("post_writes_f") : tr("post_writes_m"))}<br />
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
</div>
|
||||
{elseif ($comment->getUType() === 1)}
|
||||
<div class="post-author">
|
||||
<a><b>{$comment->getAuthorName()}</b></a>
|
||||
{if $thisUser->getChandlerUser()->can("write")->model('openvk\Web\Models\Entities\TicketReply')->whichBelongsTo(0)}
|
||||
<a href="{$comment->getUser()->getURL()}">
|
||||
<span class="nobold">
|
||||
{var lastName = $comment->getUser()->getLastName()}
|
||||
{if empty(trim($lastName))}
|
||||
({$comment->getUser()->getFirstName()})
|
||||
{else}
|
||||
({$comment->getUser()->getFirstName()} {iconv_substr($lastName, 0, 1)}.)
|
||||
{/if}
|
||||
</span>
|
||||
</a>
|
||||
{/if}
|
||||
{_post_writes_m}<br />
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="post-content" id="{$comment->getId()}">
|
||||
<div class="text" id="text{$comment->getId()}">
|
||||
{if $comment->getUType() === 1 && !$printedSupportGreeting}
|
||||
{var $printedSupportGreeting = true}
|
||||
{tr("support_greeting_hi", $ticket->getUser()->getFullName())}
|
||||
<br />
|
||||
<br />
|
||||
|
||||
{$comment->getText()|noescape}
|
||||
<br/>
|
||||
<br/>
|
||||
{$comment->getText()|noescape}
|
||||
<br />
|
||||
<br />
|
||||
|
||||
{tr("support_greeting_regards", OPENVK_ROOT_CONF["openvk"]["appearance"]["name"])|noescape}
|
||||
{else}
|
||||
{$comment->getText()|noescape}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-menu">
|
||||
<a href="/support/comment/{$comment->getId()}/delete">{_delete}</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $comment->getUType() === 1 && !is_null($comment->isLikedByUser())}
|
||||
<div class="post-menu">
|
||||
<strong>
|
||||
{if $comment->isLikedByUser()}
|
||||
{_support_good_answer_agent}
|
||||
{else}
|
||||
{_support_bad_answer_agent}
|
||||
{tr("support_greeting_regards", OPENVK_ROOT_CONF["openvk"]["appearance"]["name"])|noescape}
|
||||
{else}
|
||||
{$comment->getText()|noescape}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-menu">
|
||||
<a href="/support/comment/{$comment->getId()}/delete">{_delete}</a>
|
||||
</div>
|
||||
{/if}
|
||||
</strong>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{if $comment->getUType() === 1 && !is_null($comment->isLikedByUser())}
|
||||
<div class="post-menu">
|
||||
<strong>
|
||||
{if $comment->isLikedByUser()}
|
||||
{_support_good_answer_agent}
|
||||
{else}
|
||||
{_support_bad_answer_agent}
|
||||
{/if}
|
||||
</strong>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
const fastAnswers = [
|
||||
{foreach $fastAnswers as $answer}
|
||||
{$answer},
|
||||
{/foreach}
|
||||
];
|
||||
</script>
|
||||
<script>
|
||||
const fastAnswers = [
|
||||
{foreach $fastAnswers as $answer}
|
||||
{$answer},
|
||||
{/foreach}
|
||||
];
|
||||
</script>
|
||||
{/block}
|
||||
|
|
|
@ -6,63 +6,82 @@
|
|||
{/block}
|
||||
|
||||
{block content}
|
||||
{var isMain = $mode === 'faq'}
|
||||
{var isNew = $mode === 'new'}
|
||||
{var isList = $mode === 'list'}
|
||||
|
||||
{var isMain = $mode === 'faq'}
|
||||
{var isNew = $mode === 'new'}
|
||||
{var isList = $mode === 'list'}
|
||||
|
||||
{if $thisUser}
|
||||
<div class="tabs">
|
||||
<div n:attr="id => ($isMain ? 'activetabs' : 'ki')" class="tab">
|
||||
<a n:attr="id => ($isMain ? 'act_tab_a' : 'ki')" href="/support">{_support_faq}</a>
|
||||
</div>
|
||||
<div n:attr="id => ($isList ? 'activetabs' : 'ki')" class="tab">
|
||||
<a n:attr="id => ($isList ? 'act_tab_a' : 'ki')" href="/support?act=list">{_support_list}</a>
|
||||
</div>
|
||||
<div n:attr="id => ($isNew ? 'activetabs' : 'ki')" class="tab">
|
||||
<a n:attr="id => ($isNew ? 'act_tab_a' : 'ki')" href="/support?act=new">{_support_new}</a>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
{if $isNew}
|
||||
<div class="new">
|
||||
<form action="/support" method="post" style="margin:0;">
|
||||
<center><input name="name" style="width: 80%;resize: vertical;" placeholder="{_support_new_title}"></center><br>
|
||||
<center><textarea name="text" style="width: 80%;resize: vertical;" placeholder="{_support_new_content}"></textarea></center><br>
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<center><input type="submit" value="{_write}" class="button" style="margin-left:70%;"></center><br>
|
||||
</form>
|
||||
</div>
|
||||
{/if}{/if}
|
||||
|
||||
{if $isMain}
|
||||
<h4>{_support_faq}</h4><br>
|
||||
<div class="faq">
|
||||
<div id="faqhead">{_support_faq_title}</div>
|
||||
<div id="faqcontent">{_support_faq_content}</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $isList}
|
||||
<table n:foreach="$tickets as $ticket" border="0" style="font-size:11px;width: 610px;" class="post">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td width="54" valign="top">
|
||||
<center><img src="/assets/packages/static/openvk/img/note_icon.png" alt="{_support_ticket}" style="margin-top: 17px;"></center>
|
||||
</td>
|
||||
<td width="345" valign="top">
|
||||
<div class="post-author">
|
||||
<a href="/support/view/{$ticket->getId()}">
|
||||
<b>{$ticket->getName()}</b>
|
||||
</a>
|
||||
{if $thisUser}
|
||||
<div class="tabs">
|
||||
<div n:attr="id => ($isMain ? 'activetabs' : 'ki')" class="tab">
|
||||
<a n:attr="id => ($isMain ? 'act_tab_a' : 'ki')" href="/support">{_support_faq}</a>
|
||||
</div>
|
||||
<div class="post-content" style="padding: 4px;font-size: 11px;">
|
||||
{_status}: {$ticket->getStatus()}
|
||||
<div n:if="$count > 0" n:attr="id => ($isList ? 'activetabs' : 'ki')" class="tab">
|
||||
<a n:attr="id => ($isList ? 'act_tab_a' : 'ki')" href="/support?act=list">{_support_list}</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{/if}
|
||||
<div n:attr="id => ($isNew ? 'activetabs' : 'ki')" class="tab">
|
||||
<a n:attr="id => ($isNew ? 'act_tab_a' : 'ki')" href="/support?act=new">{_support_new}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
{if $isNew}
|
||||
<div class="new">
|
||||
<form action="/support" method="post" style="margin:0;">
|
||||
<center>
|
||||
<input name="name" style="width: 80%; resize: vertical;" placeholder="{_support_new_title}" /><br /><br />
|
||||
<textarea name="text" style="width: 80%; resize: vertical;" placeholder="{_support_new_content}"></textarea><br /><br />
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<input type="submit" value="{_write}" class="button" style="margin-left: 70%;" /><br /><br />
|
||||
</center>
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{if $isMain}
|
||||
<h4>{_support_faq}</h4><br />
|
||||
<div class="faq">
|
||||
<div id="faqhead">{_support_faq_title}</div>
|
||||
<div id="faqcontent">{_support_faq_content}</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $isList}
|
||||
<table n:foreach="$tickets as $ticket" border="0" style="font-size: 11px; width: 610px;" class="post">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td width="54" valign="top">
|
||||
<center>
|
||||
<img src="/assets/packages/static/openvk/img/note_icon.png" alt="{_support_ticket}" style="margin-top: 17px;" />
|
||||
</center>
|
||||
</td>
|
||||
<td width="345" valign="top">
|
||||
<div class="post-author">
|
||||
<a href="/support/view/{$ticket->getId()}">
|
||||
<b>{$ticket->getName()}</b>
|
||||
</a>
|
||||
</div>
|
||||
<div class="post-content" style="padding: 4px; font-size: 11px;">
|
||||
{_status}: {$ticket->getStatus()}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{if $count < 1}
|
||||
{include "../components/nothing.xml"}
|
||||
{/if}
|
||||
|
||||
<div style="padding: 8px;">
|
||||
{include "../components/paginator.xml", conf => (object) [
|
||||
"page" => $page,
|
||||
"count" => $count,
|
||||
"amount" => sizeof($tickets),
|
||||
"perPage" => OPENVK_DEFAULT_PER_PAGE,
|
||||
"atBottom" => true,
|
||||
]}
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
|
|
@ -6,144 +6,132 @@
|
|||
{/block}
|
||||
|
||||
{block content}
|
||||
<script>
|
||||
function markAnswer(id, mark) {
|
||||
let url = "/support/comment/" + id + "/rate/" + mark + "?hash=" + {urlencode($csrfToken)};
|
||||
$.ajax(url, {
|
||||
error: errorHandler,
|
||||
success: success(id, mark)
|
||||
});
|
||||
}
|
||||
<script>
|
||||
function markAnswer(id, mark) {
|
||||
let url = "/support/comment/" + id + "/rate/" + mark + "?hash=" + {urlencode($csrfToken)};
|
||||
$.ajax(url, {
|
||||
error: errorHandler,
|
||||
success: success(id, mark)
|
||||
});
|
||||
}
|
||||
|
||||
function success(id, mark) {
|
||||
if(mark == 1)
|
||||
document.getElementById("markText-" + id).innerHTML = {_support_good_answer_user};
|
||||
else
|
||||
document.getElementById("markText-" + id).innerHTML = {_support_bad_answer_user};
|
||||
function success(id, mark) {
|
||||
if(mark == 1)
|
||||
document.getElementById("markText-" + id).innerHTML = {_support_good_answer_user};
|
||||
else
|
||||
document.getElementById("markText-" + id).innerHTML = {_support_bad_answer_user};
|
||||
|
||||
document.getElementById("markLinks-" + id).remove();
|
||||
}
|
||||
document.getElementById("markLinks-" + id).remove();
|
||||
}
|
||||
|
||||
function errorHandler(id, mark) {
|
||||
document.getElementById("markText-" + id).innerHTML = {_error};
|
||||
}
|
||||
</script>
|
||||
{if $ticket->isDeleted() == 0 }
|
||||
<div class="post-author">
|
||||
<a href="#" style="font-size:13px;">
|
||||
<b>
|
||||
{$ticket->getName()}
|
||||
</b>
|
||||
</a>
|
||||
<br></b>{_status}: {$ticket->getStatus()}
|
||||
</div>
|
||||
<div class="text" style="padding-top: 10px;border-bottom: #ECECEC solid 1px;">
|
||||
{$ticket->getText()|noescape}
|
||||
<br></br>
|
||||
</div>
|
||||
<div style="padding-top: 5px;">
|
||||
{$ticket->getTime()} |
|
||||
<a href="/support/delete/{$id}?hash={$csrfToken}">{_delete}</a>
|
||||
</div>
|
||||
{if $ticket->getType() !== 2}
|
||||
<br>
|
||||
<div>
|
||||
<form action="/al_comments.pl/create/support/{$id}" method="post" style="margin:0;">
|
||||
<textarea name="text" style="width: 100%;resize: vertical;"></textarea>
|
||||
<div>
|
||||
<!-- padding to fix <br/> bug -->
|
||||
</div>
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" />
|
||||
<br>
|
||||
<input type="submit" value="{_write}" class="button">
|
||||
</form>
|
||||
function errorHandler(id, mark) {
|
||||
document.getElementById("markText-" + id).innerHTML = {_error};
|
||||
}
|
||||
</script>
|
||||
|
||||
{if $ticket->isDeleted() == 0}
|
||||
<div class="post-author">
|
||||
<a href="#" style="font-size:13px;"><b>{$ticket->getName()}</b></a>
|
||||
<br />{_status}: {$ticket->getStatus()}
|
||||
</div>
|
||||
{/if}
|
||||
</br>
|
||||
<p n:if="!$comments">{_no_comments}</p>
|
||||
{var $printedSupportGreeting = false}
|
||||
<table n:foreach="$comments as $comment" border="0" style="font-size: 11px;" class="post">
|
||||
<tbody>
|
||||
<tr>
|
||||
{if $comment->getUType() === 0}
|
||||
<td width="54" valign="top">
|
||||
<img src="{$comment->getUser()->getAvatarUrl()}" width="50">
|
||||
</td>
|
||||
{else}
|
||||
<td width="54" valign="top">
|
||||
<img
|
||||
src="{$comment->getAvatar()}"
|
||||
style="max-width: 50px; filter: hue-rotate({$comment->getColorRotation()}deg);" />
|
||||
</td>
|
||||
{/if}
|
||||
<td width="645" valign="top">
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-author">
|
||||
<a href="{$comment->getUser()->getURL()}"><b>
|
||||
{$comment->getUser()->getFullName()}
|
||||
</b></a> {($comment->getUser()->isFemale() ? tr("post_writes_f") : tr("post_writes_m"))}<br>
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
<div class="text" style="padding-top: 10px; border-bottom: #ECECEC solid 1px;">
|
||||
{$ticket->getText()|noescape}
|
||||
<br /></br>
|
||||
</div>
|
||||
<div style="padding-top: 5px;">
|
||||
{$ticket->getTime()} |
|
||||
<a href="/support/delete/{$id}?hash={$csrfToken}">{_delete}</a>
|
||||
</div>
|
||||
{if $ticket->getType() !== 2}
|
||||
<br />
|
||||
<div>
|
||||
<form action="/al_comments/create/support/{$id}" method="post" style="margin:0;">
|
||||
<textarea name="text" style="width: 100%;resize: vertical;"></textarea><br />
|
||||
<input type="hidden" name="hash" value="{$csrfToken}" /><br />
|
||||
<input type="submit" value="{_write}" class="button" />
|
||||
</form>
|
||||
</div>
|
||||
{elseif ($comment->getUType() === 1)}
|
||||
<div class="post-author">
|
||||
<a href="javascript:false">
|
||||
<b>
|
||||
{$comment->getAuthorName()}
|
||||
</b>
|
||||
</a>
|
||||
{_post_writes_m}<br>
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="post-content" id="{$comment->getId()}">
|
||||
<div class="text" id="text{$comment->getId()}">
|
||||
{if $comment->getUType() === 1 && !$printedSupportGreeting}
|
||||
{var $printedSupportGreeting = true}
|
||||
{tr("support_greeting_hi", $ticket->getUser()->getFullName())}
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
{$comment->getText()|noescape}
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
{tr("support_greeting_regards", OPENVK_ROOT_CONF["openvk"]["appearance"]["name"])|noescape}
|
||||
{else}
|
||||
{$comment->getText()|noescape}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-menu">
|
||||
<a href="/support/comment/{$comment->getId()}/delete">{_delete}</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $comment->getUType() === 1}
|
||||
<div class="post-menu">
|
||||
{var isLikedByUser = $comment->isLikedByUser()}
|
||||
<strong id="markText-{$comment->getId()}">
|
||||
{if !is_null($isLikedByUser)}
|
||||
{if $comment->isLikedByUser()}
|
||||
{_support_good_answer_user}
|
||||
{else}
|
||||
{_support_bad_answer_user}
|
||||
{/if}
|
||||
<br />
|
||||
<p n:if="!$comments">{_no_comments}</p>
|
||||
{var $printedSupportGreeting = false}
|
||||
<table n:foreach="$comments as $comment" border="0" style="font-size: 11px;" class="post">
|
||||
<tbody>
|
||||
<tr>
|
||||
{if $comment->getUType() === 0}
|
||||
<td width="54" valign="top">
|
||||
<img src="{$comment->getUser()->getAvatarUrl()}" width="50" />
|
||||
</td>
|
||||
{else}
|
||||
<td width="54" valign="top">
|
||||
<img
|
||||
src="{$comment->getAvatar()}"
|
||||
style="max-width: 50px; filter: hue-rotate({$comment->getColorRotation()}deg);" />
|
||||
</td>
|
||||
{/if}
|
||||
<td width="645" valign="top">
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-author">
|
||||
<a href="{$comment->getUser()->getURL()}"><b>{$comment->getUser()->getFullName()}</b></a>
|
||||
{($comment->getUser()->isFemale() ? tr("post_writes_f") : tr("post_writes_m"))}<br />
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
</div>
|
||||
{elseif ($comment->getUType() === 1)}
|
||||
<div class="post-author">
|
||||
<a><b>{$comment->getAuthorName()}</b></a>
|
||||
{_post_writes_m}<br />
|
||||
<a href="#" class="date">{$comment->getTime()}</a>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
</strong>
|
||||
<div id="markLinks-{$comment->getId()}">
|
||||
{if is_null($isLikedByUser)}
|
||||
<a onClick="markAnswer({$comment->getId()}, 1)">{_support_rate_good_answer}</a>
|
||||
|
|
||||
<a onClick="markAnswer({$comment->getId()}, 2)">{_support_rate_bad_answer}</a>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{/if}
|
||||
<div class="post-content" id="{$comment->getId()}">
|
||||
<div class="text" id="text{$comment->getId()}">
|
||||
{if $comment->getUType() === 1 && !$printedSupportGreeting}
|
||||
{var $printedSupportGreeting = true}
|
||||
{tr("support_greeting_hi", $ticket->getUser()->getFullName())}
|
||||
<br />
|
||||
<br />
|
||||
|
||||
{$comment->getText()|noescape}
|
||||
<br />
|
||||
<br />
|
||||
|
||||
{tr("support_greeting_regards", OPENVK_ROOT_CONF["openvk"]["appearance"]["name"])|noescape}
|
||||
{else}
|
||||
{$comment->getText()|noescape}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{if $comment->getUType() === 0}
|
||||
<div class="post-menu">
|
||||
<a href="/support/comment/{$comment->getId()}/delete">{_delete}</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $comment->getUType() === 1}
|
||||
<div class="post-menu">
|
||||
{var isLikedByUser = $comment->isLikedByUser()}
|
||||
<strong id="markText-{$comment->getId()}">
|
||||
{if !is_null($isLikedByUser)}
|
||||
{if $comment->isLikedByUser()}
|
||||
{_support_good_answer_user}
|
||||
{else}
|
||||
{_support_bad_answer_user}
|
||||
{/if}
|
||||
{/if}
|
||||
</strong>
|
||||
<div id="markLinks-{$comment->getId()}">
|
||||
{if is_null($isLikedByUser)}
|
||||
<a onClick="markAnswer({$comment->getId()}, 1)">{_support_rate_good_answer}</a>
|
||||
|
|
||||
<a onClick="markAnswer({$comment->getId()}, 2)">{_support_rate_bad_answer}</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{/if}
|
||||
{/block}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
{var isAvatar = $mode === 'avatar'}
|
||||
<div n:if="$user->hasPendingNumberChange()" class="msg">
|
||||
<b>Подтверждение номера телефона</b><br/>
|
||||
Введите код для подтверждения смены номера: <a href="/edit/verify_phone.pl">ввести код</a>.
|
||||
Введите код для подтверждения смены номера: <a href="/edit/verify_phone">ввести код</a>.
|
||||
</div>
|
||||
|
||||
<div class="tabs">
|
||||
|
@ -288,7 +288,7 @@
|
|||
{elseif $isAvatar}
|
||||
|
||||
<h4>{_"profile_picture"}</h4>
|
||||
<form action="/al_avatars.pl" method="POST" enctype="multipart/form-data">
|
||||
<form action="/al_avatars" method="POST" enctype="multipart/form-data">
|
||||
<table cellspacing="7" cellpadding="0" width="60%" border="0" align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
|
|
@ -316,6 +316,18 @@
|
|||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="120" valign="top">
|
||||
<span class="nobold">{_privacy_setting_write_messages}</span>
|
||||
</td>
|
||||
<td>
|
||||
<select name="messages.write", style="width: 164px;">
|
||||
<option value="2" {if $user->getPrivacySetting('messages.write') == 2}selected{/if}>{_privacy_value_anybody}</option>
|
||||
<option value="1" {if $user->getPrivacySetting('messages.write') == 1}selected{/if}>{_privacy_value_friends}</option>
|
||||
<option value="0" {if $user->getPrivacySetting('messages.write') == 0}selected{/if}>{_privacy_value_nobody}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
|
@ -540,6 +552,16 @@
|
|||
<td>
|
||||
<span class="nobold">{_additional_links}</span>
|
||||
</td>
|
||||
</tr><tr n:if="OPENVK_ROOT_CONF['openvk']['preferences']['adPoster']['enable']">
|
||||
<td width="120" valign="top" align="right" align="right">
|
||||
<input
|
||||
n:attr="checked => $user->getLeftMenuItemStatus('poster')"
|
||||
type="checkbox"
|
||||
name="menu_standardo" />
|
||||
</td>
|
||||
<td>
|
||||
<span class="nobold">{_ad_poster}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
{_"two_factor_authentication_settings_1"|noescape}
|
||||
<p>{_"two_factor_authentication_settings_2"}</p>
|
||||
<div style="text-align: center;">
|
||||
<img src="data:image/png;base64,{$qrCode}">
|
||||
<img width="225" height="225" src="data:{$qrCodeType};base64,{$qrCodeData}">
|
||||
</div>
|
||||
<p>{tr("two_factor_authentication_settings_3", $secret)|noescape}</p>
|
||||
<p>{_"two_factor_authentication_settings_4"}</p>
|
||||
|
|
|
@ -92,6 +92,7 @@
|
|||
{/if}
|
||||
|
||||
<a n:if="OPENVK_ROOT_CONF['openvk']['preferences']['commerce'] && $user->getGiftCount() == 0" href="/gifts?act=pick&user={$user->getId()}" class="profile_link">{_send_gift}</a>
|
||||
<a n:if="$user->getPrivacyPermission('messages.write', $thisUser)" href="/im?sel={$user->getId()}" class="profile_link">{_"send_message"}</a>
|
||||
|
||||
{var subStatus = $user->getSubscriptionStatus($thisUser)}
|
||||
{if $subStatus === 0}
|
||||
|
@ -116,7 +117,6 @@
|
|||
<input type="submit" class="profile_link" value="{_"friends_reject"}" />
|
||||
</form>
|
||||
{elseif $subStatus === 3}
|
||||
<a href="/im?sel={$user->getId()}" class="profile_link">{_"send_message"}</a>
|
||||
<form action="/setSub/user" method="post" class="profile_link_form">
|
||||
<input type="hidden" name="act" value="rem" />
|
||||
<input type="hidden" name="id" value="{$user->getId()}" />
|
||||
|
@ -313,7 +313,7 @@
|
|||
|
||||
<div class="right_big_block">
|
||||
<div class="page_info">
|
||||
<div n:if="!is_null($alert = $user->getAlert())" class="user-alert">{$alert}</div>
|
||||
<div n:if="!is_null($alert = $user->getAlert())" class="user-alert">{strpos($alert, "@") === 0 ? tr(substr($alert, 1)) : $alert}</div>
|
||||
{var thatIsThisUser = isset($thisUser) && $user->getId() == $thisUser->getId()}
|
||||
<div n:if="$thatIsThisUser" class="page_status_popup" id="status_editor" style="display: none;">
|
||||
<form name="status_popup_form" onsubmit="changeStatus(); return false;">
|
||||
|
@ -507,7 +507,7 @@
|
|||
(function() {
|
||||
res = document.querySelector("#uBanMsgInput").value;
|
||||
xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "/admin/ban.pl/" + {$user->getId()} + "?reason=" + res + "&hash=" + {rawurlencode($csrfToken)}, true);
|
||||
xhr.open("GET", "/admin/ban/" + {$user->getId()} + "?reason=" + res + "&hash=" + {rawurlencode($csrfToken)}, true);
|
||||
xhr.onload = (function() {
|
||||
if(xhr.responseText.indexOf("reason") === -1)
|
||||
MessageBox("Ошибка", "Не удалось забанить пользователя...", ["OK"], [Function.noop]);
|
||||
|
@ -529,7 +529,7 @@
|
|||
(function() {
|
||||
res = document.querySelector("#uWarnMsgInput").value;
|
||||
xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "/admin/warn.pl/" + {$user->getId()} + "?message=" + res + "&hash=" + {rawurlencode($csrfToken)}, true);
|
||||
xhr.open("GET", "/admin/warn/" + {$user->getId()} + "?message=" + res + "&hash=" + {rawurlencode($csrfToken)}, true);
|
||||
xhr.onload = (function() {
|
||||
if(xhr.responseText.indexOf("message") === -1)
|
||||
MessageBox("Ошибка", "Не удалось отправить предупреждение...", ["OK"], [Function.noop]);
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
<div class="post-author">
|
||||
<a href="{$author->getURL()}"><b>
|
||||
{$author->getCanonicalName()}
|
||||
</b></a><br/>
|
||||
</b></a>
|
||||
{if $author->isVerified()}<img class="name-checkmark" src="/assets/packages/static/openvk/img/checkmark.png">{/if}<br/>
|
||||
</div>
|
||||
<div class="post-content" id="{$comment->getId()}">
|
||||
<div class="text" id="text{$comment->getId()}">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<h4 n:if="$showTitle ?? true">{_"comments"} ({$count})</h4>
|
||||
|
||||
<div n:ifset="$thisUser">
|
||||
{var commentsURL = "/al_comments.pl/create/$model/" . $parent->getId()}
|
||||
{var commentsURL = "/al_comments/create/$model/" . $parent->getId()}
|
||||
{var club = $parent instanceof \openvk\Web\Models\Entities\Post && $parent->getTargetWall() < 0 ? (new openvk\Web\Models\Repositories\Clubs)->get(abs($parent->getTargetWall())) : $club}
|
||||
{if !$readOnly}
|
||||
{include "textArea.xml", route => $commentsURL, postOpts => false, graffiti => (bool) ovkGetQuirk("comments.allow-graffiti"), club => $club}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{var $space = 2}
|
||||
{var $pageCount = ceil($conf->count / $conf->perPage)}
|
||||
|
||||
<div n:if="!($conf->page === 1 && $conf->count <= $conf->perPage)" n:class="paginator, $conf->atBottom ? paginator-at-bottom">
|
||||
<div n:if="!($conf->page === 1 && $conf->count <= $conf->perPage)" n:class="paginator, ($conf->atBottom ?? false) ? paginator-at-bottom">
|
||||
{if $conf->page > $space}
|
||||
<a n:attr="class => ($conf->page === 1 ? 'active')" href="?{http_build_query(array_merge($_GET, ['p' => 1]), 'k', '&', PHP_QUERY_RFC3986)}">«</a>
|
||||
{/if}
|
||||
|
|
|
@ -128,7 +128,7 @@
|
|||
{include "../comment.xml", comment => $comment, $compact => true}
|
||||
{/foreach}
|
||||
<div n:ifset="$thisUser" id="commentTextArea{$commentTextAreaId}" n:attr="style => ($commentsCount == 0 ? 'display: none;')" class="commentsTextFieldWrap">
|
||||
{var commentsURL = "/al_comments.pl/create/posts/" . $post->getId()}
|
||||
{var commentsURL = "/al_comments/create/posts/" . $post->getId()}
|
||||
{include "../textArea.xml", route => $commentsURL, postOpts => false, graffiti => (bool) ovkGetQuirk("comments.allow-graffiti"), post => $post}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<img
|
||||
src="{$author->getAvatarURL()}"
|
||||
width="50" />
|
||||
{if !$post->isPostedOnBehalfOfGroup() && !$compact}
|
||||
{if !$post->isPostedOnBehalfOfGroup() && !($compact ?? false)}
|
||||
<span n:if="$author->isOnline()" class="post-online">
|
||||
{_online}
|
||||
</span>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{var textAreaId = $post === null ? rand(1,300) : $post->getId()}
|
||||
{php if(!isset($GLOBALS["textAreaCtr"])) $GLOBALS["textAreaCtr"] = 10;}
|
||||
{var textAreaId = ($post ?? NULL) === null ? (++$GLOBALS["textAreaCtr"]) : $post->getId()}
|
||||
|
||||
<div id="write" style="padding: 5px 0;" onfocusin="expand_wall_textarea({$textAreaId});">
|
||||
<form action="{$route}" method="post" enctype="multipart/form-data" style="margin:0;">
|
||||
|
|
|
@ -19,10 +19,12 @@ routes:
|
|||
handler: "Support->view"
|
||||
- url: "/support/comment/{num}/rate/{num}"
|
||||
handler: "Support->rateAnswer"
|
||||
- url: "/al_comments.pl/create/support/{num}"
|
||||
- url: "/al_comments/create/support/{num}"
|
||||
handler: "Support->makeComment"
|
||||
- url: "/al_comments.pl/create/support/reply/{num}"
|
||||
- url: "/al_comments/create/support/reply/{num}"
|
||||
handler: "Support->AnswerTicketReply"
|
||||
- url: "/al_comments/create/{text}/{num}"
|
||||
handler: "Comment->makeComment"
|
||||
- url: "/support/delete/{num}"
|
||||
handler: "Support->delete"
|
||||
- url: "/language"
|
||||
|
@ -37,6 +39,8 @@ routes:
|
|||
handler: "About->version"
|
||||
placeholders:
|
||||
productName: "openvk[2]?|libresoc"
|
||||
- url: "/about"
|
||||
handler: "About->aboutInstance"
|
||||
- url: "/privacy"
|
||||
handler: "About->Privacy"
|
||||
- url: "/badbrowser.php"
|
||||
|
@ -47,9 +51,9 @@ routes:
|
|||
handler: "Auth->register"
|
||||
- url: "/logout"
|
||||
handler: "Auth->logout"
|
||||
- url: "/restore.pl"
|
||||
- url: "/restore"
|
||||
handler: "Auth->restore"
|
||||
- url: "/restore.pl/internal-finish"
|
||||
- url: "/restore/internal-finish"
|
||||
handler: "Auth->finishRestoringPassword"
|
||||
- url: "/setSID/{slug}"
|
||||
handler: "Auth->su"
|
||||
|
@ -67,7 +71,7 @@ routes:
|
|||
handler: "User->friends"
|
||||
- url: "/edit"
|
||||
handler: "User->edit"
|
||||
- url: "/edit/verify_phone.pl"
|
||||
- url: "/edit/verify_phone"
|
||||
handler: "User->verifyPhone"
|
||||
- url: "/setSub/user"
|
||||
handler: "User->sub"
|
||||
|
@ -75,8 +79,6 @@ routes:
|
|||
handler: "Group->sub"
|
||||
- url: "/setSub/v4/club"
|
||||
handler: "Group->attend"
|
||||
- url: "/al_comments.pl/create/{text}/{num}"
|
||||
handler: "Comment->makeComment"
|
||||
- url: "/groups/{num}/setNewOwner/{num}"
|
||||
handler: "Group->changeOwner"
|
||||
- url: "/comment{num}/like"
|
||||
|
@ -123,9 +125,9 @@ routes:
|
|||
handler: "Photos->album"
|
||||
- url: "/album{num}_{num}/edit"
|
||||
handler: "Photos->editAlbum"
|
||||
- url: "/album{num}_{num}/delete.pl"
|
||||
- url: "/album{num}_{num}/delete"
|
||||
handler: "Photos->deleteAlbum"
|
||||
- url: "/album{num}_{num}/remove_photo.pl/{num}"
|
||||
- url: "/album{num}_{num}/remove_photo/{num}"
|
||||
handler: "Photos->unlinkPhoto"
|
||||
- url: "/photos/upload"
|
||||
handler: "Photos->uploadPhoto"
|
||||
|
@ -137,7 +139,7 @@ routes:
|
|||
handler: "Photos->editPhoto"
|
||||
- url: "/photo{num}_{num}/delete"
|
||||
handler: "Photos->deletePhoto"
|
||||
- url: "/al_avatars.pl"
|
||||
- url: "/al_avatars"
|
||||
handler: "User->setAvatar"
|
||||
- url: "/videos{num}"
|
||||
handler: "Videos->list"
|
||||
|
@ -161,7 +163,7 @@ routes:
|
|||
handler: "Group->followers"
|
||||
- url: "/club{num}/followers/{num}"
|
||||
handler: "Group->admin"
|
||||
- url: "/club{num}/setAdmin.jsp"
|
||||
- url: "/club{num}/setAdmin"
|
||||
handler: "Group->modifyAdmin"
|
||||
- url: "/groups{num}"
|
||||
handler: "User->groups"
|
||||
|
@ -253,9 +255,9 @@ routes:
|
|||
handler: "Admin->giftCategory"
|
||||
- url: "/admin/gifts/{slug}.{num}/"
|
||||
handler: "Admin->gifts"
|
||||
- url: "/admin/ban.pl/{num}"
|
||||
- url: "/admin/ban/{num}"
|
||||
handler: "Admin->quickBan"
|
||||
- url: "/admin/warn.pl/{num}"
|
||||
- url: "/admin/warn/{num}"
|
||||
handler: "Admin->quickWarn"
|
||||
- url: "/admin/reports"
|
||||
handler: "Report->list"
|
||||
|
@ -269,10 +271,14 @@ routes:
|
|||
handler: "VKAPI->route"
|
||||
- url: "/token"
|
||||
handler: "VKAPI->tokenLogin"
|
||||
- url: "/sandbox_cocksex"
|
||||
- url: "/admin/sandbox"
|
||||
handler: "About->sandbox"
|
||||
- url: "/internal/wall{num}"
|
||||
handler: "Wall->wallEmbedded"
|
||||
- url: "/robots.txt"
|
||||
handler: "About->robotsTxt"
|
||||
- url: "/humans.txt"
|
||||
handler: "About->humansTxt"
|
||||
- url: "/{?shortCode}"
|
||||
handler: "UnknownTextRouteStrategy->delegate"
|
||||
placeholders:
|
||||
|
|
|
@ -889,7 +889,6 @@ table.User {
|
|||
display: flex;
|
||||
padding: 8px;
|
||||
cursor: pointer;
|
||||
width: 611px;
|
||||
margin-left: 1px;
|
||||
border-bottom: 1px solid #d6d6d6;
|
||||
}
|
||||
|
@ -923,10 +922,9 @@ table.User {
|
|||
}
|
||||
|
||||
.crp-entry--message.unread {
|
||||
background-color: #dcdcdc;
|
||||
background-color: #ededed;
|
||||
padding: 5px;
|
||||
width: 346px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.messenger-app--messages---message.unread {
|
||||
|
@ -945,8 +943,6 @@ table.User {
|
|||
}
|
||||
|
||||
.messenger-app--messages---message.unread:last-of-type {
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
padding-bottom: 5px;
|
||||
margin-bottom: 1.2rem;
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ function handleUpload(id) {
|
|||
u("span", indicator.nodes[0]).text(trim(file.name) + " (" + humanFileSize(file.size, false) + ")");
|
||||
indicator.attr("style", "display: block;");
|
||||
}
|
||||
|
||||
document.querySelector("#post-buttons" + id + " #wallAttachmentMenu").classList.add("hidden");
|
||||
}
|
||||
|
||||
function initGraffiti(id) {
|
||||
|
|
|
@ -185,7 +185,7 @@ function repostPost(id, hash) {
|
|||
|
||||
function setClubAdminComment(clubId, adminId, hash) {
|
||||
MessageBox("Изменить комментарий к администратору", `
|
||||
<form action="/club${clubId}/setAdmin.jsp" method="post" id="uClubAdminCommentForm_${clubId}_${adminId}">
|
||||
<form action="/club${clubId}/setAdmin" method="post" id="uClubAdminCommentForm_${clubId}_${adminId}">
|
||||
<input type="hidden" name="user" value="${adminId}">
|
||||
<input type="hidden" name="hash" value="${hash}">
|
||||
<input type="hidden" name="removeComment" id="uClubAdminCommentRemoveCommentInput_${clubId}_${adminId}" value="0">
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE `groups` ADD COLUMN `hide_from_global_feed` boolean DEFAULT 0 NOT NULL AFTER `display_topics_above_wall`;
|
|
@ -18,7 +18,7 @@
|
|||
"forgot_password" = "Մոռացե՞լ եք գաղտնաբառը";
|
||||
|
||||
"login_failed" = "Չհաջողվեց մուտք գործել";
|
||||
"invalid_username_or_password" = "Սխալ օգտատիրոջ անուն կամ գաղտնաբառ։ Դուք կարող եք <a href='/restore.pl'>վերականգնել ձեր գաղտնաբառը</a>։";
|
||||
"invalid_username_or_password" = "Սխալ օգտատիրոջ անուն կամ գաղտնաբառ։ Դուք կարող եք <a href='/restore'>վերականգնել ձեր գաղտնաբառը</a>։";
|
||||
|
||||
"failed_to_register" = "Չհաջողվեց գրանցվել";
|
||||
"referral_link_invalid" = "Հրավերքային հղումը սխալ է։";
|
||||
|
@ -45,6 +45,8 @@
|
|||
"register_referer_meta_title" = "$1 -ն հրավիրում է ձեզ դեպի $2";
|
||||
"register_referer_meta_desc" = "Միացե՛ք $1 -ին և բազմաթիվ օգտատերերին $2 -ու՛մ";
|
||||
|
||||
"users" = "Օգտատերեր";
|
||||
|
||||
/* Profile information */
|
||||
|
||||
"select_language" = "Ընտրել լեզուն";
|
||||
|
@ -130,6 +132,9 @@
|
|||
|
||||
"updated_at" = "Թարմացված է $1";
|
||||
|
||||
"user_banned" = "Ցավո՛ք, մենք ստիպված <b>$1</b>-ի էջը կասեցրել ենք։";
|
||||
"user_banned_comment" = "Մոդերատորի մեկնաբանությունը․ ";
|
||||
|
||||
/* Wall */
|
||||
|
||||
"post_writes_m" = "գրել է";
|
||||
|
@ -173,6 +178,8 @@
|
|||
"open_post" = "Բացել գրությունը";
|
||||
"version_incompatibility" = "Չհաջողվեց ցույց տալ հավելվածը։ Հնարավոր է, բազաների տվյալները հասանելի չեն OpenVK–ի այս տարբերակի հետ։";
|
||||
|
||||
"reply" = "Պատասխանել";
|
||||
|
||||
/* Friends */
|
||||
|
||||
"friends" = "Ընկերներ";
|
||||
|
@ -250,6 +257,10 @@
|
|||
"group_display_all_administrators" = "Ցուցադրել բոլոր ադմինիստրատորներին";
|
||||
"group_dont_display_administrators_list" = "Ոչ մեկին ցույց չտալ";
|
||||
|
||||
"group_changeowner_modal_title" = "Օգտատերի իրավասությունների փոխանցում";
|
||||
"group_changeowner_modal_text" = "<b>Ուշադրությու՛ն։</b> Դուք փոխանցում եք խմբի բոլոր իրավունքները $1-ին։ Այս գործողությունը անդառնալի է։ Դուք էլի կմնաք ադմինիստրատոր, բայց հեշտությամբ դա ձեզնից կարող են խլել։";
|
||||
"group_owner_setted" = "Նոր տերը ($1) նշանակված է $2 միությունում։ Ձեզ տրված են ադմինիստրատորի իրավասություններ։ Եթե ուզում եք հետ բերել իրավասությունները, <a href='/support?act=new'>գրե՛ք կայքի տեխնիկական աջակցությանը</a>։";
|
||||
|
||||
"participants_zero" = "Ոչ մի մասնակից";
|
||||
"participants_one" = "Միայն մեկ մասնակից";
|
||||
"participants_few" = "$1 մասնակից";
|
||||
|
@ -338,6 +349,8 @@
|
|||
"header_login" = "Մուտք";
|
||||
"header_registration" = "Գրանցում";
|
||||
|
||||
"left_menu_donate" = "Աջակցել";
|
||||
|
||||
"footer_blog" = "բլոգ";
|
||||
"footer_help" = "օգնություն";
|
||||
"footer_developers" = "մշակողներին";
|
||||
|
@ -544,6 +557,33 @@
|
|||
"usages_total" = "Օգտագործումների քանակ";
|
||||
"usages_left" = "Մնացին օգտագործումներ";
|
||||
|
||||
"points_transfer_dialog_header_1" = "Դուք կարող եք ուղարկել ձայները և նվերների մի մասը այլ մարդուն։";
|
||||
"points_transfer_dialog_header_2" = "Ձեր ներկայիս բալանսը․ ";
|
||||
|
||||
"points_amount_one" = "Մեկ ձայն";
|
||||
"points_amount_few" = "$1 ձայն";
|
||||
"points_amount_many" = "$1 ձայն";
|
||||
"points_amount_other" = "$1 ձայն";
|
||||
|
||||
"transfer_poins" = "Ձայների փոխանցում";
|
||||
"transfer_poins_button" = "Փոխանցել ձայներ";
|
||||
"also_you_can_transfer_points" = "Նաև դուք կարող եք <a href=\"javascript:showCoinsTransferDialog($1, '$2')\">փոխանցել ձայներ</a> այլ մարդուն։";
|
||||
|
||||
"transferred_to_you" = "ձեզ փոխանցեց";
|
||||
|
||||
"receiver_address" = "Ստացողի հասցե";
|
||||
"coins_count" = "Ձայների քանակ";
|
||||
"message" = "Նամակ";
|
||||
|
||||
"failed_to_tranfer_points" = "Չհաջողվեց ձայներ փոխանցել";
|
||||
|
||||
"points_transfer_successful" = "Դուք հաջողությամբ <b>$1</b>-ին փոխանցեցիք <b><a href=\"$2\">$3</a></b>.";
|
||||
"not_all_information_has_been_entered" = "Ոչ բոլոր ինֆորմացիան է ներմուծված";
|
||||
"negative_transfer_value" = "Կներեք, լավ տղություն չի ուրիշից ձայներ գողանալը։";
|
||||
"message_is_too_long" = "Նամակը շատ երկար է։";
|
||||
"receiver_not_found" = "Ստացողը չի գտնվել։";
|
||||
"you_dont_have_enough_points" = "Դուք չունե՛ք բավական ձայն։";
|
||||
|
||||
/* Gifts */
|
||||
|
||||
"gift" = "Նվեր";
|
||||
|
@ -609,6 +649,61 @@
|
|||
"you_can_invite" = "Դուք կարող եք հրավիրել ձեր ընկերներին կամ բարեկամներին հատուկ հղման միջոցով․";
|
||||
"you_can_invite_2" = "Ամրացրե՛ք այս հղումը ձեր նամակի մեջ։ Գրանցումից հետո օգտատերը անմիջապես կհայտնվի ձեր ընկերների ցուցակում։";
|
||||
|
||||
/* Banned */
|
||||
|
||||
"banned_title" = "Բլոկավորված եք";
|
||||
"banned_header" = "Ձեզ կասեցրել է կառլենի անհաջող բոցը։";
|
||||
"banned_alt" = "Օգտատերը բլոկավորված է";
|
||||
"banned_1" = "Կներե՛ք, <b>$1</b>, բայց Դուք կասեցված եք։";
|
||||
"banned_2" = "Պատճառը հետևյալն է․ <b>$1</b>. Ափսոս, բայց մենք ստիպված Ձեզ հավերժ ենք կասեցրել;";
|
||||
"banned_3" = "Դուք դեռ կարող եք <a href=\"/support?act=new\">գրել նամակ աջակցության ծառայությանը</a>, եթե համարում եք որ դա սխալմունք է, կամ էլ կարող եք <a href=\"/logout?hash=$1\">դուրս գալ</a>։";
|
||||
|
||||
/* Discussions */
|
||||
|
||||
"discussions" = "Քննարկումներ";
|
||||
|
||||
"messages_one" = "Մեկ նամակ";
|
||||
"messages_few" = "$1 նամակ";
|
||||
"messages_many" = "$1 նամակ";
|
||||
"messages_other" = "$1 նամակ";
|
||||
|
||||
"topic_messages_count_zero" = "Թեմայում նամակ չկա";
|
||||
"topic_messages_count_one" = "Թեմայում մեկ նամակ է";
|
||||
"topic_messages_count_few" = "Թեմայում $1 նամակ կա";
|
||||
"topic_messages_count_many" = "Թեմայում $1 նամակ կա";
|
||||
"topic_messages_count_other" = "Թեմայում $1 նամակ կա";
|
||||
|
||||
"replied" = "պատասխանել է";
|
||||
"create_topic" = "Ստեղծել թեմա";
|
||||
|
||||
"new_topic" = "Նոր թեմա";
|
||||
"title" = "Անվանում";
|
||||
"text" = "Տեքստ";
|
||||
|
||||
"view_topic" = "Թեմայի դիտարկում";
|
||||
"edit_topic_action" = "Խմբագրել թեման";
|
||||
"edit_topic" = "Թեմայի խմբագրում";
|
||||
"topic_settings" = "Թեմայի կարգավորումներ";
|
||||
"pin_topic" = "Ամրացնել թեման";
|
||||
"close_topic" = "Փակել թեման";
|
||||
"delete_topic" = "Ջնջել թեման";
|
||||
|
||||
"topics_one" = "Մեկ թեմա";
|
||||
"topics_few" = "$1 թեմա";
|
||||
"topics_many" = "$1 թեմա";
|
||||
"topics_other" = "$1 թեմա";
|
||||
|
||||
"created" = "Ստեղծված է";
|
||||
|
||||
"everyone_can_create_topics" = "Բոլորը կարող են թեմաներ սարքել";
|
||||
"display_list_of_topics_above_wall" = "Ցուցադրել պատի տակ թեմաների ցուցակը";
|
||||
|
||||
"topic_changes_saved_comment" = "Թարմացված անվանումն ու կարգավորումները կհայտնվեն թեմայի էջում։";
|
||||
|
||||
"failed_to_create_topic" = "Չհաջողվեց թեմա ստեղծել";
|
||||
"failed_to_change_topic" = "Չհաջողվեց խմբագրել թեման";
|
||||
"no_title_specified" = "Անվանումը նշված չէ";
|
||||
|
||||
/* Errors */
|
||||
|
||||
"error_1" = "Սխալ հարցում";
|
||||
|
@ -628,6 +723,7 @@
|
|||
"error_old_password" = "Հին գաղտնաբառը չի համընկնում";
|
||||
"error_new_password" = "Նոր գաղտնաբառերը չեն համընկնում";
|
||||
"error_shorturl_incorrect" = "Կարճ հասցեն ունի սխալ ֆորմատ";
|
||||
"error_repost_fail" = "Չհաջողվեց կիսվել գրության հետ";
|
||||
|
||||
"forbidden" = "Հասանելիության սխալ";
|
||||
"forbidden_comment" = "Այս օգտատիրոջ գաղտնիության կարգավորումները ձեզ թույլ չեն տալիս դիտել օգտատերի էջը։";
|
||||
|
@ -659,9 +755,23 @@
|
|||
"suspicious_registration_attempt" = "Գրանցման կասկածելի փորձ";
|
||||
"suspicious_registration_attempt_comment" = "Դուք մի տեսակ փորձել եք սխալ տեղից գրանցվել։";
|
||||
|
||||
"rate_limit_error" = "Արա Կառլեն, կարող ա՞ խառնել ես։";
|
||||
"rate_limit_error_comment" = "Ա՛յ $1, չի՛ կարելի այսքան հաճախ սպամ հրապարակել։ Հո դու Կառլենը չե՞ս։ Բացառության կոդ․ $2։";
|
||||
|
||||
"not_enough_permissions" = "Այդքան իրավասություն չկա";
|
||||
"not_enough_permissions_comment" = "Դուք բավական իրավասություն չունեք այս գործողությունը կատարելու համար։";
|
||||
|
||||
"login_required_error" = "Պահանջվում է մուտք գործել";
|
||||
"login_required_error_comment" = "Այս էջը դիտելու համար պետք է մուտք գործել դեպի կայք։";
|
||||
|
||||
"captcha_error" = "Սխալ են գրված սիմվոլները";
|
||||
"captcha_error_comment" = "Խնդրում ենք համոզվել, որ ճիշտ եք ներմուծել կապտչայի սիմվոլները։";
|
||||
|
||||
/* Admin actions */
|
||||
|
||||
"login_as" = "Մտնել ինչպես $1";
|
||||
"manage_user_action" = "Օգտատերի կառավարում";
|
||||
"manage_group_action" = "Խմբի կառավարում";
|
||||
"ban_user_action" = "Բլոկավորել օգտվողին";
|
||||
"warn_user_action" = "Զգուշացնել օգտվողին";
|
||||
|
||||
|
@ -671,6 +781,10 @@
|
|||
"paginator_page" = "$1 էջ";
|
||||
"paginator_next" = "Առաջ";
|
||||
|
||||
/* About */
|
||||
|
||||
"about_openvk" = "OpenVK-ի մասին";
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
"ok" = "ОК";
|
||||
|
@ -678,6 +792,12 @@
|
|||
"no" = "Ոչ";
|
||||
"cancel" = "Չեղարկել";
|
||||
"edit_action" = "Փոփոխել";
|
||||
"transfer" = "Փոխանցել";
|
||||
"close" = "Փակել";
|
||||
|
||||
"warning" = "Ուշադրություն";
|
||||
"question_confirm" = "Այս գործողությունը էլ երբեք հետ չի բերվի։ Դուք վստա՞հ եք որ ուզում եք շարունակել։";
|
||||
|
||||
/* User alerts */
|
||||
|
||||
"user_alert_scam" = "Այս հաշվի վրա բազմաթիվ բողոքներ են եկել խարդախության հետ կապված։ Խնդրվում է զգույշ լինել, հատկապես եթե Ձեզնից փորձեն գումար խնդրել և շորթել։";
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
"forgot_password" = "Forgot your password?";
|
||||
|
||||
"login_failed" = "Login failed";
|
||||
"invalid_username_or_password" = "The username or password you entered is incorrect. <a href='/restore.pl'>Forgot your password?</a>";
|
||||
"invalid_username_or_password" = "The username or password you entered is incorrect. <a href='/restore'>Forgot your password?</a>";
|
||||
|
||||
"failed_to_register" = "Failed to register";
|
||||
"referral_link_invalid" = "The referral link is invalid.";
|
||||
|
@ -245,6 +245,7 @@
|
|||
"hidden_yes" = "Hidden: Yes";
|
||||
"hidden_no" = "Hidden: No";
|
||||
"group_allow_post_for_everyone" = "Allow posting for everyone";
|
||||
"group_hide_from_global_feed" = "Don't display posts in the global feed";
|
||||
"statistics" = "Statistics";
|
||||
"group_administrators_list" = "Admins list";
|
||||
"group_display_only_creator" = "Display only group creator";
|
||||
|
@ -337,6 +338,7 @@
|
|||
|
||||
"left_menu_donate" = "Donate";
|
||||
|
||||
"footer_about_instance" = "about instance";
|
||||
"footer_blog" = "blog";
|
||||
"footer_help" = "help";
|
||||
"footer_developers" = "developers";
|
||||
|
@ -384,6 +386,7 @@
|
|||
"privacy_setting_see_friends" = "Who can see my friends";
|
||||
"privacy_setting_add_to_friends" = "Who can add me to friends";
|
||||
"privacy_setting_write_wall" = "Who can publish post on my wall";
|
||||
"privacy_setting_write_messages" = "Who can write messages to me";
|
||||
"privacy_value_anybody" = "Anybody";
|
||||
"privacy_value_anybody_dative" = "Anybody";
|
||||
"privacy_value_users" = "OpenVK users";
|
||||
|
@ -409,6 +412,7 @@
|
|||
"ui_settings_rating_hide" = "Hide";
|
||||
|
||||
"additional_links" = "Additional links";
|
||||
"ad_poster" = "Ad poster";
|
||||
|
||||
/* Two-factor authentication */
|
||||
|
||||
|
@ -625,8 +629,8 @@
|
|||
"you_have_not_entered_text" = "You have not entered any text";
|
||||
"you_have_not_entered_name_or_text" = "You did not enter a name or text";
|
||||
|
||||
"support_ticket_changed" = "Ticket changed";
|
||||
"support_ticket_changed_comment" = "The changes will take effect in a few seconds.";
|
||||
"ticket_changed" = "Ticket changed";
|
||||
"ticket_changed_comment" = "The changes will take effect in a few seconds.";
|
||||
|
||||
/* Invite */
|
||||
|
||||
|
@ -764,6 +768,26 @@
|
|||
|
||||
"about_openvk" = "About OpenVK";
|
||||
|
||||
"about_this_instance" = "About this instance";
|
||||
"rules" = "Rules";
|
||||
"most_popular_groups" = "Most popular groups";
|
||||
"on_this_instance_are" = "On this instance are:";
|
||||
|
||||
"about_users_one" = "<b>1</b> user";
|
||||
"about_users_other" = "<b>$1</b> users";
|
||||
|
||||
"about_online_users_one" = "<b>1</b> online user";
|
||||
"about_online_users_other" = "<b>$1</b> online users";
|
||||
|
||||
"about_active_users_one" = "<b>1</b> active user";
|
||||
"about_active_users_other" = "<b>$1</b> active users";
|
||||
|
||||
"about_groups_one" = "<b>1</b> group";
|
||||
"about_groups_other" = "<b>$1</b> groups";
|
||||
|
||||
"about_wall_posts_one" = "<b>1</b> wall post";
|
||||
"about_wall_posts_other" = "<b>$1</b> wall posts";
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
"ok" = "OK";
|
||||
|
@ -777,3 +801,6 @@
|
|||
"warning" = "Warning";
|
||||
"question_confirm" = "This action can't be undone. Do you really wanna do it?";
|
||||
|
||||
/* User alerts */
|
||||
|
||||
"user_alert_scam" = "This account has been reported a lot for scam. Please be careful, especially if he asked for money.";
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"forgot_password" = "Ĉu vi forgesis vian pasvorton?";
|
||||
|
||||
"login_failed" = "Ensaluto malsukcesis";
|
||||
"invalid_username_or_password" = "La uzantnomo aŭ pasvorto, kiun vi enigis, estas malĝusta. <a href='/restore.pl'>Ĉu vi forgesis vian pasvorton?</a>";
|
||||
"invalid_username_or_password" = "La uzantnomo aŭ pasvorto, kiun vi enigis, estas malĝusta. <a href='/restore'>Ĉu vi forgesis vian pasvorton?</a>";
|
||||
|
||||
"failed_to_register" = "Malsukcesis registri";
|
||||
"referral_link_invalid" = "La invito ligilo estas malvalida.";
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"forgot_password" = "Құпиясөзіңізді ұмыттыңыз ба?";
|
||||
|
||||
"login_failed" = "Жүйеге кіру сәтті аяқталмады";
|
||||
"invalid_username_or_password" = "Қолданушы аты немесе құпиясөз дұрыс емес.<a href='/restore.pl'>Құпиясөзді ұмыттыңыз ба?</a>";
|
||||
"invalid_username_or_password" = "Қолданушы аты немесе құпиясөз дұрыс емес.<a href='/restore'>Құпиясөзді ұмыттыңыз ба?</a>";
|
||||
|
||||
"failed_to_register" = "Жүйеге тіркелу сәтті аяқталмады";
|
||||
"referral_link_invalid" = "Реферал сілтемесі жарамсыз.";
|
||||
|
@ -180,6 +180,8 @@
|
|||
"open_post" = "Жазбаны ашу";
|
||||
"version_incompatibility" = "Бұл тіркемені көрсете алмадық. Мәліметтер базасы OpenVK-дің қазіргі нұсқасымен үйлеспелмеуі мүмкін.";
|
||||
|
||||
"reply" = "Жауап беру";
|
||||
|
||||
/* Friends */
|
||||
|
||||
"friends" = "Достар";
|
||||
|
@ -237,6 +239,7 @@
|
|||
"role" = "Рөлі";
|
||||
"administrator" = "Әкімші";
|
||||
"promote_to_admin" = "Әкімші қылдыру";
|
||||
"promote_to_owner" = "Топтың иесі қылдыру";
|
||||
"devote" = "Арнау";
|
||||
"set_comment" = "Пікірді өңдеу";
|
||||
"hidden_yes" = "Жасырылған: Ия";
|
||||
|
@ -248,6 +251,10 @@
|
|||
"group_display_all_administrators" = "Барлық әкімшілерді көрсету";
|
||||
"group_dont_display_administrators_list" = "Ештеңе көрсетпеу";
|
||||
|
||||
"group_changeowner_modal_title" = "Топтың иесі құқықтарың беру";
|
||||
"group_changeowner_modal_text" = "Назар аударыңыз! Сіз $1 деп аталатын пайдаланушыға топтың иесі құқықтарын берудесіз. Бұл әрекет қайтымсыз. Бергеннен кейін сіз топтың әкімшісі боласыз, бірақ оның жаңа иесі сізді оңай сол рөлден алып тастай алады.";
|
||||
"group_owner_setted" = "Топтың жаңа иесі ($1) $2 тобына сәтті тағайындалды. Сізге топтың әкімші құқықтары берілді. Қайтіп топтың иесі болғыңыз келсе <a href='/support?act=new'>қолдау көрсету тобына</a> жазыңыз.";
|
||||
|
||||
"participants_zero" = "Қатысушылар жоқ";
|
||||
"participants_one" = "$1 қатысушы";
|
||||
"participants_other" = "$1 қатысушы";
|
||||
|
@ -318,7 +325,7 @@
|
|||
|
||||
"header_home" = "басты бет";
|
||||
"header_groups" = "топтар";
|
||||
"header_donate" = "садақа беру";
|
||||
"header_donate" = "қайырымдылық жасау";
|
||||
"header_people" = "кісілер";
|
||||
"header_invite" = "шақыру";
|
||||
"header_help" = "көмек";
|
||||
|
@ -328,9 +335,11 @@
|
|||
"header_login" = "кіру";
|
||||
"header_registration" = "тіркелу";
|
||||
|
||||
"left_menu_donate" = "Қайырымдылық жасау";
|
||||
|
||||
"footer_blog" = "блог";
|
||||
"footer_help" = "көмек";
|
||||
"footer_developers" = "әзірлеушілер";
|
||||
"footer_developers" = "әзірлеушілерге";
|
||||
"footer_choose_language" = "тіл таңдау";
|
||||
"footer_privacy" = "құпиялық";
|
||||
|
||||
|
@ -361,6 +370,7 @@
|
|||
"search_for_groups" = "Топтар іздеу";
|
||||
"search_for_people" = "Кісілер іздеу";
|
||||
"search_button" = "Іздеу";
|
||||
"search_placeholder" = "Кез келген атауды, тақырыпты немесе сөзді теруді бастаңыз";
|
||||
"results_zero" = "Нәтиже жоқ";
|
||||
"results_one" = "$1 нәтиже";
|
||||
"results_other" = "$1 нәтиже";
|
||||
|
@ -380,6 +390,8 @@
|
|||
"ui_settings_rating_show" = "Көрсету";
|
||||
"ui_settings_rating_hide" = "Жасыру";
|
||||
|
||||
"additional_links" = "Қосымша сілтемелер";
|
||||
|
||||
"two_factor_authentication" = "Екі факторлы аутентификация";
|
||||
"two_factor_authentication_disabled" = "Бұзылудан сенімді қорғаныс қызметін қамтамасыз етеді: парақшаға кіру үшін 2FA қосымшасында алынған кодты енгізу керек.";
|
||||
"two_factor_authentication_enabled" = "Екі факторлы аутентификация қосулы. Сіздің парақшаңыз қорғалған.";
|
||||
|
@ -482,6 +494,7 @@
|
|||
"privacy_setting_see_friends" = "Кім менің достарларымды көре алады";
|
||||
"privacy_setting_add_to_friends" = "Кім мені достарыма қоса алады";
|
||||
"privacy_setting_write_wall" = "Кім менің қабырғама жазба жаза алады";
|
||||
"privacy_setting_write_messages" = "Кім маған хабарма жібере алады";
|
||||
"privacy_value_anybody" = "Әркім";
|
||||
"privacy_value_anybody_dative" = "Әркім";
|
||||
"privacy_value_users" = "OpenVK қолданушылары";
|
||||
|
@ -510,6 +523,31 @@
|
|||
"usages_total" = "Қолдану саны";
|
||||
"usages_left" = "Қалған қолдану саны";
|
||||
|
||||
"points_transfer_dialog_header_1" = "Сіз сыйлық ретінде немесе дауыстардың бір бөлігін басқа адамға бере аласыз.";
|
||||
"points_transfer_dialog_header_2" = "Ағымдағы теңгерім:";
|
||||
|
||||
"points_amount_one" = "Бір дауыс";
|
||||
"points_amount_other" = "$1 дауыс";
|
||||
|
||||
"transfer_poins" = "Дауыс аудару";
|
||||
"transfer_poins_button" = "Дауыс аудары";
|
||||
"also_you_can_transfer_points" = "Сонымен қатар сіз басқа адамға <a href=\"javascript:showCoinsTransferDialog($1, '$2')\">дауыс аудара аласыз</a>.";
|
||||
|
||||
"transferred_to_you" = "сізге аударды";
|
||||
|
||||
"receiver_address" = "Қабылдаушы мекенжайы";
|
||||
"coins_count" = "Дауыстардың саны";
|
||||
"message" = "Хабар";
|
||||
|
||||
"failed_to_tranfer_points" = "Дауыстарды аудара алмадық";
|
||||
|
||||
"points_transfer_successful" = "Сіз сәтті <b>$1</b> <b><a href=\"$2\">$3</a></b> аталатын пайдаланушыға аудардыңыз.";
|
||||
"not_all_information_has_been_entered" = "Барлық мәлімет терілген жоқ";
|
||||
"negative_transfer_value" = "Өкінішке орай біз басқа кісіден дауыс ұрлай алмаймыз.";
|
||||
"message_is_too_long" = "Хабар тым ұзын.";
|
||||
"receiver_not_found" = "Қабылдаушы табылған жоқ.";
|
||||
"you_dont_have_enough_points" = "Сізде жеткілікті дауыс саны жоқ.";
|
||||
|
||||
/* Gifts */
|
||||
|
||||
"gift" = "Сыйлық";
|
||||
|
@ -561,6 +599,18 @@
|
|||
"support_new_title" = "Мәселені қысқаша сипаттап беріңіз";
|
||||
"support_new_content" = "Мәселе туралы толық жазып беріңіз";
|
||||
|
||||
"support_rate_good_answer" = "Бұл жақсы жауап";
|
||||
"support_rate_bad_answer" = "Бұл жаман жауап";
|
||||
"support_good_answer_user" = "Сіз оң пікір қалдырдыңыз";
|
||||
"support_bad_answer_user" = "Сіз теріс пікір қалдырдыңыз";
|
||||
"support_good_answer_agent" = "Пайдаланушы оң пікір қалдырды.";
|
||||
"support_bad_answer_agent" = "Пайдаланушы теріс пікір қалдырды.";
|
||||
"support_rated_good" = "Сіз осы жауапқа оң пікір қалдырдыңыз.";
|
||||
"support_rated_bad" = "Сіз осы жауапқа теріс пікір қалдырдыңыз.";
|
||||
"wrong_parameters" = "Сұрау параметрлері жарамсыз.";
|
||||
|
||||
"fast_answers" = "Тез жауаптар";
|
||||
|
||||
"comment" = "Пікір";
|
||||
"sender" = "Жіберуші";
|
||||
|
||||
|
@ -569,8 +619,8 @@
|
|||
"you_have_not_entered_text" = "Cіз ешқандай мәтін енгізбедіңіз";
|
||||
"you_have_not_entered_name_or_text" = "Сіз ат немесе мәтін енгізген жоқсыз";
|
||||
|
||||
"support_ticket_changed" = "Мәселе өзгерілді";
|
||||
"support_ticket_changed_comment" = "Өзгерістер бірнеше секундтан кейін күшіне енеді.";
|
||||
"ticket_changed" = "Мәселе өзгерілді";
|
||||
"ticket_changed_comment" = "Өзгерістер бірнеше секундтан кейін күшіне енеді.";
|
||||
|
||||
/* Invite */
|
||||
|
||||
|
@ -587,6 +637,46 @@
|
|||
"banned_2" = "Мұның себебі қарапайым: <b>$1</b>. Өкінішке орай, осы жолы сізді мәңгілікке блоктауға мәжбүр болдық.";
|
||||
"banned_3" = "Егер сізді қателесіп блоктады деп ойласаңыз, <a href=\"/support?act=new\">қолдау қызметіне жаза аласыз</a> немесе <a href=\"/logout?hash=$1\">жүйеден шыға аласыз</a>.";
|
||||
|
||||
/* Discussions */
|
||||
|
||||
"discussions" = "Талқылаулар";
|
||||
|
||||
"messages_one" = "Бір хабар";
|
||||
"messages_other" = "$1 хабар";
|
||||
|
||||
"topic_messages_count_zero" = "Тақырыпта хабар жоқ";
|
||||
"topic_messages_count_one" = "Тақырыпта бір хабар бар";
|
||||
"topic_messages_count_other" = "Тақырыпта $1 хабар бар";
|
||||
|
||||
"replied" = "жауап берді";
|
||||
"create_topic" = "Тақырып бастау";
|
||||
|
||||
"new_topic" = "Жаңа тақырып";
|
||||
"title" = "Аты";
|
||||
"text" = "Мәтіні";
|
||||
|
||||
"view_topic" = "Тақырыпты қарау";
|
||||
"edit_topic_action" = "Тақырыпты өндеу";
|
||||
"edit_topic" = "Тақырыпты өндеу";
|
||||
"topic_settings" = "Тақырыптың баптаулары";
|
||||
"pin_topic" = "Тақырыпты бекіту";
|
||||
"close_topic" = "Тақырыпты жабу";
|
||||
"delete_topic" = "Тақырыпты жою";
|
||||
|
||||
"topics_one" = "Бір тақырып";
|
||||
"topics_other" = "$1 тақырып";
|
||||
|
||||
"created" = "Басталған күні";
|
||||
|
||||
"everyone_can_create_topics" = "Әрбір адам тақырып бастай алады";
|
||||
"display_list_of_topics_above_wall" = "Тақырыптар тізімін жаңалықтар қабырғасынан бұрын көрсету";
|
||||
|
||||
"topic_changes_saved_comment" = "Жаңартылған аты мен оның баптаулары тақырыптың бетінде пайда болады.";
|
||||
|
||||
"failed_to_create_topic" = "Тақырыпты бастай алмадық";
|
||||
"failed_to_change_topic" = "Тақырыпты өзгерте алмадық";
|
||||
"no_title_specified" = "Тақырыптың аты жазылмаған.";
|
||||
|
||||
/* Errors */
|
||||
|
||||
"error_1" = "Дұрыс емес сұрау";
|
||||
|
@ -654,6 +744,7 @@
|
|||
|
||||
"login_as" = "$1 ретінде кіру";
|
||||
"manage_user_action" = "Пайдаланушыны басқару";
|
||||
"manage_group_action" = "Топты басқару";
|
||||
"ban_user_action" = "Пайдаланушыға тыйым салу";
|
||||
"warn_user_action" = "Пайдаланушыны ескерту";
|
||||
|
||||
|
@ -663,6 +754,10 @@
|
|||
"paginator_page" = "$1 бет";
|
||||
"paginator_next" = "Алға";
|
||||
|
||||
/* About */
|
||||
|
||||
"about_openvk" = "OpenVK туралы";
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
"ok" = "ОК";
|
||||
|
@ -670,6 +765,12 @@
|
|||
"no" = "Жоқ";
|
||||
"cancel" = "Бас тарту";
|
||||
"edit_action" = "Өзгерту";
|
||||
"transfer" = "Аудару";
|
||||
"close" = "Жабу";
|
||||
|
||||
"warning" = "Назар аударыңыз";
|
||||
"question_confirm" = "Бұл әрекетті болдырмауға мүмкін емес. Шынымен осы әрекетті жасауға сенімдісіз бе?";
|
||||
|
||||
/* User alerts */
|
||||
|
||||
"user_alert_scam" = "Бұл пайдаланушы алаяқтық туралы көп хабарланды. Әсіресе ол ақша сұраса сақ болыңыз.";
|
||||
|
|
|
@ -17,6 +17,36 @@
|
|||
"registration" = "Rejestracja";
|
||||
"forgot_password" = "Zapomniałem hasła?";
|
||||
|
||||
"login_failed" = "Nie można się zalogować";
|
||||
"invalid_username_or_password" = "Niepoprawna nazwa użytkownika lub hasło. <a href='/restore'>Zapomniałeś hasła?</a>";
|
||||
|
||||
"failed_to_register" = "Nie można się zarejestrować";
|
||||
"referral_link_invalid" = "Link zaproszenia jest nieprawidłowy.";
|
||||
"registration_disabled" = "Rejestracja wyłączona przez administratora systemu.";
|
||||
"user_already_exists" = "Użytkownik z takim e-mailem już istnieje.";
|
||||
|
||||
"access_recovery" = "Przywracanie dostępu";
|
||||
"page_access_recovery" = "Przywróć dostęp do strony";
|
||||
"access_recovery_info" = "Zapomniałeś hasła? Nie martw się, Wprowadź swoje dane, a my wyślemy ci e-mail z instrukcjami odzyskiwania konta.";
|
||||
"access_recovery_info_2" = "Wprowadź nowe hasło. Wszystkie trwające sesje zostaną zawieszone, a tokeny dostępu zostaną anulowane.";
|
||||
"reset_password" = "Zresetuj hasło";
|
||||
"2fa_code_2" = "Kod uwierzytelniania dwuskładnikowego";
|
||||
|
||||
"password_successfully_reset" = "Twoje hasło zostało pomyślnie zresetowane.";
|
||||
"password_reset_email_sent" = "Jeśli jesteś zarejestrowany, otrzymasz instrukcje na e-mail.";
|
||||
"password_reset_error" = "Nieoczekiwany błąd podczas resetowania hasła.";
|
||||
"password_reset_rate_limit_error" = "Nie możesz tego robić tak często, przepraszam.";
|
||||
|
||||
"registration_disabled_info" = "Rejestracja jest wyłączona przez administratora systemu. Jeśli to możliwe, poproś znajomego o zaproszenie, jeśli jest zarejestrowany na tej stronie.";
|
||||
"registration_closed" = "Rejestracja zamknięta.";
|
||||
"invites_you_to" = "<strong>$1</strong> zaprasza do $2";
|
||||
|
||||
"register_meta_desc" = "Zarejestruj się w $1 już teraz!";
|
||||
"register_referer_meta_title" = "$1 zaprasza do $2!";
|
||||
"register_referer_meta_desc" = "Dołącz do $1 i wielu innych użytkowników w$2!";
|
||||
|
||||
"users" = "Пользователи";
|
||||
|
||||
/* Profile information */
|
||||
|
||||
"select_language" = "Wybierz język";
|
||||
|
@ -47,9 +77,14 @@
|
|||
"no_information_provided" = "Brak informacji.";
|
||||
"deceased_person" = "Strona zmarłego człowieka";
|
||||
"none" = "brakuje";
|
||||
"years" = "lat";
|
||||
"send" = "Wysłać";
|
||||
|
||||
"years_zero" = "0 lat";
|
||||
"years_one" = "1 rok";
|
||||
"years_few" = "$1 roku";
|
||||
"years_many" = "$1 lat";
|
||||
"years_other" = "$1 lat";
|
||||
|
||||
"relationship" = "Stan cywilny";
|
||||
|
||||
"relationship_0" = "Nie wybrano";
|
||||
|
@ -96,8 +131,13 @@
|
|||
|
||||
"updated_at" = "Aktualizacja $1";
|
||||
|
||||
"user_banned" = "Niestety musieliśmy zablokować stronę użytkownika <b>$1</b>.";
|
||||
"user_banned_comment" = "Komentarz moderatora:";
|
||||
|
||||
/* Wall */
|
||||
|
||||
"feed" = "Nowość";
|
||||
|
||||
"post_writes_m" = "napisał";
|
||||
"post_writes_f" = "napisała";
|
||||
"post_writes_g" = "opublikowali";
|
||||
|
@ -113,7 +153,6 @@
|
|||
"pinned" = "stały";
|
||||
"comments_tip" = "Bądź pierwszym, który pozostawi komentarz!";
|
||||
"your_comment" = "Twój komentarz";
|
||||
"comments" = "Komentarz";
|
||||
"shown" = "Wskazany";
|
||||
"x_out_of" = "$1 z";
|
||||
"wall_zero" = "brak wpisów";
|
||||
|
@ -121,22 +160,32 @@
|
|||
"wall_few" = "$1 wpis";
|
||||
"wall_many" = "$1 wpis";
|
||||
"wall_other" = "$1 wpis";
|
||||
"publish_post" = "Dodaj wpis";
|
||||
"view_other_comments" = "Zobacz pozostałe komentarze";
|
||||
|
||||
"no_comments" = "Brak komentarzy";
|
||||
|
||||
"all_news" = "Wszystkie aktualności";
|
||||
"posts_per_page" = "Ilość wpisów na stronie";
|
||||
|
||||
"attachment" = "Włożenie";
|
||||
"post_as_group" = "W imieniu Wspólnoty";
|
||||
"comment_as_group" = "W imieniu Wspólnoty";
|
||||
"add_signature" = "Podpis autora";
|
||||
"contains_nsfw" = "Zawiera treści NSFW";
|
||||
"nsfw_warning" = "Ten post może zawierać ponad 18+ treści";
|
||||
"report" = "Poskarżyć";
|
||||
"attach_photo" = "Załącz zdjęcie";
|
||||
"attach" = "Przymocować";
|
||||
"attach_photo" = "Przymocować zdjęcie";
|
||||
"attach_video" = "Przymocować wideo";
|
||||
"draw_graffiti" = "Narysować Graffiti";
|
||||
"no_posts_abstract" = "Nikt tu nic nie napisał... Dopóki.";
|
||||
"attach_no_longer_available" = "Ten załącznik nie jest już dostępny.";
|
||||
"open_post" = "Otwórz wpis";
|
||||
"version_incompatibility" = "Nie można wyświetlić tego załącznika. Być może baza danych nie jest zgodna z bieżącą wersją OpenVK.";
|
||||
|
||||
"reply" = "Odpowiedzieć";
|
||||
|
||||
/* Friends */
|
||||
|
||||
"friends" = "Przyjaciel";
|
||||
|
@ -202,17 +251,23 @@
|
|||
"role" = "Rola";
|
||||
"administrator" = "Administrator";
|
||||
"promote_to_admin" = "Awans do admina";
|
||||
"promote_to_owner" = "Wyznaczyć właściciela";
|
||||
"devote" = "Zdegradować";
|
||||
"set_comment" = "Edytuj Komentarz";
|
||||
"hidden_yes" = "Ukryty: Tak";
|
||||
"hidden_no" = "Ukryty: Nie";
|
||||
"group_allow_post_for_everyone" = "Zezwalaj na publikowanie wpisów wszystkim";
|
||||
"group_hide_from_global_feed" = "Nie wyświetlaj publikacji w kanale globalnym";
|
||||
"statistics" = "Statystyk";
|
||||
"group_administrators_list" = "Lista adminów";
|
||||
"group_display_only_creator" = "Wyświetl tylko twórcę grupy";
|
||||
"group_display_all_administrators" = "Wyświetl wszystkich administratorów";
|
||||
"group_dont_display_administrators_list" = "Nic nie wyświetla";
|
||||
|
||||
"group_changeowner_modal_title" = "Przeniesienie praw właściciela";
|
||||
"group_changeowner_modal_text" = "Uwaga! Użytkownik przekazuje prawa właściciela użytkownikowi $1. To działanie jest nieodwracalne. Po przeniesieniu pozostaniesz administratorem, ale możesz łatwo przestać nim być.";
|
||||
"group_owner_setted" = "Nowy właściciel ($1) został pomyślnie przypisany do społeczności $2. Otrzymujesz uprawnienia administratora w społeczności. Jeśli chcesz odzyskać rolę właściciela, skontaktuj się z <a href='/support?act=new'>wsparcie techniczne strony</a>.";
|
||||
|
||||
"participants_zero" = "Brak uczestnika";
|
||||
"participants_one" = "Jeden uczestnik";
|
||||
"participants_few" = "$1 uczestników";
|
||||
|
@ -261,8 +316,6 @@
|
|||
"text_note" = "Treść";
|
||||
"create_note" = "Utwórz notatkę";
|
||||
"actions" = "Postępowanie";
|
||||
"feed" = "Nowości";
|
||||
"publish_post" = "Dodaj wpis";
|
||||
|
||||
"notes_zero" = "Brak notatek";
|
||||
"notes_one" = "Jedna notka";
|
||||
|
@ -289,30 +342,29 @@
|
|||
"menu_registration" = "Rejestracja";
|
||||
"menu_help" = "Pomoc";
|
||||
|
||||
"menu_logout" = "Wyjść";
|
||||
"menu_support" = "Pomoc";
|
||||
|
||||
"header_home" = "główny";
|
||||
"header_groups" = "grupy";
|
||||
"header_donate" = "poprzeć";
|
||||
"header_people" = "ludzie";
|
||||
"header_invite" = "zaprosić";
|
||||
"header_help" = "pomoc";
|
||||
"header_log_out" = "wyjść";
|
||||
"header_search" = "Wyszukiwanie";
|
||||
"header_search" = "wyszukiwanie";
|
||||
|
||||
"header_login" = "Zaloguj się";
|
||||
"header_registration" = "Rejestracja";
|
||||
|
||||
"left_menu_donate" = "Poprzeć";
|
||||
|
||||
"footer_about_instance" = "o instancji";
|
||||
"footer_blog" = "blog";
|
||||
"footer_help" = "pomoc";
|
||||
"footer_developers" = "programistom";
|
||||
"footer_choose_language" = "wybierz język";
|
||||
"footer_privacy" = "prywatność";
|
||||
|
||||
"notes_zero" = "Brak notatek";
|
||||
"notes_one" = "Jedna notka";
|
||||
"notes_few" = "$1 notki";
|
||||
"notes_many" = "$1 notatek";
|
||||
"notes_other" = "$1 notatek";
|
||||
|
||||
/* Settings */
|
||||
|
||||
"main" = "Główny";
|
||||
|
@ -340,6 +392,7 @@
|
|||
"search_for_groups" = "Szukaj grup";
|
||||
"search_for_people" = "Wyszukiwanie osób";
|
||||
"search_button" = "Znaleźć";
|
||||
"search_placeholder" = "Zacznij wpisywać dowolne imię, tytuł lub słowo";
|
||||
"results_zero" = "Brak wyników";
|
||||
"results_one" = "Jeden wynik";
|
||||
"results_few" = "$1 wynik";
|
||||
|
@ -355,6 +408,7 @@
|
|||
"privacy_setting_see_friends" = "Kto widzi moich przyjaciół";
|
||||
"privacy_setting_add_to_friends" = "Kto może nazywać mnie przyjacielem";
|
||||
"privacy_setting_write_wall" = "Kto może pisać na mojej ścianie";
|
||||
"privacy_setting_write_messages" = "Kto może pisać do mnie wiadomości";
|
||||
"privacy_value_anybody" = "Wszyscy chętni";
|
||||
"privacy_value_anybody_dative" = "Wszystkim chętnym";
|
||||
"privacy_value_users" = "Przez użytkownika OpenVK";
|
||||
|
@ -379,6 +433,40 @@
|
|||
"ui_settings_rating_show" = "Pokazać";
|
||||
"ui_settings_rating_hide" = "Ukrywać";
|
||||
|
||||
"additional_links" = "Dodatkowe linki";
|
||||
"ad_poster" = "Plakat reklamowy";
|
||||
|
||||
/* Two-factor authentication */
|
||||
|
||||
"two_factor_authentication" = "Uwierzytelnianie dwuskładnikowe";
|
||||
"two_factor_authentication_disabled" = "Zapewnia niezawodną ochronę przed włamaniem: aby wejść na stronę, musisz wprowadzić kod otrzymany w aplikacji 2FA.";
|
||||
"two_factor_authentication_enabled" = "Uwierzytelnianie dwuskładnikowe jest włączone. Twoja strona jest chroniona.";
|
||||
"two_factor_authentication_login" = "Masz włączone uwierzytelnianie dwuskładnikowe. Aby się zalogować, wprowadź kod otrzymany w aplikacji.";
|
||||
|
||||
"two_factor_authentication_settings_1" = "Uwierzytelnianie dwuskładnikowe za pośrednictwem TOTP może być używane nawet bez Internetu. Aby to zrobić, potrzebujesz aplikacji do generowania kodów. Na przykład,<b>Google Authenticator</b> Dla Androida i iOS lub wolne<b>Aegis I andOTP</B> dla Androida. Upewnij się, że telefon ma dokładną datę i godzinę.";
|
||||
"two_factor_authentication_settings_2" = "Korzystając z aplikacji do uwierzytelniania dwuskładnikowego, zeskanuj poniższy kod QR:";
|
||||
"two_factor_authentication_settings_3" = "lub ręcznie wprowadź tajny klucz:<b>$1</b>.";
|
||||
"two_factor_authentication_settings_4" = "Teraz wprowadź kod dostarczony przez aplikację i hasło ze strony, abyśmy mogli potwierdzić, że naprawdę jesteś sobą.";
|
||||
|
||||
"connect" = "Podłączyć";
|
||||
"enable" = "Włączyć";
|
||||
"disable" = "Wyłączyć";
|
||||
"code" = "Kod";
|
||||
"2fa_code" = "Kod 2FA";
|
||||
|
||||
"incorrect_password" = "Nieprawidłowe hasło";
|
||||
"incorrect_code" = "Nieprawidłowy kod";
|
||||
"incorrect_2fa_code" = "Nieprawidłowy kod uwierzytelniania dwuskładnikowego";
|
||||
"two_factor_authentication_enabled_message" = "Uwierzytelnianie dwuskładnikowe włączone";
|
||||
"two_factor_authentication_enabled_message_description" = "Twoja strona stała się trudniejsza do zhakowania. Zachęcamy do pobrania <a href='javascript:viewBackupCodes()'>kody zapasowe</a>";
|
||||
"two_factor_authentication_disabled_message" = "Uwierzytelnianie dwuskładnikowe wyłączone";
|
||||
|
||||
"view_backup_codes" = "Zobacz kody zapasowe";
|
||||
"backup_codes" = "Kody zapasowe do potwierdzenia logowania";
|
||||
"two_factor_authentication_backup_codes_1" = "Kody zapasowe pozwalają potwierdzić logowanie, gdy nie masz dostępu do telefonu, na przykład podczas podróży.";
|
||||
"two_factor_authentication_backup_codes_2" = "Masz jeszcze <b>10 kodów</b>, każdy kod może być użyty tylko raz. Wydrukuj je, odłóż w bezpieczne miejsce i użyj, gdy potrzebne są kody, aby potwierdzić wejście.";
|
||||
"two_factor_authentication_backup_codes_3" = "Możesz uzyskać nowe kody, jeśli się skończą. Ważne są tylko ostatnio utworzone kody kopii zapasowych.";
|
||||
|
||||
/* Sorting */
|
||||
|
||||
"sort_randomly" = "Sortuj losowo";
|
||||
|
@ -434,6 +522,7 @@
|
|||
"nt_post_instrumental" = "postem";
|
||||
"nt_note_instrumental" = "notką";
|
||||
"nt_photo_instrumental" = "zdjęciem";
|
||||
"nt_topic_instrumental" = "tematem";
|
||||
|
||||
/* Time */
|
||||
|
||||
|
@ -444,21 +533,6 @@
|
|||
"time_today" = "dziś";
|
||||
"time_yesterday" = "wczo";
|
||||
|
||||
"your_email_address" = "Twój adres e-mail";
|
||||
"your_page_address" = "Adres Twojej strony";
|
||||
"page_address" = "Adres strony";
|
||||
"current_email_address" = "Aktualny adres";
|
||||
"page_id" = "ID strony";
|
||||
"you_can_also" = "Możesz także";
|
||||
"delete_your_page" = "usuń swoją stronę";
|
||||
"delete_album" = "usuń album";
|
||||
|
||||
"ui_settings_interface" = "Interface";
|
||||
"ui_settings_sidebar" = "Lewe menu";
|
||||
"ui_settings_rating" = "Ranking";
|
||||
"ui_settings_rating_show" = "Pokazać";
|
||||
"ui_settings_rating_hide" = "Ukrywać";
|
||||
|
||||
"points" = "Głos";
|
||||
"points_count" = "głos";
|
||||
"on_your_account" = "na twoim koncie";
|
||||
|
@ -478,6 +552,33 @@
|
|||
"usages_total" = "Ilość zastosowań";
|
||||
"usages_left" = "Pozostało zastosowań";
|
||||
|
||||
"points_transfer_dialog_header_1" = "Możesz wysłać jako prezent lub przekazać część głosów innej osobie.";
|
||||
"points_transfer_dialog_header_2" = "Twoje bieżące saldo:";
|
||||
|
||||
"points_amount_one" = "1 głos";
|
||||
"points_amount_few" = "$1 głosy";
|
||||
"points_amount_many" = "$1 głosów";
|
||||
"points_amount_other" = "$1 głosów";
|
||||
|
||||
"transfer_poins" = "Przekazywanie głosów";
|
||||
"transfer_poins_button" = "Oddaj głosy";
|
||||
"also_you_can_transfer_points" = "Możesz także <a href=\"javascript:showCoinsTransferDialog($1, '$2')\">przekazać głosy</a> innej osobie.";
|
||||
|
||||
"transferred_to_you" = "przekazał ci";
|
||||
|
||||
"receiver_address" = "Adres odbiorcy";
|
||||
"coins_count" = "Liczba głosów";
|
||||
"message" = "Wiadomość";
|
||||
|
||||
"failed_to_tranfer_points" = "Nie udało się oddać głosów";
|
||||
|
||||
"points_transfer_successful" = "Pomyślnie przekazałeś <b>$1 <a href=\"$2\">$3</a></b>.";
|
||||
"not_all_information_has_been_entered" = "Nie wszystkie informacje zostały wprowadzone.";
|
||||
"negative_transfer_value" = "Nie możemy ukraść głosów innej osobie, przepraszam.";
|
||||
"message_is_too_long" = "Wiadomość jest za długa.";
|
||||
"receiver_not_found" = "Nie znaleziono odbiorcy.";
|
||||
"you_dont_have_enough_points" = "Masz za mało głosów.";
|
||||
|
||||
/* Gifts */
|
||||
|
||||
"gift" = "Prezent";
|
||||
|
@ -509,9 +610,115 @@
|
|||
"coins_many" = "$1 głosów";
|
||||
"coins_other" = "$1 głosów";
|
||||
|
||||
"users_gifts" = "Prezent";
|
||||
|
||||
/* Support */
|
||||
|
||||
"support_opened" = "Odsłonięty";
|
||||
"support_answered" = "Z odpowiedzią";
|
||||
"support_closed" = "Zasłonięty";
|
||||
"support_ticket" = "Obchodzenie się";
|
||||
"support_tickets" = "Obchodzenie się";
|
||||
"support_status_0" = "Pytanie w toku";
|
||||
"support_status_1" = "Jest odpowiedź";
|
||||
"support_status_2" = "Zasłonięty";
|
||||
"support_greeting_hi" = "Witajcie, $1!";
|
||||
"support_greeting_regards" = "Pozdrawiam,<br/>zespół wsparcia $1.";
|
||||
|
||||
"support_faq" = "Najczęściej zadawane pytania";
|
||||
"support_list" = "Lista zgłoszeń";
|
||||
"support_new" = "Nowy apel";
|
||||
|
||||
"support_faq_title" = "Dla kogo ta strona?";
|
||||
"support_faq_content" = "Witryna służy do wyszukiwania znajomych i znajomych, a także do przeglądania danych użytkownika. To jak przewodnik po mieście, dzięki któremu ludzie mogą szybko znaleźć aktualne informacje o osobie.";
|
||||
|
||||
"support_new_title" = "Wpisz temat swojego apelu";
|
||||
"support_new_content" = "Opisz problem lub sugestię";
|
||||
|
||||
"support_rate_good_answer" = "To dobra odpowiedź";
|
||||
"support_rate_bad_answer" = "To zła odpowiedź";
|
||||
"support_good_answer_user" = "Zostawiłeś pozytywną opinię.";
|
||||
"support_bad_answer_user" = "Zostawiłeś negatywną opinię.";
|
||||
"support_good_answer_agent" = "Użytkownik zostawił pozytywną opinię";
|
||||
"support_bad_answer_agent" = "Użytkownik zostawił negatywną opinię";
|
||||
"support_rated_good" = "Zostawiłeś pozytywną opinię na temat odpowiedzi.";
|
||||
"support_rated_bad" = "Zostawiłeś negatywną opinię na temat odpowiedzi.";
|
||||
"wrong_parameters" = "Nieprawidłowe parametry zapytania.";
|
||||
|
||||
"fast_answers" = "Szybkie odpowiedzi";
|
||||
|
||||
"comment" = "Komentarz";
|
||||
"sender" = "Nadawca";
|
||||
|
||||
"author" = "Autor";
|
||||
|
||||
"you_have_not_entered_text" = "Nie wpisałeś tekstu";
|
||||
"you_have_not_entered_name_or_text" = "Nie wpisałeś nazwy ani tekstu";
|
||||
|
||||
"ticket_changed" = "Ticket zmieniony";
|
||||
"ticket_changed_comment" = "Zmiany wejdą w życie za kilka sekund.";
|
||||
|
||||
/* Invite */
|
||||
|
||||
"invite" = "Zaprosić";
|
||||
"you_can_invite" = "Możesz zaprosić znajomych lub znajomych do sieci za pomocą spersonalizowanego linku:";
|
||||
"you_can_invite_2" = "Dołącz ten link do swojego postu. Użytkownik zarejestruje się i natychmiast pojawi się w twoich znajomych.";
|
||||
|
||||
/* Banned */
|
||||
|
||||
"banned_title" = "Ci ban";
|
||||
"banned_header" = "Zostałeś zablokowany";
|
||||
"banned_alt" = "Użytkownik jest zablokowany.";
|
||||
"banned_1" = "Przepraszam, <b>$1</b>, ale zostałeś zablokowany";
|
||||
"banned_2" = "A powód tego jest prosty: <b>$1</b>. Niestety, tym razem musieliśmy Cię zablokować na dobre.";
|
||||
"banned_3" = "Nadal możesz <a href=\"/support?act=new\">napisz do działu obsługi</a>, jeśli uważasz, że wystąpił błąd lub <a href=\"/logout?hash=$1\">wyjść</a>.";
|
||||
|
||||
/* Discussions */
|
||||
|
||||
"discussions" = "Dyskusja";
|
||||
|
||||
"messages_one" = "Jedna post";
|
||||
"messages_few" = "$1 postów";
|
||||
"messages_many" = "$1 postów";
|
||||
"messages_other" = "$1 postów";
|
||||
|
||||
"topic_messages_count_zero" = "W temacie brak postów";
|
||||
"topic_messages_count_one" = "W temacie jeden post";
|
||||
"topic_messages_count_few" = "W temacie $1 postów";
|
||||
"topic_messages_count_many" = "W temacie $1 postów";
|
||||
"topic_messages_count_other" = "W temacie $1 postów";
|
||||
|
||||
"replied" = "odpowiedzieć";
|
||||
"create_topic" = "Utwórz temat";
|
||||
|
||||
"new_topic" = "Nowy temat";
|
||||
"title" = "Nagłówek";
|
||||
"text" = "Teskt";
|
||||
|
||||
"view_topic" = "Zobacz temat";
|
||||
"edit_topic_action" = "Edytuj temat";
|
||||
"edit_topic" = "Edycja tematu";
|
||||
"topic_settings" = "Ustawienia temat";
|
||||
"pin_topic" = "Przypnij temat";
|
||||
"close_topic" = "Zamknij temat";
|
||||
"delete_topic" = "Usuń temat";
|
||||
|
||||
"topics_one" = "Jeden temat";
|
||||
"topics_few" = "$1 tematy";
|
||||
"topics_many" = "$1 tematy";
|
||||
"topics_other" = "$1 tematów";
|
||||
|
||||
"created" = "Powstały";
|
||||
|
||||
"everyone_can_create_topics" = "Każdy może tworzyć tematy";
|
||||
"display_list_of_topics_above_wall" = "Wyświetl listę tematów nad ścianą";
|
||||
|
||||
"topic_changes_saved_comment" = "Zaktualizowany tytuł i ustawienia pojawią się na stronie z motywem.";
|
||||
|
||||
"failed_to_create_topic" = "Nie można utworzyć tematu";
|
||||
"failed_to_change_topic" = "Nie można zmienić tematu";
|
||||
"no_title_specified" = "Nie podano tytułu.";
|
||||
|
||||
/* Errors */
|
||||
|
||||
"error_1" = "Nieprawidłowe zapytanie";
|
||||
|
@ -531,6 +738,7 @@
|
|||
"error_old_password" = "Stare hasło nie pasuje";
|
||||
"error_new_password" = "Nowe hasła nie pasują";
|
||||
"error_shorturl_incorrect" = "Krótki adres ma nieprawidłowy format.";
|
||||
"error_repost_fail" = "Nie można udostępnić wpisu";
|
||||
|
||||
"forbidden" = "Błąd dostępu";
|
||||
"forbidden_comment" = "Ustawienia prywatności tego użytkownika nie pozwalają na przeglądanie jego strony.";
|
||||
|
@ -541,15 +749,100 @@
|
|||
"photo_saved" = "Zdjęcie zapisane";
|
||||
"photo_saved_comment" = "Nowe zdjęcie profilowe pojawi się na twojej stronie";
|
||||
|
||||
"shared_succ" = "Wpis pojawi się na Twojej ścianie. Stuknij powiadomienie, aby przejść do ściany.";
|
||||
|
||||
"invalid_email_address" = "Nieprawidłowy adres e-mail";
|
||||
"invalid_email_address_comment" = "Podany przez Ciebie adres e-mail nie jest poprawny.";
|
||||
|
||||
"invalid_telegram_name" = "Nieprawidłowa nazwa konta Telegram";
|
||||
"invalid_telegram_name_comment" = "Wpisałeś niepoprawną nazwę konta Telegram.";
|
||||
|
||||
"invalid_birth_date" = "Nieprawidłowa data urodzenia";
|
||||
"invalid_birth_date_comment" = "Podana data urodzenia nie jest poprawna.";
|
||||
|
||||
"token_manipulation_error" = "Błąd manipulacji tokenem";
|
||||
"token_manipulation_error_comment" = "Token jest nieprawidłowy lub wygasł";
|
||||
|
||||
"profile_changed" = "Profil zmieniony";
|
||||
"profile_changed_comment" = "Twój aktywny profil został zmieniony.";
|
||||
"profile_not_found" = "Nie znaleziono użytkownika.";
|
||||
|
||||
"suspicious_registration_attempt" = "Podejrzana próba rejestracji";
|
||||
"suspicious_registration_attempt_comment" = "Próbowałeś zarejestrować się z podejrzanego miejsca.";
|
||||
|
||||
"rate_limit_error" = "Chumba, jesteś pojebany?";
|
||||
"rate_limit_error_comment" = "Idź do psychiatry, napij się kółek. W $1 nie możesz tak często rzucać shitpostu. Kod wyjątku: $2.";
|
||||
|
||||
"not_enough_permissions" = "Za mało praw";
|
||||
"not_enough_permissions_comment" = "Nie masz wystarczających uprawnień, aby wykonać tę czynność.";
|
||||
|
||||
"login_required_error" = "Za mało praw";
|
||||
"login_required_error_comment" = "Aby wyświetlić tę stronę, musisz przejść do witryny.";
|
||||
|
||||
"captcha_error" = "Niepoprawnie wprowadzone znaki";
|
||||
"captcha_error_comment" = "Upewnij się, że poprawnie wypełniłeś pole captcha.";
|
||||
|
||||
/* Admin actions */
|
||||
|
||||
"login_as" = "Zaloguj się jako $1";
|
||||
"manage_user_action" = "Zarządzanie użytkownikiem";
|
||||
"ban_user_action" = "Zbanuj użytkownika";
|
||||
"manage_group_action" = "Zarządzanie grupą";
|
||||
"ban_user_action" = "Zablokuj użytkownika";
|
||||
"warn_user_action" = "Ostrzec użytkownika";
|
||||
|
||||
/* Paginator */
|
||||
/* Paginator (deprecated) */
|
||||
|
||||
"paginator_back" = "Do tyłu";
|
||||
"paginator_page" = "Strona $1";
|
||||
"paginator_next" = "Dalej";
|
||||
|
||||
/* About */
|
||||
|
||||
"about_openvk" = "O OpenVK";
|
||||
|
||||
"about_this_instance" = "O tej instancji";
|
||||
"rules" = "Zasada";
|
||||
"most_popular_groups" = "Najpopularniejsze grupy";
|
||||
"on_this_instance_are" = "W tej instancji:";
|
||||
|
||||
"about_users_one" = "<b>1</b> użytkownik";
|
||||
"about_users_few" = "<b>$1</b> użytkowników";
|
||||
"about_users_many" = "<b>$1</b> użytkowników";
|
||||
"about_users_other" = "<b>$1</b> użytkowników";
|
||||
|
||||
"about_online_users_one" = "<b>1</b> użytkownik online";
|
||||
"about_online_users_few" = "<b>$1</b> użytkowników online";
|
||||
"about_online_users_many" = "<b>$1</b> użytkowników online";
|
||||
"about_online_users_other" = "<b>$1</b> użytkowników online";
|
||||
|
||||
"about_active_users_one" = "<b>1</b> aktywny użytkownik";
|
||||
"about_active_users_few" = "<b>$1</b> aktywnych użytkowników";
|
||||
"about_active_users_many" = "<b>$1</b> aktywnych użytkowników";
|
||||
"about_active_users_other" = "<b>$1</b> aktywnych użytkowników";
|
||||
|
||||
"about_groups_one" = "<b>1</b> grupa";
|
||||
"about_groups_few" = "<b>$1</b> grupy";
|
||||
"about_groups_many" = "<b>$1</b> grup";
|
||||
"about_groups_other" = "<b>$1</b> grup";
|
||||
|
||||
"about_wall_posts_one" = "<b>1</b> wpis na ścianach";
|
||||
"about_wall_posts_few" = "<b>$1</b> wpisy na ścianach";
|
||||
"about_wall_posts_many" = "<b>$1</b> wpisów na ścianach";
|
||||
"about_wall_posts_other" = "<b>$1</b> wpisów na ścianach";
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
"ok" = "ОК";
|
||||
"yes" = "Tak";
|
||||
"no" = "Nie";
|
||||
"cancel" = "Odwołanie";
|
||||
"edit_action" = "Zmienić";
|
||||
"transfer" = "Przekazać";
|
||||
"close" = "Zamknąć";
|
||||
|
||||
"warning" = "Uwaga";
|
||||
"question_confirm" = "Tej akcji nie można cofnąć. Czy naprawdę jesteś pewien tego, co chcesz zrobić?";
|
||||
|
||||
/* User alerts */
|
||||
|
||||
"user_alert_scam" = "Wiele osób skarżyło się na to konto w związku z oszustwem. Zachowaj ostrożność, zwłaszcza jeśli zostaniesz poproszony o pieniądze.";
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"forgot_password" = "Забыли пароль?";
|
||||
|
||||
"login_failed" = "Не удалось войти";
|
||||
"invalid_username_or_password" = "Неверное имя пользователя или пароль. <a href='/restore.pl'>Забыли пароль?</a>";
|
||||
"invalid_username_or_password" = "Неверное имя пользователя или пароль. <a href='/restore'>Забыли пароль?</a>";
|
||||
|
||||
"failed_to_register" = "Не удалось зарегистрироваться";
|
||||
"referral_link_invalid" = "Пригласительная ссылка недействительна.";
|
||||
|
@ -255,6 +255,7 @@
|
|||
"hidden_yes" = "Скрыт: Да";
|
||||
"hidden_no" = "Скрыт: Нет";
|
||||
"group_allow_post_for_everyone" = "Разрешить публиковать записи всем";
|
||||
"group_hide_from_global_feed" = "Не отображать публикации в глобальной ленте";
|
||||
"statistics" = "Статистика";
|
||||
"group_administrators_list" = "Список админов";
|
||||
"group_display_only_creator" = "Отображать только создателя группы";
|
||||
|
@ -262,7 +263,7 @@
|
|||
"group_dont_display_administrators_list" = "Ничего не отображать";
|
||||
|
||||
"group_changeowner_modal_title" = "Передача прав владельца";
|
||||
"group_changeowner_modal_text" = "Внимание! Вы передаёте права владельца пользователю $1. Это действие необратимо. После передави вы останетесь адмиинстратором, но сможете легко перестать им быть.";
|
||||
"group_changeowner_modal_text" = "Внимание! Вы передаёте права владельца пользователю $1. Это действие необратимо. После передачи вы останетесь адмиинстратором, но сможете легко перестать им быть.";
|
||||
"group_owner_setted" = "Новый владелец ($1) успешно назначен в сообщество $2. Вам выданы права администратора в сообществе. Если Вы хотите вернуть роль владельца, обратитесь в <a href='/support?act=new'>техническую поддержку сайта</a>.";
|
||||
|
||||
"participants_zero" = "Ни одного участника";
|
||||
|
@ -355,6 +356,7 @@
|
|||
|
||||
"left_menu_donate" = "Поддержать";
|
||||
|
||||
"footer_about_instance" = "об инстанции";
|
||||
"footer_blog" = "блог";
|
||||
"footer_help" = "помощь";
|
||||
"footer_developers" = "разработчикам";
|
||||
|
@ -404,6 +406,7 @@
|
|||
"privacy_setting_see_friends" = "Кому видно моих друзей";
|
||||
"privacy_setting_add_to_friends" = "Кто может называть меня другом";
|
||||
"privacy_setting_write_wall" = "Кто может писать у меня на стене";
|
||||
"privacy_setting_write_messages" = "Кто может писать мне сообщения";
|
||||
"privacy_value_anybody" = "Все желающие";
|
||||
"privacy_value_anybody_dative" = "Всем желающим";
|
||||
"privacy_value_users" = "Пользователям OpenVK";
|
||||
|
@ -429,6 +432,7 @@
|
|||
"ui_settings_rating_hide" = "Скрывать";
|
||||
|
||||
"additional_links" = "Дополнительные ссылки";
|
||||
"ad_poster" = "Рекламный плакат";
|
||||
|
||||
/* Two-factor authentication */
|
||||
|
||||
|
@ -799,6 +803,36 @@
|
|||
|
||||
"about_openvk" = "Об OpenVK";
|
||||
|
||||
"about_this_instance" = "Об этой инстанции";
|
||||
"rules" = "Правила";
|
||||
"most_popular_groups" = "Самые популярные группы";
|
||||
"on_this_instance_are" = "На этой инстанции:";
|
||||
|
||||
"about_users_one" = "<b>1</b> пользователь";
|
||||
"about_users_few" = "<b>$1</b> пользователя";
|
||||
"about_users_many" = "<b>$1</b> пользователей";
|
||||
"about_users_other" = "<b>$1</b> пользователей";
|
||||
|
||||
"about_online_users_one" = "<b>1</b> пользователь в сети";
|
||||
"about_online_users_few" = "<b>$1</b> пользователя в сети";
|
||||
"about_online_users_many" = "<b>$1</b> пользователей в сети";
|
||||
"about_online_users_other" = "<b>$1</b> пользователей в сети";
|
||||
|
||||
"about_active_users_one" = "<b>1</b> активный пользователь";
|
||||
"about_active_users_few" = "<b>$1</b> активных пользователя";
|
||||
"about_active_users_many" = "<b>$1</b> активных пользователей";
|
||||
"about_active_users_other" = "<b>$1</b> активных пользователей";
|
||||
|
||||
"about_groups_one" = "<b>1</b> группа";
|
||||
"about_groups_few" = "<b>$1</b> группы";
|
||||
"about_groups_many" = "<b>$1</b> групп";
|
||||
"about_groups_other" = "<b>$1</b> групп";
|
||||
|
||||
"about_wall_posts_one" = "<b>1</b> запись на стенах";
|
||||
"about_wall_posts_few" = "<b>$1</b> записи на стенах";
|
||||
"about_wall_posts_many" = "<b>$1</b> записей на стенах";
|
||||
"about_wall_posts_other" = "<b>$1</b> записей на стенах";
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
"ok" = "ОК";
|
||||
|
@ -811,3 +845,7 @@
|
|||
|
||||
"warning" = "Внимание";
|
||||
"question_confirm" = "Это действие нельзя отменить. Вы действительно уверены в том что хотите сделать?";
|
||||
|
||||
/* User alerts */
|
||||
|
||||
"user_alert_scam" = "На этот аккаунт много жаловались в связи с мошенничеством. Пожалуйста, будьте осторожны, особенно если у вас попросят денег.";
|
|
@ -18,7 +18,7 @@
|
|||
"forgot_password" = "Запамятовали шифръ?";
|
||||
|
||||
"login_failed" = "Не удалось войти";
|
||||
"invalid_username_or_password" = "Невѣрное имя пользователя или шифръ. <a href='/restore.pl'>Забыли шифръ?</a>";
|
||||
"invalid_username_or_password" = "Невѣрное имя пользователя или шифръ. <a href='/restore'>Забыли шифръ?</a>";
|
||||
|
||||
"failed_to_register" = "Не удалось зарегистрироваться";
|
||||
"referral_link_invalid" = "Пригласительная ссылка недѣйствительна.";
|
||||
|
@ -587,8 +587,8 @@
|
|||
"you_have_not_entered_text" = "Вы не ввели текстъ";
|
||||
"you_have_not_entered_name_or_text" = "Вы не ввели имя или текстъ";
|
||||
|
||||
"support_ticket_changed" = "Тикетъ измѣненъ";
|
||||
"support_ticket_changed_comment" = "Измѣненія вступятъ силу черезъ нѣсколько секундъ.";
|
||||
"ticket_changed" = "Тикетъ измѣненъ";
|
||||
"ticket_changed_comment" = "Измѣненія вступятъ силу черезъ нѣсколько секундъ.";
|
||||
|
||||
/* Invite */
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"forgot_password" = "Забули пароль?";
|
||||
|
||||
"login_failed" = "Не вдалося увійти";
|
||||
"invalid_username_or_password" = "Неправильне ім'я користувача або пароль. <a href='/restore.pl'>Забули пароль?</a>";
|
||||
"invalid_username_or_password" = "Неправильне ім'я користувача або пароль. <a href='/restore'>Забули пароль?</a>";
|
||||
|
||||
"failed_to_register" = "Не вдалося зареєструватися";
|
||||
"referral_link_invalid" = "Посилання на запрошення недійсне.";
|
||||
|
|
Loading…
Reference in a new issue