ADD: Доступ по ссылке

См. https://libarea.ru/post/1541/add-dostup-po-ssylke
This commit is contained in:
Evg 2023-09-26 05:34:24 +03:00
parent 2ea9d307c0
commit b94879f6bb
22 changed files with 87 additions and 43 deletions

View file

@ -14,11 +14,11 @@ class CommentController extends Controller
// Все комментарии (объединение ответов и комментариев для UX)
public function index($sheet)
{
$pagesCount = CommentModel::getCommentsCount($this->user, $sheet);
$comments = CommentModel::getComments($this->pageNumber, $this->limit, $this->user, $sheet);
$pagesCount = CommentModel::getCommentsCount($sheet);
$comments = CommentModel::getComments($this->pageNumber, $this->limit, $sheet);
$pagesCount = AnswerModel::getAnswersCount($sheet);
$answers = AnswerModel::getAnswers($this->pageNumber, $this->limit, $this->user, $sheet);
$answers = AnswerModel::getAnswers($this->pageNumber, $this->limit, $sheet);
$m = [
'og' => false,
@ -44,18 +44,4 @@ class CommentController extends Controller
]
);
}
public function lastComment()
{
$comments = CommentModel::getComments(1, 5, $this->user, 'all');
$result = [];
foreach ($comments as $ind => $row) {
$row['content'] = fragment($row['comment_content'], 98);
$row['date'] = Html::langDate($row['comment_date']);
$result[$ind] = $row;
}
return json_encode($result, JSON_PRETTY_PRINT);
}
}

View file

@ -101,8 +101,9 @@ class AddPostController extends Controller
$post_related = $this->relatedPost();
$translation = $fields['translation'] ?? false;
$post_draft = $fields['post_draft'] ?? false;
$post_nsfw = $fields['post_nsfw'] ?? false;
$post_draft = $fields['draft'] ?? false;
$post_nsfw = $fields['nsfw'] ?? false;
$post_hidden = $fields['hidden'] ?? false;
$closed = $fields['closed'] ?? false;
$top = $fields['top'] ?? false;
@ -121,6 +122,7 @@ class AddPostController extends Controller
'post_translation' => $translation == 'on' ? 1 : 0,
'post_draft' => $post_draft == 'on' ? 1 : 0,
'post_nsfw' => $post_nsfw == 'on' ? 1 : 0,
'post_hidden' => $post_hidden == 'on' ? 1 : 0,
'post_ip' => Request::getRemoteAddress(),
'post_published' => ($trigger === false) ? 0 : 1,
'post_user_id' => $this->user['id'],

View file

@ -124,6 +124,7 @@ class EditPostController extends Controller
'post_tl' => Request::getPostInt('content_tl'),
'post_closed' => Request::getPost('closed') == 'on' ? 1 : 0,
'post_nsfw' => Request::getPost('nsfw') == 'on' ? 1 : 0,
'post_hidden' => Request::getPost('hidden') == 'on' ? 1 : 0,
'post_top' => Request::getPost('top') == 'on' ? 1 : 0,
'post_poll' => $this->selectPoll(Request::getPost('poll_id')),
'post_modified' => date("Y-m-d H:i:s"),

View file

