libarea/app/Models/PostModel.php

204 lines
6.6 KiB
PHP

<?php
namespace App\Models;
use XdORM\XD;
use DB;
use PDO;
use Base;
class PostModel extends \MainModel
{
// Посты на главной
// $page - страницы
// $tags_user - список id отписанных тегов
public static function getPostHome($page, $space_user)
{
$result = Array();
foreach($space_user as $ind => $row){
$result[$ind] = $row['hidden_space_id'];
}
if($result) {
$string = implode(',', $result);
} else {
$string = 0;
}
$offset = ($page-1) * 10;
$sql = "SELECT p.post_id, p.post_title, p.post_slug, p.post_user_id, p.post_space_id, p.post_comments, p.post_date, p.post_votes,
u.id, u.login, u.avatar,
s.space_id, s.space_slug, s.space_name, space_tip
fROM posts as p
INNER JOIN users as u ON u.id = p.post_user_id
INNER JOIN space as s ON s.space_id = p.post_space_id
WHERE p.post_space_id NOT IN(".$string.")
ORDER BY p.post_id DESC LIMIT 10 OFFSET ".$offset." ";
$result = DB::run($sql)->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
public static function getPostHomeCount($space_user)
{
$result = Array();
foreach($space_user as $ind => $row){
$result[$ind] = $row['hidden_space_id'];
}
if($result) {
$string = implode(',', $result);
} else {
$string = 0;
}
$sql = "SELECT p.post_id, p.post_space_id, s.space_id
fROM posts as p
INNER JOIN space as s ON s.space_id = p.post_space_id
WHERE p.post_space_id NOT IN(".$string.") ";
$query = DB::run($sql)->fetchAll(PDO::FETCH_ASSOC);
$result = ceil(count($query) / 10);
return $result;
}
// TOP посты на главной
public static function getPostTop()
{
$q = XD::select('*')->from(['posts']);
$query = $q->leftJoin(['users'])->on(['users.id'], '=', ['post_user_id'])
->leftJoin(['space'])->on(['space_id'], '=', ['post_space_id'])
->orderBy(['post_comments'])->desc();
$result = $query->getSelect();
return $result;
}
// Полная версия поста
public static function getPost($slug)
{
$q = XD::select('*')->from(['posts']);
$query = $q->leftJoin(['users'])->on(['id'], '=', ['post_user_id'])
->leftJoin(['space'])->on(['space_id'], '=', ['post_space_id'])
->where(['post_slug'], '=', $slug);
$result = $query->getSelectOne();
return $result;
}
// Страница постов участника
public static function getUsersPosts($login)
{
$q = XD::select('*')->from(['posts']);
$query = $q->leftJoin(['users'])->on(['id'], '=', ['post_user_id'])
->leftJoin(['space'])->on(['space_id'], '=', ['post_space_id'])
->where(['login'], '=', $login);
$result = $query->getSelect();
return $result;
}
// Пересчитываем количество комментариев в посте
public static function getNumComments($post_id)
{
$post = XD::select('*')->from(['posts'])->where(['post_id'], '=', $post_id)->getSelectOne();
$post_comments = $post['post_comments']; // получаем количество комментариев
$new_num = $post_comments + 1; // плюсуем один
XD::update(['posts'])->set(['post_comments'], '=', $new_num)->where(['post_id'], '=', $post_id)->run();
return true;
}
// Проверка на дубликаты uri и запись поста
public static function addPost($post_title, $post_content, $post_slug, $post_ip_int, $post_user_id, $space_id)
{
// Проверить пост на повтор slug (переделать)
$q = XD::select('*')->from(['posts']);
$query = $q->where(['post_slug'], '=', $post_slug);
$result = $query->getSelectOne();
if ($result) {
$post_slug = $post_slug . "-";
}
// toString строковая заменя для проверки
XD::insertInto(['posts'], '(', ['post_title'], ',', ['post_content'], ',', ['post_slug'], ',', ['post_ip_int'], ',', ['post_user_id'],',', ['post_space_id'], ')')->values( '(', XD::setList([$post_title, $post_content, $post_slug, $post_ip_int, $post_user_id, $space_id]), ')' )->run();
return true;
}
// Получаем пост по id
public static function getPostId($id)
{
$q = XD::select('*')->from(['posts']);
$query = $q->leftJoin(['space'])->on(['space_id'], '=', ['post_space_id'])->where(['post_id'], '=', $id);
$result = $query->getSelectOne();
return $result;
}
// Редактирование поста
public static function editPost($post_id, $post_title, $post_content)
{
$edit_date = date("Y-m-d H:i:s");
XD::update(['posts'])->set(['post_title'], '=', $post_title, ',', ['edit_date'], '=', $edit_date, ',', ['post_content'], '=', $post_content)
->where(['post_id'], '=', $post_id)->run();
return true;
}
// Выбранный пост в профиль участника
public static function getPostProfile($my_post)
{
if(!$my_post){ $my_post = 0; }
$sql = "SELECT p.post_id, p.post_title, p.post_slug, p.post_user_id, p.post_space_id, p.post_comments, p.post_date, p.post_votes,
u.id, u.login, u.avatar,
s.space_id, s.space_slug, s.space_name, space_tip
fROM posts as p
INNER JOIN users as u ON u.id = p.post_user_id
INNER JOIN space as s ON s.space_id = p.post_space_id
WHERE p.post_id = ".$my_post." ";
$result = DB::run($sql)->fetch(PDO::FETCH_ASSOC);
return $result;
}
// Добавить пост в профиль
public static function addPostProfile($post_id, $uid)
{
XD::update(['users'])->set(['my_post'], '=', $post_id)
->where(['id'], '=', $uid)->run();
return true;
}
}