@ -175,6 +175,9 @@ return [
'is_nsfw' => 'Enable viewing adult content and NSFW (+blur thumbnails) in the feed.',
'nsfw_post' => 'Is the content adult (NSFW)?',
'hidden_post' => 'Access via link?',
'hidden_post_help' => 'Anyone with a link can see it.',
'delete_profile' => 'Delete profile',
'read_carefully' => 'Read carefully, it\'s really important!',
'read_information' => 'You are about to delete your profile. To delete a profile, you must confirm that you are ready to delete all of the information listed. Deleting a profile is a <strong>irreversible action</strong>, you won\'t be able to get your lost data back.',

View file

@ -175,6 +175,9 @@ return [
'is_nsfw' => 'Activați vizualizarea conținutului pentru adulți și NSFW (+ miniaturi estompate) în feed.',
'nsfw_post' => 'Este adultul de conținut (NSFW)?',
'hidden_post' => 'Acces prin link?',
'hidden_post_help' => 'Oricine are un link îl poate vedea.',
'delete_profile' => 'Ștergeți profilul',
'read_carefully' => 'Citiți cu atenție, este foarte important!',
'read_information' => 'Sunteți pe cale să vă ștergeți profilul. Pentru a șterge un profil, trebuie să confirmați că sunteți pregătit să ștergeți toate informațiile enumerate. Ștergerea unui profil este o <strong>acțiune ireversibilă</strong>, nu veți putea recupera datele pierdute.',

View file

@ -174,6 +174,9 @@ return [
'is_nsfw' => 'Включите просмотр контента для взрослых и NSFW (+ размытие миниатюр) в ленте.',
'nsfw_post' => 'Является ли контент для взрослых (NSFW)?',
'hidden_post' => 'Доступ по ссылке?',
'hidden_post_help' => 'Могут посмотреть все, у кого есть ссылка.',
'delete_profile' => 'Удалить профиль',
'read_carefully' => 'Прочтите внимательно, это действительно важно!',

View file

@ -175,6 +175,9 @@ return [
'is_nsfw' => 'Увімкніть перегляд контенту для дорослих та NSFW (+ розмиття мініатюр) у стрічці.',
'nsfw_post' => 'Чи є контент для дорослих (NSFW)?',
'hidden_post' => 'Доступ за посиланням?',
'hidden_post_help' => 'Можуть подивитися всі, хто має посилання.',
'delete_profile' => 'Видалити профіль',
'read_carefully' => 'Прочитайте уважно, це справді важливо!',
'read_information' => 'Ви збираєтесь видалити свій профіль. Для видалення профілю необхідно підтвердити, що ви готові видалити всю перелічену інформацію. Видалення профілю <strong>необоротна дія</strong>, ви не зможете повернути втрачені дані.',

View file

@ -175,6 +175,9 @@ return [
'is_nsfw' => 'Cho phép xem nội dung người lớn và NSFW (+ làm mờ hình thu nhỏ) trong nguồn cấp dữ liệu.',
'nsfw_post' => 'Nội dung có dành cho người trưởng thành (NSFW) không?',
'hidden_post' => 'Truy cập thông qua liên kết?',
'hidden_post_help' => 'Bất cứ ai có liên kết đều có thể nhìn thấy nó.',
'delete_profile' => 'Xóa hồ sơ',
'read_carefully' => 'Hãy đọc kỹ, điều này thực sự quan trọng!',
'read_information' => 'Bạn sắp xóa hồ sơ của mình. Để xóa hồ sơ, bạn phải xác nhận rằng bạn sẵn sàng xóa tất cả thông tin được liệt kê. Xóa hồ sơ là một <strong>hành động không thể đảo ngược</strong>; bạn sẽ không thể khôi phục dữ liệu bị mất.',

View file

@ -175,6 +175,9 @@ return [
'is_nsfw' => '允許在提要中查看成人內容和 NSFW+模糊縮略圖)。',
'nsfw_post' => '内容适合成人吗?',
'hidden_post' => '通过链接访问?',
'hidden_post_help' => '任何有链接的人都可以看到它。',
'delete_profile' => '删除配置文件',
'read_carefully' => '仔细阅读,真的很重要!',
'read_information' => '您即将删除您的个人资料。 要删除配置文件,您必须确认您已准备好删除列出的所有信息。 删除配置文件是<strong>不可逆操作</strong>,您将无法找回丢失的数据。',

View file

@ -176,6 +176,9 @@ return [
'is_nsfw' => '允許在提要中查看成人內容和 NSFW+模糊縮略圖)。',
'nsfw_post' => '内容适合成人吗?',
'hidden_post' => '通过链接访问?',
'hidden_post_help' => '任何有链接的人都可以看到它。',
'delete_profile' => '删除配置文件',
'read_carefully' => '仔细阅读,真的很重要!',
'read_information' => '您即将删除您的个人资料。 要删除配置文件,您必须确认您已准备好删除列出的所有信息。 删除配置文件是<strong>不可逆操作</strong>,您将无法找回丢失的数据。',

View file

@ -56,9 +56,9 @@ class AnswerModel extends \Hleb\Scheme\App\Models\MainModel
// All answers
// Все ответы
public static function getAnswers($page, $limit, $user, $sheet)
public static function getAnswers($page, $limit, $sheet)
{
$user_id = $user['id'];
$user_id = UserData::getUserId();
$sort = self::sorts($sheet);
$start = ($page - 1) * $limit;
$sql = "SELECT
@ -112,9 +112,11 @@ class AnswerModel extends \Hleb\Scheme\App\Models\MainModel
public static function sorts($sheet)
{
$hidden = UserData::checkAdmin() ? "" : "AND post_hidden = 0";
switch ($sheet) {
case 'all':
$sort = "WHERE answer_is_deleted = 0 AND post_tl = 0 AND post_is_deleted = 0";
$sort = "WHERE answer_is_deleted = 0 AND post_tl = 0 AND post_is_deleted = 0 $hidden";
break;
case 'deleted':
$sort = "WHERE answer_is_deleted = 1";
@ -242,9 +244,9 @@ class AnswerModel extends \Hleb\Scheme\App\Models\MainModel
LEFT JOIN posts ON answer_post_id = post_id
LEFT JOIN votes_answer ON votes_answer_item_id = answer_id
AND votes_answer_user_id = :uid_vote
WHERE answer_user_id = :user_id
AND answer_is_deleted = 0 AND post_is_deleted = 0 AND post_tl = 0 AND post_tl = 0
ORDER BY answer_id DESC LIMIT :start, :limit ";
WHERE answer_user_id = :user_id AND post_hidden = 0
AND answer_is_deleted = 0 AND post_is_deleted = 0 AND post_tl = 0 AND post_tl = 0
ORDER BY answer_id DESC LIMIT :start, :limit ";
return DB::run($sql, ['user_id' => $user_id, 'uid_vote' => $uid_vote, 'start' => $start, 'limit' => $limit])->fetchAll();
}

View file

@ -91,8 +91,9 @@ class CommentModel extends \Hleb\Scheme\App\Models\MainModel
}
// Все комментарии
public static function getComments($page, $limit, $user, $sheet)
public static function getComments($page, $limit, $sheet)
{
$hidden = UserData::checkAdmin() ? "" : "AND post_hidden = 0";
$sort = self::sorts($sheet);
$start = ($page - 1) * $limit;
@ -101,6 +102,7 @@ class CommentModel extends \Hleb\Scheme\App\Models\MainModel
post_title,
post_slug,
post_tl,
post_hidden,
post_feature,
post_user_id,
post_closed,
@ -126,14 +128,14 @@ class CommentModel extends \Hleb\Scheme\App\Models\MainModel
JOIN posts ON comment_post_id = post_id AND post_tl <= :tl
LEFT JOIN votes_comment ON votes_comment_item_id = comment_id
AND votes_comment_user_id = :uid
WHERE $sort
WHERE $sort $hidden
ORDER BY comment_id DESC LIMIT :start, :limit";
return DB::run($sql, ['uid' => $user['id'], 'start' => $start, 'limit' => $limit, 'tl' => $user['trust_level']])->fetchAll();
return DB::run($sql, ['uid' => UserData::getUserId(), 'start' => $start, 'limit' => $limit, 'tl' => UserData::getUserTl()])->fetchAll();
}
// Количество комментариев
public static function getCommentsCount($user, $sheet)
public static function getCommentsCount($sheet)
{
$sort = self::sorts($sheet);
@ -144,7 +146,7 @@ class CommentModel extends \Hleb\Scheme\App\Models\MainModel
JOIN posts ON comment_post_id = post_id AND post_tl <= :tl
WHERE $sort";
return DB::run($sql, ['tl' => $user['trust_level']])->rowCount();
return DB::run($sql, ['tl' => UserData::getUserTl()])->rowCount();
}
public static function sorts($sheet)
@ -215,7 +217,7 @@ class CommentModel extends \Hleb\Scheme\App\Models\MainModel
LEFT JOIN votes_comment ON votes_comment_item_id = comment_id
AND votes_comment_user_id = :id
WHERE comment_user_id = :user_id AND comment_is_deleted = 0
AND post_is_deleted = 0 AND post_tl = 0
AND post_is_deleted = 0 AND post_tl = 0 AND post_hidden = 0
ORDER BY comment_id DESC LIMIT :start, :limit";
return DB::run($sql, ['user_id' => $user_id, 'id' => $id, 'start' => $start, 'limit' => $limit])->fetchAll();

View file

@ -35,6 +35,7 @@ class FeedModel extends \Hleb\Scheme\App\Models\MainModel
post_translation,
post_draft,
post_nsfw,
post_hidden,
post_date,
post_published,
post_user_id,
@ -129,24 +130,26 @@ class FeedModel extends \Hleb\Scheme\App\Models\MainModel
public static function sorting($sheet)
{
$hidden = UserData::checkAdmin() ? "" : "AND post_hidden = 0";
switch ($sheet) {
case 'facet.feed':
$string = "WHERE facet_list LIKE :qa AND post_draft = 0 AND post_type = 'post'";
$string = "WHERE facet_list LIKE :qa AND post_draft = 0 AND post_type = 'post' $hidden";
break;
case 'facet.feed.topic':
$string = "WHERE facet_list LIKE :qa AND facet_list LIKE :topic AND post_draft = 0 AND post_type = 'post'";
break;
case 'questions':
$string = "WHERE facet_list LIKE :qa AND post_draft = 0 AND post_feature = 1";
$string = "WHERE facet_list LIKE :qa AND post_draft = 0 AND post_feature = 1 $hidden";
break;
case 'posts':
$string = "WHERE facet_list LIKE :qa AND post_draft = 0 AND post_feature = 0";
$string = "WHERE facet_list LIKE :qa AND post_draft = 0 AND post_feature = 0 $hidden";
break;
case 'recommend':
$string = "WHERE facet_list LIKE :qa AND post_is_recommend = 1 AND post_draft = 0 AND post_type = 'post'";
$string = "WHERE facet_list LIKE :qa AND post_is_recommend = 1 AND post_draft = 0 AND post_type = 'post' $hidden";
break;
case 'web.feed':
$string = "WHERE post_url_domain = :qa AND post_draft = 0";
$string = "WHERE post_url_domain = :qa AND post_draft = 0 $hidden";
break;
case 'profile.posts':
$string = "WHERE post_user_id = :qa AND post_draft = 0 AND post_type = 'post'";

View file

@ -40,7 +40,7 @@ class HomeModel extends \Hleb\Scheme\App\Models\MainModel
$display = self::display($type);
$sort = self::sortDay($type);
$nsfw = (UserData::getUserNSFW()) ? "" : "AND post_nsfw = 0";
$nsfw = UserData::getUserNSFW() ? "" : "AND post_nsfw = 0";
$start = ($page - 1) * $limit;
$sql = "SELECT DISTINCT
@ -51,6 +51,7 @@ class HomeModel extends \Hleb\Scheme\App\Models\MainModel
post_translation,
post_draft,
post_nsfw,
post_hidden,
post_date,
post_published,
post_user_id,
@ -90,7 +91,6 @@ class HomeModel extends \Hleb\Scheme\App\Models\MainModel
LEFT JOIN votes_post
ON votes_post_item_id = post_id AND votes_post_user_id = :uid2
WHERE $ignoring post_type != 'page' AND post_draft = 0 $nsfw $string $display $sort LIMIT :start, :limit";
return DB::run($sql, ['uid' => $user_id, 'uid2' => $user_id, 'start' => $start, 'limit' => $limit])->fetchAll();
}
@ -179,6 +179,8 @@ class HomeModel extends \Hleb\Scheme\App\Models\MainModel
$user_answer = "AND answer_user_id != $user_id AND post_tl <= $trust_level";
}
$hidden = UserData::checkAdmin() ? "" : "AND post_hidden = 0";
$sql = "SELECT
answer_id,
answer_post_id,
@ -186,12 +188,13 @@ class HomeModel extends \Hleb\Scheme\App\Models\MainModel
answer_date,
post_id,
post_slug,
post_hidden,
login,
avatar
FROM answers
LEFT JOIN users ON id = answer_user_id
RIGHT JOIN posts ON post_id = answer_post_id
WHERE answer_is_deleted = 0 AND post_is_deleted = 0
WHERE answer_is_deleted = 0 AND post_is_deleted = 0 $hidden
$user_answer AND post_type = 'post'
ORDER BY answer_id DESC LIMIT 5";

View file

@ -26,6 +26,7 @@ class PostModel extends \Hleb\Scheme\App\Models\MainModel
post_closed,
post_top,
post_nsfw,
post_hidden,
post_url,
post_poll,
post_url_domain)
@ -47,6 +48,7 @@ class PostModel extends \Hleb\Scheme\App\Models\MainModel
:post_closed,
:post_top,
:post_nsfw,
:post_hidden,
:post_url,
:post_poll,
:post_url_domain)";
@ -102,6 +104,7 @@ class PostModel extends \Hleb\Scheme\App\Models\MainModel
post_lo,
post_top,
post_nsfw,
post_hidden,
post_url,
post_poll,
post_modified,
@ -198,6 +201,7 @@ class PostModel extends \Hleb\Scheme\App\Models\MainModel
post_user_id = :post_user_id,
post_draft = :post_draft,
post_nsfw = :post_nsfw,
post_hidden = :post_hidden,
post_modified = :post_modified,
post_content = :post_content,
post_content_img = :post_content_img,

View file

@ -73,8 +73,8 @@ class RssModel extends \Hleb\Scheme\App\Models\MainModel
ON rel.relation_post_id = post_id
INNER JOIN users ON id = post_user_id
WHERE facet_list LIKE :qa
AND post_is_deleted = 0 AND post_tl = 0 AND post_draft = 0
ORDER BY post_top DESC, post_date DESC LIMIT 1000";
AND post_is_deleted = 0 AND post_tl = 0 AND post_draft = 0 AND post_hidden = 0
ORDER BY post_top DESC, post_date DESC LIMIT 1000";
return DB::run($sql, ['qa' => "%" . $facet_slug . "%"])->fetchAll();
}

View file

@ -22,6 +22,8 @@ class Post
Request::getResources()->addBottomScript('/assets/js/share/goodshare.min.js');
Request::getResources()->addBottomScript('/assets/js/dialog/dialog.js');
// TODO: и для скрытого поста?
// $content['post_hidden'] == 1
if ($content['post_is_deleted'] == 1) {
Request::getHead()->addMeta('robots', 'noindex');
}

View file

@ -1581,4 +1581,6 @@ CREATE TABLE `items_status` (
ALTER TABLE `posts` ADD `post_nsfw` TINYINT(1) NOT NULL DEFAULT '0' AFTER `post_published`;
ALTER TABLE `users` ADD `nsfw` TINYINT(1) NOT NULL DEFAULT '0' AFTER `my_post`;
ALTER TABLE `users` ADD `nsfw` TINYINT(1) NOT NULL DEFAULT '0' AFTER `my_post`;
ALTER TABLE `posts` ADD `post_hidden` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Скрытый пост' AFTER `post_top`;

View file

@ -62,7 +62,7 @@
<?php if (UserData::getRegType(UserData::USER_FIRST_LEVEL)) : ?>
<fieldset>
<input type="checkbox" name="post_draft"> <?= __('app.draft_post'); ?>
<input type="checkbox" name="draft"> <?= __('app.draft_post'); ?>
</fieldset>
<?= insert('/_block/form/content-tl', ['data' => null]); ?>
@ -91,6 +91,11 @@
</fieldset>
<?php endif; ?>
<fieldset>
<input type="checkbox" name="hidden"> <?= __('app.hidden_post'); ?>
<div class="help"><?= __('app.hidden_post_help'); ?></div>
</fieldset>
<div class="last-content content-tabs<?php if (config('general.qa_site_format') == true) : ?> active<?php endif; ?>" id="qa">
<div class="mb5"><?= __('app.text'); ?> Q&A <sup class="red">*</sup></div>
<textarea name="content_qa"></textarea>

View file

@ -110,6 +110,11 @@
</fieldset>
<?php endif; ?>
<fieldset>
<input type="checkbox" name="hidden" <?php if ($post['post_hidden'] == 1) : ?>checked <?php endif; ?>> <?= __('app.hidden_post'); ?>
<div class="help"><?= __('app.hidden_post_help'); ?></div>
</fieldset>
<?php if (UserData::checkAdmin()) : ?>
<?= insert('/_block/form/select/user', ['user' => $data['user']]); ?>
<?php endif; ?>

View file

@ -8,6 +8,11 @@
<?php endif; ?>
<?php $post_url = post_slug($post['post_id'], $post['post_slug']); ?>
<?php if ($post['post_hidden'] == 1) : ?>
<?php if ($post['post_user_id'] != UserData::getUserId() && !UserData::checkAdmin()) continue; ?>
<?php endif; ?>
<div class="box shadow-bottom">
<div class="flex items-center gap-min text-sm mb5">
<a class="gray-600 flex gap-min items-center" href="<?= url('profile', ['login' => $post['login']]); ?>">

View file

@ -6,6 +6,7 @@
<?php if ($post['post_translation'] == 1) : ?><span class="label label-grey"><?= __('app.translation'); ?></span><?php endif; ?>
<?php if ($post['post_tl']) : ?> <span class="brown italic text-sm ml5">tl<?= $post['post_tl']; ?></span> <?php endif; ?>
<?php if ($post['post_nsfw']) : ?> <span class="red text-sm ml5">NFSW</span> <?php endif; ?>
<?php if ($post['post_hidden']) : ?> <svg class="icons gray-600"><use xlink:href="/assets/svg/icons.svg#eye"></use></svg> <?php endif; ?>
<?php if ($post['post_merged_id']) : ?>
<span class="red">
<svg class="icons">