Database refactoring and improving blog comments, blog post history and more
This commit is contained in:
parent
56aed78b00
commit
7f887a99b0
|
@ -55,6 +55,7 @@
|
|||
$route['r/(:any)'] = 'redirect/p/$1';
|
||||
$route['admin/(:any)'] = 'admin/$1';
|
||||
$route['admin'] = 'admin/dashboard/index';
|
||||
$route['admin/blog/history/(:any)/compare/(:any)/(:any)'] = 'admin/blog/history_compare/$1/$2/$3';
|
||||
$route['tools/csgo/(:any)'] = 'tools/csgo/index/$1';
|
||||
$route['tools'] = 'tools/tools/index';
|
||||
$route['watch/(:any)/(:any)'] = 'watch/index/$1/$2';
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Blog extends MY_Controller {
|
||||
class Blog extends MY_Controller
|
||||
{
|
||||
|
||||
function __construct() {
|
||||
function __construct()
|
||||
{
|
||||
parent::__construct('blog');
|
||||
$this->load->model('BlogModel', '', TRUE);
|
||||
$this->load->helper('url');
|
||||
}
|
||||
|
||||
function index() {
|
||||
function index()
|
||||
{
|
||||
$offset = isset($_GET['page']) ? intval($_GET['page']) - 1 : 0;
|
||||
$data = $this->BlogModel->getAllPosts('', 5, $offset);
|
||||
|
||||
$this->load->view('header', ['active' => 'blog', 'title' => 'Blog', 'additionalStyles' => ['blog.css']]);
|
||||
$this->load->view('blog/first', ['categories' => $this->BlogModel->getCategories()]);
|
||||
|
||||
if(!empty($data)) {
|
||||
if (!empty($data)) {
|
||||
$pageCount = $this->BlogModel->getPostPageCount('', 5);
|
||||
$this->load->view('blog/postList', ['pageContent' => $data]);
|
||||
} else {
|
||||
|
@ -25,13 +28,14 @@ class Blog extends MY_Controller {
|
|||
}
|
||||
|
||||
$this->load->view('footer', ['additionalScripts' => ['lib/jquery.twbsPagination.min.js']]);
|
||||
$this->load->view('blog/pagination', ['pageCount' => $pageCount]);
|
||||
$this->load->view('blog/pagination', ['pageCount' => $pageCount, 'page' => $offset]);
|
||||
}
|
||||
|
||||
function search($query = null) {
|
||||
if(isset($_GET['q'])) {
|
||||
function search($query = null)
|
||||
{
|
||||
if (isset($_GET['q'])) {
|
||||
redirect(base_url('blog/search/' . urlencode($this->input->get('q'))));
|
||||
} elseif($query == null) {
|
||||
} elseif ($query == null) {
|
||||
redirect(base_url('blog'));
|
||||
} else {
|
||||
$query = $this->security->xss_clean(urldecode($query));
|
||||
|
@ -41,7 +45,7 @@ class Blog extends MY_Controller {
|
|||
$this->load->view('header', ['active' => 'blog', 'title' => 'Blog', 'additionalStyles' => ['blog.css']]);
|
||||
$this->load->view('blog/first', ['categories' => $this->BlogModel->getCategories()]);
|
||||
|
||||
if(!empty($data)) {
|
||||
if (!empty($data)) {
|
||||
$pageCount = $this->BlogModel->getPostPageCount($query, 5);
|
||||
$this->load->view('blog/postList', ['pageContent' => $data]);
|
||||
} else {
|
||||
|
@ -54,8 +58,9 @@ class Blog extends MY_Controller {
|
|||
}
|
||||
}
|
||||
|
||||
function category($category = null) {
|
||||
if($category == null) {
|
||||
function category($category = null)
|
||||
{
|
||||
if ($category == null) {
|
||||
redirect(base_url('blog'));
|
||||
} else {
|
||||
$category = urldecode($category);
|
||||
|
@ -65,7 +70,7 @@ class Blog extends MY_Controller {
|
|||
$this->load->view('header', ['active' => 'blog', 'title' => 'Blog', 'additionalStyles' => ['blog.css']]);
|
||||
$this->load->view('blog/first', ['categories' => $this->BlogModel->getCategories()]);
|
||||
|
||||
if(!empty($data)) {
|
||||
if (!empty($data)) {
|
||||
$pageCount = $this->BlogModel->getPostPageCount('', 5);
|
||||
$this->load->view('blog/postList', ['pageContent' => $data]);
|
||||
} else {
|
||||
|
@ -78,18 +83,19 @@ class Blog extends MY_Controller {
|
|||
}
|
||||
}
|
||||
|
||||
public function tag($tag = null) {
|
||||
if($tag == null) {
|
||||
public function tag($tag = null)
|
||||
{
|
||||
if ($tag == null) {
|
||||
redirect(base_url('blog'));
|
||||
}
|
||||
$tag = urldecode($tag);
|
||||
$offset = isset($_GET['page']) ? intval($_GET['page']) -1 : 0;
|
||||
$offset = isset($_GET['page']) ? intval($_GET['page']) - 1 : 0;
|
||||
$data = $this->BlogModel->getTagPosts($tag, 5, $offset);
|
||||
|
||||
$this->load->view('header', ['active' => 'blog', 'title' => 'Blog', 'additionalStyles' => ['blog.css']]);
|
||||
$this->load->view('blog/first', ['categories' => $this->BlogModel->getCategories()]);
|
||||
|
||||
if(!empty($data)) {
|
||||
if (!empty($data)) {
|
||||
$pageCount = $this->BlogModel->getPostPageCount('', 5);
|
||||
$this->load->view('blog/postList', ['pageContent' => $data]);
|
||||
} else {
|
||||
|
@ -101,48 +107,51 @@ class Blog extends MY_Controller {
|
|||
$this->load->view('blog/pagination', ['pageCount' => $pageCount]);
|
||||
}
|
||||
|
||||
function add() {
|
||||
if(isset($_SESSION['user']) && $this->hasPermission('blog.create')) {
|
||||
function add()
|
||||
{
|
||||
if (isset($_SESSION['user']) && $this->hasPermission('blog.create')) {
|
||||
redirect('/admin/blog/add');
|
||||
} else {
|
||||
redirect('/blog');
|
||||
}
|
||||
}
|
||||
|
||||
function post($postTitle = null) {
|
||||
if($postTitle == null) {
|
||||
function post($postTitle = null)
|
||||
{
|
||||
if ($postTitle == null) {
|
||||
redirect("/blog");
|
||||
} elseif(isset($_GET['q'])) {
|
||||
} elseif (isset($_GET['q'])) {
|
||||
redirect('/blog?q=' . $_GET['q']);
|
||||
} else {
|
||||
$post = $this->BlogModel->getPost($postTitle);
|
||||
if(empty($post)) {
|
||||
if (empty($post)) {
|
||||
redirect('/blog');
|
||||
} else {
|
||||
$post['randomPosts'] = $this->BlogModel->getRandomPosts($post['postID']);
|
||||
$post['comments'] = $this->BlogModel->getComments($post['postID']);
|
||||
$post['tags'] = $this->BlogModel->getTags($post['postID']);
|
||||
$post['hasLiked'] = isset($_SESSION['user']) && !empty($_SESSION['user']) ? $this->BlogModel->hasAlreadyLiked($post['postID'], $_SESSION['user']['ID']) : false;
|
||||
$sameCategoryPosts = $this->BlogModel->getCategoryPostsByID($post['postCategoryID'], 3, $post['postID']);
|
||||
$post['randomPosts'] = $this->BlogModel->getRandomPosts($post['ID']);
|
||||
$post['comments'] = $this->BlogModel->getComments($post['ID']);
|
||||
$post['tags'] = $this->BlogModel->getTags($post['ID']);
|
||||
$post['hasLiked'] = isset($_SESSION['user']) && !empty($_SESSION['user']) ? $this->BlogModel->hasAlreadyLiked($post['ID'], $_SESSION['user']['ID']) : false;
|
||||
$sameCategoryPosts = $this->BlogModel->getCategoryPostsByID($post['categories'], 3, $post['ID']);
|
||||
|
||||
$post['prevPost'] = $this->BlogModel->getPrevPost($post['postID']);
|
||||
$post['nextPost'] = $this->BlogModel->getNextPost($post['postID']);
|
||||
$post['prevPost'] = $this->BlogModel->getPrevPost($post['initialRelease']);
|
||||
$post['nextPost'] = $this->BlogModel->getNextPost($post['initialRelease']);
|
||||
|
||||
$this->BlogModel->incrementViews($post['postID']);
|
||||
$this->BlogModel->incrementViews($post['ID']);
|
||||
|
||||
$this->load->view('header', ['active' => 'blog', 'title' => $post['postTitle'], 'additionalStyles' => ['posts_list.css', 'blog.css']]);
|
||||
$this->load->view('header', ['active' => 'blog', 'title' => $post['title'], 'additionalStyles' => ['posts_list.css', 'blog.css']]);
|
||||
$this->load->view('blog/first', ['categoryPosts' => $sameCategoryPosts, 'categories' => $this->BlogModel->getCategories()]);
|
||||
$this->load->view('blog/post', $post);
|
||||
$this->load->view('footer', ['additionalScripts' => ['lib/prism.js', 'blog.js']]);
|
||||
$this->load->view('footer', ['additionalScripts' => ['lib/prism.js', 'blog.js', 'comment-item.js']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function like() {
|
||||
if(!isset($_SESSION['user']) || $_SESSION['user']['username'] == NULL) {
|
||||
function like()
|
||||
{
|
||||
if (!isset($_SESSION['user']) || $_SESSION['user']['username'] == NULL) {
|
||||
echo "no-user";
|
||||
} else {
|
||||
if(!$this->BlogModel->hasAlreadyLiked($_POST['postID'], $_SESSION['user']['ID'])) {
|
||||
if (!$this->BlogModel->hasAlreadyLiked($_POST['postID'], $_SESSION['user']['ID'])) {
|
||||
echo 'true:';
|
||||
echo $this->BlogModel->addLike($_POST['postID'], $_SESSION['user']['ID'])['likeCount'];
|
||||
} else {
|
||||
|
@ -152,37 +161,176 @@ class Blog extends MY_Controller {
|
|||
}
|
||||
}
|
||||
|
||||
function comment() {
|
||||
if(!isset($_SESSION['user']) || $_SESSION['user']['username'] == NULL) {
|
||||
$result = ['type' => 'error', 'message' => 'Nicht eingeloggt'];
|
||||
function comment()
|
||||
{
|
||||
if (!isset($_SESSION['user']) || $_SESSION['user']['username'] == NULL) {
|
||||
$result = [
|
||||
'success' => false,
|
||||
'message' => '<b>Nicht eingeloggt!</b> Du musst in deinem Account angemeldet sein, um Kommentare auf Blog-Posts zu verfassen. Die Registrierung ist völlig kostenlos!',
|
||||
];
|
||||
} else {
|
||||
$url = $this->input->post('url');
|
||||
|
||||
$url = str_replace('/blog/post/', '', $url);
|
||||
|
||||
$comment = $this->BlogModel->addCommentByUrl($url, $_SESSION['user']['ID'], $this->input->post('comment'), false, NULL);
|
||||
$result = ['type' => 'success', 'content' => [
|
||||
$comment = $this->BlogModel->addCommentByUrl($url, $_SESSION['user']['ID'], $this->input->post('comment'), NULL);
|
||||
|
||||
if ($comment == NULL) {
|
||||
$result = [
|
||||
'success' => false,
|
||||
'message' => '<b>Post nicht gefunden.</b> Bitte lade die Seite erneut oder kontaktiere das Support-Team!',
|
||||
];
|
||||
} else {
|
||||
$result = [
|
||||
'success' => true,
|
||||
'content' => [
|
||||
'username' => $_SESSION['user']['username'],
|
||||
'displayname' => $_SESSION['user']['displayname'],
|
||||
'profilePic' => $_SESSION['user']['profilePic'],
|
||||
'date' => date('d.m.Y H: i \\U\\h\\r', strtotime($comment['date_created']))
|
||||
]];
|
||||
'profilePicture' => $_SESSION['user']['profilePic'],
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
header("Content-Type: application/json");
|
||||
echo json_encode($result);
|
||||
}
|
||||
|
||||
function getComments() {
|
||||
function getComments()
|
||||
{
|
||||
$url = $this->input->get('url');
|
||||
|
||||
$url = str_replace('/blog/post/', '', $url);
|
||||
|
||||
$authorCache = [];
|
||||
|
||||
$comments = $this->BlogModel->getCommentsByUrl($url);
|
||||
foreach($comments as $comment) {
|
||||
$comment['author'] = $this->BlogModel->getAuthorData($comment['user_id']);
|
||||
$this->load->view('blog/comment', $comment);
|
||||
foreach ($comments as $comment) {
|
||||
$userID = $comment['userID'];
|
||||
if (isset($authorCache[$userID])) {
|
||||
$author = $authorCache[$userID];
|
||||
} else {
|
||||
$author = $this->BlogModel->getAuthorData($userID);
|
||||
$authorCache[$userID] = $author;
|
||||
}
|
||||
$this->load->view('network/blog/comment_item', ['data' => $author, 'c' => $comment]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public function getReportModal()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$body = $this->load->view('blog/report_modal', [], true);
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'title' => 'Kommentar melden',
|
||||
'body' => $body
|
||||
]);
|
||||
}
|
||||
|
||||
public function reportComment()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$commentID = intval($this->input->post('ID'));
|
||||
|
||||
if ($commentID == 0) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Kommentar existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$reason = $this->input->post('reason');
|
||||
$reasonText = trim($this->input->post('explanation'));
|
||||
|
||||
if ($reason == '') {
|
||||
echo json_encode(['success' => false, 'message' => 'Bitte wähle einen Grund für deine Meldung aus.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$allowedReasons = ['hatespeech', 'racism', 'terrorism', 'abuse', 'violence', 'copyright', 'spam', 'technical-issue'];
|
||||
|
||||
if (!array_search($reason, $allowedReasons)) {
|
||||
echo json_encode(['success' => false, 'message' => 'Bitte wähle einen standardmäßig vorhandenen und validen Grund für die Meldung aus.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$this->BlogModel->isCommentIDValid($commentID)) {
|
||||
echo json_encode(['success' => true, 'message' => 'Der ausgewählte Kommentar ist nicht (mehr) vorhanden. Sollte es sich hierbei um ein Irrtum handeln, verfasse bitte über den Button unten rechts ein Feedback.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->BlogModel->reportComment($commentID, $reason, $reasonText);
|
||||
|
||||
echo json_encode(['success' => true, 'message' => 'Vielen Dank für das Melden dieses Kommentars. Wir werden schnellstmöglich angemessene Aktionen unternehmen.']);
|
||||
}
|
||||
|
||||
public function getDeleteModal()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user'])) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du musst eingeloggt sein, um die Posts deines Accounts zu löschen']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$commentID = intval($this->input->post('ID'));
|
||||
|
||||
if ($commentID == 0) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Kommentar existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$comment = $this->BlogModel->getComment($commentID);
|
||||
|
||||
if ($comment == NULL) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Kommentar existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$author = $this->BlogModel->getAuthorData($comment['userID']);
|
||||
|
||||
if ($author == NULL || $author['ID'] !== $_SESSION['user']['ID']) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du kannst keine Kommentare löschen, die dir nicht gehören.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$body = $this->load->view('blog/delete_modal', ['author' => $author, 'comment' => $comment], true);
|
||||
|
||||
echo json_encode(['success' => true, 'title' => 'Kommentar löschen', 'body' => $body]);
|
||||
}
|
||||
|
||||
public function deleteComment()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user'])) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du musst eingeloggt sein, um die Posts deines Accounts zu löschen']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$commentID = intval($this->input->post('ID'));
|
||||
|
||||
if ($commentID == 0) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Kommentar existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$comment = $this->BlogModel->getComment($commentID);
|
||||
|
||||
if ($comment == null) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Kommentar existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$author = $this->BlogModel->getAuthorData($comment['userID']);
|
||||
|
||||
if ($author == NULL || $author['ID'] !== $_SESSION['user']['ID']) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du kannst keine Kommentare löschen, die dir nicht gehören.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->BlogModel->deleteComment($_SESSION['user']['ID'], $commentID);
|
||||
|
||||
echo json_encode(['success' => true, 'message' => 'Der Kommentar wurde erfolgreich gelöscht.']);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ class File extends MY_Controller
|
|||
if ($title == null) {
|
||||
redirect(base_url());
|
||||
} else {
|
||||
$file = $this->db->query('SELECT name, type, path, isUserData FROM files WHERE name = ?', [urldecode($title)])->result_array();
|
||||
$file = $this->db->query('SELECT name, type, path FROM files WHERE name = ?', [urldecode($title)])->result_array();
|
||||
|
||||
if (!empty($file)) {
|
||||
$file = $file[0];
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
$rememberMe = isset($_POST['rememberMe']) ? $_POST['rememberMe'] : 'off';
|
||||
$this->LoginModel->login($_POST['loginname'], $_POST['loginPassword'], $rememberMe);
|
||||
|
||||
isset($_GET['r']) && !empty($_GET['r']) ? redirect(base64_decode(urldecode($_GET['r']))) : redirect(base_url('login'));
|
||||
// isset($_GET['r']) && !empty($_GET['r']) ? redirect(base64_decode(urldecode($_GET['r']))) : redirect(base_url('login'));
|
||||
}
|
||||
|
||||
$notice = isset($_SESSION['notice']) ? $_SESSION['notice'] : '';
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
{
|
||||
// TODO: Add twitch, instagram and 500px as further services
|
||||
|
||||
$video = $this->YoutubePlayerModel->newestVids(1)[0];
|
||||
$video = $this->SocialMediaModel->newestVids(1)[0];
|
||||
|
||||
$currentlyActiveUsers = $this->UserModel->getActiveUsers(5);
|
||||
$newestUsers = $this->UserModel->getNewestUsers(5);
|
||||
|
@ -43,8 +43,8 @@
|
|||
}
|
||||
$font_sizes = [27, 27, 24, 24, 24, 20, 16, 16, 14, 14, 12, 11, 10];
|
||||
foreach ($items as $item) {
|
||||
$post_date = $item['post_date'];
|
||||
$item['post_date'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$post_date"), $_SESSION['site_lang']);
|
||||
$date = strtotime($item['date']);
|
||||
$item['date'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$date"), $_SESSION['site_lang']);
|
||||
$item['font_sizes'] = $font_sizes;
|
||||
$this->load->view('post_list_entry', $item);
|
||||
}
|
||||
|
|
|
@ -71,10 +71,10 @@
|
|||
exit;
|
||||
}
|
||||
|
||||
$postUUID = $this->input->post('postUUID');
|
||||
$hashID = $this->input->post('postUUID');
|
||||
|
||||
$isLiked = $this->PostsModel->addPostLikeByUUID($postUUID, $_SESSION['user']['ID']);
|
||||
$likeCount = $this->PostsModel->getPostLikeCountByUUID($postUUID);
|
||||
$isLiked = $this->PostsModel->addPostLikeByHashID($hashID, $_SESSION['user']['ID']);
|
||||
$likeCount = $this->PostsModel->getPostLikeCountByHashID($hashID);
|
||||
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
|
@ -115,7 +115,7 @@
|
|||
$users = $this->UserModel->searchUsers($query, $rank, $country, $lang, $userAmount, $userOffset);
|
||||
|
||||
if (!empty($users)) {
|
||||
if($offset == 0) {
|
||||
if ($offset == 0) {
|
||||
echo '<h2>Nutzer (' . sizeof($users) . ')</h2>';
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
public function getAvailableCountries() {
|
||||
public function getAvailableCountries()
|
||||
{
|
||||
$countries = $this->UserModel->getAvailableCountries();
|
||||
|
||||
foreach ($countries as $i => $country) {
|
||||
|
@ -153,7 +154,8 @@
|
|||
echo json_encode(['countries' => $countries]);
|
||||
}
|
||||
|
||||
public function getAvailableLanguages() {
|
||||
public function getAvailableLanguages()
|
||||
{
|
||||
$languages = $this->UserModel->getAvailableLanguages();
|
||||
|
||||
foreach ($languages as $i => $language) {
|
||||
|
@ -164,54 +166,69 @@
|
|||
echo json_encode(['languages' => $languages]);
|
||||
}
|
||||
|
||||
public function getReportModal() {
|
||||
public function getReportModal()
|
||||
{
|
||||
$this->load->view('network/posts/report_modal');
|
||||
}
|
||||
|
||||
public function reportPost() {
|
||||
public function reportPost()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
$uuid = $this->input->post('uuid');
|
||||
$hashID = $this->input->post('hashID');
|
||||
|
||||
if ($hashID == NULL) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$reason = $this->input->post('reason');
|
||||
$reasonText = $this->input->post('explanation');
|
||||
|
||||
if($reason == '') {
|
||||
if ($reason == '') {
|
||||
echo json_encode(['success' => false, 'message' => 'Bitte wähle einen Grund für deine Meldung aus.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$allowedReasons = ['hatespeech', 'racism', 'terrorism', 'abuse', 'violence', 'copyright', 'spam', 'technical-issue'];
|
||||
|
||||
if(!array_search($reason, $allowedReasons)) {
|
||||
if (!array_search($reason, $allowedReasons)) {
|
||||
echo json_encode(['success' => false, 'message' => 'Bitte wähle einen standardmäßig vorhandenen und validen Grund für die Meldung aus.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if(!$this->PostsModel->isUUIDValid($uuid)) {
|
||||
if (!$this->PostsModel->isHashIDValid($hashID)) {
|
||||
echo json_encode(['success' => true, 'message' => 'Der ausgewählte Post ist nicht (mehr) vorhanden. Sollte es sich hierbei um ein Irrtum handeln, verfasse bitte über den Button unten rechts ein Feedback.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->PostsModel->reportPost($uuid, $reason, $reasonText);
|
||||
$this->PostsModel->reportPost($hashID, $reason, $reasonText);
|
||||
|
||||
echo json_encode(['success' => true, 'message' => 'Vielen Dank für das Melden dieses Posts. Wir werden schnellstmöglich angemessene Aktionen unternehmen.']);
|
||||
}
|
||||
|
||||
public function getDeleteModal() {
|
||||
public function getDeleteModal()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if(!isset($_SESSION['user'])) {
|
||||
if (!isset($_SESSION['user'])) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du musst eingeloggt sein, um die Posts deines Accounts zu löschen']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$uuid = $this->input->post('uuid');
|
||||
$post = $this->PostsModel->getPostByUUID($uuid);
|
||||
$hashID = $this->input->post('hashID');
|
||||
|
||||
if(empty($post)) {
|
||||
if ($hashID == NULL) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if($post[0]['user_id'] != $_SESSION['user']['ID']) {
|
||||
$post = $this->PostsModel->getPostByHashID($hashID);
|
||||
|
||||
if (empty($post)) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($post[0]['userID'] != $_SESSION['user']['ID']) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du kannst keine Posts löschen, die dir nicht gehören.']);
|
||||
exit;
|
||||
}
|
||||
|
@ -222,27 +239,34 @@
|
|||
echo json_encode(['success' => true, 'title' => 'Post löschen', 'body' => $body]);
|
||||
}
|
||||
|
||||
public function deletePost() {
|
||||
public function deletePost()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if(!isset($_SESSION['user'])) {
|
||||
if (!isset($_SESSION['user'])) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du musst eingeloggt sein, um die Posts deines Accounts zu löschen']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$uuid = $this->input->post('uuid');
|
||||
$post = $this->PostsModel->getPostByUUID($uuid);
|
||||
$hashID = $this->input->post('hashID');
|
||||
|
||||
if(empty($post)) {
|
||||
if ($hashID == NULL) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if($post[0]['user_id'] != $_SESSION['user']['ID']) {
|
||||
$post = $this->PostsModel->getPostByHashID($hashID);
|
||||
|
||||
if (empty($post)) {
|
||||
echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($post[0]['userID'] != $_SESSION['user']['ID']) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du kannst keine Posts löschen, die dir nicht gehören.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->PostsModel->deletePost($_SESSION['user']['ID'], $uuid);
|
||||
$this->PostsModel->deletePost($_SESSION['user']['ID'], $hashID);
|
||||
|
||||
echo json_encode(['success' => true, 'message' => 'Der Post wurde erfolgreich gelöscht.']);
|
||||
}
|
||||
|
|
|
@ -14,11 +14,11 @@ class Projects extends MY_Controller
|
|||
|
||||
public function index($album = 'all')
|
||||
{
|
||||
$collections = $this->ProjectsModel->getCategories($album);
|
||||
$categories = $this->ProjectsModel->getCategories($album);
|
||||
$content = $this->ProjectsModel->getEntries('all');
|
||||
|
||||
$this->load->view('header', ['active' => 'projects', 'title' => lang('projects_sitetitle'), 'additionalStyles' => ['sortlist.css', 'projects.css']]);
|
||||
$this->load->view('projects', ['content' => $content, 'album' => $album, 'collections' => $collections]);
|
||||
$this->load->view('projects', ['content' => $content, 'album' => $album, 'categories' => $categories]);
|
||||
$this->load->view('footer', ['additionalScripts' => ['lib/isotope.pkgd.min.js', 'projects.js']]);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,24 +20,24 @@
|
|||
$title = "Error - Profile";
|
||||
$message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Es wurde kein Nutzername angegeben."];
|
||||
} else {
|
||||
$user_data = $this->UserModel->getUser($user);
|
||||
$user_exists = !empty($user_data);
|
||||
if ($user_exists) {
|
||||
$user_data = $user_data[0];
|
||||
$user_stats = $this->UserModel->getUserStats($user_data['ID']);
|
||||
$userData = $this->UserModel->getUser($user);
|
||||
$userExists = !empty($userData);
|
||||
if ($userExists) {
|
||||
$userData = $userData[0];
|
||||
$userStats = $this->UserModel->getUserStats($userData['ID']);
|
||||
|
||||
$user_posts = $this->PostsModel->getUserPosts($user_data['ID'], 3, 0, 192);
|
||||
$user_comments = $this->UserModel->getUserComments($user_data['ID'], 3, 0);
|
||||
$user_blog_posts = $this->UserModel->getUserBlogPosts($user_data['ID'], 3, 0);
|
||||
$userPosts = $this->PostsModel->getUserPosts($userData['ID'], 3, 0, 192);
|
||||
$userComments = $this->UserModel->getUserComments($userData['ID'], 3, 0);
|
||||
$userBlogPosts = $this->UserModel->getUserBlogPosts($userData['ID'], 3, 0);
|
||||
|
||||
$date_created = strtotime($user_data['date_created']);
|
||||
$user_data['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$date_created"), $_SESSION['site_lang']);
|
||||
$title = $user_data['displayname'] . " - Profile";
|
||||
$dateCreated = strtotime($userData['dateCreated']);
|
||||
$userData['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
$title = $userData['displayname'] . " - Profile";
|
||||
$isCurrentUserFollowing = false;
|
||||
if (isset($_SESSION['user']['ID']))
|
||||
$isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']);
|
||||
$isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $userData['ID']);
|
||||
|
||||
$_SESSION['currentProfilePage'] = $user_data['ID'];
|
||||
$_SESSION['currentProfilePage'] = $userData['ID'];
|
||||
} else {
|
||||
$message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."];
|
||||
$title = "Error - Profile";
|
||||
|
@ -48,10 +48,10 @@
|
|||
if (isset($message)) {
|
||||
$this->load->view('network/message', $message);
|
||||
}
|
||||
if (isset($user_data) && isset($user_stats) && isset($user_posts) && isset($user_comments) && isset($user_blog_posts)) {
|
||||
$this->load->view('network/user/profile_page', ['data' => $user_data, 'stats' => $user_stats, 'posts' => $user_posts, 'comments' => $user_comments, 'blog_posts' => $user_blog_posts, 'isCurrentUserFollowing' => $isCurrentUserFollowing]);
|
||||
if (isset($userData) && isset($userStats) && isset($userPosts) && isset($userComments) && isset($userBlogPosts)) {
|
||||
$this->load->view('network/user/profile_page', ['data' => $userData, 'stats' => $userStats, 'posts' => $userPosts, 'comments' => $userComments, 'blog_posts' => $userBlogPosts, 'isCurrentUserFollowing' => $isCurrentUserFollowing]);
|
||||
}
|
||||
$this->load->view('footer', ['additionalScripts' => ['profile_page.js']]);
|
||||
$this->load->view('footer', ['additionalScripts' => ['profile_page.js', 'comment-item.js']]);
|
||||
}
|
||||
|
||||
public function comments($user = "")
|
||||
|
@ -65,7 +65,7 @@
|
|||
$user_exists = !empty($user_data);
|
||||
if ($user_exists) {
|
||||
$user_data = $user_data[0];
|
||||
$dateCreated = strtotime($user_data['date_created']);
|
||||
$dateCreated = strtotime($user_data['dateCreated']);
|
||||
$user_data['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
$user_stats = $this->UserModel->getUserStats($user_data['ID']);
|
||||
$title = $user_data['displayname'] . " - Blog-Kommentare";
|
||||
|
@ -87,7 +87,7 @@
|
|||
if ($user_exists) {
|
||||
$this->load->view('network/blog/user_comments', ['data' => $user_data, 'stats' => $user_stats, 'isCurrentUserFollowing' => $isCurrentUserFollowing]);
|
||||
}
|
||||
$this->load->view('footer', ['additionalScripts' => ['profile_page.js']]);
|
||||
$this->load->view('footer', ['additionalScripts' => ['profile_page.js', 'comment-item.js']]);
|
||||
$this->load->view('network/blog/user_comments_end', ['data' => $user_data]);
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@
|
|||
$user_exists = !empty($user_data);
|
||||
if ($user_exists) {
|
||||
$user_data = $user_data[0];
|
||||
$dateCreated = strtotime($user_data['date_created']);
|
||||
$dateCreated = strtotime($user_data['dateCreated']);
|
||||
$user_data['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
$user_stats = $this->UserModel->getUserStats($user_data['ID']);
|
||||
$title = $user_data['displayname'] . " - Posts";
|
||||
|
@ -161,7 +161,7 @@
|
|||
$user_exists = !empty($user_data);
|
||||
if ($user_exists) {
|
||||
$user_data = $user_data[0];
|
||||
$dateCreated = strtotime($user_data['date_created']);
|
||||
$dateCreated = strtotime($user_data['dateCreated']);
|
||||
$user_data['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
$user_stats = $this->UserModel->getUserStats($user_data['ID']);
|
||||
$title = $user_data['displayname'] . " - Posts";
|
||||
|
@ -204,7 +204,7 @@
|
|||
if (!isset($_SESSION['user']) || empty($_SESSION['user']))
|
||||
redirect(base_url());
|
||||
|
||||
if(empty($_FILES) || !isset($_FILES['postMedia']))
|
||||
if (empty($_FILES) || !isset($_FILES['postMedia']))
|
||||
redirect(base_url());
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
@ -229,23 +229,25 @@
|
|||
echo json_encode(['success' => true, 'type' => $mediaType, 'path' => $path]);
|
||||
}
|
||||
|
||||
public function deletePostMedia() {
|
||||
public function deletePostMedia()
|
||||
{
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']))
|
||||
redirect(base_url());
|
||||
|
||||
if(empty($_POST) || !isset($_POST['path']))
|
||||
if (empty($_POST) || !isset($_POST['path']))
|
||||
redirect(base_url());
|
||||
|
||||
$url = $_POST['path'];
|
||||
|
||||
$filePath = $this->FileModel->getFilePath(substr($url, 3), $_SESSION['user']['ID']);
|
||||
|
||||
if($filePath != null)
|
||||
if ($filePath != null)
|
||||
unlink($filePath);
|
||||
}
|
||||
|
||||
public function publishPost()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user'])) {
|
||||
echo json_encode(['success' => false,
|
||||
'title' => lang('post_error_login_title'),
|
||||
|
@ -255,29 +257,32 @@
|
|||
}
|
||||
|
||||
$content = $this->input->post('content');
|
||||
$content = trim($content);
|
||||
if (strlen($content) >= 10000) {
|
||||
?>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<b>Veröffentlichung des Posts fehlgeschlagen!</b> Dein Post ist leider zu lang. Er darf maximal 10.000
|
||||
Zeichen umfassen.
|
||||
</div>
|
||||
<?php
|
||||
echo json_encode(['success' => false,
|
||||
'title' => lang('post_error_too_long_title'),
|
||||
'message' => lang('post_error_too_long_lines')
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
if (strlen($content) == 0 && empty($media)) {
|
||||
echo json_encode(['success' => false,
|
||||
'title' => lang('post_error_no_content_title'),
|
||||
'message' => lang('post_error_no_content_lines')
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$replyTo = $this->input->post('replyTo');
|
||||
if ($replyTo !== "-1" && !$this->PostsModel->isUUIDValid($replyTo)) {
|
||||
?>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<b>Veröffentlichung des Posts fehlgeschlagen!</b> Der Post, an den du deine Antwort richten willst,
|
||||
existiert nicht (mehr).<br>
|
||||
Solltest du dies für einen Fehler halten, versuche es später erneut oder kontaktiere uns.
|
||||
</div>
|
||||
<?php
|
||||
if ($replyTo !== "-1" && !$this->PostsModel->isHashIDValid($replyTo)) {
|
||||
echo json_encode(['success' => false,
|
||||
'title' => lang('post_error_reply_title'),
|
||||
'message' => lang('post_error_reply_lines')
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$postID = -1;
|
||||
if ($replyTo !== "-1") {
|
||||
$postID = $this->PostsModel->addReply($_SESSION['user']['ID'], $content, $replyTo);
|
||||
} else {
|
||||
|
@ -321,15 +326,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="alert alert-success" role="alert">
|
||||
<b>Dein Post wurde erfolgreich veröffentlicht!</b> Möchtest du nun deine Posts ansehen? <br>
|
||||
<button type="button" class="btn btn-sm btn-default" data-dismiss="modal">Nein</button>
|
||||
<a href='<?= base_url('user/' . $_SESSION['user']['username'] . '/posts') ?>'
|
||||
class='btn btn-sm btn-primary'>Ja
|
||||
</a>
|
||||
</div>
|
||||
<?php
|
||||
echo json_encode(['success' => true,
|
||||
'title' => lang('post_success_title'),
|
||||
'message' => lang('post_success_lines'),
|
||||
'buttons' => [
|
||||
[
|
||||
'type' => 'default',
|
||||
'text' => lang('post_success_no')
|
||||
],
|
||||
[
|
||||
'type' => 'primary',
|
||||
'action' => base_url('user/' . $_SESSION['user']['username'] . '/posts'),
|
||||
'text' => lang('post_success_yes')
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function followers($user = "")
|
||||
|
@ -343,7 +354,7 @@
|
|||
$user_exists = !empty($user_data);
|
||||
if ($user_exists) {
|
||||
$user_data = $user_data[0];
|
||||
$dateCreated = strtotime($user_data['date_created']);
|
||||
$dateCreated = strtotime($user_data['dateCreated']);
|
||||
$user_data['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
$user_stats = $this->UserModel->getUserStats($user_data['ID']);
|
||||
$followers = $this->UserModel->getFollowers($user_data['ID']);
|
||||
|
@ -379,7 +390,7 @@
|
|||
$user_exists = !empty($user_data);
|
||||
if ($user_exists) {
|
||||
$user_data = $user_data[0];
|
||||
$dateCreated = strtotime($user_data['date_created']);
|
||||
$dateCreated = strtotime($user_data['dateCreated']);
|
||||
$user_data['time_existing'] = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
$user_stats = $this->UserModel->getUserStats($user_data['ID']);
|
||||
$following = $this->UserModel->getFollowing($user_data['ID']);
|
||||
|
@ -460,6 +471,13 @@
|
|||
// Update Settings
|
||||
$newData = [];
|
||||
// TODO: Error messages
|
||||
|
||||
foreach ($_POST as $key => $item) {
|
||||
if (isset($user_data[$key]) && $user_data[$key] == $item) {
|
||||
unset($_POST[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
// Username
|
||||
if (isset($_POST['username'])) {
|
||||
if (!preg_match('/[^A-Za-z0-9._]/', $_POST['username'])) {
|
||||
|
@ -474,7 +492,7 @@
|
|||
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Nutzername bereits vergeben!</b> Ein anderer Nutzer hat anscheinend diesen Namen bereits gewählt.</div>";
|
||||
}
|
||||
} else {
|
||||
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Ungültiger Nutzername!</b> Dein Name darf nur Groß- (A-Z) und Kleinbuchstaben (a-z), Zahlen (0-9) und Punkte (.) sowie Unterstriche (_).</div>";
|
||||
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Ungültiger Nutzername!</b> Dein Name darf nur Groß- (A-Z) und Kleinbuchstaben (a-z), Zahlen (0-9) und Punkte (.) sowie Unterstriche (_) enthalten.</div>";
|
||||
}
|
||||
}
|
||||
// Gender
|
||||
|
@ -506,25 +524,25 @@
|
|||
$newData['country'] = $_POST['country'];
|
||||
}
|
||||
// Biography/About
|
||||
if (isset($_POST['biography'])) {
|
||||
$newData['about'] = $_POST['biography'];
|
||||
if (isset($_POST['about'])) {
|
||||
$newData['about'] = trim($_POST['about']);
|
||||
}
|
||||
// Avatar
|
||||
if (isset($_FILES['avatar'])) {
|
||||
$image = $this->FileModel->uploadCroppedImage('avatar', 4096, $_FILES['avatar']['name'], 500, 500);
|
||||
if ($image != null)
|
||||
$newData['profile_picture'] = $image;
|
||||
$newData['profilePicture'] = $image;
|
||||
unset($_FILES['avatar']);
|
||||
}
|
||||
// Header
|
||||
if (isset($_FILES['header'])) {
|
||||
$image = $this->FileModel->uploadImage('header', 4096, $_FILES['header']['name'], 1920);
|
||||
if ($image != null)
|
||||
$newData['header_image'] = $image;
|
||||
$newData['headerImage'] = $image;
|
||||
unset($_FILES['header']);
|
||||
}
|
||||
// Social Networks
|
||||
if (isset($_POST['social-networks'])) {
|
||||
if (isset($_POST['sociaNetworks'])) {
|
||||
|
||||
}
|
||||
// Profile color
|
||||
|
@ -611,7 +629,7 @@
|
|||
// Add entry to history
|
||||
unset($user_data['rankName']);
|
||||
unset($_SESSION['user']);
|
||||
$this->UserModel->insertIntoHistory($user_data);
|
||||
$this->UserModel->insertIntoHistory($newData);
|
||||
// Update profile
|
||||
$this->UserModel->updateProfile($newData, $user_data['ID']);
|
||||
$this->db->cache_delete('user', $user_data['username']);
|
||||
|
@ -651,38 +669,36 @@
|
|||
$this->load->view('footer', ['additionalScripts' => ['single-post-page.js']]);
|
||||
}
|
||||
|
||||
public function single_post_data($username = null, $uuid = null)
|
||||
public function single_post_data($username = null, $hashID = null)
|
||||
{
|
||||
$message = "";
|
||||
$post = [];
|
||||
$replies = [];
|
||||
if ($username == null) {
|
||||
$message .= '<div class="alert alert-danger" role="alert"><b>Es wurde kein Nutzer angegeben!</b> Es können keine Posts von einem undefinierten Nutzer gefunden werden.</div>';
|
||||
goto display;
|
||||
echo '<div class="alert alert-danger" role="alert"><b>Es wurde kein Nutzer angegeben!</b> Es können keine Posts von einem undefinierten Nutzer gefunden werden.</div>';
|
||||
exit;
|
||||
}
|
||||
if ($uuid == null) {
|
||||
$message .= '<div class="alert alert-danger" role="alert"><b>Es wurde keine Post-ID angegeben!</b> Es können keine undefinierten Posts gefunden werden.</div>';
|
||||
goto display;
|
||||
|
||||
if ($hashID == null) {
|
||||
echo '<div class="alert alert-danger" role="alert"><b>Es wurde keine Post-ID angegeben!</b> Es können keine undefinierten Posts gefunden werden.</div>';
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = $this->UserModel->getUser($username);
|
||||
if (empty($user)) {
|
||||
$message .= '<div class="alert alert-warning" role="alert"><b>Es wurde kein Nutzer mit dem angegebenen Namen gefunden!</b> Vielleicht kannst du ja diese Lücke füllen?</div>';
|
||||
goto display;
|
||||
echo '<div class="alert alert-warning" role="alert"><b>Es wurde kein Nutzer mit dem angegebenen Namen gefunden!</b> Vielleicht kannst du ja diese Lücke füllen?</div>';
|
||||
exit;
|
||||
}
|
||||
$user = $user[0];
|
||||
|
||||
$post = $this->PostsModel->getPostDetails($user['ID'], $uuid);
|
||||
$post = $this->PostsModel->getPostDetails($user['ID'], $hashID);
|
||||
if (empty($post)) {
|
||||
$message .= '<div class="alert alert-warning" role="alert"><b>Es wurde kein Post mit der angegebenen ID gefunden!</b> Vielleicht kannst du ja diesen neuen Content erschaffen?</div>';
|
||||
goto display;
|
||||
echo '<div class="alert alert-warning" role="alert"><b>Es wurde kein Post mit der angegebenen ID gefunden!</b> Vielleicht kannst du ja diesen neuen Content erschaffen?</div>';
|
||||
exit;
|
||||
}
|
||||
$post = $post[0];
|
||||
|
||||
$replies = $this->PostsModel->getPostReplies($post['ID']);
|
||||
|
||||
display:
|
||||
$this->load->view('network/posts/user_post_content', ['message' => $message, 'post' => $post, 'replies' => $replies]);
|
||||
$this->load->view('network/posts/user_post_content', ['post' => $post, 'replies' => $replies]);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Blog extends MY_Controller
|
||||
{
|
||||
require_once './vendor/Diff/htmLawed.php';
|
||||
use SebastianBergmann\Diff\Differ;
|
||||
|
||||
class Blog extends MY_Controller
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
@ -15,12 +18,14 @@ class Blog extends MY_Controller
|
|||
{
|
||||
$this->neededPermission('blog.view');
|
||||
$posts = $this->BlogModel->getPostList(false);
|
||||
|
||||
$this->load->view('admin/sidebar', ['title' => 'Alle Blog-Posts']);
|
||||
$this->load->view('admin/blog_posts', ['posts' => $posts]);
|
||||
$this->load->view('admin/footer');
|
||||
}
|
||||
|
||||
public function tags() {
|
||||
public function tags()
|
||||
{
|
||||
$this->neededPermission('blog.view');
|
||||
|
||||
$tags = $this->BlogModel->getAllTags();
|
||||
|
@ -47,65 +52,77 @@ class Blog extends MY_Controller
|
|||
exit;
|
||||
}
|
||||
|
||||
$contentID = $this->input->post('contentID');
|
||||
$contentID = is_numeric($contentID) && is_int(intval($contentID)) ? intval($contentID) : -2;
|
||||
$versionID = $this->input->post('versionID');
|
||||
$versionID = is_numeric($versionID) && is_int(intval($versionID)) ? intval($versionID) : -2;
|
||||
|
||||
$translationID = $this->input->post('translationID');
|
||||
$translationID = is_numeric($translationID) && is_int(intval($translationID)) ? intval($translationID) : -2;
|
||||
$image = $this->input->post('postImage');
|
||||
$title = $this->input->post('postTitle');
|
||||
$description = $this->input->post('postDescription');
|
||||
$content = $this->input->post('postContent');
|
||||
|
||||
$postImage = $this->input->post('postImage');
|
||||
$postTitle = $this->input->post('postTitle');
|
||||
$postDescription = $this->input->post('postDescription');
|
||||
$postContent = $this->input->post('postContent');
|
||||
$initialRelease = $this->input->post('postPublishDate');
|
||||
$initialRelease = date("Y-m-d H:i:s", strtotime($initialRelease));
|
||||
|
||||
$postPublishDate = $this->input->post('postPublishDate');
|
||||
$postPublishDate = date("Y-m-d H:i:s", strtotime($postPublishDate));
|
||||
$url = $this->input->post('postUrl');
|
||||
$categories = $this->input->post('postCategories');
|
||||
$tags = $this->input->post('postTags');
|
||||
|
||||
$postUrl = $this->input->post('postUrl');
|
||||
$postCategory = $this->input->post('postCategory');
|
||||
$postTags = $this->input->post('postTags');
|
||||
$lang = $this->input->post('postLanguage');
|
||||
$lang = $lang !== NULL ? $lang : 'de';
|
||||
|
||||
$postLang = $this->input->post('postLanguage');
|
||||
$postLang = $postLang !== NULL ? $postLang : 'de';
|
||||
|
||||
if(strlen($postUrl) == 0) {
|
||||
if (strlen($url) == 0) {
|
||||
echo json_encode(['success' => false, 'message' => 'Es wurde keine Post-URL angegeben.']);
|
||||
exit;
|
||||
}
|
||||
if(strlen($postUrl) < 4) {
|
||||
if (strlen($url) < 4) {
|
||||
echo json_encode(['success' => false, 'message' => 'Die angegebene Post-URL ist zu kurz. Sie muss mindestens 4 Zeichen umfassen, um eine eindeutige Zuordnung zu ermöglichen.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($postID == -1 || $translationID == -1) { // Create new blog post
|
||||
if ($postID == -1) { // Create new blog post
|
||||
if ($postID == -1) {
|
||||
$postID = $this->BlogModel->createNewPostDraft($_SESSION['user']['ID']);
|
||||
|
||||
if($this->BlogModel->postUrlExisting($postUrl)) {
|
||||
if ($this->BlogModel->postUrlExisting($url)) {
|
||||
echo json_encode(['success' => false, 'message' => 'Die angegebene Post-URL bereits vorhanden.']);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
$translationID = $this->BlogModel->createNewTranslation($postID, $postLang);
|
||||
}
|
||||
|
||||
if ($contentID < 0) {
|
||||
$contentID = $this->BlogModel->createNewContentDraft($postID);
|
||||
if ($versionID < 0) {
|
||||
$versionID = $this->BlogModel->createNewTranslationDraft($postID, $_SESSION['user']['ID'], $lang);
|
||||
}
|
||||
|
||||
$this->BlogModel->updatePostDraft($postID, $postUrl, $postCategory, $postPublishDate, $postImage);
|
||||
$this->BlogModel->updateContentDraft($contentID, $postContent, $postLang);
|
||||
$this->BlogModel->updateTranslation($translationID, $postTitle, $postDescription);
|
||||
$this->BlogModel->updatePostDraft($postID, $initialRelease, $image);
|
||||
$this->BlogModel->updateTranslationDraft($versionID, $url, $title, $description, $content, $lang);
|
||||
|
||||
if(!empty($postTags)) {
|
||||
if(!empty($categories)) {
|
||||
$this->BlogModel->deleteAllPostCategories($postID);
|
||||
foreach ($categories as $category) {
|
||||
if($category == 'new-category') {
|
||||
$name = strtolower($this->input->post('newCategoryName'));
|
||||
$displayname = $this->input->post('newCategoryDisplayName');
|
||||
|
||||
$category = $this->BlogModel->createCategory($name, $displayname, 'de');
|
||||
$newCategoryID = $category;
|
||||
}
|
||||
$this->BlogModel->addPostCategoryByID($postID, $category);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($tags)) {
|
||||
$this->BlogModel->deleteAllPostTags($postID);
|
||||
foreach ($postTags as $postTag) {
|
||||
foreach ($tags as $postTag) {
|
||||
$tagID = $this->BlogModel->createTagIfNotExists($postTag);
|
||||
$this->BlogModel->addPostTagByID($postID, $tagID);
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode(['success' => true, 'message' => 'Der Entwurf wurde erfolgreich gespeichert.', 'postID' => $postID, 'contentID' => $contentID, 'translationID' => $translationID]);
|
||||
$result = ['success' => true, 'message' => 'Der Entwurf wurde erfolgreich gespeichert.', 'postID' => $postID, 'versionID' => $versionID];
|
||||
if(isset($newCategoryID))
|
||||
$result['newCategoryID'] = $newCategoryID;
|
||||
echo json_encode($result);
|
||||
}
|
||||
|
||||
public function publishPost()
|
||||
|
@ -124,16 +141,16 @@ class Blog extends MY_Controller
|
|||
exit;
|
||||
}
|
||||
|
||||
$contentIDs = $this->input->post('contentIDs');
|
||||
$versionIDs = $this->input->post('versionIDs');
|
||||
$contentPublished = FALSE;
|
||||
foreach ($contentIDs as $lang => $contentID) {
|
||||
$contentID = is_numeric($contentID) && is_int(intval($contentID)) ? intval($contentID) : -2;
|
||||
foreach ($versionIDs as $lang => $versionID) {
|
||||
$versionID = is_numeric($versionID) && is_int(intval($versionID)) ? intval($versionID) : -2;
|
||||
|
||||
if($contentID < 0) {
|
||||
if ($versionID < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->BlogModel->publishContentDraft($_SESSION['user']['ID'], $contentID, $postID, $lang);
|
||||
$this->BlogModel->publishTranslationDraft($postID, $versionID, $_SESSION['user']['ID'], $lang);
|
||||
$contentPublished = TRUE;
|
||||
}
|
||||
|
||||
|
@ -167,7 +184,8 @@ class Blog extends MY_Controller
|
|||
echo json_encode(['status' => 'success', 'translations' => $translations]);
|
||||
}
|
||||
|
||||
public function getPost() {
|
||||
public function getPost()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Du musst eingeloggt sein, um Blog-Posts zu verfassen.']);
|
||||
|
@ -176,14 +194,14 @@ class Blog extends MY_Controller
|
|||
|
||||
$postID = intval($this->input->post('postID'));
|
||||
|
||||
if(!is_numeric($postID)) {
|
||||
if (!is_numeric($postID)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde eine ungültige Post-ID angegeben.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$postData = $this->BlogModel->getPostDataByID($postID);
|
||||
|
||||
if(empty($postData)) {
|
||||
if (empty($postData)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde kein Post mit der angegebenen Post-ID gefunden.']);
|
||||
exit;
|
||||
}
|
||||
|
@ -191,69 +209,39 @@ class Blog extends MY_Controller
|
|||
echo json_encode(['status' => 'success', 'postData' => $postData[0]]);
|
||||
}
|
||||
|
||||
public function getContent() {
|
||||
public function getVersion() {
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Du musst eingeloggt sein, um Blog-Posts zu verfassen.']);
|
||||
echo json_encode(['success' => false, 'message' => 'Du musst eingeloggt sein, um Blog-Posts zu verfassen.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$postID = intval($this->input->post('postID'));
|
||||
$contentID = intval($this->input->post('contentID'));
|
||||
$versionID = intval($this->input->post('versionID'));
|
||||
$language = $this->input->post('lang');
|
||||
|
||||
if(!is_numeric($postID)) {
|
||||
if ($postID == 0) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde eine ungültige Post-ID angegeben.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if(!is_numeric($contentID)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde kein Content mit der angegebenen Content-ID gefunden.']);
|
||||
if ($versionID == 0) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde keine Version mit der angegebenen Versions-ID gefunden.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$contentData = $this->BlogModel->getContentDataByID($postID, $contentID, $language);
|
||||
$versionData = $this->BlogModel->getPostTranslationByID($postID, $versionID, $language);
|
||||
|
||||
if(empty($contentData)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde kein Content mit der angegebenen Content-ID gefunden.']);
|
||||
if (empty($versionData)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde keine Version mit der angegebenen Versions-ID gefunden.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
echo json_encode(['status' => 'success', 'contentData' => $contentData[0]]);
|
||||
echo json_encode(array_merge(['status' => 'success'], $versionData[0]));
|
||||
}
|
||||
|
||||
public function getTranslationData() {
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Du musst eingeloggt sein, um Blog-Posts zu verfassen.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$postID = intval($this->input->post('postID'));
|
||||
$translationID = intval($this->input->post('translationID'));
|
||||
$language = $this->input->post('lang');
|
||||
|
||||
if(!is_numeric($postID)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde eine ungültige Post-ID angegeben.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if(!is_numeric($translationID)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde kein Übersetzung mit der angegebenen ID gefunden.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$translationData = $this->BlogModel->getTranslationDataByID($postID, $translationID, $language);
|
||||
|
||||
if(empty($translationData)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Es wurde kein Übersetzung mit der angegebenen ID gefunden.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
echo json_encode(['status' => 'success', 'translationData' => $translationData[0]]);
|
||||
}
|
||||
|
||||
public function getPostTags() {
|
||||
public function getPostTags()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du musst eingeloggt sein, um Blog-Posts zu verfassen.']);
|
||||
|
@ -262,7 +250,7 @@ class Blog extends MY_Controller
|
|||
|
||||
$postID = intval($this->input->post('postID'));
|
||||
|
||||
if(!is_numeric($postID)) {
|
||||
if (!is_numeric($postID)) {
|
||||
echo json_encode(['success' => false, 'message' => 'Es wurde eine ungültige Post-ID angegeben.']);
|
||||
exit;
|
||||
}
|
||||
|
@ -276,26 +264,20 @@ class Blog extends MY_Controller
|
|||
{
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) redirect(base_url('login'));
|
||||
|
||||
$translations = ['de' => -1];
|
||||
$contents = ['de' => -1];
|
||||
$versions = ['de' => -1];
|
||||
|
||||
if(!$postID != -1) {
|
||||
if($this->BlogModel->postIDExisting($postID)) {
|
||||
$postTranslations = $this->BlogModel->getPostTranslationIDs($postID);
|
||||
foreach ($postTranslations as $postTranslation) {
|
||||
$translations[$postTranslation['language']] = $postTranslation['postTranslationID'];
|
||||
}
|
||||
|
||||
$postContents = $this->BlogModel->getPostContentIDs($postID);
|
||||
foreach ($postContents as $postContent) {
|
||||
$contents[$postContent['language']] = $postContent['contentID'];
|
||||
if (!$postID != -1) {
|
||||
if ($this->BlogModel->postIDExisting($postID)) {
|
||||
$postVersions = $this->BlogModel->getPostVersionIDs($postID);
|
||||
foreach ($postVersions as $postVersion) {
|
||||
$versions[$postVersion['lang']] = $postVersion['ID'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$categories = $this->BlogModel->getCategories();
|
||||
$this->load->view('admin/sidebar', ['title' => 'Blog-Post erstellen', 'additionalStyles' => ['lib/bootstrap-tagsinput.css', 'lib/bootstrap-tagsinput-typeahead.css']]);
|
||||
$this->load->view('admin/blog_edit', ['categories' => $categories, 'postID' => $postID, 'contents' => $contents, 'translations' => $translations, 'postLanguage' => $lang]);
|
||||
$this->load->view('admin/blog_edit', ['categories' => $categories, 'postID' => $postID, 'versions' => $versions, 'lang' => $lang]);
|
||||
$this->load->view('admin/footer', ['additionalScripts' => ['lib/typeahead.bundle.min.js', 'lib/bootstrap-tagsinput.min.js', 'lib/highlight.pack.js', 'lib/quill.min.js', 'blog-edit.js']]);
|
||||
|
||||
}
|
||||
|
@ -305,13 +287,35 @@ class Blog extends MY_Controller
|
|||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) redirect(base_url('login'));
|
||||
if ($postID === NULL) redirect(base_url('admin/blog'));
|
||||
|
||||
$content['de'] = $this->BlogModel->getAllContentVersions($postID, 'de');
|
||||
$content['en'] = $this->BlogModel->getAllContentVersions($postID, 'en');
|
||||
$content['fr'] = $this->BlogModel->getAllContentVersions($postID, 'fr');
|
||||
$content['de'] = $this->BlogModel->getAllPostVersions($postID, 'de');
|
||||
$content['en'] = $this->BlogModel->getAllPostVersions($postID, 'en');
|
||||
$content['fr'] = $this->BlogModel->getAllPostVersions($postID, 'fr');
|
||||
|
||||
$this->load->view('admin/sidebar', ['title' => 'Geschichte']);
|
||||
$this->load->view('admin/sidebar', ['title' => 'Änderungen']);
|
||||
$this->load->view('admin/blog_history', ['content' => $content]);
|
||||
$this->load->view('admin/footer');
|
||||
$this->load->view('admin/footer', ['additionalScripts' => ['blog-history.js']]);
|
||||
}
|
||||
|
||||
public function history_compare($postID = NULL, $version1 = NULL, $version2 = NULL) {
|
||||
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) redirect(base_url('login'));
|
||||
if ($postID === NULL) redirect(base_url('admin/blog'));
|
||||
if ($version1 === NULL || $version2 === NULL) redirect(base_url('admin/blog/' . $postID));
|
||||
|
||||
$content[] = $this->BlogModel->getPostTranslationByHashID($version1);
|
||||
$content[] = $this->BlogModel->getPostTranslationByHashID($version2);
|
||||
|
||||
$differ = new Differ;
|
||||
$diff['content'] = $differ->diff(
|
||||
htmlspecialchars(hl_tidy($content[0]['content'], 't', 'div')),
|
||||
htmlspecialchars(hl_tidy($content[1]['content'], 't', 'div'))
|
||||
);
|
||||
|
||||
// var_dump($diff);
|
||||
var_dump(htmlspecialchars($content[0]['content']),
|
||||
htmlspecialchars($content[1]['content']));
|
||||
|
||||
$this->load->view('admin/sidebar', ['title' => 'Vergleich']);
|
||||
$this->load->view('admin/footer', ['additionalScripts' => ['blog-history.js']]);
|
||||
}
|
||||
|
||||
public function new_category()
|
||||
|
@ -362,26 +366,27 @@ class Blog extends MY_Controller
|
|||
header("Content-Type: application/json");
|
||||
exit;
|
||||
}
|
||||
$result = array_map(function($value) {
|
||||
return $value['display_name'];
|
||||
$result = array_map(function ($value) {
|
||||
return $value['displayname'];
|
||||
}, $this->BlogModel->getAllTags());
|
||||
echo json_encode($result);
|
||||
// echo json_encode($this->BlogModel->getAllTags());
|
||||
header("Content-Type: application/json");
|
||||
}
|
||||
|
||||
public function updatePreview() {
|
||||
public function updatePreview()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
if(!$this->hasPermission('blog.create')) {
|
||||
if (!$this->hasPermission('blog.create')) {
|
||||
echo json_encode(['success' => false, 'message' => 'Du hast nicht genügend Rechte, um die Vorschau anzusehen.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if(!isset($_POST['postTitle']) || !isset($_POST['postDesc']) || !isset($_POST['postContent'])) {
|
||||
if (!isset($_POST['postTitle']) || !isset($_POST['postDesc']) || !isset($_POST['postContent'])) {
|
||||
exit;
|
||||
}
|
||||
|
||||
if(!isset($_POST['previewID'])) {
|
||||
if (!isset($_POST['previewID'])) {
|
||||
$previewID = substr(md5(uniqid() . date(time())), 0, 16);
|
||||
} else {
|
||||
$previewID = $_POST['previewID'];
|
||||
|
@ -397,10 +402,11 @@ class Blog extends MY_Controller
|
|||
}
|
||||
|
||||
|
||||
public function getTemplates() {
|
||||
public function getTemplates()
|
||||
{
|
||||
header('Content-Type: application/json');
|
||||
|
||||
if(!$this->hasPermission('blog.create')) {
|
||||
if (!$this->hasPermission('blog.create')) {
|
||||
echo json_encode([]);
|
||||
exit;
|
||||
}
|
||||
|
@ -416,12 +422,13 @@ class Blog extends MY_Controller
|
|||
echo json_encode($templates);
|
||||
}
|
||||
|
||||
public function preview() {
|
||||
public function preview()
|
||||
{
|
||||
$this->neededPermission('blog.create');
|
||||
|
||||
$previewID = $_GET['id'];
|
||||
|
||||
if(!isset($_SESSION['preview_' . $previewID])) {
|
||||
if (!isset($_SESSION['preview_' . $previewID])) {
|
||||
redirect('admin/blog');
|
||||
}
|
||||
|
||||
|
@ -430,9 +437,10 @@ class Blog extends MY_Controller
|
|||
$this->load->view('admin/blog_post_preview', $_SESSION['preview_' . $previewID]);
|
||||
$this->load->view('footer', ['additionalScripts' => ['lib/prism.js', 'blog.js']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Template {
|
||||
class Template
|
||||
{
|
||||
public $title;
|
||||
public $desc;
|
||||
public $content;
|
||||
|
@ -449,4 +457,4 @@ class Template {
|
|||
$this->desc = $desc;
|
||||
$this->content = $content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
$this->neededPermission('projects.view');
|
||||
|
||||
$entries = $this->ProjectsModel->getEntries('all');
|
||||
$categories = $this->ProjectsModel->getCategories('all');
|
||||
$categories = $this->ProjectsModel->getCategoriesRaw('all');
|
||||
|
||||
$this->load->view('admin/sidebar', ['title' => 'Projekte verwalten']);
|
||||
$this->load->view('admin/projects', ['entries' => $entries, 'categories' => $categories]);
|
||||
|
|
|
@ -127,8 +127,8 @@ class Users extends MY_Controller
|
|||
'displayname' => $userData['displayname'],
|
||||
'email' => $userData['email'],
|
||||
'rank' => $userData['rank'],
|
||||
'profile_picture' => $userData['profile_picture'],
|
||||
'header_image' => $userData['header_image'],
|
||||
'profilePicture' => $userData['profilePicture'],
|
||||
'headerImage' => $userData['headerImage'],
|
||||
'social_networks' => $userData['social_networks'],
|
||||
'showAds' => $userData['showAds'],
|
||||
'about' => $userData['about'],
|
||||
|
|
|
@ -81,7 +81,9 @@
|
|||
'Du hast uns leider keinen Inhalt angegeben, den wir veröffentlichen können.',
|
||||
'Sollte es sich dabei um ein Irrtum handeln, so kontaktiere uns bitte über das Kontakt-Formular.',
|
||||
];
|
||||
$lang['post_success_title'] = '';
|
||||
$lang['post_success_title'] = 'Dein Post wurde erfolgreich veröffentlicht!';
|
||||
$lang['post_success_lines'] = [
|
||||
'',
|
||||
'Möchtest du nun deine Posts ansehen?'
|
||||
];
|
||||
$lang['post_success_yes'] = 'Ja, Posts ansehen';
|
||||
$lang['post_success_no'] = 'Nein';
|
||||
|
|
7
application/language/fr/projects_lang.php
Normal file
7
application/language/fr/projects_lang.php
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tetri
|
||||
* Date: 05.01.2019
|
||||
* Time: 17:46
|
||||
*/
|
|
@ -16,101 +16,215 @@
|
|||
$this->load->model('UserModel', '', TRUE);
|
||||
}
|
||||
|
||||
function transfer() {
|
||||
$data = $this->db->query('SELECT * FROM kingofdog.blog_posts')->result_array();
|
||||
foreach ($data as $item) {
|
||||
extract($item);
|
||||
// $this->db->query('INSERT INTO kingofdog_new.blog_post_versions (postID, lang, active, title, description, content, contentWordsCount, authorID, changes, edited) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [
|
||||
// $postID, $language, $isActive, "", "", $content, $wordCount, $contentAuthorID, $versionMessage, $contentDate
|
||||
// ]);
|
||||
// $this->db->query('UPDATE kingofdog_new.blog_post_versions SET title = ?, description = ? WHERE postID = ? AND lang = ?', [
|
||||
// $postTitle, $postDesc, $postID, $language
|
||||
// ]);
|
||||
// $this->db->query('UPDATE kingofdog_new.blog_post_versions SET url = ? WHERE postID = ?', [$postUrl, $postID]);
|
||||
}
|
||||
}
|
||||
|
||||
private function getPostIDByUrl($url) {
|
||||
$data = $this->db->query('SELECT postID FROM blog_post_versions WHERE url = ? AND lang = ? AND active ORDER BY edited DESC LIMIT 1', [$url, $_SESSION['site_lang']])->result_array();
|
||||
return !empty($data) ? $data[0]['postID'] : NULL;
|
||||
}
|
||||
|
||||
function getAllPosts($search, $amount, $offset = 0)
|
||||
{
|
||||
$offset *= $amount;
|
||||
if ($search !== '') {
|
||||
$search = strtolower($search);
|
||||
$posts = $this->db->query('
|
||||
SELECT
|
||||
p.*,
|
||||
ca.name categoryName,
|
||||
ca.display_name categoryDisplayName,
|
||||
(SELECT count(*)
|
||||
FROM blog_comments
|
||||
WHERE post_id = p.postID) commentCount,
|
||||
(SELECT count(*)
|
||||
FROM blog_post_likes
|
||||
WHERE post_id = p.postID) likeCount,
|
||||
(SELECT wordCount FROM blog_content c WHERE c.postID = p.postID AND isActive = TRUE AND c.language = ? ORDER BY c.contentDate DESC LIMIT 1) wordCount
|
||||
FROM blog_posts p, blog_categories ca
|
||||
WHERE ca.id = p.postCategoryID
|
||||
AND (CONCAT((SELECT t.postTitle FROM blog_translations t WHERE t.postID = p.postID AND language = ?), postUrl, (SELECT t.postDesc FROM blog_translations t WHERE t.postID = p.postID AND language = ?)) RLIKE ?
|
||||
OR (SELECT content
|
||||
FROM blog_content
|
||||
WHERE blog_content.postID = p.postID AND isActive = TRUE
|
||||
LIMIT 1) RLIKE ?)
|
||||
AND postState = 1
|
||||
ORDER BY postPublishDate DESC
|
||||
LIMIT ? OFFSET ?', [$_SESSION['site_lang'], $_SESSION['site_lang'], $_SESSION['site_lang'], $search, $search, $amount, $offset])->result_array();
|
||||
SELECT
|
||||
p.*
|
||||
FROM blog_post p
|
||||
WHERE ((SELECT LOWER(title) RLIKE ? OR LOWER(description) RLIKE ? OR LOWER(content) RLIKE ? FROM blog_post_versions WHERE postID = p.ID AND lang = ?)
|
||||
OR (SELECT LOWER(displayname) RLIKE ? FROM blog_categories c WHERE c.lang = ? AND c.categoryID IN (SELECT categoryID FROM blog_post_categories pc WHERE pc.postID = p.ID)))
|
||||
AND state = 1
|
||||
ORDER BY initialRelease DESC
|
||||
LIMIT ? OFFSET ?', [$search, $search, $search, $_SESSION['site_lang'], $search, $_SESSION['site_lang'], $amount, $offset])->result_array();
|
||||
} else {
|
||||
$posts = $this->db->query('
|
||||
SELECT p.*,
|
||||
ca.name categoryName,
|
||||
ca.display_name categoryDisplayName,
|
||||
(SELECT count(*) FROM blog_comments WHERE post_id = p.postID) commentCount,
|
||||
(SELECT count(*) FROM blog_post_likes WHERE post_id = p.postID) likeCount,
|
||||
(SELECT wordCount FROM blog_content c WHERE c.postID = p.postID AND isActive = TRUE AND c.language = ? ORDER BY c.contentDate DESC LIMIT 1) wordCount
|
||||
FROM blog_posts p, blog_categories ca
|
||||
WHERE ca.id = p.postCategoryID
|
||||
AND postState = 1
|
||||
ORDER BY postPublishDate DESC
|
||||
LIMIT ? OFFSET ?', [$_SESSION['site_lang'], $amount, $offset])->result_array();
|
||||
SELECT *
|
||||
FROM blog_post
|
||||
WHERE state = 1
|
||||
ORDER BY initialRelease DESC
|
||||
LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
}
|
||||
$posts = $this->mergePostTitleDesc($posts);
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
$posts = $this->mergePostCategories($posts);
|
||||
$posts = $this->mergePostStats($posts);
|
||||
$posts = $this->mergePostAuthorData($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function mergePostTranslation($posts, $content = FALSE, $language = NULL, $indexID = 'ID')
|
||||
{
|
||||
$language = ($language == NULL ? $_SESSION['site_lang'] : $language);
|
||||
foreach ($posts as $i => $post) {
|
||||
$translationData = $this->getPostTranslation($post[$indexID], $content, $language);
|
||||
if(isset($translationData['error']) && $translationData['error']) {
|
||||
unset($posts[$i]);
|
||||
continue;
|
||||
}
|
||||
$posts[$i] += $translationData;
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
private function mergePostCategories($posts, $language = NULL)
|
||||
{
|
||||
$language = $language == NULL ? $_SESSION['site_lang'] : $language;
|
||||
foreach ($posts as $i => $post) {
|
||||
$categories = $this->getPostCategories($post['ID'], $language);
|
||||
$posts[$i]['categories'] = $categories;
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
private function getPostCategories($postID, $language)
|
||||
{
|
||||
$data = $this->db->query('SELECT ID, name, displayname FROM blog_categories WHERE categoryID IN (SELECT categoryID FROM blog_post_categories WHERE postID = ?) AND lang = ?', [$postID, $language])->result_array();
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function mergePostStats($posts, $language = NULL)
|
||||
{
|
||||
$language = $language == NULL ? $_SESSION['site_lang'] : $language;
|
||||
foreach ($posts as $i => $post) {
|
||||
$stats = $this->getPostStats($post['ID'], $language);
|
||||
$posts[$i] += $stats;
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
private function mergePostState($posts) {
|
||||
$states = [
|
||||
1 => "Veröffentlicht",
|
||||
2 => "Entwurf",
|
||||
3 => "Geplant",
|
||||
4 => "Im Papierkorb",
|
||||
];
|
||||
foreach ($posts as $i => $post) {
|
||||
$posts[$i]['stateName'] = $states[$post['state']];
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
private function getPostStats($postID, $language)
|
||||
{
|
||||
$comments = $this->db->query('SELECT COUNT(*) count FROM blog_post_comments WHERE postID = ?', [$postID])->result_array()[0]['count'];
|
||||
$likes = $this->db->query('SELECT COUNT(*) count FROM blog_post_likes WHERE postID = ?', [$postID])->result_array()[0]['count'];
|
||||
$words = $this->db->query('SELECT contentWordsCount count FROM blog_post_versions WHERE postID = ? AND active AND lang = ?', [$postID, $language])->result_array();
|
||||
|
||||
$words = empty($words) ? 0 : $words[0]['count'];
|
||||
|
||||
return [
|
||||
'commentCount' => $comments,
|
||||
'likeCount' => $likes,
|
||||
'wordCount' => $words,
|
||||
];
|
||||
}
|
||||
|
||||
private function mergePostAuthorData($posts)
|
||||
{
|
||||
foreach ($posts as $i => $post) {
|
||||
$authorData = $this->getAuthorData($post['authorID']);
|
||||
$posts[$i]['author'] = $authorData;
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getAuthorData($authorID)
|
||||
{
|
||||
$author = $this->db->query('SELECT u.ID, u.username, u.displayname, u.rank, s.profilePicture, s.headerImage, s.about FROM users u LEFT JOIN user_settings s ON u.ID = s.ID WHERE u.ID = ?', [$authorID])->result_array();
|
||||
|
||||
$author = $this->UserModel->setDefaultImages($author);
|
||||
|
||||
if (empty($author)) {
|
||||
return null;
|
||||
}
|
||||
return $author[0];
|
||||
}
|
||||
|
||||
public function getPostPageCount($search, $postsPerPage)
|
||||
{
|
||||
if ($search !== '') {
|
||||
$search = strtolower($search);
|
||||
$data = $this->db->query('
|
||||
SELECT COUNT(*) pageCount
|
||||
FROM blog_posts p, blog_categories ca
|
||||
WHERE ca.id = p.postCategoryID
|
||||
AND (CONCAT((SELECT t.postTitle FROM blog_translations t WHERE t.postID = p.postID AND language = ?), postUrl, (SELECT t.postDesc FROM blog_translations t WHERE t.postID = p.postID AND language = ?)) RLIKE ?
|
||||
OR (SELECT content FROM blog_content WHERE blog_content.postID = p.postID AND isActive = TRUE LIMIT 1) RLIKE ?)
|
||||
AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $search])->result_array();
|
||||
SELECT COUNT(*) pageCount
|
||||
FROM blog_post p
|
||||
WHERE ((SELECT LOWER(title) RLIKE ? OR LOWER(description) RLIKE ? OR LOWER(content) RLIKE ? FROM blog_post_versions v WHERE v.postID = p.ID AND v.lang = ? AND active)
|
||||
OR (SELECT LOWER(displayname) RLIKE ? FROM blog_categories c WHERE c.lang = ? AND c.categoryID IN (SELECT categoryID FROM blog_post_categories pc WHERE pc.postID = p.ID)))
|
||||
AND state = 1', [$search, $search, $_SESSION['site_lang'], $search, $_SESSION['site_lang']])->result_array();
|
||||
} else {
|
||||
$data = $this->db->query('SELECT COUNT(*) pageCount FROM blog_posts')->result_array();
|
||||
$data = $this->db->query('SELECT COUNT(*) pageCount FROM blog_post')->result_array();
|
||||
}
|
||||
return ($data[0]['pageCount']) / $postsPerPage;
|
||||
}
|
||||
|
||||
function getCategoryPosts($category, $amount, $offset = 0)
|
||||
{
|
||||
$category = $this->db->query('SELECT ID FROM blog_categories WHERE name = ? AND lang = ?', [$category, $_SESSION['site_lang']])->result_array();
|
||||
|
||||
if(empty($category)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
$offset *= $amount;
|
||||
$posts = $this->db->query('
|
||||
SELECT p.*, ca.name categoryName, ca.display_name categoryDisplayName, (SELECT count(*) FROM blog_comments WHERE post_id = p.postID) commentCount, (SELECT count(*) FROM blog_post_likes WHERE post_id = p.postID) likeCount
|
||||
FROM blog_posts p, blog_categories ca
|
||||
WHERE ca.id = p.postCategoryID
|
||||
AND postState = 1
|
||||
AND ca.name = ?
|
||||
ORDER BY postPublishDate DESC
|
||||
LIMIT ? OFFSET ?', [$category, $amount, $offset])->result_array();
|
||||
$posts = $this->mergePostTitleDesc($posts);
|
||||
$posts = $this->db->query('SELECT * FROM blog_post p WHERE ID IN (SELECT postID FROM blog_post_categories pc WHERE pc.categoryID = ?) LIMIT ? OFFSET ?', [$category[0]['ID'], $amount, $offset])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
$posts = $this->mergePostCategories($posts);
|
||||
$posts = $this->mergePostStats($posts);
|
||||
$posts = $this->mergePostAuthorData($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getCategoryPostsByID($categoryID, $amount = 3, $postID = NULL)
|
||||
public function getCategoryPostsByID($categories, $amount = 3, $postID = NULL)
|
||||
{
|
||||
$posts = $this->db->query('SELECT * FROM blog_posts WHERE postCategoryID = ? AND postID != ? AND blog_posts.postState = 1 ORDER BY postPublishDate DESC LIMIT ?', [$categoryID, $postID, $amount])->result_array();
|
||||
return $this->mergePostTitleDesc($posts);
|
||||
function getIDs($val) {
|
||||
return $val['ID'];
|
||||
}
|
||||
|
||||
public function getTagPosts($tag, $amount, $offset = 0) {
|
||||
if(empty($categories)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
$categories = array_map('getIDs', $categories);
|
||||
|
||||
$posts = $this->db->query('SELECT * FROM blog_post WHERE ID IN (SELECT postID FROM blog_post_categories WHERE categoryID IN ?) AND ID != ? AND state = 1 ORDER BY initialRelease DESC LIMIT ?', [$categories, $postID, $amount])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getTagPosts($tag, $amount, $offset = 0)
|
||||
{
|
||||
$offset *= $amount;
|
||||
$posts = $this->db->query('SELECT p.*, ca.name categoryName, ca.display_name categoryDisplayName, (SELECT count(*) FROM blog_comments WHERE post_id = p.postID) commentCount, (SELECT count(*) FROM blog_post_likes WHERE post_id = p.postID) likeCount FROM blog_posts p LEFT JOIN blog_categories ca ON ca.ID = p.postCategoryID WHERE postState = 1 AND EXISTS(SELECT post_id FROM blog_post_tags WHERE tag_id = (SELECT ID FROM blog_tags t WHERE t.name = ?) AND post_id = p.postID) ORDER BY postPublishDate DESC LIMIT ? OFFSET ?', [$tag, $amount, $offset])->result_array();
|
||||
$posts = $this->mergePostTitleDesc($posts);
|
||||
$tag = strtolower($tag);
|
||||
$tagID = $this->db->query('SELECT ID FROM blog_tags WHERE name = ? AND lang = ?', [$tag, $_SESSION['site_lang']])->result_array();
|
||||
|
||||
if(empty($tagID)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$posts = $this->db->query('SELECT * FROM blog_post p WHERE state = 1 AND ID IN (SELECT postID FROM blog_post_tags WHERE tagID = ?) ORDER BY initialRelease DESC LIMIT ? OFFSET ?', [$tagID[0]['ID'], $amount, $offset])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
$posts = $this->mergePostCategories($posts);
|
||||
$posts = $this->mergePostStats($posts);
|
||||
$posts = $this->mergePostAuthorData($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
function getCategoryIDAfterInsert($name, $display_name)
|
||||
{
|
||||
if (!$this->db->simple_query('INSERT INTO blog_categories (name, display_name) VALUES (?, ?)', [$name, $display_name])) {
|
||||
$return = $this->db->query('SELECT ID FROM blog_categories WHERE name = ? AND display_name = ? LIMIT 1', [$name, $display_name])->result_array()[0];
|
||||
if (!$this->db->simple_query('INSERT INTO blog_categories (name, displayname) VALUES (?, ?)', [$name, $display_name])) {
|
||||
$return = $this->db->query('SELECT ID FROM blog_categories WHERE name = ? AND displayname = ? LIMIT 1', [$name, $display_name])->result_array()[0];
|
||||
$return = $return['ID'];
|
||||
} else {
|
||||
$return = $this->db->query('SELECT LAST_INSERT_ID() ID')->result_array()[0]['ID'];
|
||||
|
@ -120,7 +234,9 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
function incrementViews($id)
|
||||
{
|
||||
$this->db->query('UPDATE blog_posts SET postViews = postViews+1 WHERE postID = ?', [$id]);
|
||||
$this->db->query('INSERT IGNORE INTO blog_post_stats (ID) VALUES (?)', [$id]);
|
||||
|
||||
$this->db->query('UPDATE blog_post_stats SET views = views + 1 WHERE ID = ?', [$id]);
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
|
@ -135,172 +251,157 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
public function getPost($postUrl)
|
||||
{
|
||||
$content = $this->db->query('
|
||||
SELECT p.*,
|
||||
ca.name categoryName,
|
||||
ca.display_name categoryDisplayName,
|
||||
COUNT(co.comment) commentCount,
|
||||
(SELECT count(*) FROM blog_post_likes l WHERE l.post_id = p.postID) likeCount
|
||||
FROM blog_posts p
|
||||
LEFT JOIN blog_categories ca ON p.postCategoryID = ca.ID
|
||||
LEFT JOIN blog_comments co ON p.postID = co.post_id
|
||||
LEFT JOIN blog_post_likes l ON p.postID = l.post_id
|
||||
WHERE postUrl = ? AND postState = 1
|
||||
GROUP BY p.postID', [$postUrl])->result_array(); //TODO: language integration
|
||||
SELECT p.*
|
||||
FROM blog_post p
|
||||
WHERE (SELECT postID FROM blog_post_versions v WHERE v.postID = p.ID AND (v.lang = ? OR v.lang = "de") AND active AND url = ? ORDER BY edited DESC LIMIT 1) = p.ID AND state = 1
|
||||
GROUP BY ID', [$_SESSION['site_lang'], $postUrl])->result_array(); //TODO: language integration
|
||||
|
||||
$content = $this->mergePostTitleDesc($content);
|
||||
$content = $this->mergePostTranslation($content, true);
|
||||
$content = $this->mergePostStats($content);
|
||||
$content = $this->mergePostCategories($content);
|
||||
$content = $this->mergePostAuthorData($content);
|
||||
$content = $this->mergePostContent($content, $_SESSION['site_lang']);
|
||||
return $content[0];
|
||||
}
|
||||
|
||||
public function getPostDataByID($postID)
|
||||
{
|
||||
$data = $this->db->query('
|
||||
SELECT p.*,
|
||||
ca.name AS categoryName,
|
||||
ca.display_name AS categoryDisplayName,
|
||||
COUNT(co.comment) AS commentCount,
|
||||
COUNT(l.post_id) AS likeCount
|
||||
FROM blog_posts p
|
||||
LEFT JOIN blog_categories ca ON p.postCategoryID = ca.ID
|
||||
LEFT JOIN blog_comments co ON p.postID = co.post_id
|
||||
LEFT JOIN blog_post_likes l ON p.postID = l.post_id
|
||||
WHERE postID = ?
|
||||
GROUP BY p.postID', [$postID])->result_array();
|
||||
SELECT *
|
||||
FROM blog_post
|
||||
WHERE ID = ?', [$postID])->result_array();
|
||||
|
||||
$data = $this->mergePostCategories($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getContentDataByID($postID, $contentID, $lang)
|
||||
{
|
||||
$data = $this->db->query('SELECT * FROM blog_content WHERE postID = ? AND contentID = ? AND language = ?', [$postID, $contentID, $lang])->result_array();
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getTranslationDataByID($postID, $translationID, $lang)
|
||||
{
|
||||
$data = $this->db->query('SELECT * FROM blog_translations WHERE postID = ? AND postTranslationID = ? AND language = ?', [$postID, $translationID, $lang])->result_array();
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getPostContentByID($postID, $language)
|
||||
{
|
||||
$content = $this->db->query('SELECT * FROM blog_content WHERE postID = ? AND isActive = TRUE AND language = ? ORDER BY contentDate DESC LIMIT 1', [$postID, $language])->result_array();
|
||||
return $content;
|
||||
}
|
||||
|
||||
public function getRandomPosts($postID)
|
||||
{
|
||||
$posts = $this->db->query('SELECT * FROM blog_posts WHERE postID <> ? AND postState = 1 ORDER BY RAND() LIMIT 3', [$postID])->result_array();
|
||||
$posts = $this->mergePostTitleDesc($posts);
|
||||
$posts = $this->db->query('SELECT * FROM blog_post WHERE ID <> ? AND state = 1 ORDER BY RAND() LIMIT 3', [$postID])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
$posts = $this->mergePostAuthorData($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function mergePostTitleDesc($posts, $language = NULL)
|
||||
public function getPostTranslation($postID, $showContent, $language)
|
||||
{
|
||||
$language = ($language == NULL ? $_SESSION['site_lang'] : $language);
|
||||
foreach ($posts as $i => $post) {
|
||||
$titleDesc = $this->getPostTitleDesc($post['postID'], $language);
|
||||
$posts[$i]['postTitle'] = $titleDesc['title'];
|
||||
$posts[$i]['postDesc'] = $titleDesc['desc'];
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
$data = $this->db->query('SELECT * FROM blog_post_versions WHERE postID = ? AND active ORDER BY lang ASC', [$postID])->result_array();
|
||||
|
||||
private function mergePostAuthorData($posts)
|
||||
{
|
||||
foreach ($posts as $i => $post) {
|
||||
$authorData = $this->getAuthorData($post['postAuthorID']);
|
||||
$posts[$i]['postAuthorDisplayname'] = $authorData['displayname'];
|
||||
$posts[$i]['postAuthorUsername'] = $authorData['username'];
|
||||
$posts[$i]['postAuthorProfilePicture'] = $authorData['profile_picture'];
|
||||
$posts[$i]['postAuthorHeaderImage'] = $authorData['header_image'];
|
||||
$posts[$i]['postAuthorRank'] = $authorData['rank'];
|
||||
$posts[$i]['postAuthorAbout'] = $authorData['about'];
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
private function mergePostContent($posts, $language)
|
||||
{
|
||||
$language = ($language == NULL ? $_SESSION['site_lang'] : $language);
|
||||
foreach ($posts as $i => $post) {
|
||||
$content = $this->getPostContentByID($post['postID'], $language);
|
||||
if (empty($content) && $_SESSION['site_lang'] !== 'de') {
|
||||
$content = $this->getPostContentByID($post['postID'], 'de');
|
||||
}
|
||||
if (!empty($content)) {
|
||||
$content = $content[0];
|
||||
$posts[$i]['postContent'] = $content['content'];
|
||||
$posts[$i]['postWordCount'] = $content['wordCount'];
|
||||
}
|
||||
}
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getPostTitleDesc($postID, $language)
|
||||
{
|
||||
$data = $this->db->query('SELECT * FROM blog_translations WHERE postID = ? ORDER BY blog_translations.language ASC', [$postID])->result_array();
|
||||
if (empty($data)) {
|
||||
return ['title' => 'Nicht vorhandener Post', 'desc' => 'Aus unbekannten Gründen ist dieser Blog-Post nicht vorhanden. Bitte versuche es später erneut oder kontaktiere das Support-Team'];
|
||||
return ['error' => true, 'title' => 'Nicht vorhandener Post', 'description' => 'Aus unbekannten Gründen ist dieser Blog-Post nicht vorhanden. Bitte versuche es später erneut oder kontaktiere das Support-Team'];
|
||||
}
|
||||
$postTitle = $data[0]['postTitle'];
|
||||
$postDesc = $data[0]['postDesc'];
|
||||
|
||||
$url = $data[0]['url'];
|
||||
$title = $data[0]['title'];
|
||||
$description = $data[0]['description'];
|
||||
$content = $data[0]['content'];
|
||||
foreach ($data as $row) {
|
||||
if ($row['language'] == $language) {
|
||||
$postTitle = $row['postTitle'];
|
||||
$postDesc = $row['postDesc'];
|
||||
if ($row['lang'] == $language) {
|
||||
$url = $row['url'];
|
||||
$title = $row['title'];
|
||||
$description = $row['description'];
|
||||
$content = $row['content'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ['title' => $postTitle, 'desc' => $postDesc];
|
||||
|
||||
$return = [
|
||||
'url' => $url,
|
||||
'title' => $title,
|
||||
'description' => $description,
|
||||
];
|
||||
if($showContent) {
|
||||
$return['content'] = $content;
|
||||
}
|
||||
|
||||
public function getAuthorData($authorID)
|
||||
{
|
||||
$author = $this->db->query('SELECT ID, username, displayname, rank, profile_picture, header_image, about FROM users WHERE ID = ?', [$authorID])->result_array();
|
||||
|
||||
$author = $this->UserModel->setDefaultImages($author);
|
||||
|
||||
if(empty($author)) {
|
||||
return null;
|
||||
return $return;
|
||||
}
|
||||
return $author[0];
|
||||
|
||||
public function getPostTranslationByID($postID, $versionID, $lang) {
|
||||
$data = $this->db->query('SELECT * FROM blog_post_versions WHERE postID = ? AND ID = ? AND lang = ?', [$postID, $versionID, $lang])->result_array();
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getPostTranslationByHashID($versionID) {
|
||||
$data = $this->db->query('SELECT * FROM blog_post_versions WHERE MD5(ID) = ?', [$versionID])->result_array();
|
||||
return !empty($data) ? $data[0] : NULL;
|
||||
}
|
||||
|
||||
public function getComments($postID)
|
||||
{
|
||||
$comments = $this->db->query('SELECT * FROM blog_comments WHERE post_id = ? ORDER BY date_created DESC', [$postID])->result_array();
|
||||
$comments = $this->db->query('SELECT * FROM blog_post_comments WHERE postID = ? ORDER BY date DESC', [$postID])->result_array();
|
||||
return $comments;
|
||||
}
|
||||
|
||||
public function getCommentsByUrl($postUrl)
|
||||
{
|
||||
return $this->db->query('SELECT * FROM blog_comments WHERE post_id = (SELECT postID FROM blog_posts WHERE postUrl = ?) ORDER BY date_created DESC', [$postUrl])->result_array();
|
||||
$ID = $this->getPostIDByUrl($postUrl);
|
||||
if($ID !== NULL) {
|
||||
return $this->getComments($ID);
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
public function addComment($postID, $userID, $comment, $reply, $replyTo)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_comments (post_id, user_id, comment, reply, replyTo_id) VALUES (?, ?, ?, ?, ?)', [$postID, $userID, $comment, $reply, $replyTo]);
|
||||
public function getComment($commentID) {
|
||||
$comment = $this->db->query('SELECT * FROM blog_post_comments WHERE ID = ?', [$commentID])->result_array();
|
||||
return !empty($comment) ? $comment[0] : NULL;
|
||||
}
|
||||
|
||||
public function isCommentIDValid($commentID) {
|
||||
$comment = $this->db->query('SELECT ID FROM blog_post_comments WHERE ID = ?', [$commentID])->result_array();
|
||||
return !empty($comment);
|
||||
}
|
||||
|
||||
public function addCommentByUrl($postUrl, $userID, $comment, $replyTo)
|
||||
{
|
||||
$postID = $this->getPostIDByUrl($postUrl);
|
||||
|
||||
if($postID == NULL) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$this->addComment($postID, $userID, $comment, $replyTo);
|
||||
|
||||
return $this->db->query('SELECT * FROM blog_post_comments WHERE postID = ? AND userID = ? ORDER BY ID DESC LIMIT 1', [$postID, $userID])->result_array()[0];
|
||||
}
|
||||
|
||||
public function addComment($postID, $userID, $comment, $replyTo)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_post_comments (postID, userID, comment, replyToID) VALUES (?, ?, ?, ?)', [$postID, $userID, $comment, $replyTo]);
|
||||
|
||||
$this->db->cache_delete('user', 'getComments');
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'comment');
|
||||
$this->db->cache_delete('blog', 'getComments');
|
||||
$this->db->cache_delete('blog', 'getReportModal');
|
||||
$this->db->cache_delete('blog', 'reportModal');
|
||||
$this->db->cache_delete('blog', 'getDeleteModal');
|
||||
$this->db->cache_delete('blog', 'deleteComment');
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function addCommentByUrl($postUrl, $userID, $comment, $reply, $replyTo)
|
||||
{
|
||||
$postID = $this->db->query('SELECT postID FROM blog_posts WHERE postUrl = ?', [$postUrl])->result_array();
|
||||
if(empty($postID)) {
|
||||
return null;
|
||||
public function reportComment($commentID, $reason, $reasonText) {
|
||||
$this->db->query('INSERT INTO blog_post_comments_reports (commentID, reason, reasonText) VALUES (?, ?, ?)', [$commentID, $reason, $reasonText]);
|
||||
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
$this->addComment($postID[0]['postID'], $userID, $comment, $reply, $replyTo);
|
||||
public function deleteComment($userID, $commentID) {
|
||||
$this->db->query('DELETE FROM blog_post_comments WHERE replyToID = ?', [$commentID]);
|
||||
$this->db->query('DELETE FROM blog_post_comments WHERE userID = ? AND ID = ?', [$userID, $commentID]);
|
||||
|
||||
return $this->db->query('SELECT * FROM blog_comments WHERE post_id = ? AND user_id = ? ORDER BY ID DESC LIMIT 1', [$postID[0]['postID'], $userID])->result_array()[0];
|
||||
$this->db->cache_delete('user', 'getComments');
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'comment');
|
||||
$this->db->cache_delete('blog', 'getComments');
|
||||
$this->db->cache_delete('blog', 'getReportModal');
|
||||
$this->db->cache_delete('blog', 'reportModal');
|
||||
$this->db->cache_delete('blog', 'getDeleteModal');
|
||||
$this->db->cache_delete('blog', 'deleteComment');
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function getAllTags()
|
||||
|
@ -310,13 +411,14 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function getTags($postID)
|
||||
{
|
||||
$tags = $this->db->query('SELECT t.* FROM blog_tags t WHERE ID IN (SELECT tag_id FROM blog_post_tags WHERE post_id = ?)', [$postID])->result_array();
|
||||
$tags = $this->db->query('SELECT t.* FROM blog_tags t WHERE ID IN (SELECT tagID FROM blog_post_tags WHERE postID = ?)', [$postID])->result_array();
|
||||
return $tags;
|
||||
}
|
||||
|
||||
public function mergeTagInfo($tags) {
|
||||
public function mergeTagInfo($tags)
|
||||
{
|
||||
foreach ($tags as $i => $tag) {
|
||||
$data = $this->db->query('SELECT count(*) countUsed, SUM(postViews) totalViews FROM blog_posts WHERE postID = (SELECT post_id FROM blog_post_tags WHERE tag_id = ? AND post_id = postID)', [$tag['ID']])->result_array();
|
||||
$data = $this->db->query('SELECT count(*) countUsed, SUM(postViews) totalViews FROM blog_posts WHERE postID = (SELECT postID FROM blog_post_tags WHERE tag_id = ? AND postID = postID)', [$tag['ID']])->result_array();
|
||||
$data = $data[0];
|
||||
$tags[$i]['countUsed'] = $data['countUsed'];
|
||||
$tags[$i]['totalViews'] = $data['totalViews'] != '' ? $data['totalViews'] : 0;
|
||||
|
@ -326,7 +428,7 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function hasAlreadyLiked($postID, $userID)
|
||||
{
|
||||
$getLikes = $this->db->query('SELECT * FROM blog_post_likes WHERE post_id = ? AND user_id = ?', [$postID, $userID])->result_array();
|
||||
$getLikes = $this->db->query('SELECT * FROM blog_post_likes WHERE postID = ? AND userID = ?', [$postID, $userID])->result_array();
|
||||
if (empty($getLikes)) {
|
||||
return false;
|
||||
} else {
|
||||
|
@ -336,53 +438,49 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function addLike($postID, $userID)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_post_likes (post_id, user_id) VALUES (?, ?)', [$postID, $userID]);
|
||||
$this->db->query('INSERT INTO blog_post_likes (postID, userID) VALUES (?, ?)', [$postID, $userID]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'like');
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
|
||||
return $this->db->query('SELECT count(*) likeCount FROM blog_post_likes WHERE post_id = ?', [$postID])->result_array()[0];
|
||||
return $this->db->query('SELECT count(*) likeCount FROM blog_post_likes WHERE postID = ?', [$postID])->result_array()[0];
|
||||
}
|
||||
|
||||
public function removeLike($postID, $userID)
|
||||
{
|
||||
$this->db->query('DELETE FROM blog_post_likes WHERE post_id = ? AND user_id = ?', [$postID, $userID]);
|
||||
$this->db->query('DELETE FROM blog_post_likes WHERE postID = ? AND userID = ?', [$postID, $userID]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'like');
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
|
||||
return $this->db->query('SELECT count(*) likeCount FROM blog_post_likes WHERE post_id = ?', [$postID])->result_array()[0];
|
||||
return $this->db->query('SELECT count(*) likeCount FROM blog_post_likes WHERE postID = ?', [$postID])->result_array()[0];
|
||||
}
|
||||
|
||||
public function getPostList($onlyTrash)
|
||||
{
|
||||
$posts = $this->db->query('SELECT p.*,
|
||||
ca.name categoryName,
|
||||
ca.display_name categoryDisplayName,
|
||||
(SELECT count(*)
|
||||
FROM blog_comments
|
||||
WHERE post_id = p.postID) commentCount,
|
||||
(SELECT count(*)
|
||||
FROM blog_post_likes
|
||||
WHERE post_id = p.postID) likeCount,
|
||||
(SELECT display_name
|
||||
FROM blog_states
|
||||
WHERE ID = p.postState) postStateDisplay
|
||||
FROM blog_posts p
|
||||
LEFT JOIN blog_categories ca ON ca.ID = p.postCategoryID
|
||||
WHERE postIsDeleted = ?', [$onlyTrash])->result_array();
|
||||
$posts = $this->mergePostTitleDesc($posts);
|
||||
if($onlyTrash) {
|
||||
$posts = $this->db->query('SELECT p.*, s.views
|
||||
FROM blog_trash p LEFT JOIN blog_post_stats s ON s.ID = p.ID')->result_array();
|
||||
} else {
|
||||
$posts = $this->db->query('SELECT p.*, s.views
|
||||
FROM blog_post p LEFT JOIN blog_post_stats s ON s.ID = p.ID')->result_array();
|
||||
}
|
||||
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
$posts = $this->mergePostCategories($posts);
|
||||
$posts = $this->mergePostStats($posts);
|
||||
$posts = $this->mergePostAuthorData($posts);
|
||||
$posts = $this->mergePostState($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getAllContentVersions($postID, $lang)
|
||||
public function getAllPostVersions($postID, $lang)
|
||||
{
|
||||
$content = $this->db->query('SELECT * FROM blog_content WHERE postID = ? AND language = ? ORDER BY contentDate DESC', [$postID, $lang])->result_array();
|
||||
$content = $this->db->query('SELECT *, MD5(ID) hashID FROM blog_post_versions WHERE postID = ? AND lang = ? ORDER BY edited DESC', [$postID, $lang])->result_array();
|
||||
return $content;
|
||||
}
|
||||
|
||||
|
@ -391,7 +489,7 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
$this->db->cache_off();
|
||||
$tagData = $this->db->query('SELECT ID FROM blog_tags WHERE name = ?', [strtolower($tag)])->result_array();
|
||||
if (empty($tagData)) {
|
||||
$this->db->query('INSERT INTO blog_tags (name, display_name) VALUES (?, ?)', [strtolower($tag), $tag]);
|
||||
$this->db->query('INSERT INTO blog_tags (name, displayname) VALUES (?, ?)', [strtolower($tag), $tag]);
|
||||
$tagData = $this->db->query('SELECT ID FROM blog_tags WHERE name = ?', [strtolower($tag)])->result_array();
|
||||
}
|
||||
$this->db->cache_on();
|
||||
|
@ -401,7 +499,7 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function addPostTagByID($postID, $tagID)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_post_tags (post_id, tag_id) VALUES (?, ?) ON DUPLICATE KEY UPDATE post_id = post_id', [$postID, $tagID]);
|
||||
$this->db->query('INSERT INTO blog_post_tags (postID, tagID) VALUES (?, ?) ON DUPLICATE KEY UPDATE postID = postID', [$postID, $tagID]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
|
@ -411,7 +509,7 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function deleteAllPostTags($postID)
|
||||
{
|
||||
$this->db->query('DELETE FROM blog_post_tags WHERE post_id = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM blog_post_tags WHERE postID = ?', [$postID]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
|
@ -419,6 +517,25 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function addPostCategoryByID($postID, $categoryID)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_post_categories (postID, categoryID) VALUES (?, ?) ON DUPLICATE KEY UPDATE postID = postID', [$postID, $categoryID]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'like');
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function deleteAllPostCategories($postID)
|
||||
{
|
||||
$this->db->query('DELETE FROM blog_post_categories WHERE postID = ?', [$postID]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'category');
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
// TODO: Update
|
||||
public function prepareContentForRelease($content)
|
||||
{
|
||||
|
@ -469,7 +586,8 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function deletePost($id)
|
||||
{
|
||||
$this->db->query('UPDATE blog_posts SET postIsDeleted = TRUE, postDeletedDate = NOW(), postState = 4 WHERE postID = ? LIMIT 1', [$id]);
|
||||
$this->db->query('INSERT INTO blog_trash SELECT * FROM blog_post WHERE ID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_post WHERE ID = ?', [$id]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
|
@ -481,7 +599,8 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function restorePost($id)
|
||||
{
|
||||
$this->db->query('UPDATE blog_posts SET postIsDeleted = FALSE, postDeletedDate = NULL, postState = 1 WHERE postID = ? LIMIT 1', [$id]);
|
||||
$this->db->query('INSERT INTO blog_post SELECT * FROM blog_trash WHERE ID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_trash WHERE ID = ?', [$id]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
|
@ -493,11 +612,19 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function deletePostFinally($id)
|
||||
{
|
||||
$this->db->query('DELETE FROM blog_content WHERE postID = ? AND (SELECT postIsDeleted FROM blog_posts WHERE postID = ?) = TRUE', [$id, $id]);
|
||||
$this->db->query('DELETE FROM blog_post_likes WHERE post_id = ? AND (SELECT postIsDeleted FROM blog_posts WHERE postID = ?) = TRUE', [$id, $id]);
|
||||
$this->db->query('DELETE FROM blog_post_tags WHERE post_id = ? AND (SELECT postIsDeleted FROM blog_posts WHERE postID = ?) = TRUE', [$id, $id]);
|
||||
$this->db->query('DELETE FROM blog_comments WHERE post_id = ? AND (SELECT postIsDeleted FROM blog_posts WHERE postID = ?) = TRUE', [$id, $id]);
|
||||
$this->db->query('DELETE FROM blog_posts WHERE postID = ? AND postIsDeleted = TRUE LIMIT 1', [$id]);
|
||||
$data = $this->db->query('SELECT ID FROM blog_trash WHERE ID = ?', [$id])->result_array();
|
||||
|
||||
if(empty($data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->db->query('DELETE FROM blog_post_categories WHERE postID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_post_comments WHERE postID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_post_likes WHERE postID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_post_stats WHERE ID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_post_tags WHERE postID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_post_versions WHERE postID = ?', [$id]);
|
||||
$this->db->query('DELETE FROM blog_trash WHERE ID = ? LIMIT 1', [$id]);
|
||||
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
|
@ -507,47 +634,29 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function getPrevPost($id)
|
||||
public function getPrevPost($initialRelease)
|
||||
{
|
||||
$posts = $this->db->query('SELECT postID, postUrl, postImage FROM blog_posts WHERE postPublishDate < (SELECT postPublishDate FROM blog_posts WHERE postID = ?) AND postState = 1 ORDER BY postPublishDate DESC LIMIT 1', [$id])->result_array();
|
||||
return $this->mergePostTitleDesc($posts);
|
||||
$posts = $this->db->query('SELECT ID, image FROM blog_post WHERE initialRelease < ? AND state = 1 ORDER BY initialRelease DESC LIMIT 1', [$initialRelease])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getNextPost($id)
|
||||
public function getNextPost($initialRelease)
|
||||
{
|
||||
$posts = $this->db->query('SELECT postID, postUrl, postImage FROM blog_posts WHERE postPublishDate > (SELECT postPublishDate FROM blog_posts WHERE postID = ?) AND postState = 1 ORDER BY postPublishDate ASC LIMIT 1', [$id])->result_array();
|
||||
return $this->mergePostTitleDesc($posts);
|
||||
$posts = $this->db->query('SELECT ID, image FROM blog_post WHERE initialRelease > ? AND state = 1 ORDER BY initialRelease ASC LIMIT 1', [$initialRelease])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
public function getMostRecentPosts($count)
|
||||
{
|
||||
$posts = $this->db->query('SELECT postID, postImage, postUrl, postPublishDate FROM blog_posts WHERE postState = 1 ORDER BY postPublishDate DESC LIMIT ?', [$count])->result_array();
|
||||
return $this->mergePostTitleDesc($posts);
|
||||
$posts = $this->db->query('SELECT ID, image, initialRelease FROM blog_post WHERE state = 1 ORDER BY initialRelease DESC LIMIT ?', [$count])->result_array();
|
||||
$posts = $this->mergePostTranslation($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
private function countWords($text)
|
||||
public function getReadingTime($wordCount)
|
||||
{
|
||||
$text = preg_replace("/<[a-zA-Z0-9\/ .,:;\-_+!?&%=\"]+>/", '', $text);
|
||||
return str_word_count($text);
|
||||
}
|
||||
|
||||
public function getReadingTime($postID)
|
||||
{
|
||||
$data = $this->db->query('SELECT wordCount, language FROM blog_content c WHERE postID = ? AND isActive = TRUE AND (c.language = ? OR c.language = "de") ORDER BY contentDate DESC', [$postID, $_SESSION['site_lang']])->result_array();
|
||||
|
||||
if (empty($data)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$wordCount = $data[0]['wordCount'];
|
||||
|
||||
foreach ($data as $entry) {
|
||||
if ($entry['language'] == $_SESSION['site_lang']) {
|
||||
$wordCount = $entry['wordCount'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$wordsPerSecond = 3;
|
||||
$duration = $wordCount / $wordsPerSecond;
|
||||
$duration /= 60;
|
||||
|
@ -557,53 +666,46 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
|
||||
public function createNewPostDraft($authorID)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_posts (postAuthorID, postState) VALUE (?, 2)', [$authorID]);
|
||||
$data = $this->db->query('SELECT postID FROM blog_posts WHERE postState = 2 ORDER BY postID DESC LIMIT 1')->result_array();
|
||||
$this->db->query('INSERT INTO blog_post (authorID, state) VALUE (?, 2)', [$authorID]);
|
||||
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
$data = $this->db->query('SELECT ID FROM blog_post WHERE state = 2 ORDER BY ID DESC LIMIT 1')->result_array();
|
||||
|
||||
return intval($data[0]['postID']);
|
||||
}
|
||||
|
||||
public function createNewContentDraft($postID)
|
||||
{
|
||||
$this->db->query('INSERT INTO blog_content (postID, isActive) VALUES (?, 0)', [$postID]);
|
||||
public function createNewTranslationDraft($postID, $authorID, $lang) {
|
||||
$this->db->query('INSERT INTO blog_post_versions (postID, authorID, active, lang) VALUES (?, ?, 0, ?)', [$postID, $authorID, $lang]);
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
$data = $this->db->query('SELECT contentID FROM blog_content WHERE postID = ? ORDER BY contentID DESC LIMIT 1', [$postID])->result_array();
|
||||
return intval($data[0]['contentID']);
|
||||
|
||||
$data = $this->db->query('SELECT ID FROM blog_post_versions WHERE postID = ? ORDER BY ID DESC LIMIT 1', [$postID])->result_array();
|
||||
|
||||
return intval($data[0]['ID']);
|
||||
}
|
||||
|
||||
public function createNewTranslation($postID, $language)
|
||||
public function updatePostDraft($postID, $initialRelease, $postImage)
|
||||
{
|
||||
$data = $this->db->query('SELECT postTranslationID FROM blog_translations WHERE postID = ? AND language = ?', [$postID, $language])->result_array();
|
||||
|
||||
if (empty($data)) {
|
||||
$this->db->query('INSERT INTO blog_translations (postID, language) VALUES (?, ?)', [$postID, $language]);
|
||||
$data = $this->db->query('SELECT postTranslationID FROM blog_translations WHERE postID = ? AND language = ? ORDER BY postTranslationID DESC', [$postID, $language])->result_array();
|
||||
}
|
||||
|
||||
return intval($data[0]['postTranslationID']);
|
||||
}
|
||||
|
||||
public function updatePostDraft($postID, $postUrl, $postCategory, $postPublishDate, $postImage)
|
||||
{
|
||||
$this->db->query('UPDATE blog_posts SET postUrl = ?, postCategoryID = ?, postPublishDate = ?, postImage = ? WHERE postID = ?', [$postUrl, $postCategory, $postPublishDate, $postImage, $postID]);
|
||||
$this->db->cache_delete('admin', 'edit');
|
||||
}
|
||||
|
||||
public function updateContentDraft($contentID, $postContent, $postLang)
|
||||
{
|
||||
$wordCount = $this->countWords($postContent);
|
||||
$this->db->query('UPDATE blog_content SET content = ?, language = ?, contentDate = NOW(), wordCount = ? WHERE contentID = ?', [$postContent, $postLang, $wordCount, $contentID]);
|
||||
$this->db->query('UPDATE blog_post SET initialRelease = ?, image = ? WHERE ID = ?', [$initialRelease, $postImage, $postID]);
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function updateTranslation($translationID, $postTitle, $postDesc)
|
||||
public function updateTranslationDraft($versionID, $url, $title, $description, $content, $lang)
|
||||
{
|
||||
$this->db->query('UPDATE blog_translations SET postTitle = ?, postDesc = ? WHERE postTranslationID = ?', [$postTitle, $postDesc, $translationID]);
|
||||
$wordCount = $this->countWords($content);
|
||||
$this->db->query('UPDATE blog_post_versions SET lang = ?, url = ?, title = ?, description = ?, content = ?, contentWordsCount = ?, edited = NOW() WHERE ID = ?', [$lang, $url, $title, $description, $content, $wordCount, $versionID]);
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
private function countWords($text)
|
||||
{
|
||||
$text = preg_replace("/<[a-zA-Z0-9\/ .,:;\-_+!?&%=\"]+>/", '', $text);
|
||||
return str_word_count($text);
|
||||
}
|
||||
|
||||
public function publishPostDraft($postID)
|
||||
{
|
||||
$this->db->query('UPDATE blog_posts SET postPublishDate = NOW(), postLastEdit = NOW(), postState = 1 WHERE postID = ?', [$postID]);
|
||||
$this->db->query('UPDATE blog_post SET initialRelease = NOW(), lastEdit = NOW(), state = 1 WHERE ID = ?', [$postID]);
|
||||
$this->db->query('INSERT INTO blog_post_stats (ID) VALUES (?)', [$postID]);
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
$this->db->cache_delete('blog', 'tag');
|
||||
|
@ -612,54 +714,65 @@ AND postState = 1', [$_SESSION['site_lang'], $_SESSION['site_lang'], $search, $s
|
|||
$this->db->cache_delete('admin', 'blog');
|
||||
}
|
||||
|
||||
public function publishContentDraft($authorID, $contentID, $postID, $lang)
|
||||
public function publishTranslationDraft($postID, $versionID, $authorID, $lang)
|
||||
{
|
||||
$firstContent = $this->db->query('SELECT contentID FROM blog_content WHERE postID = ? AND contentID != ? AND language = ?', [$postID, $contentID, $lang])->result_array();
|
||||
$isNative = TRUE;
|
||||
if(!empty($firstContent)) {
|
||||
$isNative = FALSE;
|
||||
$this->db->query('UPDATE blog_post_versions SET active = FALSE WHERE postID = ? AND lang = ?', [$postID, $lang]);
|
||||
$this->db->query('UPDATE blog_post_versions SET active = TRUE, edited = NOW(), authorID = ? WHERE postID = ? AND ID = ?', [$authorID, $postID, $versionID]);
|
||||
}
|
||||
|
||||
$this->db->query('UPDATE blog_content SET isActive = FALSE WHERE postID = ?', [$postID]);
|
||||
$this->db->query('UPDATE blog_content SET isActive = TRUE, isNativePost = ?, contentDate = NOW(), contentAuthorID = ? WHERE contentID = ?', [$isNative, $authorID, $contentID]);
|
||||
}
|
||||
|
||||
public function getPostTranslationIDs($postID) {
|
||||
$data = $this->db->query('SELECT postTranslationID, language FROM blog_translations WHERE postID = ?', [$postID])->result_array();
|
||||
public function getPostVersionIDs($postID) {
|
||||
$data = $this->db->query('SELECT ID, lang FROM blog_post_versions WHERE postID = ? GROUP BY lang ORDER BY active DESC, edited DESC, ID DESC', [$postID])->result_array();
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getPostContentIDs($postID) {
|
||||
$data = $this->db->query('SELECT (SELECT contentID FROM blog_content WHERE language = c.language ORDER BY contentID DESC LIMIT 1) contentID, language FROM blog_content c WHERE postID = ? AND language IS NOT NULL GROUP BY language ORDER BY contentID DESC', [$postID])->result_array();
|
||||
return $data;
|
||||
public function getPostVersions($postID) {
|
||||
function getIDs($val) {
|
||||
return $val['ID'];
|
||||
}
|
||||
|
||||
public function getPostTranslations($postID)
|
||||
{
|
||||
$data = $this->db->query('SELECT * FROM blog_translations t LEFT JOIN blog_content c ON c.postID = t.postID AND c.language = t.language WHERE t.postID = ?', [$postID])->result_array();
|
||||
$versionIDs = $this->getPostVersionIDs($postID);
|
||||
$versionIDs = array_map("getIDs", $versionIDs);
|
||||
$data = $this->db->query('SELECT * FROM blog_post_versions WHERE ID IN ?', [$versionIDs])->result_array();
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function postIDExisting($postID)
|
||||
{
|
||||
$data = $this->db->query('SELECT postID FROM blog_posts WHERE postID = ?', [$postID])->result_array();
|
||||
$data = $this->db->query('SELECT ID FROM blog_post WHERE ID = ?', [$postID])->result_array();
|
||||
return !empty($data);
|
||||
}
|
||||
|
||||
public function contentIDExisting($postID, $contentID)
|
||||
public function versionIDExisting($postID, $versionID)
|
||||
{
|
||||
$data = $this->db->query('SELECT contentID FROM blog_content WHERE postID = ? AND contentID = ?', [$postID, $contentID])->result_array();
|
||||
$data = $this->db->query('SELECT ID FROM blog_post_versions WHERE postID = ? AND ID = ?', [$postID, $versionID])->result_array();
|
||||
return !empty($data);
|
||||
}
|
||||
|
||||
public function translationIDExisting($postID, $translationID)
|
||||
public function postUrlExisting($postUrl)
|
||||
{
|
||||
$data = $this->db->query('SELECT postTranslationID FROM blog_translations WHERE postID = ? AND postTranslationID = ?', [$postID, $translationID])->result_array();
|
||||
$data = $this->db->query('SELECT url FROM blog_post_versions WHERE url = ?', [$postUrl])->result_array();
|
||||
return !empty($data);
|
||||
}
|
||||
|
||||
public function postUrlExisting($postUrl) {
|
||||
$data = $this->db->query('SELECT postUrl FROM blog_posts WHERE postUrl = ?', [$postUrl])->result_array();
|
||||
return !empty($data);
|
||||
public function createCategory($name, $displayname, $lang, $categoryID = null) {
|
||||
$sameName = $this->db->query('SELECT categoryID FROM blog_categories WHERE name = ? AND displayname = ? AND lang = ?', [$name, $displayname, $lang])->result_array();
|
||||
if(!empty($sameName)) {
|
||||
return $sameName[0]['categoryID'];
|
||||
}
|
||||
|
||||
if($categoryID == null) {
|
||||
$highestCategoryID = $this->db->query('SELECT categoryID FROM blog_categories ORDER BY categoryID DESC LIMIT 1')->result_array();
|
||||
$categoryID = !empty($highestCategoryID) ? $highestCategoryID[0]['categoryID'] + 1 : 1;
|
||||
}
|
||||
$this->db->query('INSERT INTO blog_categories (categoryID, lang, name, displayname) VALUES (?, ?, ?, ?)', [$categoryID, $lang, $name, $displayname]);
|
||||
$this->db->cache_delete('admin', 'blog');
|
||||
$this->db->cache_delete('blog', 'index');
|
||||
$this->db->cache_delete('blog', 'category');
|
||||
$this->db->cache_delete('blog', 'tag');
|
||||
$this->db->cache_delete('blog', 'search');
|
||||
$this->db->cache_delete('blog', 'post');
|
||||
|
||||
return $categoryID;
|
||||
}
|
||||
}
|
|
@ -12,15 +12,16 @@ class DatabaseModel extends CI_Model
|
|||
public function createMissingDatabases()
|
||||
{
|
||||
//$this->createDatabases();
|
||||
$this->createTables();
|
||||
// TODO: Update data base generation
|
||||
// $this->createTables();
|
||||
//$this->addIndices();
|
||||
//$this->addAutoIncrements();
|
||||
//$this->addConstraints();
|
||||
|
||||
$this->fillBlogTables();
|
||||
$this->fillFeedbackTable();
|
||||
$this->fillMainTable();
|
||||
$this->fillProjectsTable();
|
||||
//$this->fillBlogTables();
|
||||
//$this->fillFeedbackTable();
|
||||
//$this->fillMainTable();
|
||||
//$this->fillProjectsTable();
|
||||
}
|
||||
|
||||
private function createDatabases()
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
}
|
||||
|
||||
function sendMail($recipient, $subject, $template, $templateData) {
|
||||
if(base_url() == 'http://192.168.178.39/') {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->load->library('email');
|
||||
|
||||
$config['mailtype'] = 'html';
|
||||
|
|
|
@ -26,7 +26,7 @@ class FileModel extends CI_Model
|
|||
$userID = $user;
|
||||
}
|
||||
|
||||
$this->db->query('INSERT INTO files (name, original_name, type, size, path, user) VALUES (?, ?, ?, ?, ?, ?)', [$name, $originalName, $type, $size, $path, $userID]);
|
||||
$this->db->query('INSERT INTO files (name, originalName, type, size, path, user) VALUES (?, ?, ?, ?, ?, ?)', [$name, $originalName, $type, $size, $path, $userID]);
|
||||
|
||||
$this->db->cache_delete('admin', 'files');
|
||||
}
|
||||
|
|
|
@ -19,15 +19,15 @@
|
|||
|
||||
$return = '';
|
||||
foreach ($posts as $result) {
|
||||
$date = strtotime($result['postPublishDate']);
|
||||
$date = strtotime($result['initialRelease']);
|
||||
$return .= '<div class="media">';
|
||||
|
||||
if ($result['postImage'] != '') {
|
||||
$return .= '<img src="' . $result['postImage'] . '?w=100" style="width:75px" class="img-fluid mr-3">';
|
||||
if ($result['image'] != '') {
|
||||
$return .= '<img src="' . $result['image'] . '?w=100" style="width:75px" class="img-fluid mr-3">';
|
||||
}
|
||||
|
||||
$return .= '<div class="media-body">
|
||||
<h6 class="my-0"><a href="#">' . $result['postTitle'] . '</a></h6>
|
||||
<h6 class="my-0"><a href="#">' . $result['title'] . '</a></h6>
|
||||
<small class="text-white-50">' . lang('footer_published') . ' ' . DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$date"), $_SESSION['site_lang']) . '</small>
|
||||
</div>
|
||||
</div>';
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
$encryptedPassword = $this->getPasswordHash($password, $logindata['original_name']);
|
||||
$encryptedPassword = $this->getPasswordHash($password, $logindata['originalName']);
|
||||
|
||||
if ($encryptedPassword == $logindata['password']) {
|
||||
$this->startLoginSession($logindata, $rememberMe);
|
||||
|
@ -40,15 +40,15 @@
|
|||
public function getLoginData($username)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$return = $this->db->query('SELECT * FROM users WHERE (username = lower(?) OR email = lower(?)) AND is_activated = TRUE LIMIT 1',
|
||||
$return = $this->db->query('SELECT u.ID, u.username, u.displayname, u.originalName, u.email, u.rank, u.loginMethod, u.password, u.isDeleted, s.profilePicture, s.showAds FROM users u INNER JOIN user_settings s ON s.ID = u.ID WHERE (username = lower(?) OR email = lower(?)) AND activated = TRUE LIMIT 1',
|
||||
[htmlspecialchars($username, ENT_QUOTES), $username])->result_array();
|
||||
$this->db->cache_on();
|
||||
return $return;
|
||||
}
|
||||
|
||||
public function getPasswordHash($password, $original_name)
|
||||
public function getPasswordHash($password, $originalName)
|
||||
{
|
||||
$salt = md5($original_name);
|
||||
$salt = md5($originalName);
|
||||
$passwordHash = hash('sha256', $salt . $password . $salt);
|
||||
return $passwordHash;
|
||||
}
|
||||
|
@ -80,7 +80,7 @@
|
|||
'displayname' => $displayname,
|
||||
'rank' => $rank,
|
||||
'showAds' => $ads,
|
||||
'profile_picture' => $avatar,
|
||||
'profilePicture' => $avatar,
|
||||
) = $logindata;
|
||||
|
||||
$this->session->set_userdata('user', [
|
||||
|
@ -131,7 +131,7 @@
|
|||
|
||||
public function isAvailable($username)
|
||||
{
|
||||
$registered = $this->db->query('SELECT * FROM users WHERE username = lower(?) OR original_name = lower(?)', [$username, $username])->result_array();
|
||||
$registered = $this->db->query('SELECT * FROM users WHERE username = lower(?) OR originalName = lower(?)', [$username, $username])->result_array();
|
||||
|
||||
if (empty($registered)) {
|
||||
return '';
|
||||
|
@ -144,7 +144,7 @@
|
|||
{
|
||||
$encryptedPassword = $this->LoginModel->getPasswordHash($password, strtolower($username));
|
||||
$activation_key = hash("sha512", uniqid(rand(), true)) . hash("sha512", uniqid(rand(), true));
|
||||
$this->db->query('INSERT INTO users (original_name, username, displayname, login_method, password, email, rank, is_activated, activation_key) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [strtolower($username), strtolower($username), $username, $login_method, $encryptedPassword, $email, 1, false, $activation_key]);
|
||||
$this->db->query('INSERT INTO users (originalName, username, displayname, login_method, password, email, rank, activated, activation_key) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [strtolower($username), strtolower($username), $username, $login_method, $encryptedPassword, $email, 1, false, $activation_key]);
|
||||
|
||||
$this->db->cache_delete('admin', 'users');
|
||||
|
||||
|
@ -178,7 +178,7 @@
|
|||
|
||||
public function hashMailExists($emailHash, $activation_key)
|
||||
{
|
||||
$results = $this->db->query('SELECT ID FROM users WHERE MD5(email) = ? AND is_activated = 0 AND activation_key = ?', [$emailHash, $activation_key])->result_array();
|
||||
$results = $this->db->query('SELECT ID FROM users WHERE MD5(email) = ? AND activated = 0 AND activation_key = ?', [$emailHash, $activation_key])->result_array();
|
||||
if (!empty($results)) {
|
||||
return $results[0]['ID'];
|
||||
} else {
|
||||
|
@ -188,7 +188,7 @@
|
|||
|
||||
public function activateMail($id)
|
||||
{
|
||||
$this->db->query('UPDATE users SET is_activated = 1, activation_key = NULL WHERE ID = ? LIMIT 1', [$id]);
|
||||
$this->db->query('UPDATE users SET activated = 1, activation_key = NULL WHERE ID = ? LIMIT 1', [$id]);
|
||||
|
||||
// Clear cached queries
|
||||
$username = $this->db->query('SELECT username FROM users WHERE ID = ?', [$id])->result_array();
|
||||
|
@ -199,14 +199,14 @@
|
|||
public function changeMailAddress($email, $username)
|
||||
{
|
||||
$activation_key = hash("sha512", uniqid(rand(), true)) . hash("sha512", uniqid(rand(), true));
|
||||
$this->db->query('UPDATE users SET email = lower(?), is_activated = FALSE, activation_key = ? WHERE username = ?', [$email, $activation_key, $username]);
|
||||
$this->db->query('UPDATE users SET email = lower(?), activated = FALSE, activation_key = ? WHERE username = ?', [$email, $activation_key, $username]);
|
||||
$this->db->cache_delete('admin', 'users');
|
||||
}
|
||||
|
||||
public function changePassword($newPassword, $original_name)
|
||||
public function changePassword($newPassword, $originalName)
|
||||
{
|
||||
$encryptedPassword = $this->getPasswordHash($newPassword, $original_name);
|
||||
$this->db->query('UPDATE users SET password = ? WHERE original_name = ?', [$encryptedPassword, $original_name]);
|
||||
$encryptedPassword = $this->getPasswordHash($newPassword, $originalName);
|
||||
$this->db->query('UPDATE users SET password = ? WHERE originalName = ?', [$encryptedPassword, $originalName]);
|
||||
}
|
||||
|
||||
public function checkPassword($password)
|
||||
|
|
|
@ -27,7 +27,14 @@
|
|||
public function getUserNotificationsRaw($userID, $limit = 20, $offset = 0)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$rawData = $this->db->query('SELECT n.*, count(*) count, s.username senderName, s.displayname senderDisplayname, s.profile_picture senderPicture, r.username recipientName, r.displayName recipientDisplayname FROM notifications n LEFT JOIN users s ON n.senderID = s.ID LEFT JOIN users r ON n.recipientID = r.ID WHERE recipientID = ? GROUP BY type, referenceID ORDER BY createdAt DESC, unread DESC LIMIT ? OFFSET ?', [$userID, $limit, $offset])->result_array();
|
||||
$rawData = $this->db->query('SELECT n.*, count(*) count, s.username senderName, s.displayname senderDisplayname, ss.profilePicture senderPicture, r.username recipientName, r.displayName recipientDisplayname
|
||||
FROM notifications n
|
||||
LEFT JOIN users s ON n.senderID = s.ID
|
||||
LEFT JOIN user_settings ss ON s.ID = ss.ID
|
||||
LEFT JOIN users r ON n.recipientID = r.ID
|
||||
WHERE recipientID = ?
|
||||
GROUP BY type, referenceID
|
||||
ORDER BY createdAt DESC, unread DESC LIMIT ? OFFSET ?', [$userID, $limit, $offset])->result_array();
|
||||
|
||||
$notifications = [];
|
||||
foreach ($rawData as $notification) {
|
||||
|
@ -36,7 +43,13 @@
|
|||
if ($notificationGroup['count'] == 1) {
|
||||
$notificationGroup['items'] = [$notification];
|
||||
} else {
|
||||
$notificationGroup['items'] = $this->db->query('SELECT n.*, s.username senderName, s.displayname senderDisplayname, s.profile_picture senderPicture, r.username recipientName, r.displayName recipientDisplayname FROM notifications n LEFT JOIN users s ON n.senderID = s.ID LEFT JOIN users r ON n.recipientID = r.ID WHERE recipientID = ? AND type = ? AND referenceID = ? LIMIT 5', [$userID, $notification['type'], $notification['referenceID']])->result_array();
|
||||
$notificationGroup['items'] = $this->db->query('SELECT n.*, s.username senderName, s.displayname senderDisplayname, ss.profilePicture senderPicture, r.username recipientName, r.displayName recipientDisplayname
|
||||
FROM notifications n
|
||||
LEFT JOIN users s ON n.senderID = s.ID
|
||||
LEFT JOIN user_settings ss ON s.ID = ss.ID
|
||||
LEFT JOIN users r ON n.recipientID = r.ID
|
||||
WHERE recipientID = ? AND type = ? AND referenceID = ?
|
||||
LIMIT 5', [$userID, $notification['type'], $notification['referenceID']])->result_array();
|
||||
}
|
||||
|
||||
$notifications[] = $notificationGroup;
|
||||
|
|
|
@ -15,43 +15,30 @@
|
|||
return $this->addReply($userID, $content, NULL);
|
||||
}
|
||||
|
||||
public function addReply($userID, $content, $replyToUUID)
|
||||
public function addReply($userID, $content, $replyToHashID)
|
||||
{
|
||||
$content = $this->preparePostContent($content);
|
||||
$uuid = $this->generatePostUUID($userID, $content);
|
||||
$hashID = $this->generatePostHashID($userID, $content);
|
||||
$replyTo = NULL;
|
||||
if ($replyToUUID !== NULL) {
|
||||
$replyToID = $this->db->query('SELECT ID FROM user_posts WHERE uuid = ?', [$replyToUUID])->result_array();
|
||||
if ($replyToHashID !== NULL) {
|
||||
$replyToID = $this->db->query('SELECT ID FROM user_posts WHERE hashID = ?', [$replyToHashID])->result_array();
|
||||
$replyTo = !empty($replyToID) ? $replyToID[0]['ID'] : NULL;
|
||||
}
|
||||
$this->db->query('INSERT INTO user_posts (user_id, content, uuid, reply_to) VALUES (?, ?, ?, ?)', [$userID, $content, $uuid, $replyTo]);
|
||||
$this->db->query('INSERT INTO user_posts (userID, content, hashID, replyToPostID) VALUES (?, ?, ?, ?)', [$userID, $content, $hashID, $replyTo]);
|
||||
|
||||
|
||||
$insertedPost = $this->db->query('SELECT ID, user_id FROM user_posts WHERE uuid = ?', [$uuid])->result_array();
|
||||
$this->addPostMentions($insertedPost[0]['ID'], $content, $uuid);
|
||||
$insertedPost = $this->db->query('SELECT ID, userID FROM user_posts WHERE hashID = ?', [$hashID])->result_array();
|
||||
$this->addPostMentions($insertedPost[0]['ID'], $content, $hashID);
|
||||
$this->addPostHashtags($insertedPost[0]['ID'], $content);
|
||||
|
||||
// Send notification to user whose post was replied to
|
||||
if ($userID != $insertedPost[0]['user_id']) {
|
||||
$this->NotificationModel->userNotificationPostReply($userID, $insertedPost[0]['user_id'], $insertedPost[0]['ID'], $uuid);
|
||||
if ($userID != $insertedPost[0]['userID']) {
|
||||
$this->NotificationModel->userNotificationPostReply($userID, $insertedPost[0]['userID'], $insertedPost[0]['ID'], $hashID);
|
||||
}
|
||||
|
||||
return $insertedPost[0]['ID'];
|
||||
}
|
||||
|
||||
public function deletePost($userID, $uuid) {
|
||||
$postID = $this->db->query('SELECT ID FROM user_posts WHERE user_id = ? AND uuid = ?', [$userID, $uuid])->result_array()[0]['ID'];
|
||||
$this->db->query('DELETE FROM user_posts WHERE user_id = ? AND uuid = ?', [$userID, $uuid]);
|
||||
$this->db->query('DELETE FROM user_posts_hashtags WHERE postID = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM user_posts_mentions WHERE postID = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM user_posts_likes WHERE postID = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM user_posts_media WHERE postID = ?', [$postID]);
|
||||
}
|
||||
|
||||
public function addMediaToPost($postID, $type, $fileID) {
|
||||
$this->db->query('INSERT INTO user_posts_media (postID, mediaType, fileID) VALUES (?, ?, ?)', [$postID, $type, $fileID]);
|
||||
}
|
||||
|
||||
public function preparePostContent($content)
|
||||
{
|
||||
if ($this->endsWith($content, '<br> ')) {
|
||||
|
@ -69,12 +56,7 @@
|
|||
(substr($haystack, -$length) === $needle);
|
||||
}
|
||||
|
||||
function generatePostUUID($userID, $content)
|
||||
{
|
||||
return md5($userID . $content . date("Y-m-d H:i:s"));
|
||||
}
|
||||
|
||||
public function addPostMentions($postID, $content, $postUUID)
|
||||
public function addPostMentions($postID, $content, $postHashID)
|
||||
{
|
||||
preg_match_all('/@([A-Za-z0-9._]+)/', $content, $mentions, PREG_OFFSET_CAPTURE);
|
||||
foreach ($mentions[1] as $mention) {
|
||||
|
@ -83,16 +65,16 @@
|
|||
continue;
|
||||
}
|
||||
$mentionedUser = $mentionedUser[0];
|
||||
$this->addMention($postID, $_SESSION['user']['ID'], $mentionedUser['ID'], $mention[1], $postUUID);
|
||||
$this->addMention($postID, $_SESSION['user']['ID'], $mentionedUser['ID'], $mention[1], $postHashID);
|
||||
}
|
||||
}
|
||||
|
||||
public function addMention($postID, $userID, $mentionedUserID, $position, $postUUID)
|
||||
public function addMention($postID, $userID, $mentionedUserID, $position, $postHashID)
|
||||
{
|
||||
$this->db->query('INSERT INTO user_posts_mentions (userID, postID, mentionedUserID, position) VALUES (?, ?, ?, ?)', [$userID, $postID, $mentionedUserID, $position]);
|
||||
|
||||
// Send notification
|
||||
$this->NotificationModel->userNotificationPostMentioned($userID, $mentionedUserID, $postID, $postUUID);
|
||||
$this->NotificationModel->userNotificationPostMentioned($userID, $mentionedUserID, $postID, $postHashID);
|
||||
}
|
||||
|
||||
public function addPostHashtags($postID, $content)
|
||||
|
@ -108,10 +90,30 @@
|
|||
$this->db->query('INSERT INTO user_posts_hashtags (userID, postID, hashtag, position) VALUES (?, ?, ?, ?)', [$userID, $postID, $hashtag, $position]);
|
||||
}
|
||||
|
||||
public function deletePost($userID, $hashID)
|
||||
{
|
||||
$postID = $this->db->query('SELECT ID FROM user_posts WHERE userID = ? AND hashID = ?', [$userID, $hashID])->result_array()[0]['ID'];
|
||||
$this->db->query('DELETE FROM user_posts WHERE userID = ? AND hashID = ?', [$userID, $hashID]);
|
||||
$this->db->query('DELETE FROM user_posts_hashtags WHERE postID = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM user_posts_mentions WHERE postID = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM user_posts_likes WHERE postID = ?', [$postID]);
|
||||
$this->db->query('DELETE FROM user_posts_media WHERE postID = ?', [$postID]);
|
||||
}
|
||||
|
||||
public function addMediaToPost($postID, $type, $fileID)
|
||||
{
|
||||
$this->db->query('INSERT INTO user_posts_media (postID, mediaType, fileID) VALUES (?, ?, ?)', [$postID, $type, $fileID]);
|
||||
}
|
||||
|
||||
function generatePostHashID($userID, $content)
|
||||
{
|
||||
return md5($userID . $content . date("Y-m-d H:i:s"));
|
||||
}
|
||||
|
||||
function getUserPosts($id, $count, $offset, $maxLength = 250)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$posts = $this->db->query('SELECT * FROM user_posts p WHERE user_id = ? ORDER BY date DESC LIMIT ? OFFSET ?', [$id, $count, $offset])->result_array();
|
||||
$posts = $this->db->query('SELECT * FROM user_posts p WHERE userID = ? ORDER BY date DESC LIMIT ? OFFSET ?', [$id, $count, $offset])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
$posts = $this->preparePostList($posts, $maxLength);
|
||||
|
@ -136,38 +138,32 @@
|
|||
$post = $this->mergeUserHasLiked($post, $_SESSION['user']['ID']);
|
||||
}
|
||||
|
||||
if($post['reply_to'] != NULL) {
|
||||
if ($post['replyToPostID'] != NULL) {
|
||||
$post = $this->mergeReplyData($post);
|
||||
}
|
||||
|
||||
$postList[$i] = $post;
|
||||
}
|
||||
|
||||
$postList = $this->UserModel->setDefaultImages($postList);
|
||||
|
||||
return $postList;
|
||||
}
|
||||
|
||||
public function getPostMedia($postID) {
|
||||
$result = $this->db->query('SELECT m.mediaType type, f.name name FROM user_posts_media m LEFT JOIN files f ON f.ID = m.fileID WHERE postID = ?', [$postID])->result_array();
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function mergePostUserData($post)
|
||||
{
|
||||
$user = $this->UserModel->getUserByID($post['user_id']);
|
||||
$user = $this->UserModel->getUserByID($post['userID']);
|
||||
$user = $user[0];
|
||||
|
||||
$post['username'] = $user['username'];
|
||||
$post['displayname'] = $user['displayname'];
|
||||
$post['profile_picture'] = $user['profile_picture'];
|
||||
$post['profilePicture'] = $user['profilePicture'];
|
||||
return $post;
|
||||
}
|
||||
|
||||
public function getPostReplyCountByID($postID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT count(*) replyCount FROM user_posts WHERE reply_to = ?', [$postID])->result_array();
|
||||
$data = $this->db->query('SELECT count(*) replyCount FROM user_posts WHERE replyToPostID = ?', [$postID])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
return $data[0]['replyCount'];
|
||||
|
@ -214,10 +210,16 @@
|
|||
return $finalContent;
|
||||
}
|
||||
|
||||
public function getPostMedia($postID)
|
||||
{
|
||||
$result = $this->db->query('SELECT m.mediaType type, f.name name FROM user_posts_media m LEFT JOIN files f ON f.ID = m.fileID WHERE postID = ?', [$postID])->result_array();
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function mergeUserHasLiked($post, $userID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT * FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE uuid = ?) AND likerUserID = ?', [$post['uuid'], $userID])->result_array();
|
||||
$data = $this->db->query('SELECT * FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE hashID = ?) AND likerUserID = ?', [$post['hashID'], $userID])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
if (empty($data)) {
|
||||
|
@ -228,10 +230,11 @@
|
|||
return $post;
|
||||
}
|
||||
|
||||
private function mergeReplyData($post) {
|
||||
$data = $this->db->query('SELECT p.*, username, displayname FROM user_posts p LEFT JOIN users ON users.ID = p.user_id WHERE p.ID = ?', [$post['reply_to']])->result_array();
|
||||
private function mergeReplyData($post)
|
||||
{
|
||||
$data = $this->db->query('SELECT p.* FROM user_posts p WHERE p.ID = ?', [$post['replyToPostID']])->result_array();
|
||||
$data = $this->preparePostList($data);
|
||||
if(!empty($data)) {
|
||||
if (!empty($data)) {
|
||||
$post['replyToPost'] = $data[0];
|
||||
} else {
|
||||
$post['replyToPost'] = [
|
||||
|
@ -259,7 +262,7 @@
|
|||
public function getFeedPosts($userID, $amount, $offset)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT * FROM user_posts WHERE user_id IN (SELECT followedUserID FROM user_followers WHERE followerUserID = ?) OR ID IN(SELECT postID FROM user_posts_mentions WHERE mentionedUserID = ?) OR ID IN (SELECT postID FROM user_posts_likes WHERE likedUserID = ?) OR user_id = ? ORDER BY date DESC LIMIT ? OFFSET ?', [$userID, $userID, $userID, $userID, $amount, $offset])->result_array();
|
||||
$data = $this->db->query('SELECT * FROM user_posts WHERE userID IN (SELECT followedUserID FROM user_followers WHERE followerUserID = ?) OR ID IN(SELECT postID FROM user_posts_mentions WHERE mentionedUserID = ?) OR ID IN (SELECT postID FROM user_posts_likes WHERE likedUserID = ?) OR userID = ? ORDER BY date DESC LIMIT ? OFFSET ?', [$userID, $userID, $userID, $userID, $amount, $offset])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
$data = $this->preparePostList($data);
|
||||
|
@ -270,7 +273,7 @@
|
|||
public function getPopularPosts($amount, $offset)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT * FROM user_posts p ORDER BY ((SELECT count(*) FROM user_posts_likes WHERE postID = p.ID) + (SELECT count(*) FROM user_posts WHERE reply_to = p.ID)) DESC, date DESC LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
$data = $this->db->query('SELECT * FROM user_posts p ORDER BY ((SELECT count(*) FROM user_posts_likes WHERE postID = p.ID) + (SELECT count(*) FROM user_posts WHERE replyToPostID = p.ID)) DESC, date DESC LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
$data = $this->preparePostList($data);
|
||||
|
@ -278,10 +281,10 @@
|
|||
return $data;
|
||||
}
|
||||
|
||||
public function getPostDetails($userID, $uuid)
|
||||
public function getPostDetails($userID, $hashID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT * FROM user_posts WHERE user_id = ? AND uuid = ?', [$userID, $uuid])->result_array();
|
||||
$data = $this->db->query('SELECT * FROM user_posts WHERE userID = ? AND hashID = ?', [$userID, $hashID])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
$data = $this->preparePostList($data, -1);
|
||||
|
@ -292,7 +295,7 @@
|
|||
public function getPostReplies($postID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$replies = $this->db->query('SELECT * FROM user_posts WHERE reply_to = ? ORDER BY date', [$postID])->result_array();
|
||||
$replies = $this->db->query('SELECT * FROM user_posts WHERE replyToPostID = ? ORDER BY date', [$postID])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
$replies = $this->preparePostList($replies);
|
||||
|
@ -300,33 +303,34 @@
|
|||
return $replies;
|
||||
}
|
||||
|
||||
public function getPostByUUID($uuid) {
|
||||
public function getPostByHashID($hashID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$result = $this->db->query('SELECT * FROM user_posts WHERE uuid = ?', [$uuid])->result_array();
|
||||
$result = $this->db->query('SELECT * FROM user_posts WHERE hashID = ?', [$hashID])->result_array();
|
||||
$this->db->cache_on();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function addPostLikeByUUID($uuid, $userID)
|
||||
public function addPostLikeByHashID($hashID, $userID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT * FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE uuid = ?) AND likerUserID = ?', [$uuid, $userID])->result_array();
|
||||
$data = $this->db->query('SELECT * FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE hashID = ?) AND likerUserID = ?', [$hashID, $userID])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
// IDs needed for handling notifications later
|
||||
$postUser = $this->db->query('SELECT ID FROM users WHERE ID = (SELECT user_id FROM user_posts WHERE uuid = ?)', [$uuid])->result_array();
|
||||
$postID = $this->db->query('SELECT ID FROM user_posts WHERE uuid = ?', [$uuid])->result_array();
|
||||
$postUser = $this->db->query('SELECT ID FROM users WHERE ID = (SELECT userID FROM user_posts WHERE hashID = ?)', [$hashID])->result_array();
|
||||
$postID = $this->db->query('SELECT ID FROM user_posts WHERE hashID = ?', [$hashID])->result_array();
|
||||
if (empty($data)) {
|
||||
$this->db->query('INSERT INTO user_posts_likes (postID, likedUserID, likerUserID) VALUES ((SELECT ID FROM user_posts WHERE uuid = ?), (SELECT user_id FROM user_posts WHERE uuid = ?), ?)', [$uuid, $uuid, $userID]);
|
||||
$this->db->query('INSERT INTO user_posts_likes (postID, likedUserID, likerUserID) VALUES ((SELECT ID FROM user_posts WHERE hashID = ?), (SELECT userID FROM user_posts WHERE hashID = ?), ?)', [$hashID, $hashID, $userID]);
|
||||
|
||||
// Send like notification
|
||||
if ($postUser[0]['ID'] != $userID) {
|
||||
$this->NotificationModel->userNotificationPostLike($userID, $postUser[0]['ID'], $postID[0]['ID'], $uuid);
|
||||
$this->NotificationModel->userNotificationPostLike($userID, $postUser[0]['ID'], $postID[0]['ID'], $hashID);
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
$this->db->query('DELETE FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE uuid = ?) AND likerUserID = ?', [$uuid, $userID]);
|
||||
$this->db->query('DELETE FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE hashID = ?) AND likerUserID = ?', [$hashID, $userID]);
|
||||
|
||||
// Remove existing notification
|
||||
$this->NotificationModel->removeNotification($userID, $postUser[0]['ID'], $postID[0]['ID'], 'users.likedPost');
|
||||
|
@ -336,18 +340,18 @@
|
|||
|
||||
}
|
||||
|
||||
public function getPostLikeCountByUUID($uuid)
|
||||
public function getPostLikeCountByHashID($hashID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT count(*) likeCount FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE uuid = ?)', [$uuid])->result_array();
|
||||
$data = $this->db->query('SELECT count(*) likeCount FROM user_posts_likes WHERE postID = (SELECT ID FROM user_posts WHERE hashID = ?)', [$hashID])->result_array();
|
||||
$this->db->cache_on();
|
||||
return $data[0]['likeCount'];
|
||||
}
|
||||
|
||||
public function isUUIDValid($uuid)
|
||||
public function isHashIDValid($hashID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$data = $this->db->query('SELECT ID FROM user_posts WHERE uuid = ?', [$uuid])->result_array();
|
||||
$data = $this->db->query('SELECT ID FROM user_posts WHERE hashID = ?', [$hashID])->result_array();
|
||||
$this->db->cache_on();
|
||||
return !empty($data);
|
||||
}
|
||||
|
@ -376,7 +380,7 @@
|
|||
public function searchPosts($query, $limit = 20, $offset = 0)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$results = $this->db->query('SELECT * FROM user_posts WHERE content RLIKE ? OR (SELECT username FROM users WHERE ID = user_id) RLIKE ? ORDER BY (SELECT count(*) FROM user_posts_likes WHERE postID = ID) DESC, (SELECT count(*) FROM user_posts WHERE user_posts.reply_to = ID) DESC, date DESC LIMIT ? OFFSET ?', [$query, $query, $limit, $offset])->result_array();
|
||||
$results = $this->db->query('SELECT * FROM user_posts WHERE content RLIKE ? OR (SELECT username FROM users WHERE ID = userID) RLIKE ? ORDER BY (SELECT count(*) FROM user_posts_likes WHERE postID = ID) DESC, (SELECT count(*) FROM user_posts WHERE replyToPostID = ID) DESC, date DESC LIMIT ? OFFSET ?', [$query, $query, $limit, $offset])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
||||
$results = $this->preparePostList($results);
|
||||
|
@ -384,14 +388,15 @@
|
|||
return $results;
|
||||
}
|
||||
|
||||
public function reportPost($uuid, $reason, $reasonText) {
|
||||
$this->db->query('INSERT INTO user_posts_reports (postID, reason, reasonText) VALUES ((SELECT ID FROM user_posts WHERE uuid = ?), ?, ?)', [$uuid, $reason, $reasonText]);
|
||||
public function reportPost($hashID, $reason, $reasonText)
|
||||
{
|
||||
$this->db->query('INSERT INTO user_posts_reports (postID, reason, reasonText) VALUES ((SELECT ID FROM user_posts WHERE hashID = ?), ?, ?)', [$hashID, $reason, $reasonText]);
|
||||
$this->db->cache_delete('admin', 'reports');
|
||||
|
||||
// Send notification
|
||||
$postID = $this->db->query('SELECT ID FROM user_posts WHERE uuid = ?', [$uuid])->result_array();
|
||||
$postID = $this->db->query('SELECT ID FROM user_posts WHERE hashID = ?', [$hashID])->result_array();
|
||||
$this->NotificationModel->rankNotificationPostReport(
|
||||
isset($_SESSION['user']) ? $_SESSION['user']['ID'] : -1,
|
||||
8, $postID[0]['ID'], $uuid);
|
||||
8, $postID[0]['ID'], $hashID);
|
||||
}
|
||||
}
|
|
@ -26,18 +26,38 @@
|
|||
public function mergeTranslationData($postList, $lang = 'de')
|
||||
{
|
||||
foreach ($postList as $i => $post) {
|
||||
$data = $this->db->query('SELECT * FROM projects_translations WHERE projectID = ? AND (lang = ? OR lang = ?) ORDER BY lang', [$post['ID'], 'de', $lang])->result_array();
|
||||
if (sizeof($data) == 1) {
|
||||
$postList[$i] = array_merge($post, $data[0]);
|
||||
$data = $this->db->query('SELECT title, description, content, downloadName, openSourceName, customLinkName FROM projects_translations WHERE projectID = ? AND lang = ? ORDER BY lang', [$post['ID'], 'de'])->result_array();
|
||||
|
||||
if(empty($data)) {
|
||||
$postList[$i] = array_merge($post, [
|
||||
'title' => 'Not found',
|
||||
'description' => 'Not found',
|
||||
'content' => 'Not found',
|
||||
]);
|
||||
continue;
|
||||
}
|
||||
|
||||
$data = $data[0];
|
||||
if($lang == 'de') {
|
||||
$postList[$i] = array_merge($post, $data);
|
||||
continue;
|
||||
}
|
||||
|
||||
$dataLang = $this->db->query('SELECT title, description, content, downloadName, openSourceName, customLinkName FROM projects_translations WHERE projectID = ? AND lang = ? ORDER BY lang', [$post['ID'], $lang])->result_array();
|
||||
|
||||
if (empty($dataLang)) {
|
||||
$postList[$i] = array_merge($post, $data);
|
||||
continue;
|
||||
}
|
||||
|
||||
$dataLang = $dataLang[0];
|
||||
|
||||
$merged = [];
|
||||
foreach ($data[0] as $key => $value) {
|
||||
if (($value == NULL && $data[1][$key] == NULL) || ($value != NULL && $data[1][$key] == NULL)) {
|
||||
foreach ($data as $key => $value) {
|
||||
if (($value == NULL && $dataLang[$key] == NULL) || ($value != NULL && $dataLang[$key] == NULL)) {
|
||||
$merged[$key] = $value;
|
||||
} else {
|
||||
$merged[$key] = $data[1][$key];
|
||||
$merged[$key] = $dataLang[$key];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,10 +68,29 @@
|
|||
|
||||
public function getCategories()
|
||||
{
|
||||
$collections = $this->db->query('SELECT c.*, count(p.projectID) count FROM projects_categories c LEFT JOIN projects_entry_categories p ON c.ID = p.categoryID GROUP BY c.ID ORDER BY c.collection')->result_array();
|
||||
$collections = $this->db->query('SELECT c.*, count(p.projectID) count FROM projects_categories c LEFT JOIN projects_entry_categories p ON c.categoryID = p.categoryID GROUP BY c.categoryID ORDER BY c.name')->result_array();
|
||||
|
||||
if($_SESSION['site_lang'] !== 'de') {
|
||||
$collectionsLang = $this->db->query('SELECT categoryID, name, displayname FROM projects_categories WHERE lang = ?', [$_SESSION['site_lang']])->result_array();
|
||||
|
||||
$categoryIDs = array_column($collections, 'categoryID');
|
||||
foreach ($collectionsLang as $item) {
|
||||
$key = array_search($item['categoryID'], $categoryIDs);
|
||||
$collections[$key] = array_merge($collections[$key], $item);
|
||||
}
|
||||
}
|
||||
|
||||
return $collections;
|
||||
}
|
||||
|
||||
public function getCategoriesRaw() {
|
||||
$categories = $this->db->query('SELECT ID, GROUP_CONCAT(c.name) name, GROUP_CONCAT(c.displayname) displayname, (SELECT COUNT(*) FROM projects_entry_categories p WHERE c.categoryID = p.categoryID) count
|
||||
FROM projects_categories c
|
||||
GROUP BY c.categoryID
|
||||
ORDER BY ID')->result_array();
|
||||
return $categories;
|
||||
}
|
||||
|
||||
public function editEntry($data, $id)
|
||||
{
|
||||
$this->db->update('projects', $data, ['id' => $id]);
|
||||
|
@ -120,7 +159,19 @@
|
|||
|
||||
public function getEntryCategories($id)
|
||||
{
|
||||
return $this->db->query('SELECT * FROM projects_categories WHERE ID IN (SELECT categoryID FROM projects_entry_categories WHERE projectID = ?)', [$id])->result_array();
|
||||
$categories = $this->db->query('SELECT * FROM projects_categories WHERE ID IN (SELECT categoryID FROM projects_entry_categories WHERE projectID = ?) AND lang = "de"', [$id])->result_array();
|
||||
|
||||
if($_SESSION['site_lang'] != 'de') {
|
||||
$categoriesLang = $this->db->query('SELECT categoryID, name, displayname FROM projects_categories WHERE lang = ?', [$_SESSION['site_lang']])->result_array();
|
||||
|
||||
$categoryIDs = array_column($categories, 'categoryID');
|
||||
foreach ($categoriesLang as $item) {
|
||||
$key = array_search($item['categoryID'], $categoryIDs);
|
||||
$categories[$key] = array_merge($categories[$key], $item);
|
||||
}
|
||||
}
|
||||
|
||||
return $categories;
|
||||
}
|
||||
|
||||
public function updateCategories($postID, $categories)
|
||||
|
|
|
@ -50,44 +50,44 @@
|
|||
|
||||
$possibilities = [
|
||||
'blogPost' => [
|
||||
'sql' => 'SELECT "blogPost" type, bp.postUrl url, bp.postAuthorID author, bp.postImage image, bt.postTitle title, bt.postDesc content, bp.postPublishDate date
|
||||
FROM blog_posts bp
|
||||
INNER JOIN blog_translations bt ON bt.postID = bp.postID AND bt.language = ?
|
||||
LEFT JOIN blog_content bc ON bc.postID = bp.postID AND bc.isActive = TRUE AND bc.language = ?
|
||||
WHERE (LOWER(bt.postTitle) RLIKE ?
|
||||
OR LOWER(bt.postDesc) RLIKE ?
|
||||
OR LOWER(bc.content) RLIKE ?
|
||||
OR bp.postID IN (SELECT bpt.post_id FROM blog_post_tags bpt WHERE bpt.tag_id IN(SELECT bt.ID FROM blog_tags bt WHERE bt.name RLIKE ? OR LOWER(bt.display_name) RLIKE ?))
|
||||
OR (SELECT username FROM users WHERE ID = bp.postAuthorID) RLIKE ?
|
||||
OR (SELECT display_name FROM blog_categories WHERE ID = bp.postCategoryID) RLIKE ?)
|
||||
AND postState = 1 AND postIsDeleted = FALSE',
|
||||
'attributes' => 'llqqqqqqq'
|
||||
'sql' => 'SELECT "blogPost" type, v.url url, bp.authorID author, bp.image image, v.title title, v.description content, bp.initialRelease date
|
||||
FROM blog_post bp
|
||||
INNER JOIN blog_post_versions v ON v.postID = bp.ID AND v.lang = ? AND active
|
||||
WHERE (LOWER(v.title) RLIKE ?
|
||||
OR LOWER(v.description) RLIKE ?
|
||||
OR LOWER(v.content) RLIKE ?
|
||||
OR bp.ID IN (SELECT bpt.postID FROM blog_post_tags bpt WHERE bpt.tagID IN (SELECT bt.tagID FROM blog_tags bt WHERE (bt.name RLIKE ? OR LOWER(bt.displayname) RLIKE ?) AND lang = ?))
|
||||
OR bp.ID IN (SELECT bpc.postID FROM blog_post_categories bpc WHERE bpc.categoryID IN (SELECT bc.categoryID FROM blog_categories bc WHERE (bc.name RLIKE ? OR LOWER(bc.displayname) RLIKE ?) AND lang = ?))
|
||||
OR (SELECT username FROM users WHERE ID = bp.authorID) RLIKE ?)
|
||||
AND state = 1',
|
||||
'attributes' => 'lqqqqqlqqlq'
|
||||
],
|
||||
'blogCategory' => [
|
||||
'sql' => 'SELECT "blogCategory" type, c.name url, 1 author, null image, c.display_name title, null content, null date
|
||||
'sql' => 'SELECT "blogCategory" type, c.name url, 1 author, null image, c.displayname title, null content, null date
|
||||
FROM blog_categories c
|
||||
WHERE c.name RLIKE ? OR LOWER(c.display_name) RLIKE ?',
|
||||
'attributes' => 'qq'
|
||||
WHERE (c.name RLIKE ? OR LOWER(c.displayname) RLIKE ?) AND lang = ?',
|
||||
'attributes' => 'qql'
|
||||
],
|
||||
'blogTag' => [
|
||||
'sql' => 'SELECT "blogTag" type, t.name url, 1 author, null image, t.display_name title, null content, null date
|
||||
'sql' => 'SELECT "blogTag" type, t.name url, 1 author, null image, t.displayname title, null content, null date
|
||||
FROM blog_tags t
|
||||
WHERE t.name RLIKE ? OR LOWER(t.display_name) RLIKE ?',
|
||||
'attributes' => 'qq'
|
||||
WHERE (t.name RLIKE ? OR LOWER(t.displayname) RLIKE ?) AND lang = ?',
|
||||
'attributes' => 'qql'
|
||||
],
|
||||
'user' => [
|
||||
'sql' => 'SELECT "user" type, u.username url, u.ID author, u.header_image image, u.displayname title, u.about content, u.date_created date
|
||||
'sql' => 'SELECT "user" type, u.username url, u.ID author, s.headerImage image, u.displayname title, s.about content, u.dateCreated date
|
||||
FROM users u
|
||||
INNER JOIN user_settings s ON u.ID = s.ID
|
||||
WHERE (username RLIKE ?
|
||||
OR lower(about) RLIKE ?)
|
||||
AND is_activated AND isDeleted = FALSE',
|
||||
AND activated AND isDeleted = FALSE',
|
||||
'attributes' => 'qq',
|
||||
],
|
||||
'userPost' => [
|
||||
'sql' => 'SELECT "userPost" type, p.uuid url, p.user_id author, null image, p.content title, null content, p.date date
|
||||
'sql' => 'SELECT "userPost" type, p.hashID url, p.userID author, null image, p.content title, null content, p.date date
|
||||
FROM user_posts p
|
||||
WHERE LOWER(p.content) RLIKE ?
|
||||
OR (SELECT username FROM users WHERE ID = p.user_id) RLIKE ?',
|
||||
OR (SELECT username FROM users WHERE ID = p.userID) RLIKE ?',
|
||||
'attributes' => 'qq',
|
||||
],
|
||||
'project' => [
|
||||
|
@ -100,9 +100,9 @@
|
|||
'attributes' => 'lqqq',
|
||||
],
|
||||
'projectCategory' => [
|
||||
'sql' => 'SELECT "projectCategory" type, c.collection url, 1 author, null image, c.displayname title, c.displayname content, null date
|
||||
'sql' => 'SELECT "projectCategory" type, c.name url, 1 author, null image, c.displayname title, c.displayname content, null date
|
||||
FROM projects_categories c
|
||||
WHERE lower(collection) RLIKE ?
|
||||
WHERE name RLIKE ?
|
||||
OR lower(displayname) RLIKE ?',
|
||||
'attributes' => 'qq'
|
||||
],
|
||||
|
@ -136,7 +136,6 @@
|
|||
{
|
||||
foreach ($results as $i => $result) {
|
||||
list(
|
||||
'author' => $author,
|
||||
'authorDisplayname' => $displayname,
|
||||
'authorName' => $username,
|
||||
'content' => $content,
|
||||
|
|
|
@ -1,113 +1,126 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class SocialMediaModel extends CI_Model
|
||||
{
|
||||
class SocialMediaModel extends CI_Model
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
private function getSslPage($url) {
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
curl_setopt($ch, CURLOPT_HEADER, false);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_REFERER, $url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
return $result;
|
||||
}
|
||||
// private function getSslPage($url) {
|
||||
// $ch = curl_init();
|
||||
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
// curl_setopt($ch, CURLOPT_HEADER, false);
|
||||
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
// curl_setopt($ch, CURLOPT_URL, $url);
|
||||
// curl_setopt($ch, CURLOPT_REFERER, $url);
|
||||
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
// $result = curl_exec($ch);
|
||||
// curl_close($ch);
|
||||
// return $result;
|
||||
// }
|
||||
//
|
||||
// public function getYouTubeVideos()
|
||||
// {
|
||||
// $apiUrl = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=20&playlistId=UUEDHiXaIhm2VFu-hi6CcOWw&key=AIzaSyDAZ_TwVMZeiKDQxgWM2OYRq3YskEpY9yw';
|
||||
// $apiResult = json_decode($this->getSslPage($apiUrl));
|
||||
// $items = $apiResult->items;
|
||||
// foreach ($items as $item) {
|
||||
// $snippet = $item->snippet;
|
||||
// $published = $snippet->publishedAt;
|
||||
// $author = $snippet->channelTitle;
|
||||
// $author_url = "https://youtube.com/channel/" . $snippet->channelId;
|
||||
// $title = $snippet->title;
|
||||
// if (isset($snippet->thumbnails->maxres->url)) $thumbnail = $snippet->thumbnails->maxres->url;
|
||||
// else $thumbnail = $snippet->thumbnails->standard->url;
|
||||
// $url = "http://youtu.be/" . $snippet->resourceId->videoId;
|
||||
//
|
||||
// $this->db->query('INSERT INTO social_posts (origin, post_content, post_url, post_author, post_author_url, date, post_img_source) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE post_content = ?, post_img_source = ?;', ["YouTube", $title, $url, $author, $author_url, strtotime($published), $thumbnail, $title, $thumbnail]);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public function getTwitterPosts()
|
||||
// {
|
||||
// $consumer_key = 'TsUzd4stukv9Ix7TGG7RdYq4k';
|
||||
// $consumer_key_secret = 'sTRq4WcELJZuciTrkNUttGgWhEiGaUkuqNhISgaG4uHRFgzm0B';
|
||||
// $access_token = '1880071790-Nij2RaBDVRGVWoWW2PSJUwAvuLAOaQFAAr5tAtC';
|
||||
// $access_token_secret = 'ldhLg0SP3ycrrdIqhNcddj0042pdGY9vmZMKQJRClmDkD';
|
||||
//
|
||||
// $oauth_hash = 'count=20&oauth_consumer_key=' . $consumer_key . '&oauth_nonce=' . time() . '&oauth_signature_method=HMAC-SHA1&oauth_timestamp=' . time() . '&oauth_token=' . $access_token . '&oauth_version=1.0';
|
||||
// $base = 'GET&' . urlencode('https://api.twitter.com/1.1/statuses/user_timeline.json') . '&' . rawurlencode($oauth_hash);
|
||||
// $key = rawurlencode($consumer_key_secret) . '&' . rawurlencode($access_token_secret);
|
||||
// $signature = base64_encode(hash_hmac('sha1', $base, $key, true));
|
||||
// $signature = rawurlencode($signature);
|
||||
//
|
||||
// $oauth_header = 'oauth_consumer_key="' . $consumer_key . '", oauth_nonce="' . time() . '", oauth_signature="' . $signature . '", oauth_signature_method="HMAC-SHA1", oauth_timestamp="' . time() . '", oauth_token="' . $access_token . '", oauth_version="1.0", ';
|
||||
// $curl_header = array("Authorization: Oauth {$oauth_header}", 'Expect:');
|
||||
//
|
||||
// $curl_request = curl_init();
|
||||
// curl_setopt($curl_request, CURLOPT_HTTPHEADER, $curl_header);
|
||||
// curl_setopt($curl_request, CURLOPT_HEADER, false);
|
||||
// curl_setopt($curl_request, CURLOPT_URL, 'https://api.twitter.com/1.1/statuses/user_timeline.json?count=20');
|
||||
// curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, true);
|
||||
// curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);
|
||||
// $json = curl_exec($curl_request);
|
||||
// curl_close($curl_request);
|
||||
//
|
||||
// $posts = json_decode($json);
|
||||
//
|
||||
//
|
||||
// foreach ($posts as $post) {
|
||||
// $content = str_replace("\n", "<br>", $post->text);
|
||||
// $author = $post->user->screen_name;
|
||||
// $author_url = 'https://twitter.com/' . $author;
|
||||
// $url = $author_url . '/status/' . $post->id_str;
|
||||
// $published = strtotime($post->created_at);
|
||||
// $original_id = $post->id_str;
|
||||
// if (isset($post->extended_entities->media[0]->media_url)) {
|
||||
// $image = $post->extended_entities->media[0]->media_url;
|
||||
// } else {
|
||||
// $image = '';
|
||||
// }
|
||||
// $this->db->query('INSERT INTO social_posts (origin, post_content, post_url, post_author, post_author_url, date, post_img_source, post_original_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE post_content = ?, post_author_url = ?, post_original_id = ?;', ["Twitter", $content, $url, $author, $author_url, $published, $image, $original_id, $content, $author_url, $original_id]);
|
||||
// }
|
||||
// }
|
||||
|
||||
public function getYouTubeVideos()
|
||||
|
||||
public function newestVids($vidCount)
|
||||
{
|
||||
$apiUrl = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=20&playlistId=UUEDHiXaIhm2VFu-hi6CcOWw&key=AIzaSyDAZ_TwVMZeiKDQxgWM2OYRq3YskEpY9yw';
|
||||
$apiResult = json_decode($this->getSslPage($apiUrl));
|
||||
$items = $apiResult->items;
|
||||
foreach ($items as $item) {
|
||||
$snippet = $item->snippet;
|
||||
$published = $snippet->publishedAt;
|
||||
$author = $snippet->channelTitle;
|
||||
$author_url = "https://youtube.com/channel/" . $snippet->channelId;
|
||||
$title = $snippet->title;
|
||||
if (isset($snippet->thumbnails->maxres->url)) $thumbnail = $snippet->thumbnails->maxres->url;
|
||||
else $thumbnail = $snippet->thumbnails->standard->url;
|
||||
$url = "http://youtu.be/" . $snippet->resourceId->videoId;
|
||||
$data = $this->db->query('SELECT * FROM social_posts WHERE origin = "YouTube" ORDER BY date DESC LIMIT ?', [$vidCount])->result_array();
|
||||
|
||||
$this->db->query('INSERT INTO social_posts (post_plattform, post_content, post_url, post_author, post_author_url, post_date, post_img_source) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE post_content = ?, post_img_source = ?;', ["YouTube", $title, $url, $author, $author_url, strtotime($published), $thumbnail, $title, $thumbnail]);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTwitterPosts()
|
||||
{
|
||||
$consumer_key = 'TsUzd4stukv9Ix7TGG7RdYq4k';
|
||||
$consumer_key_secret = 'sTRq4WcELJZuciTrkNUttGgWhEiGaUkuqNhISgaG4uHRFgzm0B';
|
||||
$access_token = '1880071790-Nij2RaBDVRGVWoWW2PSJUwAvuLAOaQFAAr5tAtC';
|
||||
$access_token_secret = 'ldhLg0SP3ycrrdIqhNcddj0042pdGY9vmZMKQJRClmDkD';
|
||||
|
||||
$oauth_hash = 'count=20&oauth_consumer_key=' . $consumer_key . '&oauth_nonce=' . time() . '&oauth_signature_method=HMAC-SHA1&oauth_timestamp=' . time() . '&oauth_token=' . $access_token . '&oauth_version=1.0';
|
||||
$base = 'GET&' . urlencode('https://api.twitter.com/1.1/statuses/user_timeline.json') . '&' . rawurlencode($oauth_hash);
|
||||
$key = rawurlencode($consumer_key_secret) . '&' . rawurlencode($access_token_secret);
|
||||
$signature = base64_encode(hash_hmac('sha1', $base, $key, true));
|
||||
$signature = rawurlencode($signature);
|
||||
|
||||
$oauth_header = 'oauth_consumer_key="' . $consumer_key . '", oauth_nonce="' . time() . '", oauth_signature="' . $signature . '", oauth_signature_method="HMAC-SHA1", oauth_timestamp="' . time() . '", oauth_token="' . $access_token . '", oauth_version="1.0", ';
|
||||
$curl_header = array("Authorization: Oauth {$oauth_header}", 'Expect:');
|
||||
|
||||
$curl_request = curl_init();
|
||||
curl_setopt($curl_request, CURLOPT_HTTPHEADER, $curl_header);
|
||||
curl_setopt($curl_request, CURLOPT_HEADER, false);
|
||||
curl_setopt($curl_request, CURLOPT_URL, 'https://api.twitter.com/1.1/statuses/user_timeline.json?count=20');
|
||||
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);
|
||||
$json = curl_exec($curl_request);
|
||||
curl_close($curl_request);
|
||||
|
||||
$posts = json_decode($json);
|
||||
|
||||
|
||||
foreach ($posts as $post) {
|
||||
$content = str_replace("\n", "<br>", $post->text);
|
||||
$author = $post->user->screen_name;
|
||||
$author_url = 'https://twitter.com/' . $author;
|
||||
$url = $author_url . '/status/' . $post->id_str;
|
||||
$published = strtotime($post->created_at);
|
||||
$original_id = $post->id_str;
|
||||
if (isset($post->extended_entities->media[0]->media_url)) {
|
||||
$image = $post->extended_entities->media[0]->media_url;
|
||||
if (!empty($data)) {
|
||||
return $data;
|
||||
} else {
|
||||
$image = '';
|
||||
}
|
||||
$this->db->query('INSERT INTO social_posts (post_plattform, post_content, post_url, post_author, post_author_url, post_date, post_img_source, post_original_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE post_content = ?, post_author_url = ?, post_original_id = ?;', ["Twitter", $content, $url, $author, $author_url, $published, $image, $original_id, $content, $author_url, $original_id]);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function getAllPosts()
|
||||
{
|
||||
$this->getTwitterPosts();
|
||||
$items = $this->db->query('SELECT * FROM social_posts ORDER BY post_date DESC')->result_array();
|
||||
$items = $this->db->query('SELECT * FROM social_posts ORDER BY date DESC')->result_array();
|
||||
return $items;
|
||||
}
|
||||
|
||||
public function getPosts($amount, $offset)
|
||||
{
|
||||
if($offset == 0) {
|
||||
$items = $this->db->query('SELECT * FROM social_posts ORDER BY post_date DESC LIMIT ?', [$amount])->result_array();
|
||||
if ($offset == 0) {
|
||||
$items = $this->db->query('SELECT * FROM social_posts ORDER BY date DESC LIMIT ?', [$amount])->result_array();
|
||||
} else {
|
||||
$items = $this->db->query('SELECT * FROM social_posts ORDER BY post_date DESC LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
$items = $this->db->query('SELECT * FROM social_posts ORDER BY date DESC LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
public function getPostsOfCategory($amount, $offset, $category) {
|
||||
if($offset == 0) {
|
||||
$items = $this->db->query('SELECT * FROM social_posts WHERE post_plattform LIKE ? ORDER BY post_date DESC LIMIT ?', [$category, $amount])->result_array();
|
||||
public function getPostsOfCategory($amount, $offset, $category)
|
||||
{
|
||||
if ($offset == 0) {
|
||||
$items = $this->db->query('SELECT * FROM social_posts WHERE origin LIKE ? ORDER BY date DESC LIMIT ?', [$category, $amount])->result_array();
|
||||
} else {
|
||||
$items = $this->db->query('SELECT * FROM social_posts WHERE post_plattform LIKE ? ORDER BY post_date DESC LIMIT ? OFFSET ?', [$category, $amount, $offset])->result_array();
|
||||
$items = $this->db->query('SELECT * FROM social_posts WHERE origin LIKE ? ORDER BY date DESC LIMIT ? OFFSET ?', [$category, $amount, $offset])->result_array();
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
function getUser($username)
|
||||
{
|
||||
$result = $this->db->query('SELECT ID, username, displayname, email, rank, profile_picture, header_image, about, social_networks, showAds, date_created, gender, language, country, birthdate, birthyear, receiveEmails, receiveNewsletter FROM users WHERE username = ? AND is_activated = TRUE AND isDeleted = FALSE LIMIT 1', [$username])->result_array();
|
||||
$result = $this->db->query('SELECT u.ID, u.username, u.displayname, u.email, u.rank, u.dateCreated, s.profilePicture, s.headerImage, s.about, s.socialNetworks, s.showAds, s.gender, s.language, s.country, s.birthdate, s.birthyear, s.receiveEmails, s.receiveNewsletter FROM users u INNER JOIN user_settings s ON s.ID = u.ID WHERE username = ? AND activated = TRUE AND isDeleted = FALSE LIMIT 1', [strtolower($username)])->result_array();
|
||||
if (empty($result)) {
|
||||
return null;
|
||||
}
|
||||
|
@ -25,11 +25,11 @@
|
|||
public function setDefaultImages($userList)
|
||||
{
|
||||
for ($i = 0; $i < sizeof($userList); $i++) {
|
||||
if ((isset($userList[$i]['header_image']) && ($userList[$i]['header_image'] == '' || $userList[$i]['header_image'] == NULL)) || !isset($userList[$i]['header_image'])) {
|
||||
$userList[$i]['header_image'] = 'https://cdn.kinogofdog.eu' . '/' . $userList[$i]['displayname'];
|
||||
if ((isset($userList[$i]['headerImage']) && ($userList[$i]['headerImage'] == '' || $userList[$i]['headerImage'] == NULL)) || !isset($userList[$i]['headerImage'])) {
|
||||
$userList[$i]['headerImage'] = 'https://cdn.kinogofdog.eu' . '/' . $userList[$i]['displayname'];
|
||||
}
|
||||
if (isset($userList[$i]['profile_picture']) && $userList[$i]['profile_picture'] == '') {
|
||||
$userList[$i]['profile_picture'] = base_url('/f/8d204712d8132b36d765640ce775ce15');
|
||||
if (isset($userList[$i]['profilePicture']) && $userList[$i]['profilePicture'] == '') {
|
||||
$userList[$i]['profilePicture'] = base_url('/f/8d204712d8132b36d765640ce775ce15');
|
||||
}
|
||||
}
|
||||
return $userList;
|
||||
|
@ -51,7 +51,18 @@
|
|||
return $result;
|
||||
}
|
||||
|
||||
public function mergeFollowerCount($users) {
|
||||
public function getFollowers($id)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$followers = $this->db->query('SELECT u.ID, followedSince, username, displayname, profilePicture, headerImage FROM user_followers LEFT JOIN users u ON u.ID = followerUserID LEFT JOIN user_settings s ON s.ID = followerUserID WHERE followedUserID = ? AND u.activated = TRUE AND u.isDeleted = FALSE ORDER BY followedSince DESC', [$id])->result_array();
|
||||
$this->db->cache_on();
|
||||
$followers = $this->setDefaultImages($followers);
|
||||
$followers = $this->mergeFollowerCount($followers);
|
||||
return $followers;
|
||||
}
|
||||
|
||||
public function mergeFollowerCount($users)
|
||||
{
|
||||
foreach ($users as $i => $user) {
|
||||
$this->db->cache_off();
|
||||
$followerCount = $this->db->query('SELECT count(*) followerCount FROM user_followers WHERE followedUserID = ?', [$user['ID']])->result_array();
|
||||
|
@ -61,19 +72,9 @@
|
|||
return $users;
|
||||
}
|
||||
|
||||
public function getFollowers($id)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$followers = $this->db->query('SELECT ID, followedSince, username, displayname, profile_picture, header_image FROM user_followers LEFT JOIN users ON ID = followerUserID WHERE followedUserID = ? AND is_activated = TRUE AND isDeleted = FALSE ORDER BY followedSince DESC', [$id])->result_array();
|
||||
$this->db->cache_on();
|
||||
$followers = $this->setDefaultImages($followers);
|
||||
$followers = $this->mergeFollowerCount($followers);
|
||||
return $followers;
|
||||
}
|
||||
|
||||
function getUserByID($id)
|
||||
{
|
||||
$result = $this->db->query('SELECT ID, original_name, username, displayname, email, rank, profile_picture, header_image, is_activated, about, lastLogin, social_networks, showAds, date_created, gender, language, country, birthdate, birthyear, receiveEmails, receiveNewsletter FROM users WHERE ID = ? AND is_activated = TRUE AND isDeleted = FALSE LIMIT 1', [$id])->result_array();
|
||||
$result = $this->db->query('SELECT u.ID, originalName, username, displayname, email, rank, profilePicture, headerImage, activated, about, lastLogin, socialNetworks, showAds, dateCreated, gender, language, country, birthdate, birthyear, receiveEmails, receiveNewsletter FROM users u LEFT JOIN user_settings s ON s.ID = u.ID WHERE u.ID = ? AND activated = TRUE AND isDeleted = FALSE LIMIT 1', [$id])->result_array();
|
||||
if (empty($result)) {
|
||||
return null;
|
||||
}
|
||||
|
@ -82,15 +83,16 @@
|
|||
return $result;
|
||||
}
|
||||
|
||||
function getUserEmailByID($id) {
|
||||
$result = $this->db->query('SELECT email FROM users WHERE ID = ? AND is_activated = TRUE AND isDeleted = TRUE', [$id])->result_array();
|
||||
function getUserEmailByID($id)
|
||||
{
|
||||
$result = $this->db->query('SELECT email FROM users WHERE ID = ? AND activated = TRUE AND isDeleted = TRUE', [$id])->result_array();
|
||||
return !empty($result) ? $result[0]['email'] : '';
|
||||
}
|
||||
|
||||
public function getFollowing($id)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$following = $this->db->query('SELECT ID, followedSince, username, displayname, profile_picture, header_image FROM user_followers LEFT JOIN users ON ID = followedUserID WHERE followerUserID = ? AND isDeleted = FALSE ORDER BY followedSince DESC', [$id])->result_array();
|
||||
$following = $this->db->query('SELECT u.ID, followedSince, username, displayname, profilePicture, headerImage FROM user_followers LEFT JOIN users u ON u.ID = followedUserID LEFT JOIN user_settings s ON s.ID = followedUserID WHERE followerUserID = ? AND isDeleted = FALSE ORDER BY followedSince DESC', [$id])->result_array();
|
||||
$this->db->cache_on();
|
||||
$following = $this->setDefaultImages($following);
|
||||
$following = $this->mergeFollowerCount($following);
|
||||
|
@ -99,15 +101,15 @@
|
|||
|
||||
function getUserComments($id, $count, $offset)
|
||||
{
|
||||
$comments = $this->db->query('SELECT *, p.postUrl FROM blog_comments c LEFT JOIN blog_posts p ON p.postID = c.post_id WHERE user_id = ? ORDER BY date_created DESC LIMIT ? OFFSET ?', [$id, $count, $offset])->result_array();
|
||||
$comments = $this->BlogModel->mergePostTitleDesc($comments);
|
||||
$comments = $this->db->query('SELECT c.* FROM blog_post_comments c WHERE userID = ? ORDER BY date DESC LIMIT ? OFFSET ?', [$id, $count, $offset])->result_array();
|
||||
$comments = $this->BlogModel->mergePostTranslation($comments, false, null, 'postID');
|
||||
return $comments;
|
||||
}
|
||||
|
||||
function getUserBlogPosts($id, $count, $offset)
|
||||
{
|
||||
$posts = $this->db->query('SELECT * FROM blog_posts WHERE postIsDeleted = FALSE AND postState = 1 AND postAuthorID = ? ORDER BY postPublishDate DESC LIMIT ? OFFSET ?', [$id, $count, $offset])->result_array();
|
||||
$posts = $this->BlogModel->mergePostTitleDesc($posts);
|
||||
$posts = $this->db->query('SELECT * FROM blog_post WHERE state = 1 AND authorID = ? ORDER BY initialRelease DESC LIMIT ? OFFSET ?', [$id, $count, $offset])->result_array();
|
||||
$posts = $this->BlogModel->mergePostTranslation($posts);
|
||||
return $posts;
|
||||
}
|
||||
|
||||
|
@ -125,11 +127,11 @@
|
|||
FROM user_followers
|
||||
WHERE followerUserID = ?) followedCount
|
||||
FROM user_posts
|
||||
WHERE user_id = ?', [$userID, $userID, $userID])->result_array()[0];
|
||||
WHERE userID = ?', [$userID, $userID, $userID])->result_array()[0];
|
||||
$result['postCount'] = $user['postCount'];
|
||||
$result['followerCount'] = $user['followerCount'];
|
||||
$result['followedCount'] = $user['followedCount'];
|
||||
$blogResults = $this->db->query('SELECT COUNT(*) blogCount, (SELECT COUNT(*) FROM blog_comments WHERE user_id = ?) commentCount FROM blog_posts WHERE postIsDeleted = FALSE AND postState = 1 AND postAuthorID = ?', [$userID, $userID])->result_array()[0];
|
||||
$blogResults = $this->db->query('SELECT COUNT(*) blogCount, (SELECT COUNT(*) FROM blog_post_comments WHERE userID = ?) commentCount FROM blog_post WHERE state = 1 AND authorID = ?', [$userID, $userID])->result_array()[0];
|
||||
$result['blogCount'] = $blogResults['blogCount'];
|
||||
$result['commentCount'] = $blogResults['commentCount'];
|
||||
$this->db->cache_on();
|
||||
|
@ -162,19 +164,39 @@ WHERE user_id = ?', [$userID, $userID, $userID])->result_array()[0];
|
|||
|
||||
function updateProfile($data, $id)
|
||||
{
|
||||
function in_data1($val) {
|
||||
return in_array($val, ['username', 'displayname', 'email', 'password']);
|
||||
}
|
||||
|
||||
$data1 = array_filter($data, "in_data1");
|
||||
if(!empty($data1)) {
|
||||
$this->db->where('ID', $id);
|
||||
$this->db->update('users', $data);
|
||||
$this->db->update('users', $data1);
|
||||
}
|
||||
|
||||
$data2 = array_diff($data, $data1);
|
||||
if(!empty($data2)) {
|
||||
$this->db->where('ID', $id);
|
||||
$this->db->update('user_settings', $data2);
|
||||
}
|
||||
}
|
||||
|
||||
function insertIntoHistory($data)
|
||||
{
|
||||
unset($data['date_created']);
|
||||
$this->db->insert('users_history', $data);
|
||||
if(isset($data['password'])) {
|
||||
unset($data['password']);
|
||||
$data['passwordChanged'] = true;
|
||||
}
|
||||
|
||||
$this->db->insert('user_settings_history', $data);
|
||||
}
|
||||
|
||||
function getUserList($amount, $offset)
|
||||
{
|
||||
$data = $this->db->query('SELECT ID, username, displayname, rank, profile_picture, header_image, is_activated, showAds, receiveEmails, receiveNewsletter, date_created, isCurrentlyOnline, lastLogin, login_method, language, country, gender FROM users LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
$data = $this->db->query('SELECT u.ID, username, displayname, rank, profilePicture, headerImage, activated, showAds, receiveEmails, receiveNewsletter, dateCreated, isCurrentlyOnline, lastLogin, loginMethod, language, country, gender
|
||||
FROM users u
|
||||
LEFT JOIN user_settings s ON u.ID = s.ID
|
||||
LIMIT ? OFFSET ?', [$amount, $offset])->result_array();
|
||||
$data = $this->setDefaultImages($data);
|
||||
$data = $this->setRankname($data);
|
||||
return $data;
|
||||
|
@ -187,34 +209,35 @@ WHERE user_id = ?', [$userID, $userID, $userID])->result_array()[0];
|
|||
|
||||
function getActiveUsers($count)
|
||||
{
|
||||
$data = $this->db->query('SELECT username, displayname, profile_picture, lastLogin, (SELECT COUNT(*) FROM user_followers WHERE followedUserID = users.ID) follower_count FROM users WHERE isCurrentlyOnline = TRUE AND is_activated = TRUE AND isDeleted = FALSE ORDER BY lastLogin DESC LIMIT ?', [$count])->result_array();
|
||||
$data = $this->db->query('SELECT username, displayname, profilePicture, lastLogin, (SELECT COUNT(*) FROM user_followers WHERE followedUserID = u.ID) follower_count FROM users u LEFT JOIN user_settings s ON s.ID = u.ID WHERE isCurrentlyOnline = TRUE AND activated = TRUE AND isDeleted = FALSE ORDER BY lastLogin DESC LIMIT ?', [$count])->result_array();
|
||||
$data = $this->setDefaultImages($data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getNewestUsers($count)
|
||||
{
|
||||
$data = $this->db->query('SELECT username, displayname, profile_picture, date_created, (SELECT COUNT(*) FROM user_followers WHERE followedUserID = users.ID) follower_count FROM users WHERE is_activated = TRUE AND isDeleted = FALSE ORDER BY date_created DESC LIMIT ?', [$count])->result_array();
|
||||
$data = $this->db->query('SELECT username, displayname, profilePicture, dateCreated, (SELECT COUNT(*) FROM user_followers WHERE followedUserID = u.ID) follower_count FROM users u LEFT JOIN user_settings s ON s.ID = u.ID WHERE activated = TRUE AND isDeleted = FALSE ORDER BY dateCreated DESC LIMIT ?', [$count])->result_array();
|
||||
$data = $this->setDefaultImages($data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function searchUsers($query, $rank = '', $region = '', $lang = '', $amount = 3, $offset = 0) {
|
||||
public function searchUsers($query, $rank = '', $region = '', $lang = '', $amount = 3, $offset = 0)
|
||||
{
|
||||
$conditions = [];
|
||||
$inputs = [];
|
||||
if($query !== '') {
|
||||
if ($query !== '') {
|
||||
$conditions[] = 'username RLIKE ?';
|
||||
$inputs[] = $query;
|
||||
}
|
||||
if($rank !== '') {
|
||||
if ($rank !== '') {
|
||||
$conditions[] = 'rank = ?';
|
||||
$inputs[] = $rank;
|
||||
}
|
||||
if($region !== '') {
|
||||
if ($region !== '') {
|
||||
$conditions[] = 'country = ?';
|
||||
$inputs[] = $region;
|
||||
}
|
||||
if($lang !== '') {
|
||||
if ($lang !== '') {
|
||||
$conditions[] = 'language = ?';
|
||||
$inputs[] = $lang;
|
||||
}
|
||||
|
@ -222,7 +245,7 @@ WHERE user_id = ?', [$userID, $userID, $userID])->result_array()[0];
|
|||
$dbClause = join(' AND ', $conditions);
|
||||
$inputs[] = $amount;
|
||||
$inputs[] = $offset;
|
||||
$data = $this->db->query('SELECT username, displayname, profile_picture, header_image, about, rank FROM users WHERE is_activated = TRUE AND isDeleted = FALSE AND ' . $dbClause . ' LIMIT ? OFFSET ?', $inputs)->result_array();
|
||||
$data = $this->db->query('SELECT username, displayname, profilePicture, headerImage, about, rank FROM users u LEFT JOIN user_settings s ON s.ID = u.ID WHERE activated = TRUE AND isDeleted = FALSE AND ' . $dbClause . ' LIMIT ? OFFSET ?', $inputs)->result_array();
|
||||
|
||||
$data = $this->setDefaultImages($data);
|
||||
$data = $this->setRankname($data);
|
||||
|
@ -230,19 +253,23 @@ WHERE user_id = ?', [$userID, $userID, $userID])->result_array()[0];
|
|||
return $data;
|
||||
}
|
||||
|
||||
public function getAvailableCountries() {
|
||||
return $this->db->query('SELECT country, count(*) countryUserCount FROM users WHERE country IS NOT NULL AND country != "" GROUP BY country ORDER BY country')->result_array();
|
||||
public function getAvailableCountries()
|
||||
{
|
||||
return $this->db->query('SELECT country, count(*) countryUserCount FROM user_settings WHERE country IS NOT NULL AND country != "" GROUP BY country ORDER BY country')->result_array();
|
||||
}
|
||||
|
||||
public function getAvailableLanguages() {
|
||||
return $this->db->query('SELECT language, count(*) langUserCount FROM users GROUP BY language ORDER BY language')->result_array();
|
||||
public function getAvailableLanguages()
|
||||
{
|
||||
return $this->db->query('SELECT language, count(*) langUserCount FROM user_settings GROUP BY language ORDER BY language')->result_array();
|
||||
}
|
||||
|
||||
public function deleteUser($id) {
|
||||
public function deleteUser($id)
|
||||
{
|
||||
$this->db->query('UPDATE users SET isDeleted = TRUE, isCurrentlyOnline = FALSE, lastOnlineUpdate = NULL WHERE ID = ?', [$id])->result_array();
|
||||
}
|
||||
|
||||
public function getPermissions($userID) {
|
||||
public function getPermissions($userID)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$result = $this->db->query('SELECT * FROM user_permissions WHERE userID = ?', [$userID])->result_array();
|
||||
$this->db->cache_on();
|
||||
|
@ -256,18 +283,21 @@ WHERE user_id = ?', [$userID, $userID, $userID])->result_array()[0];
|
|||
return $perms;
|
||||
}
|
||||
|
||||
public function hasPermission($userID, $permType, $permName) {
|
||||
public function hasPermission($userID, $permType, $permName)
|
||||
{
|
||||
$this->db->cache_off();
|
||||
$result = $this->db->query('SELECT ID FROM user_permissions WHERE userID = ? AND permissionType = ? AND permissionName = ?', [$userID, $permType, $permName])->result_array();
|
||||
$this->db->cache_on();
|
||||
return !empty($result);
|
||||
}
|
||||
|
||||
public function addPermission($userID, $permissionGroup, $permissionName, $givenBy) {
|
||||
public function addPermission($userID, $permissionGroup, $permissionName, $givenBy)
|
||||
{
|
||||
$this->db->query('INSERT INTO user_permissions (userID, permissionType, permissionName, givenBy) VALUES (?, ?, ?, ?)', [$userID, $permissionGroup, $permissionName, $givenBy]);
|
||||
}
|
||||
|
||||
public function revokePermission($userID, $permissionGroup, $permissionName) {
|
||||
public function revokePermission($userID, $permissionGroup, $permissionName)
|
||||
{
|
||||
$this->db->query('DELETE FROM user_permissions WHERE userID = ? AND permissionType = ? AND permissionName = ?', [$userID, $permissionGroup, $permissionName]);
|
||||
}
|
||||
}
|
||||
|
|
10
application/views/admin/blog/templates/post_reference.php
Normal file
10
application/views/admin/blog/templates/post_reference.php
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
?>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Titel</h5>
|
||||
<p class="card-text"></p>
|
||||
</div>
|
||||
</div>
|
|
@ -125,9 +125,8 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
|
||||
</style>
|
||||
<input type="hidden" value="<?= $postID ?>" id="postID">
|
||||
<input type="hidden" value="<?= isset($contents[$postLanguage]) ? $contents[$postLanguage] : $contents['de'] ?>" id="contentID">
|
||||
<input type="hidden" value="<?= $translations[$postLanguage] ?>" id="translationID">
|
||||
<input type="hidden" value="<?= $postLanguage ?>" id="postLanguage">
|
||||
<input type="hidden" value="<?= isset($versions[$lang]) ? $versions[$lang] : $versions['de'] ?>" id="versionID">
|
||||
<input type="hidden" value="<?= $lang ?>" id="postLanguage">
|
||||
<input type="hidden" value="" id="uploadedImage">
|
||||
<div class="col-sm-12">
|
||||
<div class="blog">
|
||||
|
@ -157,11 +156,11 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
<div>
|
||||
<i class="fa fa-folder-open"></i>
|
||||
<div class="category-select" style="display: inline-block;">
|
||||
<select class="form-control" id="postCategory">
|
||||
<select class="form-control" id="postCategory" multiple>
|
||||
<option value="new-category">-- Neue Kategorie --</option>
|
||||
<?php foreach ($categories as $category) { ?>
|
||||
<option value="<?= $category['ID'] ?>">
|
||||
<?= $category['display_name'] ?>
|
||||
<?= $category['displayname'] ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
|
@ -244,13 +243,13 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
</div>
|
||||
<div class="x_content">
|
||||
<ul class="nav nav-pills nav-stacked" id="switchLanguages">
|
||||
<li role="presentation" class="<?= $postLanguage == 'de' ? 'active' : '' ?>" data-lang="de" data-translationID="<?= $translations['de'] ?>" data-contentID="<?= $contents['de'] ?>">
|
||||
<li role="presentation" class="<?= $lang == 'de' ? 'active' : '' ?>" data-lang="de" data-versionID="<?= $versions['de'] ?>">
|
||||
<span class="flag-icon flag-icon-de"></span> Deutsch
|
||||
</li>
|
||||
<li role="presentation" class="<?= $postLanguage == 'en' ? 'active' : '' ?>" data-lang="en" data-translationID="<?= isset($translations['en']) ? $translations['en'] : -1 ?>" data-contentID="<?= isset($contents['en']) ? $contents['en'] : -1 ?>">
|
||||
<li role="presentation" class="<?= $lang == 'en' ? 'active' : '' ?>" data-lang="en" data-versionID="<?= isset($versions['en']) ? $versions['en'] : -1 ?>">
|
||||
<span class="flag-icon flag-icon-us"></span> Englisch
|
||||
</li>
|
||||
<li role="presentation" class="<?= $postLanguage == 'fr' ? 'active' : '' ?>" data-lang="fr" data-translationID="<?= isset($translations['fr']) ? $translations['fr'] : -1 ?>" data-contentID="<?= isset($contents['fr']) ? $contents['fr'] : -1 ?>">
|
||||
<li role="presentation" class="<?= $lang == 'fr' ? 'active' : '' ?>" data-lang="fr" data-versionID="<?= isset($versions['fr']) ? $versions['fr'] : -1 ?>">
|
||||
<span class="flag-icon flag-icon-fr"></span> Französisch
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
require_once './vendor/Diff/htmLawed.php';
|
||||
require_once './vendor/Diff/class.Diff.php';
|
||||
?>
|
||||
<div class="right_col" role="main">
|
||||
<div class="">
|
||||
|
@ -12,37 +15,64 @@
|
|||
</div>
|
||||
<div class="x_content">
|
||||
<div class="row">
|
||||
<div class="compare-items-container">
|
||||
<div class="compare-items row">
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
<a href="#" class="btn btn-sm btn-primary compare-btn" disabled="">Vergleichen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="width: auto; overflow-x:scroll;">
|
||||
<?php foreach ($content as $language => $items): ?>
|
||||
<div class="col-sm-3">
|
||||
<div class="col-12">
|
||||
<h3><?= $language ?></h3>
|
||||
|
||||
<!-- --><?php //echo Diff::toHTML(Diff::compare("Hallo!\n Peter Enis\nFotze", "Hallo.\n Peter Penis\nFotze")) ?>
|
||||
|
||||
<ul class="list-unstyled timeline">
|
||||
<?php foreach ($items as $item): ?>
|
||||
<?php foreach ($items as $i => $item): ?>
|
||||
<li>
|
||||
<div class="block">
|
||||
<div class="tags">
|
||||
<?php if ($item['isActive'] == 1): ?>
|
||||
<?php if ($item['active'] == 1): ?>
|
||||
<a class="tag">
|
||||
<span>Aktiv</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if ($item['isNativePost'] == 1): ?>
|
||||
<a class="tag">
|
||||
<span>Original-Version</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="block_content">
|
||||
<h2 class="title">
|
||||
<?= $item['versionMessage'] ?>
|
||||
<span class="badge badge-default"><?= substr($item['hashID'], 0, 8) ?></span>
|
||||
<?= $item['changes'] ?>
|
||||
</h2>
|
||||
<div class="byline">
|
||||
<span><?= date("d.m.Y \u\m H:i", strtotime($item['contentDate'])) ?> Uhr</span>
|
||||
<span><?= date("d.m.Y \u\m H:i", strtotime($item['edited'])) ?> Uhr</span>
|
||||
von
|
||||
<?php $author = $this->BlogModel->getAuthorData($item['contentAuthorID']) ?>
|
||||
<?php $author = $this->BlogModel->getAuthorData($item['authorID']) ?>
|
||||
<a href="/user/<?= $author['username'] ?>"><?= $author['displayname'] ?></a>
|
||||
</div>
|
||||
<p class="excerpt"><?= $item['content'] ?>
|
||||
<p class="excerpt">
|
||||
Titel:
|
||||
<i><?= $item['title'] ?></i>
|
||||
<br>
|
||||
Beschreibung:
|
||||
<i><?= $item['description'] ?></i>
|
||||
</p>
|
||||
<div class="actions">
|
||||
<button class="btn btn-sm btn-primary">
|
||||
Ansehen
|
||||
</button>
|
||||
<button class="btn btn-sm btn-default history-compare" data-hashID="<?= $item['hashID'] ?>">
|
||||
Vergleichen mit...
|
||||
</button>
|
||||
<?php if (!$item['active']): ?>
|
||||
<button class="btn btn-sm btn-default">
|
||||
Aktivieren
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
|
|
@ -36,33 +36,33 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($posts as $post) { ?>
|
||||
<tr id="post-<?= $post['postID'] ?>">
|
||||
<tr id="post-<?= $post['ID'] ?>">
|
||||
<td>
|
||||
<?= $post['postID'] ?>
|
||||
<?= $post['ID'] ?>
|
||||
</td>
|
||||
<td>
|
||||
<a href="<?= base_url('blog/post/' . $post['postUrl']) ?>" target="_blank"><?= $post['postTitle'] ?></a>
|
||||
<a href="<?= base_url('blog/post/' . $post['url']) ?>" target="_blank"><?= $post['title'] ?></a>
|
||||
</td>
|
||||
<td>
|
||||
<?= $post['postDesc'] ?>
|
||||
<?= substr($post['description'], 0, 40) ?>...
|
||||
</td>
|
||||
<td>
|
||||
<?= $post['postStateDisplay'] ?>
|
||||
<?= $post['stateName'] ?>
|
||||
</td>
|
||||
<td>
|
||||
<?= date('d.m.Y H:i', strtotime($post['postPublishDate'])) ?>
|
||||
<?= date('d.m.Y H:i', strtotime($post['initialRelease'])) ?>
|
||||
</td>
|
||||
<td>
|
||||
<?= date('d.m.Y H:i', strtotime($post['postLastEdit'])) ?>
|
||||
<?= date('d.m.Y H:i', strtotime($post['lastEdit'])) ?>
|
||||
</td>
|
||||
<td>
|
||||
<a href="<?= base_url('user/' . $post['postAuthorUsername']) ?>" target="_blank"><?= $post['postAuthorDisplayname'] ?></a>
|
||||
<a href="<?= base_url('user/' . $post['author']['displayname']) ?>" target="_blank"><?= $post['author']['displayname'] ?></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="<?= base_url('blog/category/' . $post['categoryName']) ?>" target="_blank"><?= $post['categoryDisplayName'] ?></a>
|
||||
<!-- <a href="--><?//= base_url('blog/category/' . $post['categoryName']) ?><!--" target="_blank">--><?//= $post['categoryDisplayName'] ?><!--</a>-->
|
||||
</td>
|
||||
<td>
|
||||
<?= $post['postViews'] ?>
|
||||
<?= $post['views'] ?>
|
||||
<i class="fa fa-eye"></i>
|
||||
</td>
|
||||
<td>
|
||||
|
@ -75,30 +75,30 @@
|
|||
</td>
|
||||
<?php if (isset($trashbin) && $trashbin): ?>
|
||||
<td>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Bearbeiten" href="<?= base_url('admin/blog/edit/' . $post['postID']) ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Bearbeiten" href="<?= base_url('admin/blog/edit/' . $post['ID']) ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<i class="fa fa-edit"></i>
|
||||
</a>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="History" href="<?= base_url('admin/blog/history/' . $post['postID']) ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="History" href="<?= base_url('admin/blog/history/' . $post['ID']) ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<i class="fa fa-history"></i>
|
||||
</a>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Wiederherstellen" onclick="restorePost(<?= $post['postID'] ?>)" class="btn btn-xs btn-green">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Wiederherstellen" onclick="restorePost(<?= $post['ID'] ?>)" class="btn btn-xs btn-green">
|
||||
<i class="fa fa-undo"></i>
|
||||
</a>
|
||||
<a href="" data-toggle="tooltip" data-placement="top" title="Endgültig löschen">
|
||||
<button type="button" class="btn btn-xs btn-red" data-toggle="modal" data-target="#deleteModal" data-type="Blog-Post" data-title="<?= $post['postTitle'] ?>" data-id="<?= $post['postID'] ?>">
|
||||
<button type="button" class="btn btn-xs btn-red" data-toggle="modal" data-target="#deleteModal" data-type="Blog-Post" data-title="<?= $post['title'] ?>" data-id="<?= $post['ID'] ?>">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
</a>
|
||||
</td>
|
||||
<?php else: ?>
|
||||
<td>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Bearbeiten" href="<?= base_url('admin/blog/edit/' . $post['postID'] . '/') ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Bearbeiten" href="<?= base_url('admin/blog/edit/' . $post['ID'] . '/') ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<i class="fa fa-edit"></i>
|
||||
</a>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="History" href="<?= base_url('admin/blog/history/' . $post['postID']) ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="History" href="<?= base_url('admin/blog/history/' . $post['ID']) ?>" target="_blank" class="btn btn-xs btn-default">
|
||||
<i class="fa fa-history"></i>
|
||||
</a>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Löschen" onclick="deletePost(<?= $post['postID'] ?>)" class="btn btn-xs btn-red">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Löschen" onclick="deletePost(<?= $post['ID'] ?>)" class="btn btn-xs btn-red">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</td>
|
||||
|
|
|
@ -90,23 +90,37 @@
|
|||
<table id="datatable-fixed-header" class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Titel - Deutsch</th>
|
||||
<th>Titel - English</th>
|
||||
<th>Titel - Französisch</th>
|
||||
<th>Anzahl Einträge</th>
|
||||
<th>Tools</th>
|
||||
<th rowspan="2">ID</th>
|
||||
<th colspan="3">Name</th>
|
||||
<th colspan="3">Titel</th>
|
||||
<th rowspan="2">Anzahl Einträge</th>
|
||||
<th rowspan="2">Tools</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Deutsch</th>
|
||||
<th>Englisch</th>
|
||||
<th>Französisch</th>
|
||||
<th>Deutsch</th>
|
||||
<th>Englisch</th>
|
||||
<th>Französisch</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($categories as $c) { ?>
|
||||
<?php foreach ($categories as $c) {
|
||||
$names = explode(',', $c['name']);
|
||||
$displaynames = explode(',', $c['displayname']);
|
||||
?>
|
||||
<tr id="category-<?= $c['ID'] ?>">
|
||||
<td><?= $c['ID'] ?></td>
|
||||
<td><?= $c['collection'] ?></td>
|
||||
<td><?= $c['displayname'] ?></td>
|
||||
<td><?= $c['displaynameEnglish'] ?></td>
|
||||
<td><?= $c['displaynameFrench'] ?></td>
|
||||
|
||||
<td><?= isset($names[0]) ? $names[0] : '' ?></td>
|
||||
<td><?= isset($names[1]) ? $names[1] : '' ?></td>
|
||||
<td><?= isset($names[2]) ? $names[2] : '' ?></td>
|
||||
|
||||
<td><?= isset($displaynames[0]) ? $displaynames[0] : '' ?></td>
|
||||
<td><?= isset($displaynames[1]) ? $displaynames[1] : '' ?></td>
|
||||
<td><?= isset($displaynames[2]) ? $displaynames[2] : '' ?></td>
|
||||
|
||||
<td><?= $c['count'] ?></td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-xs btn-red" data-toggle="modal" data-target="#deleteModal" data-type="Projekt-Kategorie" data-title="<?= $c['displayname'] ?>" data-id="<?= $c['ID'] ?>">
|
||||
|
|
|
@ -16,18 +16,18 @@ use Coduo\PHPHumanizer\DateTimeHumanizer;
|
|||
<div class="x_content">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">
|
||||
<img src="<?= $user['profile_picture'] ?>" class="img-fluid">
|
||||
<img src="<?= $user['profilePicture'] ?>" class="img-fluid">
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<h3><a href="<?= base_url('user/' . $user['username']) ?>"
|
||||
target="_blank"><?= $user['displayname'] ?></a></h3>
|
||||
<?php $created_at = strtotime($user['date_created']); ?>
|
||||
<?php $created_at = strtotime($user['dateCreated']); ?>
|
||||
<p>
|
||||
<b>Account erstellt: </b>
|
||||
<?= DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$created_at"), "de_DE") ?>
|
||||
<i>(<?= date("d.m.Y H:i", $created_at) ?>)</i>
|
||||
</p>
|
||||
<p><b>Originaler Name:</b> <?= $user['original_name'] ?></p>
|
||||
<p><b>Originaler Name:</b> <?= $user['originalName'] ?></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row col-sm-12">
|
||||
|
@ -55,7 +55,7 @@ use Coduo\PHPHumanizer\DateTimeHumanizer;
|
|||
</p>
|
||||
<p>
|
||||
<b>Aktiviert?</b>
|
||||
<?= $user['is_activated'] ? '<i class="fa fa-check-circle-o"></i> Ja' : '<i class="fa fa-times-circle-o"></i>Nein' ?>
|
||||
<?= $user['activated'] ? '<i class="fa fa-check-circle-o"></i> Ja' : '<i class="fa fa-times-circle-o"></i>Nein' ?>
|
||||
</p>
|
||||
<p>
|
||||
<b>Zeige Werbung?</b>
|
||||
|
|
|
@ -53,9 +53,9 @@
|
|||
2 => "Twitter",
|
||||
3 => "GitHub"
|
||||
];
|
||||
$loginMethod = $loginMethods[$user['login_method']];
|
||||
$loginMethod = $loginMethods[$user['loginMethod']];
|
||||
|
||||
$dateCreated = strtotime($user['date_created']);
|
||||
$dateCreated = strtotime($user['dateCreated']);
|
||||
$lastLogin = strtotime($user['lastLogin']);
|
||||
$dateCreatedStr = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), "de_DE");
|
||||
if($lastLogin)
|
||||
|
@ -82,12 +82,12 @@
|
|||
(<?= date("d.m.Y H:i", $dateCreated) ?>)
|
||||
</td>
|
||||
<td>
|
||||
<img src="<?= $user['profile_picture'] ?>?w=50" class="img-fluid rounded"
|
||||
<img src="<?= $user['profilePicture'] ?>?w=50" class="img-fluid rounded"
|
||||
alt="Profilbild"
|
||||
style="max-height: 50px;">
|
||||
</td>
|
||||
<td>
|
||||
<?= $user['is_activated'] ? "<i class='fa fa-check-circle'></i> Ja" : "<i class='fa fa-times-circle'></i> Nein" ?>
|
||||
<?= $user['activated'] ? "<i class='fa fa-check-circle'></i> Ja" : "<i class='fa fa-times-circle'></i> Nein" ?>
|
||||
</td>
|
||||
<td>
|
||||
<?= $user['showAds'] ? '<i class="fa fa-check-circle"></i> Ja' : '<i class="fa fa-times-circle"></i> Nein' ?>
|
||||
|
@ -128,7 +128,7 @@
|
|||
<?php endif; ?>
|
||||
|
||||
<?php if(get_instance()->hasPermission('user.ban')): ?>
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Account löschen" onclick="showDeleteModal(<?= $user['ID'] ?>. <?= $user['username'] ?>)" target="_blank" class="btn btn-xs btn-red">
|
||||
<a data-toggle="tooltip" data-placement="top" title="" data-original-title="Account löschen" onclick="showDeleteModal(<?= $user['ID'] ?>.; <?= $user['username'] ?>)" target="_blank" class="btn btn-xs btn-red">
|
||||
<i class="fas fa-user-slash"></i>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<div class="well comment-well">
|
||||
<div class="d-inline-block mr-2">
|
||||
<a href="<?= base_url('user/' . $author['username']) ?>" target="_blank">
|
||||
<img src="<?= $author['profile_picture'] ?>" alt="">
|
||||
<img src="<?= $author['profilePicture'] ?>" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="d-inline-block mr-2">
|
||||
|
@ -16,7 +16,7 @@
|
|||
<?= $author['displayname'] ?>
|
||||
</a>
|
||||
/
|
||||
<?= date('d.m.Y H:i \\U\\h\\r', strtotime($date_created)) ?></small>
|
||||
<?= date('d.m.Y H:i \\U\\h\\r', strtotime($date)) ?></small>
|
||||
</h3>
|
||||
<p class="comment">
|
||||
<?= $comment ?>
|
||||
|
|
25
application/views/blog/delete_modal.php
Normal file
25
application/views/blog/delete_modal.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
?>
|
||||
|
||||
<form id="postDeleteForm">
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<p>
|
||||
<b>Bist du dir wirklich sicher, dass du deinen Kommentar löschen willst?</b>
|
||||
</p>
|
||||
<p>
|
||||
<i>Diese Aktion kann nicht rückgängig gemacht werden!</i>
|
||||
</p>
|
||||
<ul class="comment-list" style="pointer-events: none">
|
||||
<?php
|
||||
$this->load->view('network/blog/comment_item', ['data' => $author, 'c' => $comment, 'hideActionBtns' => true]) ?>
|
||||
</ul>
|
||||
<!-- --><?php //var_dump($post) ?>
|
||||
</div>
|
||||
<button type="reset" class="btn btn-sm btn-primary round float-right" data-dismiss="modal">
|
||||
Nein, Kommentar behalten
|
||||
</button>
|
||||
<button type="submit" class="btn btn-sm btn-red outline round float-right" onclick="deleteComment(<?= $comment['ID'] ?>)">
|
||||
Ja, endgültig löschen
|
||||
</button>
|
||||
</form>
|
|
@ -5,7 +5,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
<div class="container">
|
||||
<div class="notice-container navbar-fixed-bottom"></div>
|
||||
<div class="row">
|
||||
<aside class="col-sm-4 col-sm-push-8">
|
||||
<aside class="col-lg-4 order-lg-last">
|
||||
<div class="widget search">
|
||||
<form role="form" action="/blog/search">
|
||||
<div class="input-group">
|
||||
|
@ -35,15 +35,15 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
<?php foreach ($categoryPosts as $post) { ?>
|
||||
<div class="media">
|
||||
<div class="media-body">
|
||||
<?php if (!empty($post['postImage'])): ?>
|
||||
<a href="<?= base_url('blog/post/' . $post['postUrl']); ?>">
|
||||
<img src="<?= $post['postImage']; ?>?w=300" class="img-fluid rounded post-image">
|
||||
<?php if (!empty($post['image'])): ?>
|
||||
<a href="<?= base_url('blog/post/' . $post['url']); ?>">
|
||||
<img src="<?= $post['image']; ?>?w=300" class="img-fluid rounded post-image">
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<div class="overlay">
|
||||
<div class="media-heading">
|
||||
<a href="<?= base_url('blog/post/' . $post['postUrl']); ?>">
|
||||
<strong><?= $post['postTitle']; ?></strong>
|
||||
<a href="<?= base_url('blog/post/' . $post['url']); ?>">
|
||||
<strong><?= $post['title']; ?></strong>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -58,7 +58,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
<?php foreach ($categories as $category) { ?>
|
||||
<li>
|
||||
<a href="<?= base_url('blog/category/' . $category['name']) ?>">
|
||||
<?= lang('blog_category_' . $category['name']) != '' ? lang('blog_category_' . $category['name']) : $category['display_name'] ?>
|
||||
<?= lang('blog_category_' . $category['name']) != '' ? lang('blog_category_' . $category['name']) : $category['displayname'] ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
|
|
|
@ -5,41 +5,44 @@
|
|||
|
||||
?>
|
||||
|
||||
<div class="col-sm-8 col-sm-pull-4">
|
||||
<div class="col-lg-8 order-lg-first">
|
||||
<div class="like-toggle-icon-container floating">
|
||||
<button class="like-toggle-icon <?= $hasLiked ? '-checked' : '' ?>" title="❤ Toggle Like!" onclick="likeDislike(<?= $postID ?>)"></button>
|
||||
<button class="like-toggle-icon <?= $hasLiked ? '-checked' : '' ?>" title="❤ Toggle Like!" onclick="likeDislike(<?= $ID ?>)"></button>
|
||||
<span class="like-count"><?= $likeCount ?></span>
|
||||
</div>
|
||||
|
||||
<div class="blog">
|
||||
<div class="blog-item">
|
||||
<?php if ($postIsDeleted): ?>
|
||||
<?php // TODO: Add notice if post was deleted
|
||||
if (false): ?>
|
||||
<h2 class="text-error">
|
||||
<i class="fa fa-warning"></i>
|
||||
</h2>
|
||||
<?php else: ?>
|
||||
<?php if ($postImage != '') { ?>
|
||||
<img class="img-fluid img-blog" src="<?= $postImage; ?>?w=800" width="100%" alt="" />
|
||||
<?php if ($image != '') { ?>
|
||||
<img class="img-fluid img-blog" src="<?= $image; ?>?w=800" width="100%" alt="" />
|
||||
<?php } ?>
|
||||
<div class="blog-content">
|
||||
<div class="entry-meta">
|
||||
<span>
|
||||
<a href="<?= base_url('user/' . $postAuthorUsername) ?>">
|
||||
<a href="<?= base_url('user/' . $author['username']) ?>">
|
||||
<i class="far fa-user"></i>
|
||||
<?= $postAuthorDisplayname ?>
|
||||
<?= $author['displayname'] ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php
|
||||
$publishDate = strtotime($postPublishDate);
|
||||
$lastEdit = strtotime($postLastEdit);
|
||||
$initialRelease = strtotime($initialRelease);
|
||||
if (isset($lastEdit)) {
|
||||
$lastEdit = strtotime($lastEdit);
|
||||
}
|
||||
?>
|
||||
<span style="cursor:pointer" data-toggle="tooltip" data-placement="bottom"
|
||||
title="<?= strftime("%d. %B %Y", $publishDate) ?>">
|
||||
title="<?= strftime("%d. %B %Y", $initialRelease) ?>">
|
||||
<i class="far fa-calendar"></i>
|
||||
<?= DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$publishDate"), $_SESSION['site_lang']) ?>
|
||||
<?= DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$initialRelease"), $_SESSION['site_lang']) ?>
|
||||
</span>
|
||||
|
||||
<?php if (isset($postLastEdit) && $postLastEdit !== null): ?>
|
||||
<?php if (isset($lastEdit) && $lastEdit !== null): ?>
|
||||
<span style="cursor:pointer" data-toggle="tooltip" data-placement="bottom"
|
||||
title="<?= strftime("%d. %B %Y", $lastEdit) ?>">
|
||||
<i class="far fa-edit"></i>
|
||||
|
@ -47,16 +50,9 @@
|
|||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<span>
|
||||
<a href="<?= base_url('blog/category/' . $categoryName) ?>">
|
||||
<i class="far fa-folder-open"></i>
|
||||
<?= lang('blog_category_' . $categoryName) != '' ? lang('blog_category_' . $categoryName) : $categoryDisplayName ?>
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<span style="cursor:pointer" data-toggle="tooltip" data-placement="bottom" title="<?= lang('blog_approximate_reading_time') ?>">
|
||||
<i class="far fa-clock"></i>
|
||||
<?= $this->BlogModel->getReadingTime($postID) ?> min
|
||||
<?= $this->BlogModel->getReadingTime($wordCount) ?> min
|
||||
</span>
|
||||
|
||||
<span>
|
||||
|
@ -67,40 +63,60 @@
|
|||
</span>
|
||||
|
||||
<span>
|
||||
<a href="#" style="cursor:pointer" onclick="likeDislike(<?= $postID ?>)">
|
||||
<a href="#" style="cursor:pointer" onclick="likeDislike(<?= $ID ?>)">
|
||||
<i class="far fa-heart"></i>
|
||||
<span class="like-count"><?= $likeCount ?></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<h1 class="post-title"><?= $postTitle ?></h1>
|
||||
<h2 class="post-subtitle"><?= $postDesc ?></h2>
|
||||
<h1 class="post-title"><?= $title ?></h1>
|
||||
<h2 class="post-subtitle"><?= $description ?></h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<div class="blog-post">
|
||||
<?= isset($postContent) ? $postContent : "" ?>
|
||||
<?= isset($content) ? $content : "" ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<h3>
|
||||
<i class="far fa-folder-open"></i>
|
||||
Kategorien
|
||||
</h3>
|
||||
<?php foreach ($categories as $category): ?>
|
||||
<a href="<?= base_url('blog/category/' . $category['name']) ?>">
|
||||
<span class="badge badge-primary">
|
||||
<?= lang('blog_category_' . $category['name']) != '' ? lang('blog_category_' . $category['name']) : $category['displayname'] ?>
|
||||
</span>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<h3>
|
||||
<i class="fa fa-tags"></i>
|
||||
Tags
|
||||
</h3>
|
||||
<div class="tags">
|
||||
<?php foreach ($tags as $tag) { ?>
|
||||
<a href="<?= base_url('blog/tag/' . $tag['name']) ?>"><span
|
||||
class="label label-primary"><?= $tag['display_name'] ?></span>
|
||||
<a href="<?= base_url('blog/tag/' . $tag['name']) ?>">
|
||||
<span class="badge badge-primary"><?= $tag['displayname'] ?></span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<h3>
|
||||
<i class="far fa-user"></i> <?= lang('blog_about') ?>
|
||||
</h3>
|
||||
|
@ -108,11 +124,11 @@
|
|||
<?php
|
||||
$this->load->view('network/user/user_overview_card', [
|
||||
'noContainer' => true,
|
||||
'username' => $postAuthorUsername,
|
||||
'displayname' => $postAuthorDisplayname,
|
||||
'profile_picture' => $postAuthorProfilePicture,
|
||||
'header_image' => $postAuthorHeaderImage,
|
||||
'about' => $postAuthorAbout])
|
||||
'username' => $author['username'],
|
||||
'displayname' => $author['displayname'],
|
||||
'profilePicture' => $author['profilePicture'],
|
||||
'headerImage' => $author['headerImage'],
|
||||
'about' => $author['about']])
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -128,19 +144,19 @@
|
|||
<?php foreach ($randomPosts as $item) { ?>
|
||||
<div class="col-sm-4">
|
||||
<div class="card">
|
||||
<?php if ($item['postImage'] != ''): ?>
|
||||
<a href="<?= base_url('blog/post/' . $item['postUrl']) ?>">
|
||||
<img src="<?= $item['postImage'] ?>?w=200" alt="<?= $item['postTitle'] ?>" class="card-img-top">
|
||||
<?php if ($item['image'] != ''): ?>
|
||||
<a href="<?= base_url('blog/post/' . $item['url']) ?>">
|
||||
<img src="<?= $item['image'] ?>?w=200" alt="<?= $item['title'] ?>" class="card-img-top">
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<div class="card-body">
|
||||
<a href="<?= base_url('blog/post/' . $item['postUrl']) ?>">
|
||||
<h5 class="card-title"><?= $item['postTitle'] ?></h5>
|
||||
<a href="<?= base_url('blog/post/' . $item['url']) ?>">
|
||||
<h5 class="card-title"><?= $item['title'] ?></h5>
|
||||
</a>
|
||||
<small class="card-text">
|
||||
<i class="far fa-user"></i>
|
||||
<a href="<?= base_url('user/' . $item['postAuthorUsername']) ?>">
|
||||
<?= $item['postAuthorDisplayname'] ?>
|
||||
<a href="<?= base_url('user/' . $item['author']['username']) ?>">
|
||||
<?= $item['author']['displayname'] ?>
|
||||
</a>
|
||||
</small>
|
||||
</div>
|
||||
|
@ -152,20 +168,6 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<div class="container">
|
||||
<div id="comments">
|
||||
<h3>
|
||||
<i class="far fa-comments"></i> <?= lang('blog_comments') ?> (<span class="comment-count"><?= $commentCount; ?></span>)
|
||||
</h3>
|
||||
<ul class="comment-list" id="comment-list">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<div id="comment-form">
|
||||
|
@ -196,35 +198,57 @@
|
|||
</div>
|
||||
<!--/#comments-->
|
||||
</div>
|
||||
|
||||
<div class="blog-item">
|
||||
<div class="blog-content">
|
||||
<div class="container">
|
||||
<div id="comments">
|
||||
<h3>
|
||||
<i class="far fa-comments"></i> <?= lang('blog_comments') ?> (
|
||||
<span class="comment-count"><?= $commentCount; ?></span>
|
||||
)
|
||||
</h3>
|
||||
<ul class="comment-list" id="comment-list">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<?php if (!empty($prevPost)):
|
||||
$prevPost = $prevPost[0]; ?>
|
||||
<div class="blog-item col-xs-6" style="width:calc(50% - 5px);">
|
||||
<a href="<?= base_url('blog/post/' . $prevPost['postUrl']) ?>">
|
||||
<div class="pull-left"
|
||||
style="background: url(<?= $prevPost['postImage'] ?>?w=150) center;background-size:cover;width:100px;height:100px;border-radius: 4px;margin:10px 0;"></div>
|
||||
<div class="float-right" style="width: calc(100% - 110px)">
|
||||
<div class="col-6">
|
||||
<div class="blog-item following-post left">
|
||||
<a href="<?= base_url('blog/post/' . $prevPost['url']) ?>">
|
||||
<div class="following-post-image"
|
||||
style="background-image: url(<?= $prevPost['image'] ?>?w=150)"></div>
|
||||
<div style="width: calc(100% - 110px);display: inline-block;margin:10px 0;">
|
||||
<h5>
|
||||
<i class="fa fa-arrow-left"></i> <?= lang('blog_previous_article') ?></h5>
|
||||
<h4 style="font-size:20px"><?= $prevPost['postTitle'] ?></h4>
|
||||
<h4 style="font-size:20px"><?= $prevPost['title'] ?></h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($nextPost)):
|
||||
$nextPost = $nextPost[0]; ?>
|
||||
<div class="blog-item col-xs-6 float-right" style="width:calc(50% - 5px);">
|
||||
<a href="<?= base_url('blog/post/' . $nextPost['postUrl']) ?>">
|
||||
<div class="float-right"
|
||||
style="background: url(<?= $nextPost['postImage'] ?>?w=150) center;background-size:cover;width:100px;height:100px;border-radius: 4px;margin:10px 0;"></div>
|
||||
<div class="pull-left" style="width: calc(100% - 110px);text-align:right;">
|
||||
<div class="col-6">
|
||||
<div class="blog-item following-post right">
|
||||
<a href="<?= base_url('blog/post/' . $nextPost['url']) ?>">
|
||||
<div class="following-post-image" style="background-image: url(<?= $nextPost['image'] ?>?w=150)"></div>
|
||||
<div style="width: calc(100% - 110px);text-align:right;display: inline-block;margin:10px 0;">
|
||||
<h5><?= lang('blog_next_article') ?>
|
||||
<i class="fa fa-arrow-right"></i>
|
||||
</h5>
|
||||
<h4 style="font-size:20px"><?= $nextPost['postTitle'] ?></h4>
|
||||
<h4 style="font-size:20px"><?= $nextPost['title'] ?></h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<!--/.blog-item-->
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
|
|
@ -3,35 +3,40 @@
|
|||
|
||||
use Coduo\PHPHumanizer\DateTimeHumanizer;
|
||||
|
||||
$postPublishDate = strtotime($postPublishDate);
|
||||
$initialRelease = strtotime($initialRelease);
|
||||
?>
|
||||
<div class="blog-item">
|
||||
<?php if ($postImage != NULL && $postImage != ''): ?>
|
||||
<a href="<?= base_url('blog/post/' . $postUrl) ?>">
|
||||
<div class="img-blog-entry" style="background-image: url('<?= $postImage ?>?w=750');"></div>
|
||||
<?php if ($image != NULL && $image != ''): ?>
|
||||
<a href="<?= base_url('blog/post/' . $url) ?>">
|
||||
<div class="img-blog-entry" style="background-image: url('<?= $image ?>?w=750');"></div>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<div class="blog-content">
|
||||
<div class="entry-meta">
|
||||
<span><a target="_blank" href="<?= base_url('user/' . $postAuthorUsername) ?>"><i class="fa fa-user"></i> <?= $postAuthorDisplayname ?></a></span>
|
||||
<span><i class="fa fa-calendar"></i> <?= DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$postPublishDate"), $_SESSION['site_lang']) ?></span>
|
||||
<span><a href="<?= base_url("blog/category/" . $categoryName) ?>"><i class="fa fa-folder-open"></i> <?= $categoryDisplayName ?></a></span>
|
||||
<span><a target="_blank" href="<?= base_url('user/' . $author['username']) ?>"><i class="fa fa-user"></i> <?= $author['displayname'] ?></a></span>
|
||||
<span><i class="fa fa-calendar"></i> <?= DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$initialRelease"), $_SESSION['site_lang']) ?></span>
|
||||
<span>
|
||||
<i class="fa fa-folder-open"></i>
|
||||
<?php foreach ($categories as $category) { ?>
|
||||
<a href="<?= base_url('blog/category/' . $category['name']) ?>"><?= $category['displayname'] ?></a>
|
||||
<?php } ?>
|
||||
</span>
|
||||
<span style="cursor: pointer;" data-toggle="tooltip" data-placement="left" title="Geschätzte Lesedauer">
|
||||
<i class="fa fa-clock"></i>
|
||||
<?= $this->BlogModel->getReadingTime($postID) ?> min
|
||||
<?= $this->BlogModel->getReadingTime($wordCount) ?> min
|
||||
</span>
|
||||
<span><a href="<?= base_url('blog/post/' . $postUrl . '#comments') ?>"><i class="fa fa-comment"></i> <?= $commentCount ?></a></span>
|
||||
<span><a href="<?= base_url('blog/post/' . $url . '#comments') ?>"><i class="fa fa-comment"></i> <?= $commentCount ?></a></span>
|
||||
<span><i class="fa fa-heart"></i> <?= $likeCount ?></span>
|
||||
</div>
|
||||
<a href="<?= base_url('blog/post/' . $postUrl) ?>">
|
||||
<h3><?= $postTitle ?></h3>
|
||||
<a href="<?= base_url('blog/post/' . $url) ?>">
|
||||
<h3><?= $title ?></h3>
|
||||
</a>
|
||||
<div class="row">
|
||||
<div class="col-md-9">
|
||||
<p><?= $postDesc ?></p>
|
||||
<p><?= $description ?></p>
|
||||
</div>
|
||||
<div class="col-md-3" style="padding:0">
|
||||
<a class="btn btn-primary outline" href="<?= base_url('blog/post/' . $postUrl) ?>"><?= lang('blog_read') ?>
|
||||
<a class="btn btn-primary outline" href="<?= base_url('blog/post/' . $url) ?>"><?= lang('blog_read') ?>
|
||||
<i class="fa fa-angle-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
?>
|
||||
|
||||
<div class="col-sm-8 col-sm-pull-4">
|
||||
<div class="col-lg-8 order-lg-first">
|
||||
<div class="blog">
|
||||
<ul class="page-selection pagination-lg blog-pagination"></ul>
|
||||
<div id="content">
|
||||
|
|
28
application/views/blog/report_modal.php
Normal file
28
application/views/blog/report_modal.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
?>
|
||||
|
||||
<form id="commentReportForm">
|
||||
<div class="form-group">
|
||||
<label for="commentReportReason">Grund für deine Meldung</label>
|
||||
<select name="reason" id="commentReportReason" class="form-control" required>
|
||||
<option value="">Bitte auswählen</option>
|
||||
<option value="hatespeech">Hasserfüllte Inhalte</option>
|
||||
<option value="racism">Rassistische, diskriminierende oder bewusst ausgrenzende Inhalte</option>
|
||||
<option value="terrorism">Unterstützung von Terrorismus</option>
|
||||
<option value="abuse">(Kindes-)Missbrauch</option>
|
||||
<option value="violence">Gewaltverherrlichende Inhalte</option>
|
||||
<option value="copyright">Verletzung meiner (Urheber-)Rechte</option>
|
||||
<option value="spam">Spam oder irreführende Inhalte</option>
|
||||
<option value="technical-issue">Technische Fehler</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="commentReportText">Weitere Anmerkungen (optional)</label>
|
||||
<textarea name="reportText" id="commentReportText" class="form-control"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary float-right">
|
||||
Absenden
|
||||
</button>
|
||||
</form>
|
||||
|
|
@ -119,7 +119,7 @@
|
|||
<?= lang('header_edit_profile') ?>
|
||||
</a>
|
||||
<?php if (get_instance()->hasPermission('dashboard.view')): ?>
|
||||
<a href="<? //= base_url('admin') ?>" class="dropdown-item">
|
||||
<a href="<?= base_url('admin') ?>" class="dropdown-item">
|
||||
<i class="fa fa-tachometer-alt"></i>
|
||||
<?= lang('header_admin_panel') ?>
|
||||
</a>
|
||||
|
|
|
@ -221,7 +221,7 @@
|
|||
<?php foreach ($currentlyActiveUsers as $activeUser):
|
||||
$loginTime = strtotime($activeUser['lastLogin']); ?>
|
||||
<div class="user-item">
|
||||
<img src="<?= $activeUser['profile_picture'] ?>?w=50" alt="" class="img-fluid rounded-circle">
|
||||
<img src="<?= $activeUser['profilePicture'] ?>?w=50" alt="" class="img-fluid rounded-circle">
|
||||
<div class="user-info">
|
||||
<a href="<?= base_url('user/' . $activeUser['username']) ?>">
|
||||
<h2><?= $activeUser['displayname'] ?></h2>
|
||||
|
@ -236,9 +236,9 @@
|
|||
<h2><?= lang('home_newest_users') ?></h2>
|
||||
<?php
|
||||
foreach ($newestUsers as $newestUser):
|
||||
$registeredDate = strtotime($newestUser['date_created']); ?>
|
||||
$registeredDate = strtotime($newestUser['dateCreated']); ?>
|
||||
<div class="user-item">
|
||||
<img src="<?= $newestUser['profile_picture'] ?>?w=50" alt="" class="img-fluid rounded-circle">
|
||||
<img src="<?= $newestUser['profilePicture'] ?>?w=50" alt="" class="img-fluid rounded-circle">
|
||||
<div class="user-info">
|
||||
<a href="<?= base_url('user/' . $newestUser['username']) ?>">
|
||||
<h2><?= $newestUser['displayname'] ?></h2>
|
||||
|
|
|
@ -18,7 +18,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
</div>
|
||||
|
||||
<div class="loading-msg">
|
||||
<i class="fa fa-cog fa-spin"></i>
|
||||
.loadingSpinner
|
||||
</div>
|
||||
|
||||
<div class="success-msg">
|
||||
|
|
|
@ -3,22 +3,22 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
?>
|
||||
<li class="blog-post-item">
|
||||
<div class="well comment-well">
|
||||
<a href="<?= base_url('blog/post/' . $post['postUrl']) ?>" target="_blank">
|
||||
<div class="entry-image" style="background-image:url(<?= $post['postImage'] ?>?w=150"></div>
|
||||
<a href="<?= base_url('blog/post/' . $post['url']) ?>" target="_blank">
|
||||
<div class="entry-image" style="background-image:url(<?= $post['image'] ?>?w=150"></div>
|
||||
</a>
|
||||
<div class="content">
|
||||
<h3>
|
||||
<a href="<?= base_url('blog/post/' . $post['postUrl']) ?>" target="_blank">
|
||||
<?= $post['postTitle'] ?>
|
||||
<a href="<?= base_url('blog/post/' . $post['url']) ?>" target="_blank">
|
||||
<?= $post['title'] ?>
|
||||
</a>
|
||||
|
||||
<small><?= lang('person_by') ?> <a
|
||||
href="<?= base_url('user/' . $data['username']) ?>"
|
||||
target="_blank"><?= $data['displayname'] ?></a>
|
||||
/ <?= date(lang('date'), strtotime($post['postPublishDate'])) ?>
|
||||
/ <?= date(lang('date'), strtotime($post['initialRelease'])) ?>
|
||||
</small>
|
||||
</h3>
|
||||
<p class="comment"><?= $post['postDesc'] ?></p>
|
||||
<p class="comment"><?= $post['description'] ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
|
@ -1,47 +1,64 @@
|
|||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
use Coduo\PHPHumanizer\DateTimeHumanizer;
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
use Coduo\PHPHumanizer\DateTimeHumanizer;
|
||||
?>
|
||||
<li>
|
||||
<div class="well comment-well">
|
||||
<div class="post-non-content">
|
||||
<a href="<?= base_url('user/' . $data['username']) ?>" target="_blank">
|
||||
<img src="<?= $data['profile_picture'] ?>?w=100" class="img-fluid">
|
||||
<li id="comment-<?= $c['ID'] ?>">
|
||||
<div class="user-post-item">
|
||||
<a href="<?= base_url('user/' . $data['username']) ?>" class="item-avatar-container">
|
||||
<img src="<?= $data['profilePicture'] ?>?w=100" alt="<?= $data['username'] ?>" class="item-avatar">
|
||||
</a>
|
||||
</div>
|
||||
<div class="content-container">
|
||||
<div class="content">
|
||||
<h3>
|
||||
<a href="<?= base_url('user/' . $data['username']) ?>" target="_blank">
|
||||
<h3 class="item-user">
|
||||
<a href="<?= base_url('user/' . $data['username']) ?>">
|
||||
<?= $data['displayname'] ?>
|
||||
</a>
|
||||
<small>
|
||||
</h3>
|
||||
<h4 class="item-meta">
|
||||
<?php
|
||||
$locale = isset($_SESSION['site_lang']) ? $_SESSION['site_lang'] : 'en';
|
||||
$date_created = strtotime($c['date_created']);
|
||||
echo DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$date_created"), $locale);
|
||||
$dateCreated = strtotime($c['date']);
|
||||
echo DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $locale);
|
||||
?>
|
||||
<?php if (isset($c['url'])): ?>
|
||||
unter
|
||||
<a href="<?= base_url('blog/post/' . $c['postUrl']) ?>">
|
||||
<?= $c['postTitle'] ?>
|
||||
<a href="<?= base_url('blog/post/' . $c['url']) ?>">
|
||||
<?= $c['title'] ?>
|
||||
</a>
|
||||
</small>
|
||||
</h3>
|
||||
<p class="comment"><?= $c['comment'] ?></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="action-btns">
|
||||
<a href="#" class="action-btn" data-toggle="tooltip" data-placement="top" title="Antworten">
|
||||
<?php endif; ?>
|
||||
</h4>
|
||||
<p class="item-content">
|
||||
<?= $c['comment'] ?>
|
||||
</p>
|
||||
<?php if(!isset($hideActionBtns) || $hideActionBtns == false): ?>
|
||||
<div class="item-actions">
|
||||
<a href="#" class="item-btn" data-toggle="tooltip" data-placement="top" title="Antworten">
|
||||
<i class="far fa-comment"></i>
|
||||
<span>0</span>
|
||||
</a>
|
||||
<a href="#" class="action-btn" data-toggle="tooltip" data-placement="top" title="Gefällt mir">
|
||||
<a href="#" class="item-btn" data-toggle="tooltip" data-placement="top" title="Gefällt mir">
|
||||
<i class="far fa-heart"></i>
|
||||
<span>0</span>
|
||||
</a>
|
||||
<a href="#" class="action-btn" data-toggle="tooltip" data-placement="top" title="Mehr Optionen">
|
||||
<div class="item-btn dropdown">
|
||||
<a href="#" class="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
<a onclick="openCommentReportModal(<?= $c['ID'] ?>)" class="dropdown-item">
|
||||
<i class="fa fa-flag"></i>
|
||||
Kommentar melden
|
||||
</a>
|
||||
|
||||
<?php if(isset($_SESSION['user']) && $_SESSION['user']['username'] == $data['username']): ?>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a onclick="openCommentDeleteModal(<?= $c['ID'] ?>)" class="dropdown-item text-danger">
|
||||
<i class="fa fa-trash"></i>
|
||||
Kommentar löschen
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</li>
|
|
@ -15,7 +15,7 @@
|
|||
<button type="reset" class="btn btn-sm btn-primary round float-right" data-dismiss="modal">
|
||||
Nein, Post behalten
|
||||
</button>
|
||||
<button type="submit" class="btn btn-sm btn-red outline round float-right" onclick="deletePost('<?= $post['uuid'] ?>')">
|
||||
<button type="submit" class="btn btn-sm btn-red outline round float-right" onclick="deletePost('<?= $post['hashID'] ?>')">
|
||||
Ja, endgültig löschen
|
||||
</button>
|
||||
</form>
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
use Coduo\PHPHumanizer\DateTimeHumanizer;
|
||||
|
||||
?>
|
||||
<li class="post-item is-reply% my-2" data-uuid="<?= $uuid ?>" data-username="<?= $username ?>">
|
||||
<li class="post-item is-reply% my-2" data-uuid="<?= $hashID ?>" data-username="<?= $username ?>">
|
||||
<div class="comment-well" <?= isset($hideShadows) && $hideShadows ? 'style="box-shadow: none;padding:0"' : '' ?>>
|
||||
<div class="post-non-content">
|
||||
<a href="<?= base_url('user/' . $username) ?>" target="_blank">
|
||||
<img src="<?= $profile_picture ?>?w=100" class="img-fluid">
|
||||
<img src="<?= $profilePicture ?>?w=100" class="img-fluid">
|
||||
</a>
|
||||
</div>
|
||||
<div class="content-container">
|
||||
|
@ -18,13 +18,13 @@
|
|||
<?= $displayname ?>
|
||||
</a>
|
||||
<small><?php
|
||||
$date_created = strtotime($date);
|
||||
echo DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$date_created"), $_SESSION['site_lang']); ?></small>
|
||||
<?php if ($reply_to != NULL): ?>
|
||||
$dateCreated = strtotime($date);
|
||||
echo DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']); ?></small>
|
||||
<?php if ($replyToPostID != NULL): ?>
|
||||
<small>
|
||||
<i class="fa fa-reply"></i>
|
||||
<?= lang('post_reply_to') ?>
|
||||
<a href="#" onclick="showFullPost('<?= $replyToPost['uuid'] ?>', '<?= $replyToPost['username'] ?>')">@<?= $replyToPost['displayname'] ?></a>
|
||||
<a href="#" onclick="showFullPost('<?= $replyToPost['hashID'] ?>', '<?= $replyToPost['username'] ?>')">@<?= $replyToPost['displayname'] ?></a>
|
||||
</small>
|
||||
<?php endif; ?>
|
||||
</h3>
|
||||
|
@ -80,31 +80,31 @@
|
|||
</div>
|
||||
<?php if (!isset($hideActionBtns) || !$hideActionBtns): ?>
|
||||
<div class="action-btns">
|
||||
<a href="#" data-uuid="<?= $uuid ?>" class="action-btn reply-button" data-toggle="tooltip" data-placement="top" title="<?= lang('post_reply') ?>">
|
||||
<a href="#" data-uuid="<?= $hashID ?>" class="action-btn reply-button" data-toggle="tooltip" data-placement="top" title="<?= lang('post_reply') ?>">
|
||||
<i class="far fa-comment"></i>
|
||||
<span><?= $replyCount ?></span>
|
||||
</a>
|
||||
<a href="#" data-uuid="<?= $uuid ?>" class="action-btn like-button <?= isset($userHasLiked) && $userHasLiked ? 'active' : '' ?>" data-toggle="tooltip" data-placement="top" title="<?= lang('post_like') ?>">
|
||||
<a href="#" data-uuid="<?= $hashID ?>" class="action-btn like-button <?= isset($userHasLiked) && $userHasLiked ? 'active' : '' ?>" data-toggle="tooltip" data-placement="top" title="<?= lang('post_like') ?>">
|
||||
<i class="<?= isset($userHasLiked) && $userHasLiked ? 'fas' : 'far' ?> fa-heart"></i>
|
||||
<span><?= $likeCount ?></span>
|
||||
</a>
|
||||
<div class="action-btn dropdown">
|
||||
<a href="#" class="action-btn more-options-button" id="postMoreOptionsButton<?= $uuid ?>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<a href="#" class="action-btn more-options-button" id="postMoreOptionsButton<?= $hashID ?>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu" aria-labelledby="postMoreOptionsButton<?= $uuid ?>">
|
||||
<a href="#" onclick="copyToClipboard('<?= base_url('user/' . $username . '/post/' . $uuid) ?>')" class="dropdown-item">
|
||||
<div class="dropdown-menu" aria-labelledby="postMoreOptionsButton<?= $hashID ?>">
|
||||
<a href="#" onclick="copyToClipboard('<?= base_url('user/' . $username . '/post/' . $hashID) ?>')" class="dropdown-item">
|
||||
<i class="fa fa-copy"></i>
|
||||
<?= lang('post_copy_link') ?>
|
||||
</a>
|
||||
<a href="#" onclick="openPostReportModal('<?= $uuid ?>')" class="dropdown-item">
|
||||
<a href="#" onclick="openPostReportModal('<?= $hashID ?>')" class="dropdown-item">
|
||||
<i class="fa fa-flag"></i>
|
||||
<?= lang('post_report') ?>
|
||||
</a>
|
||||
<?php if (isset($_SESSION['user']) && $_SESSION['user']['username'] == $username): ?>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" onclick="openDeletePostModal('<?= $uuid ?>')" class="dropdown-item text-danger">
|
||||
<a href="#" onclick="openDeletePostModal('<?= $hashID ?>')" class="dropdown-item text-danger">
|
||||
<i class="fa fa-trash"></i>
|
||||
<?= lang('post_delete') ?>
|
||||
</a>
|
||||
|
|
|
@ -5,21 +5,21 @@
|
|||
|
||||
?>
|
||||
|
||||
<?= $message; ?>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<?php if (isset($post['replyToPost'])): ?>
|
||||
<div class="row justify-content-center">
|
||||
<ul class="comment-list">
|
||||
<?php
|
||||
$post['replyToPost']['hideShadows'] = true;
|
||||
$this->load->view('network/posts/post_item', $post['replyToPost'])
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="row">
|
||||
<div class="post-non-content">
|
||||
<a href="<?= base_url('user/' . $post['username']) ?>">
|
||||
<img src="<?= $post['profile_picture'] ?>?w=75" alt="" class="img-fluid rounded-circle">
|
||||
<img src="<?= $post['profilePicture'] ?>?w=75" alt="" class="img-fluid rounded-circle">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
@ -29,8 +29,8 @@
|
|||
<?= $post['displayname'] ?>
|
||||
</a>
|
||||
<?php
|
||||
$date_created = strtotime($post['date']);
|
||||
$time_passed = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$date_created"), $_SESSION['site_lang']);
|
||||
$dateCreated = strtotime($post['date']);
|
||||
$time_passed = DateTimeHumanizer::difference(new \DateTime(), new \DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
||||
?>
|
||||
<small>
|
||||
<?= $time_passed ?>
|
||||
|
@ -51,20 +51,20 @@
|
|||
<?php endif; ?>
|
||||
|
||||
<div class="action-btns">
|
||||
<a href="#" data-uuid="<?= $post['uuid'] ?>" class="action-btn reply-button" data-toggle="tooltip" data-placement="top" title="Antworten">
|
||||
<a href="#" data-uuid="<?= $post['hashID'] ?>" class="action-btn reply-button" data-toggle="tooltip" data-placement="top" title="Antworten">
|
||||
<span><i class="far fa-comment"></i></span>
|
||||
<?= $post['replyCount'] ?>
|
||||
</a>
|
||||
<a href="#" data-uuid="<?= $post['uuid'] ?>" class="action-btn like-button <?= isset($post['userHasLiked']) && $post['userHasLiked'] ? 'active' : '' ?>" data-toggle="tooltip" data-placement="top" title="Gefällt mir">
|
||||
<a href="#" data-uuid="<?= $post['hashID'] ?>" class="action-btn like-button <?= isset($post['userHasLiked']) && $post['userHasLiked'] ? 'active' : '' ?>" data-toggle="tooltip" data-placement="top" title="Gefällt mir">
|
||||
<i class="<?= isset($post['userHasLiked']) && $post['userHasLiked'] ? 'fas' : 'far' ?> fa-heart"></i>
|
||||
<span><?= $post['likeCount'] ?></span>
|
||||
</a>
|
||||
<div class="dropdown d-inline-block">
|
||||
<a href="#" class="action-btn more-options-button" id="postMoreOptionsButton<?= $post['uuid'] ?>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<a href="#" class="action-btn more-options-button" id="postMoreOptionsButton<?= $post['hashID'] ?>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu" aria-labelledby="postMoreOptionsButton<?= $post['uuid'] ?>">
|
||||
<div class="dropdown-menu" aria-labelledby="postMoreOptionsButton<?= $post['hashID'] ?>">
|
||||
<a href="#" class="dropdown-item">
|
||||
<i class="fa fa-copy"></i>
|
||||
Link zum Post kopieren
|
||||
|
|
|
@ -49,8 +49,8 @@
|
|||
<form method="post" enctype="multipart/form-data">
|
||||
<!-- Username -->
|
||||
<div class="form-group">
|
||||
<label for="username">Nutzername</label>
|
||||
<input name="username" id="username" class="form-control"
|
||||
<label for="displayname">Nutzername</label>
|
||||
<input name="displayname" id="displayname" class="form-control"
|
||||
value="<?= isset($data['displayname']) ? $data['displayname'] : '' ?>">
|
||||
<span class="error-message" id="usernameErrorLength">
|
||||
<b>Dein Nutzername ist zu kurz!</b> Er muss mindestens 4 Zeichen lang sein
|
||||
|
@ -1093,26 +1093,24 @@
|
|||
</div>
|
||||
<!-- Bio -->
|
||||
<div class="form-group">
|
||||
<label for="biography">Profilbeschreibung/Biographie</label>
|
||||
<textarea class="form-control" name="biography" id="biography">
|
||||
<?= isset($data['about']) ? $data['about'] : "" ?>
|
||||
</textarea>
|
||||
<label for="about">Profilbeschreibung/Biographie</label>
|
||||
<textarea class="form-control" name="about" id="about"><?= isset($data['about']) ? $data['about'] : "" ?></textarea>
|
||||
</div>
|
||||
<!-- Avatar -->
|
||||
<div class="form-group">
|
||||
<label for="avatar">Avatar</label>
|
||||
<?php if (isset($data['profile_picture']) || $data['profile_picture'] != ""): ?>
|
||||
<?php if (isset($data['profilePicture']) || $data['profilePicture'] != ""): ?>
|
||||
<img class="img-fluid img-thumbnail picture-preview d-block"
|
||||
src="<?= $data['profile_picture'] ?>">
|
||||
src="<?= $data['profilePicture'] ?>">
|
||||
<?php endif; ?>
|
||||
<input type="file" name="avatar" id="avatar">
|
||||
</div>
|
||||
<!-- Header -->
|
||||
<div class="form-group">
|
||||
<label for="header">Header</label>
|
||||
<?php if (isset($data['header_image']) || $data['header_image'] != ""): ?>
|
||||
<?php if (isset($data['headerImage']) || $data['headerImage'] != ""): ?>
|
||||
<img class="img-fluid img-thumbnail picture-preview d-block"
|
||||
src="<?= $data['header_image'] ?>">
|
||||
src="<?= $data['headerImage'] ?>">
|
||||
<?php endif; ?>
|
||||
<input type="file" name="header" id="header">
|
||||
</div>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
?>
|
||||
<section id="profile-header" class="container-fluid" data-type="background" data-speed="2.14"
|
||||
style="background-image: url('<?= $data['header_image'] ?>?w=1920')">
|
||||
style="background-image: url('<?= $data['headerImage'] ?>?w=1920')">
|
||||
</section>
|
||||
<div id="scroll-trigger"></div>
|
||||
<section id="profile-sub-header" data-type="foreground" data-speed="10">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-3 col-sm-2 col-md-4 col-lg-4 profile-card profile-picture-container">
|
||||
<img src="<?= $data['profile_picture'] ?>?w=300" class="img-fluid rounded-circle profile-picture">
|
||||
<img src="<?= $data['profilePicture'] ?>?w=300" class="img-fluid rounded-circle profile-picture">
|
||||
<?php if (isset($_SESSION['user']) && $_SESSION['user']['username'] == $data['username']): ?>
|
||||
<div class="avatar-upload-overlay">
|
||||
<i class="fa fa-upload"></i>
|
||||
|
|
|
@ -7,8 +7,8 @@ $dateFollowing = strtotime($data['followedSince']);
|
|||
?>
|
||||
<li>
|
||||
<a href="<?= base_url('user/' . $data['username']) ?>">
|
||||
<div style="background-image: url(<?= $data['header_image'] ?>)" class="header-image"></div>
|
||||
<img src="<?= $data['profile_picture'] ?>" alt="" class="img-fluid rounded-circle profile-picture">
|
||||
<div style="background-image: url(<?= $data['headerImage'] ?>)" class="header-image"></div>
|
||||
<img src="<?= $data['profilePicture'] ?>" alt="" class="img-fluid rounded-circle profile-picture">
|
||||
<div class="user-card-content">
|
||||
<h3><?= $data['displayname'] ?></h3>
|
||||
<small><?= $data['followerCount'] ?> Follower | folgt
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
<?php endif; ?>
|
||||
<div class="card">
|
||||
<a href="<?= base_url('user/' . $username) ?>">
|
||||
<img src="<?= $header_image ?>?w=350" class="card-img-top" alt="Header Image">
|
||||
<img src="<?= $headerImage ?>?w=350" class="card-img-top" alt="Header Image">
|
||||
</a>
|
||||
<a href="<?= base_url('user/' . $username) ?>">
|
||||
<img src="<?= $profile_picture ?>?w=100" class="img-fluid rounded-circle card-profile-picture" alt="Profile Picture">
|
||||
<img src="<?= $profilePicture ?>?w=100" class="img-fluid rounded-circle card-profile-picture" alt="Profile Picture">
|
||||
</a>
|
||||
<div class="card-body">
|
||||
<a href="<?= base_url('user/' . $username) ?>">
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
?>
|
||||
|
||||
<li class="col-4 p-2 <?= strtolower($post_plattform) ?>">
|
||||
<li class="col-4 p-2 <?= strtolower($origin) ?>">
|
||||
<div class="card">
|
||||
<a href="<?= $post_url ?>">
|
||||
<div class="card-header bg-<?= strtolower($post_plattform) ?> text-white">
|
||||
<i class="fab fa-<?= strtolower($post_plattform) ?>"></i>
|
||||
<?= $post_plattform ?>
|
||||
<a href="<?= $url ?>">
|
||||
<div class="card-header bg-<?= strtolower($origin) ?> text-white">
|
||||
<i class="fab fa-<?= strtolower($origin) ?>"></i>
|
||||
<?= $origin ?>
|
||||
</div>
|
||||
<?php if (!empty($post_img_source)): ?>
|
||||
<div style="height: 200px; background: url(<?= $post_img_source ?>) center; background-size: cover;">
|
||||
<?php if (!empty($imageSource)): ?>
|
||||
<div style="height: 200px; background: url(<?= $imageSource ?>) center; background-size: cover;">
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<div class="card-body">
|
||||
<a href="<?= $post_url ?>">
|
||||
<a href="<?= $url ?>">
|
||||
<p class="card-text">
|
||||
<?= $post_content ?>
|
||||
<?= $content ?>
|
||||
</p>
|
||||
</a>
|
||||
<p class="card-text">
|
||||
<small class="text-muted">
|
||||
<i class="far fa-clock"></i>
|
||||
<?= $post_date ?>
|
||||
<?= $date ?>
|
||||
<br>
|
||||
<i class="far fa-user"></i>
|
||||
<?= lang('person_by') ?>
|
||||
<a href="<?= $post_author_url ?>" target="_blank">
|
||||
<?= $post_author ?>
|
||||
<a href="<?= $authorUrl ?>" target="_blank">
|
||||
<?= $authorName ?>
|
||||
</a>
|
||||
</small>
|
||||
</p>
|
||||
|
|
|
@ -39,30 +39,11 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
<?= lang('projects_all'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php
|
||||
$categoryList = [];
|
||||
$categoryNames = [];
|
||||
$siteLang = isset($_SESSION['site_lang']) ? $_SESSION['site_lang'] : 'en';
|
||||
$languageName = 'displayname';
|
||||
if($siteLang == 'en') {
|
||||
$languageName = 'displaynameEnglish';
|
||||
} elseif($siteLang == 'fr') {
|
||||
$languageName = 'displaynameFrench';
|
||||
}
|
||||
|
||||
foreach($collections as $item) {
|
||||
$categoryName = $item[$languageName];
|
||||
$categoryList[] = $categoryName;
|
||||
$categoryNames[$categoryName] = $item['collection'];
|
||||
}
|
||||
|
||||
sort($categoryList);
|
||||
?>
|
||||
|
||||
<?php foreach($categoryList as $category): ?>
|
||||
<?php foreach($categories as $category): ?>
|
||||
<li>
|
||||
<a href="#" class="btn btn-default btn-sm <?= $album == $categoryNames[$category] ? 'active' : '' ?>" data-filter=".<?= $categoryNames[$category] ?>">
|
||||
<?= $category ?>
|
||||
<a href="#" class="btn btn-default btn-sm <?= $album == $category['name'] ? 'active' : '' ?>" data-filter=".<?= $category['name'] ?>">
|
||||
<?= $category['displayname'] ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
|
|
|
@ -5,26 +5,26 @@
|
|||
$categoryUrls = [];
|
||||
$lang = isset($_SESSION['site_lang']) ? $_SESSION['site_lang'] : 'de';
|
||||
|
||||
foreach ($pCategories as $pCategory) {
|
||||
if ($lang == 'fr' && $pCategory['displaynameFrench'] != NULL) {
|
||||
$pCategoriesList[] = $pCategory['displaynameFrench'];
|
||||
$categoryUrls[$pCategory['displaynameFrench']] = $pCategory['collection'];
|
||||
} else if ($lang == 'en' && $pCategory['displaynameEnglish'] != NULL) {
|
||||
$pCategoriesList[] = $pCategory['displaynameEnglish'];
|
||||
$categoryUrls[$pCategory['displaynameEnglish']] = $pCategory['collection'];
|
||||
} else {
|
||||
$pCategoriesList[] = $pCategory['displayname'];
|
||||
$categoryUrls[$pCategory['displayname']] = $pCategory['collection'];
|
||||
}
|
||||
}
|
||||
sort($pCategoriesList);
|
||||
|
||||
$pCategoriesListUrls = [];
|
||||
foreach ($pCategoriesList as $pCategory) {
|
||||
$pCategoriesListUrls[] = '<a href="' . base_url('projects/' . $categoryUrls[$pCategory]) . '">' . $pCategory . '</a>';
|
||||
}
|
||||
|
||||
$pCategoriesListUrls = implode(', ', $pCategoriesListUrls);
|
||||
// foreach ($pCategories as $pCategory) {
|
||||
// if ($lang == 'fr' && $pCategory['displaynameFrench'] != NULL) {
|
||||
// $pCategoriesList[] = $pCategory['displaynameFrench'];
|
||||
// $categoryUrls[$pCategory['displaynameFrench']] = $pCategory['collection'];
|
||||
// } else if ($lang == 'en' && $pCategory['displaynameEnglish'] != NULL) {
|
||||
// $pCategoriesList[] = $pCategory['displaynameEnglish'];
|
||||
// $categoryUrls[$pCategory['displaynameEnglish']] = $pCategory['collection'];
|
||||
// } else {
|
||||
// $pCategoriesList[] = $pCategory['displayname'];
|
||||
// $categoryUrls[$pCategory['displayname']] = $pCategory['collection'];
|
||||
// }
|
||||
// }
|
||||
// sort($pCategoriesList);
|
||||
//
|
||||
// $pCategoriesListUrls = [];
|
||||
// foreach ($pCategoriesList as $pCategory) {
|
||||
// $pCategoriesListUrls[] = '<a href="' . base_url('projects/' . $categoryUrls[$pCategory]) . '">' . $pCategory . '</a>';
|
||||
// }
|
||||
//
|
||||
// $pCategoriesListUrls = implode(', ', $pCategoriesListUrls);
|
||||
?>
|
||||
<section class="container">
|
||||
<div class="vote-container" data-id="<?= $data['ID'] ?>">
|
||||
|
@ -89,7 +89,13 @@
|
|||
</div>
|
||||
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12">
|
||||
<span data-toggle="tooltip" data-placement="top" title="Kategorien">
|
||||
<i class="fa fa-folder-open"></i> <?= $pCategoriesListUrls ?>
|
||||
<i class="fa fa-folder-open"></i>
|
||||
<?php foreach ($pCategories as $i => $category): ?>
|
||||
<?= $i != 0 ? ' | ' : '' ?>
|
||||
<a href="<?= base_url('projects/' . $category['name']) ?>">
|
||||
<?= $category['displayname'] ?>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</span>
|
||||
<span data-toggle="tooltip" data-placement="top"
|
||||
title="Datum: <?= strftime("%d. %B %Y", strtotime($data['datetime'])) ?>"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
$categories = $this->projectsModel->getEntryCategories($ID);
|
||||
$categoriesClasses = "";
|
||||
foreach ($categories as $category) {
|
||||
$categoriesClasses .= $category['collection'] . " ";
|
||||
$categoriesClasses .= $category['name'] . " ";
|
||||
}
|
||||
if ($isDownloadable) {
|
||||
$categoriesClasses .= 'downloadable ';
|
||||
|
|
|
@ -169,7 +169,7 @@
|
|||
.widget.filled-background .media {
|
||||
margin-top: 0;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid rgba(0,0,0,.3);
|
||||
border-bottom: 1px solid rgba(0, 0, 0, .3);
|
||||
transition: transform .2s;
|
||||
}
|
||||
|
||||
|
@ -195,3 +195,31 @@
|
|||
right: 30%;
|
||||
}
|
||||
|
||||
.following-post {
|
||||
display: block;
|
||||
height: 108px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.following-post .following-post-image {
|
||||
float: left;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
width: 100px;
|
||||
height: 100%;
|
||||
border-radius: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.following-post.right .following-post-image {
|
||||
float: right;
|
||||
margin-right: 0;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.following-post h4 {
|
||||
max-height: 48px;
|
||||
overflow: hidden;
|
||||
-ms-text-overflow: ellipsis;
|
||||
text-overflow: ellipsis;
|
||||
}
|
|
@ -8,6 +8,15 @@ body {
|
|||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: Roboto, Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: "Roboto Black", Helvetica, "Arial Black", Arial, sans-serif;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.left_col {
|
||||
background: #444;
|
||||
}
|
||||
|
|
|
@ -1407,6 +1407,87 @@ ul#downloadSlider a.active .overlay {
|
|||
width: 100%;
|
||||
}
|
||||
|
||||
.user-post-item {
|
||||
display: grid;
|
||||
grid-template-areas: "logo username metadata" "logo content content" "logo actions actions";
|
||||
grid-template-rows: 25px auto 35px;
|
||||
grid-template-columns: 90px auto 1fr;
|
||||
grid-gap: 10px 5px;
|
||||
|
||||
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12);
|
||||
background-color: rgb(255, 255, 255);
|
||||
padding: 3px 10px;
|
||||
border-radius: 10px;
|
||||
/*min-height: 100px;*/
|
||||
}
|
||||
|
||||
.user-post-item:hover {
|
||||
background-color: rgb(245, 245, 245)
|
||||
}
|
||||
|
||||
.user-post-item .item-avatar-container {
|
||||
grid-area: logo;
|
||||
padding: 10px 0 10px 5px;
|
||||
}
|
||||
|
||||
.user-post-item .item-avatar {
|
||||
max-width: 100%;
|
||||
height: 75px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.user-post-item .item-avatar-container .fa {
|
||||
margin-top: 5px;
|
||||
padding: 15px;
|
||||
font-size: 35px;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.user-post-item .item-avatar-container .fa.fa-check {
|
||||
background-color: #08DD73;
|
||||
}
|
||||
|
||||
.user-post-item .item-user {
|
||||
grid-area: username;
|
||||
margin: 5px 0 0 !important;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.user-post-item .item-meta {
|
||||
grid-area: metadata;
|
||||
margin: 9px 10px 0 0;
|
||||
color: rgb(97, 97, 97);
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.user-post-item .item-content {
|
||||
grid-area: content;
|
||||
font-size: 18px;
|
||||
color: #777;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.user-post-item .item-actions {
|
||||
grid-area: actions;
|
||||
height: 35px;
|
||||
}
|
||||
|
||||
.user-post-item .item-actions .item-btn {
|
||||
display: inline-block;
|
||||
margin: 0 5px;
|
||||
padding: 5px 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.user-post-item .item-actions .item-btn:first-child {
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
.like-button-floating {
|
||||
position: fixed;
|
||||
-webkit-transform: translateX(-100%);
|
||||
|
|
|
@ -63,19 +63,18 @@ $(document).on("keydown", function (e) {
|
|||
// });
|
||||
// });
|
||||
|
||||
$('#postTitle').bind('click', function () {
|
||||
$('#postTitle')
|
||||
.bind('click', function () {
|
||||
$(this).attr('contentEditable', true);
|
||||
}).blur(
|
||||
}).blur(
|
||||
function () {
|
||||
$(this).attr('contentEditable', false);
|
||||
});
|
||||
|
||||
$('#postTitle').on('keyup', function () {
|
||||
}).on('keyup', function () {
|
||||
if (changeUrl) {
|
||||
var title = prepareString($('#postTitle').text());
|
||||
$('#postUrl').val(encodeURI(title));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#postDescription').bind('click', function () {
|
||||
$(this).attr('contentEditable', true);
|
||||
|
@ -89,7 +88,7 @@ $('#postCategory').bind('change', function () {
|
|||
});
|
||||
|
||||
function switchCategory() {
|
||||
if ($('#postCategory').val() === 'new-category') {
|
||||
if ($('#postCategory').val().includes('new-category')) {
|
||||
$('#new-category').fadeIn(250);
|
||||
} else {
|
||||
$('#new-category').fadeOut(250);
|
||||
|
@ -236,13 +235,8 @@ $(function () {
|
|||
getPostTags();
|
||||
// getTranslations();
|
||||
|
||||
if ($('#contentID').val() !== '-1') {
|
||||
getContentData();
|
||||
}
|
||||
|
||||
if ($('#translationID').val() !== '-1') {
|
||||
getTranslationData();
|
||||
}
|
||||
if ($('#versionID').val() !== '-1')
|
||||
getVersionData();
|
||||
}
|
||||
|
||||
$('#postPublishDate').datetimepicker({
|
||||
|
@ -291,66 +285,56 @@ function getPostData() {
|
|||
console.log(result);
|
||||
|
||||
if (result.status === 'success') {
|
||||
$('#postUrl').val(result.postData.postUrl);
|
||||
$('#postCategory').val(result.postData.postCategoryID);
|
||||
const categoryIDs = result.postData.categories.map(item => item.ID);
|
||||
$('#postCategory').val(categoryIDs);
|
||||
switchCategory();
|
||||
|
||||
$('#postPublishDate').data('DateTimePicker').setValue(convertDate(result.postData.postPublishDate));
|
||||
// $('#postPublishDate').val(convertDate(result.postData.postPublishDate));
|
||||
$('#uploadedImage').val(result.postData.postImage);
|
||||
$('.img-container').css('background-image', 'url(' + result.postData.postImage + ')');
|
||||
$('#uploadedImage').val(result.postData.image);
|
||||
$('.img-container').css('background-image', 'url(' + result.postData.image + ')');
|
||||
$('#postPublishDate').data('DateTimePicker').setValue(convertDate(result.postData.initialRelease));
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (result.postData.postState === "1") {
|
||||
$('#postUrl').attr('disabled', '');
|
||||
changeUrl = false;
|
||||
$('#postUrl').keydown((e) => {
|
||||
e.preventDefault();
|
||||
|
||||
function getVersionData() {
|
||||
const postID = $('#postID').val();
|
||||
const versionID = $('#versionID').val();
|
||||
const lang = $('#postLanguage').val();
|
||||
|
||||
$.ajax({
|
||||
url: '/admin/blog/getVersion',
|
||||
method: 'post',
|
||||
data: {
|
||||
postID, versionID, lang,
|
||||
},
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
if (result.status === 'success') {
|
||||
$('#postTitle').text(result.title);
|
||||
$('#postDescription').text(result.description);
|
||||
|
||||
console.log(tinyMCE.get('postContent'));
|
||||
if (typeof (tinymce.activeEditor.contentDocument) !== 'undefined') {
|
||||
tinyMCE.on('addeditor', (e) => {
|
||||
const editor = e.editor;
|
||||
if (editor.id === 'postContent') {
|
||||
editor.setContent(result.content);
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// tinyMCE.activeEditor.setContent(result.content);
|
||||
$('#postContent').val(result.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function getContentData() {
|
||||
const postID = $('#postID').val();
|
||||
const contentID = $('#contentID').val();
|
||||
const lang = $('#postLanguage').val();
|
||||
$.ajax({
|
||||
url: '/admin/blog/getContent',
|
||||
method: 'post',
|
||||
data: {
|
||||
postID, contentID, lang
|
||||
$('#postUrl').val(result.url);
|
||||
$('#versionID').val('-1');
|
||||
}
|
||||
},
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
if (result.status === 'success') {
|
||||
quill.clipboard.dangerouslyPasteHTML(result.contentData.content);
|
||||
// $('#contentID').val('-1');
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function getTranslationData() {
|
||||
const postID = $('#postID').val();
|
||||
const translationID = $('#translationID').val();
|
||||
const lang = $('#postLanguage').val();
|
||||
$.ajax({
|
||||
url: '/admin/blog/getTranslationData',
|
||||
method: 'post',
|
||||
data: {
|
||||
postID, translationID, lang
|
||||
},
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
|
||||
if (result.status === 'success') {
|
||||
$('#postTitle').text(result.translationData.postTitle);
|
||||
$('#postDescription').text(result.translationData.postDesc);
|
||||
}
|
||||
}
|
||||
})
|
||||
error: console.log
|
||||
});
|
||||
}
|
||||
|
||||
function getPostTags() {
|
||||
|
@ -377,54 +361,57 @@ $(function () {
|
|||
$('#switchLanguages > li').click(function () {
|
||||
const currentPostTitle = $('#postTitle').text();
|
||||
const currentPostDescription = $('#postDescription').text();
|
||||
const currentPostContent = quill.getContents();
|
||||
const currentContentID = $('#contentID').val();
|
||||
const currentTranslationID = $('#translationID').val();
|
||||
// const currentPostContent = quill.getContents();
|
||||
const currentPostContent = tinymce.get('postContent').getContent();
|
||||
const currentPostUrl = $('#postUrl').val();
|
||||
const currentVersionID = $('#versionID').val();
|
||||
|
||||
$('#switchLanguages > li.active').data('title', currentPostTitle)
|
||||
$('#switchLanguages > li.active')
|
||||
.data('title', currentPostTitle)
|
||||
.data('description', currentPostDescription)
|
||||
.data('content', currentPostContent)
|
||||
.data('contentid', currentContentID)
|
||||
.data('translationid', currentTranslationID)
|
||||
.data('url', currentPostUrl)
|
||||
.data('versionid', currentVersionID)
|
||||
.removeClass('active');
|
||||
|
||||
console.log($(this));
|
||||
|
||||
const versionID = $(this).data('versionid');
|
||||
|
||||
$('#versionID').val(versionID);
|
||||
$('#postLanguage').val($(this).data('lang'));
|
||||
|
||||
if ($(this).data('title')) {
|
||||
const postTitle = $(this).data('title');
|
||||
const postDescription = $(this).data('description');
|
||||
const postContent = $(this).data('content');
|
||||
const postUrl = $(this).data('url');
|
||||
|
||||
$('#postTitle').text(postTitle);
|
||||
$('#postDescription').text(postDescription);
|
||||
quill.setContents(postContent);
|
||||
// quill.setContents(postContent);
|
||||
tinymce.get('postContent').setContent(postContent);
|
||||
$('#postUrl').val(postUrl);
|
||||
} else {
|
||||
getVersionData();
|
||||
}
|
||||
|
||||
const contentID = $(this).data('contentid');
|
||||
const translationID = $(this).data('translationid');
|
||||
|
||||
$('#contentID').val(contentID);
|
||||
$('#translationID').val(translationID);
|
||||
$('#postLanguage').val($(this).data('lang'));
|
||||
|
||||
getTranslationData();
|
||||
getContentData();
|
||||
|
||||
$(this).addClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
function sendPost(executionFinished) {
|
||||
const postID = $('#postID').val(),
|
||||
contentID = $('#contentID').val(),
|
||||
translationID = $('#translationID').val(),
|
||||
versionID = $('#versionID').val(),
|
||||
postImage = $('#uploadedImage').val(),
|
||||
postTitle = $('#postTitle').text(),
|
||||
postDescription = $('#postDescription').text(),
|
||||
postContent = $('.ql-editor').html(),
|
||||
postContent = tinyMCE.activeEditor.getContent(),
|
||||
postPublishDate = $('#postPublishDate').val(),
|
||||
postUrl = $('#postUrl').val(),
|
||||
postCategory = $('#postCategory').val(),
|
||||
postCategories = $('#postCategory').val(),
|
||||
newCategoryName = $('#cat-name').val(),
|
||||
newCategoryDisplayName = $('#cat-dname').val(),
|
||||
postLanguage = $('#postLanguage').val(),
|
||||
postTags = $('#postTags').tagsinput('items');
|
||||
|
||||
|
@ -433,29 +420,47 @@ function sendPost(executionFinished) {
|
|||
method: 'post',
|
||||
data: {
|
||||
postID,
|
||||
contentID,
|
||||
translationID,
|
||||
versionID,
|
||||
postImage,
|
||||
postTitle,
|
||||
postDescription,
|
||||
postContent,
|
||||
postPublishDate,
|
||||
postUrl,
|
||||
postCategory,
|
||||
postCategories,
|
||||
newCategoryName,
|
||||
newCategoryDisplayName,
|
||||
postLanguage,
|
||||
postTags
|
||||
},
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
|
||||
const newCategory = postCategories.includes('new-category');
|
||||
|
||||
if (result.success) {
|
||||
$('#postID').val(result.postID);
|
||||
$('#contentID').val(result.contentID);
|
||||
$('#switchLanguages > li.active').data('contentid', result.contentID);
|
||||
$('#translationID').val(result.translationID);
|
||||
$('#switchLanguages > li.active').data('translationid', result.translationID);
|
||||
$('#versionID').val(result.versionID);
|
||||
$('#switchLanguages > li.active').data('versionid', result.versionID);
|
||||
|
||||
$('.snackbar-container').append(`<div class="alert alert-success snackbar" role="alert">${result.message}</div>`);
|
||||
|
||||
if(newCategory) {
|
||||
if(!!result.newCategoryID) {
|
||||
let categories = postCategories;
|
||||
categories.splice(categories.indexOf('new-category'), 1);
|
||||
categories.push(result.newCategoryID.toString());
|
||||
|
||||
$('#postCategory').append(`<option value="${result.newCategoryID}">${newCategoryDisplayName}</option>`);
|
||||
setTimeout(() => {
|
||||
$('#postCategory').val(categories);
|
||||
}, 250);
|
||||
$('#cat-name').val('');
|
||||
$('#cat-dname').val('');
|
||||
} else {
|
||||
$('.snackbar-container').append('<div class="alert alert-warning snackbar" role="alert">Die neue Kategorie konnte nicht erstellt werden.</div>');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$('.snackbar-container').append(`<div class="alert alert-danger snackbar" role="alert">${result.message}</div>`);
|
||||
}
|
||||
|
@ -469,17 +474,17 @@ function sendPost(executionFinished) {
|
|||
|
||||
function publishPost() {
|
||||
const postID = $('#postID').val(),
|
||||
contentID = $('#contentID').val(),
|
||||
contentDE = $('#switchLanguages').find('> li[data-lang=de]').data('contentid'),
|
||||
contentEN = $('#switchLanguages').find('> li[data-lang=en]').data('contentid'),
|
||||
contentFR = $('#switchLanguages').find('> li[data-lang=fr]').data('contentid');
|
||||
versionID = $('#versionID').val(),
|
||||
versionDE = $('#switchLanguages').find('> li[data-lang=de]').data('versionid'),
|
||||
versionEN = $('#switchLanguages').find('> li[data-lang=en]').data('versionid'),
|
||||
versionFR = $('#switchLanguages').find('> li[data-lang=fr]').data('versionid');
|
||||
|
||||
$.ajax({
|
||||
url: '/admin/blog/publishPost',
|
||||
method: 'post',
|
||||
data: {
|
||||
postID, contentID,
|
||||
contentIDs: {'de': contentDE, 'en': contentEN, 'fr': contentFR}
|
||||
postID, versionID,
|
||||
versionIDs: {'de': versionDE, 'en': versionEN, 'fr': versionFR}
|
||||
},
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
|
|
39
assets/js/blog-history.js
Normal file
39
assets/js/blog-history.js
Normal file
|
@ -0,0 +1,39 @@
|
|||
let compareItems = [];
|
||||
|
||||
$('.history-compare').on('click', function () {
|
||||
const hashID = $(this).data('hashid');
|
||||
if(compareItems.includes(this)) {
|
||||
compareItems.splice(compareItems.indexOf(this));
|
||||
|
||||
if(compareItems.length === 0) {
|
||||
$('.history-compare').text('Vergleichen mit ...');
|
||||
} else {
|
||||
$(this).text('Zum Vergleich hinzufügen');
|
||||
}
|
||||
} else {
|
||||
if(compareItems.length === 0) {
|
||||
$('.history-compare').text('Zum Vergleich hinzufügen');
|
||||
} else {
|
||||
|
||||
}
|
||||
compareItems.push(this);
|
||||
$(this).text('Vom Vergleich entfernen');
|
||||
}
|
||||
updateCompareItemsView();
|
||||
});
|
||||
|
||||
function updateCompareItemsView() {
|
||||
$('.compare-items').empty();
|
||||
compareItems.forEach(item => {
|
||||
$('.compare-items').append(`<span class="badge badge-primary">${item.dataset.hashid.substring(0, 6)}</span>`);
|
||||
});
|
||||
|
||||
if(compareItems.length >= 2) {
|
||||
const url = window.location.pathname + '/compare/' + compareItems[0].dataset.hashid + '/' + compareItems[1].dataset.hashid;
|
||||
$('.compare-btn').attr('disabled', false)
|
||||
.attr('href', url);
|
||||
} else {
|
||||
$('.compare-btn').attr('disabled', true)
|
||||
.attr('href', '#');
|
||||
}
|
||||
}
|
|
@ -38,25 +38,38 @@ var addComment = function () {
|
|||
comment: comment
|
||||
},
|
||||
beforeSend: function () {
|
||||
var date = new Date();
|
||||
date = date.getDate() + '.' + date.getMonth() + '.' + date.getYear() + ' ' + date.getHours() + ':' + date.getMinutes() + ' Uhr';
|
||||
item = $(`
|
||||
<li>
|
||||
<div class="well comment-well">
|
||||
<div class="d-inline-block mr-2">
|
||||
<div class="image-placeholder">
|
||||
<div class="user-post-item">
|
||||
<div class="item-avatar-container">
|
||||
<div class="loadingSpinner"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-inline-block mr-2">
|
||||
<h3>
|
||||
<small>
|
||||
von Dir / ${date}
|
||||
</small>
|
||||
<h3 class="item-user">
|
||||
<a href="#">
|
||||
Du
|
||||
</a>
|
||||
</h3>
|
||||
<p class="comment">${comment}</p>
|
||||
<h4 class="item-meta">
|
||||
jetzt gerade
|
||||
</h4>
|
||||
<p class="item-content">
|
||||
${comment}
|
||||
</p>
|
||||
<div class="item-actions">
|
||||
<a href="#" class="item-btn" data-toggle="tooltip" data-placement="top" title="Antworten">
|
||||
<i class="far fa-comment"></i>
|
||||
<span>0</span>
|
||||
</a>
|
||||
<a href="#" class="item-btn" data-toggle="tooltip" data-placement="top" title="Gefällt mir">
|
||||
<i class="far fa-heart"></i>
|
||||
<span>0</span>
|
||||
</a>
|
||||
<div class="item-btn dropdown">
|
||||
<a href="#" class="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="fa fa-ellipsis-h"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu"></div>
|
||||
</div>
|
||||
<div class="loading-container d-inline-block">
|
||||
<i class="fa fa-cog fa-spin"></i>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -67,27 +80,57 @@ var addComment = function () {
|
|||
$('#addComment').attr('disabled', '');
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.type === 'success') {
|
||||
console.log(data);
|
||||
if (data.success) {
|
||||
$('#commentField').val('');
|
||||
$('#notice-container').html('<div class="alert alert-success" role="alert">Dein Kommentar wurde <b>erfolgreich</b> gesendet!</div>');
|
||||
$('.loading-container', item).css('background-color', '#28b62c');
|
||||
$('.loading-container i', item)
|
||||
.removeClass('fa-cog').removeClass('fa-spin')
|
||||
.addClass('fa-check').css('color', '#fff');
|
||||
$('.content h3 small', item).hide()
|
||||
.html(`von <a href="/user/${data.content.username}" target="_blank">${data.content.displayname}</a> / ${data.content.date}`).fadeIn();
|
||||
$('.loading-container', item).delay(2000).fadeOut(2000);
|
||||
$('.comment-well', item).prepend(`<img src="${data.content.profilePic}" style="display:none">`);
|
||||
$('.comment-well img', item).fadeIn(2000);
|
||||
$('.image-placeholder', item).remove();
|
||||
wait(8000);
|
||||
$('.content', item).removeClass('small');
|
||||
$('.comment-count').text(parseInt($('.comment-count').text()) + 1);
|
||||
} else {
|
||||
|
||||
addSnackbar('success', 'Dein Kommentar wurde erfolgreich veröffentlicht!');
|
||||
|
||||
item
|
||||
.find('.item-avatar').attr('src', data.content.profilePicture).attr('alt', data.content.username)
|
||||
.find('.item-user a').attr('href', data.content.profileUrl).text(data.content.displayname);
|
||||
|
||||
item.find('.item-avatar-container .loadingSpinner').fadeOut();
|
||||
|
||||
setTimeout(() => {
|
||||
item.find('.item-avatar-container .loadingSpinner').remove();
|
||||
item.find('.item-avatar-container')
|
||||
.addClass('text-center')
|
||||
.append('<i class="fa fa-check" style="display:none"></i>')
|
||||
.find('.fa').fadeIn();
|
||||
}, 500);
|
||||
|
||||
setTimeout(() => {
|
||||
item.find('.item-avatar-container .fa').fadeOut();
|
||||
}, 1500);
|
||||
|
||||
setTimeout(() => {
|
||||
item.find('.item-avatar-container')
|
||||
.empty()
|
||||
.removeClass('text-center')
|
||||
.append(`<img src="${data.content.profilePicture}" class="item-avatar" style="display:none">`)
|
||||
.find('img').fadeIn();
|
||||
}, 2000);
|
||||
|
||||
// $('.loading-container', item).css('background-color', '#28b62c');
|
||||
// $('.loading-container i', item)
|
||||
// .removeClass('fa-cog').removeClass('fa-spin')
|
||||
// .addClass('fa-check').css('color', '#fff');
|
||||
// $('.content h3 small', item).hide()
|
||||
// .html(`von <a href="/user/${data.content.username}" target="_blank">${data.content.displayname}</a> / ${data.content.date}`).fadeIn();
|
||||
// $('.loading-container', item).delay(2000).fadeOut(2000);
|
||||
// $('.comment-well', item).prepend(`<img src="${data.content.profilePic}" style="display:none">`);
|
||||
// $('.comment-well img', item).fadeIn(2000);
|
||||
// $('.image-placeholder', item).remove();
|
||||
// wait(8000);
|
||||
// $('.content', item).removeClass('small');
|
||||
// $('.comment-count').text(parseInt($('.comment-count').text()) + 1);
|
||||
} else {
|
||||
addSnackbar('danger', data.message);
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
console.log(data);
|
||||
$('#notice-container').html('<div class="alert alert-danger" role="alert"><b>Error:</b> Comment couldn\'t be sent caused by an unkown error! Please try again later or contact the admin to get help!</div>');
|
||||
$('div.loading-container', item).css('background-color', '#ff4136');
|
||||
$('div.loading-container i', item).removeClass('fa-cog').removeClass('fa-spin').addClass('fa-exclamation').css("color", '#fff');
|
||||
|
|
92
assets/js/comment-item.js
Normal file
92
assets/js/comment-item.js
Normal file
|
@ -0,0 +1,92 @@
|
|||
function openCommentReportModal(ID) {
|
||||
openAsyncModal(
|
||||
'/blog/getReportModal',
|
||||
'Kommentar melden',
|
||||
{ID},
|
||||
() => {
|
||||
$('#commentReportForm').on('submit', function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
const reason = $('#commentReportReason').val();
|
||||
const text = $('#commentReportText').val();
|
||||
|
||||
reportComment(ID, reason, text);
|
||||
});
|
||||
},
|
||||
'commentReportModal'
|
||||
);
|
||||
}
|
||||
|
||||
function reportComment(ID, reason, text) {
|
||||
const modal = $('#commentReportModal');
|
||||
|
||||
$.ajax({
|
||||
url: '/blog/reportComment',
|
||||
data: {
|
||||
ID, reason, text
|
||||
},
|
||||
method: 'POST',
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
|
||||
modal.modal('hide');
|
||||
|
||||
if(result.success) {
|
||||
addSnackbar('success', result.message);
|
||||
} else {
|
||||
addSnackbar('danger', result.message);
|
||||
}
|
||||
},
|
||||
error: (result) => {
|
||||
console.log(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function openCommentDeleteModal(ID) {
|
||||
openAsyncModal(
|
||||
'/blog/getDeleteModal',
|
||||
'Kommentar löschen',
|
||||
{ID},
|
||||
() => {
|
||||
console.log('tetst');
|
||||
},
|
||||
'commentDeleteModal',
|
||||
'lg'
|
||||
)
|
||||
}
|
||||
|
||||
function deleteComment(ID) {
|
||||
const modal = $('#commentDeleteModal');
|
||||
|
||||
modal.find('.modal-body').empty().append('<div class="loadingSpinner"></div>');
|
||||
|
||||
$.ajax({
|
||||
url: '/blog/deleteComment',
|
||||
data: {
|
||||
ID
|
||||
},
|
||||
method: 'POST',
|
||||
success: (result) => {
|
||||
modal.modal('hide');
|
||||
console.log(result);
|
||||
if(result.success) {
|
||||
addSnackbar('success', result.message);
|
||||
$('#comment-' + ID).slideUp();
|
||||
|
||||
let commentCount = $('.comment-count').text();
|
||||
if(commentCount !== '') {
|
||||
commentCount = parseInt(commentCount) - 1;
|
||||
$('.comment-count').text(commentCount);
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
$('#comment-' + ID).remove();
|
||||
}, 500)
|
||||
} else {
|
||||
addSnackbar('danger', result.message);
|
||||
}
|
||||
},
|
||||
error: console.log
|
||||
});
|
||||
}
|
|
@ -230,7 +230,7 @@ function closeSearch() {
|
|||
function executeSearch() {
|
||||
const search = $('.navbar-search input').val().trim();
|
||||
|
||||
if(search.length < 3) {
|
||||
if (search.length < 3) {
|
||||
addSnackbar('warning', 'Bitte gib mindestens 3 Buchstaben als Suchbegriff an.');
|
||||
return;
|
||||
}
|
||||
|
@ -456,3 +456,54 @@ function addSnackbar(type, text) {
|
|||
snackbar.remove();
|
||||
}, 5500);
|
||||
}
|
||||
|
||||
function openAsyncModal(url, title, data, finished, id, size = 'default') {
|
||||
const modal = $(`
|
||||
<div class="modal fade" id="${id}" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog ${size !== 'default' ? 'modal-' + size : ''} modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">${title}</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Schließen">
|
||||
<span>×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="loadingSpinner"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`);
|
||||
$('body').append(modal);
|
||||
modal.modal('show');
|
||||
|
||||
$.ajax({
|
||||
url,
|
||||
data,
|
||||
method: 'POST',
|
||||
success: (result) => {
|
||||
console.log(result);
|
||||
modal.find('.modal-body').empty();
|
||||
if(result.success) {
|
||||
modal.find('.modal-title').text(result.title);
|
||||
modal.find('.modal-body').append(result.body);
|
||||
finished();
|
||||
} else {
|
||||
modal.modal('hide');
|
||||
addSnackbar('danger', result.message);
|
||||
}
|
||||
},
|
||||
error: (data) => {
|
||||
console.log(data);
|
||||
modal.modal('hide');
|
||||
addSnackbar('danger', '<b>Ein unbekannter Fehler ist aufgetreten.</b> Versuche, die Seite erneut zu laden, oder kontaktiere das Support-Team sollte der Fehler bestehen bleiben.');
|
||||
}
|
||||
});
|
||||
|
||||
modal.on('hidden.bs.modal', function() {
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
return modal;
|
||||
}
|
|
@ -372,10 +372,31 @@ function submitPost(content, replyTo) {
|
|||
resetPostForm();
|
||||
},
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
$('.loadingSpinner', body).remove();
|
||||
body.append(data);
|
||||
body.append(`
|
||||
<div class="alert alert-${data.success ? 'success' : 'danger'}" role="alert">
|
||||
<b>${data.title}</b>
|
||||
${data.message.join('<br>')}
|
||||
</div>
|
||||
`);
|
||||
if(data.buttons) {
|
||||
const footer = $('<div class="modal-footer"></div>');
|
||||
body.parent().append(footer);
|
||||
data.buttons.forEach(button => {
|
||||
let btn;
|
||||
if(button.action) {
|
||||
btn = `<a href="${button.action}" class="btn btn-${button.type}">${button.text}</a>`;
|
||||
} else {
|
||||
btn = `<button role="button" class="btn btn-${button.type}">${button.text}</button>`;
|
||||
}
|
||||
footer.append(btn);
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
console.log(data);
|
||||
addSnackbar('warning', '<b>Ein unbekannter Fehler ist beim Veröffentlichen deines Posts aufgetreten.</b> Bitte versuche es später erneut oder kontaktiere uns.');
|
||||
}
|
||||
});
|
||||
}
|
|
@ -81,7 +81,8 @@ function registerPostEvents() {
|
|||
$('.post-item').click(function (e) {
|
||||
const target = e.target;
|
||||
|
||||
if(target.tagName !== 'BUTTON' && target.tagName !== 'INPUT' && target.tagName !== 'A' && target.tagName !== 'IMG' && target.tagName !== 'I' && !target.classList.contains('post-media')) {
|
||||
const forbiddenElements = ['BUTTON', 'A', 'INPUT', 'IMG', 'I', 'SPAN'];
|
||||
if(!forbiddenElements.includes(target.tagName) && !target.classList.contains('post-media')) {
|
||||
e.preventDefault();
|
||||
const uuid = $(this).data('uuid');
|
||||
const username = $(this).data('username');
|
||||
|
@ -141,16 +142,9 @@ function addPostLike(el) {
|
|||
}
|
||||
} else {
|
||||
text.text(likeCount);
|
||||
$('body').append(`
|
||||
<div class="alert alert-warning snackbar" id="message-uuid-${uuid}" role="alert">
|
||||
${result.message}
|
||||
</div>
|
||||
`);
|
||||
addSnackbar('warning', result.message);
|
||||
icon.toggleClass('far').toggleClass('fas');
|
||||
icon.parent().toggleClass('active');
|
||||
setTimeout(() => {
|
||||
$('#message-uuid-' + uuid).remove();
|
||||
}, 6000);
|
||||
}
|
||||
pendingRequests.splice(pendingRequests.indexOf(uuid), 1);
|
||||
},
|
||||
|
@ -215,7 +209,7 @@ function loadPostReportModal(uuid) {
|
|||
e.preventDefault();
|
||||
$('#postReportForm').slideUp();
|
||||
setTimeout(() => {
|
||||
$('#postReportBody').append('<i class="fa fa-cog fa-4x fa-spin text-center"></i>');
|
||||
$('#postReportBody').addClass('text-center').append('<i class="fa fa-cog fa-4x fa-spin"></i>');
|
||||
}, 200);
|
||||
submitReportForm(uuid, $('#postReportReason').val(), $('#postReportText').val());
|
||||
});
|
||||
|
@ -225,11 +219,11 @@ function loadPostReportModal(uuid) {
|
|||
});
|
||||
}
|
||||
|
||||
function submitReportForm(postUuid, reportReason, reportText) {
|
||||
function submitReportForm(hashID, reportReason, reportText) {
|
||||
$.ajax({
|
||||
url: '/posts/reportPost',
|
||||
data: {
|
||||
uuid: postUuid,
|
||||
hashID,
|
||||
reason: reportReason,
|
||||
explanation: reportText
|
||||
},
|
||||
|
@ -253,8 +247,8 @@ function submitReportForm(postUuid, reportReason, reportText) {
|
|||
setTimeout(() => {
|
||||
$('#postReportBody').find('.alert').slideDown();
|
||||
}, 1000);
|
||||
}
|
||||
})
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function openDeletePostModal(uuid) {
|
||||
|
@ -278,52 +272,52 @@ function openDeletePostModal(uuid) {
|
|||
|
||||
$('#postDeleteModal').modal('show');
|
||||
$('#postDeleteModal').on('hidden.bs.modal', function () {
|
||||
$('#postDeleteModal').remove();
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
loadDeletePostModal(uuid);
|
||||
}
|
||||
|
||||
function loadDeletePostModal(uuid) {
|
||||
function loadDeletePostModal(hashID) {
|
||||
$.ajax({
|
||||
url: '/posts/getDeleteModal',
|
||||
data: {
|
||||
uuid
|
||||
hashID
|
||||
},
|
||||
method: 'post',
|
||||
success: data => {
|
||||
$('#postReportTitle').text(data.title);
|
||||
$('#postDeleteBody').removeClass('text-center').html(data.body);
|
||||
}
|
||||
},
|
||||
error: console.log
|
||||
});
|
||||
}
|
||||
|
||||
function deletePost(uuid) {
|
||||
function deletePost(hashID) {
|
||||
$.ajax({
|
||||
url: '/posts/deletePost',
|
||||
method: 'post',
|
||||
data: { uuid },
|
||||
data: { hashID },
|
||||
beforeSend: () => {
|
||||
$('#postDeleteBody').addClass('text-center').html('<i class="fa fa-cog fa-spin fa-4x"></i>');
|
||||
},
|
||||
success: data => {
|
||||
let timeout = 2000;
|
||||
if(data.success) {
|
||||
$('#postDeleteBody').html('<div class="alert alert-success" role="alert"></div>');
|
||||
addSnackbar('success', data.message);
|
||||
timeout = 0;
|
||||
} else {
|
||||
$('#postDeleteBody').html('<div class="alert alert-danger" role="alert"></div>');
|
||||
$('#postDeleteBody').html(`<div class="alert alert-danger" role="alert">${data.message}</div>`);
|
||||
}
|
||||
$('#postDeleteBody').removeClass('text-center').find('.alert').text(data.message);
|
||||
|
||||
setTimeout(() => {
|
||||
$('#postDeleteModal').modal('hide');
|
||||
$(`.post-item[data-uuid=${uuid}]`).slideUp();
|
||||
$(`.post-item[data-uuid=${hashID}]`).slideUp();
|
||||
setTimeout(() => {
|
||||
$('#postDeleteModal').modal('dispose').remove();
|
||||
$(`.post-item[data-uuid=${uuid}]`).remove();
|
||||
$(`.post-item[data-uuid=${hashID}]`).remove();
|
||||
}, 500);
|
||||
}, 2000);
|
||||
}, timeout);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function addScrollListener() {
|
||||
}
|
|
@ -6,7 +6,7 @@ $("input").blur(function () {
|
|||
passwordError = false,
|
||||
passwordRepeatError = false;
|
||||
// Username
|
||||
if ($(this).attr('name') === "username") {
|
||||
if ($(this).attr('name') === "displayname") {
|
||||
if ($(this).val().length < 4) {
|
||||
$('#usernameErrorLength').addClass('active');
|
||||
usernameError = true;
|
||||
|
|
386
vendor/Diff/class.Diff.php
vendored
Normal file
386
vendor/Diff/class.Diff.php
vendored
Normal file
|
@ -0,0 +1,386 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
|
||||
class.Diff.php
|
||||
|
||||
A class containing a diff implementation
|
||||
|
||||
Created by Kate Morley - http://iamkate.com/ - and released under the terms of
|
||||
the CC0 1.0 Universal legal code:
|
||||
|
||||
http://creativecommons.org/publicdomain/zero/1.0/legalcode
|
||||
|
||||
*/
|
||||
|
||||
// A class containing functions for computing diffs and formatting the output.
|
||||
class Diff{
|
||||
|
||||
// define the constants
|
||||
const UNMODIFIED = 0;
|
||||
const DELETED = 1;
|
||||
const INSERTED = 2;
|
||||
|
||||
/* Returns the diff for two strings. The return value is an array, each of
|
||||
* whose values is an array containing two values: a line (or character, if
|
||||
* $compareCharacters is true), and one of the constants DIFF::UNMODIFIED (the
|
||||
* line or character is in both strings), DIFF::DELETED (the line or character
|
||||
* is only in the first string), and DIFF::INSERTED (the line or character is
|
||||
* only in the second string). The parameters are:
|
||||
*
|
||||
* $string1 - the first string
|
||||
* $string2 - the second string
|
||||
* $compareCharacters - true to compare characters, and false to compare
|
||||
* lines; this optional parameter defaults to false
|
||||
*/
|
||||
public static function compare(
|
||||
$string1, $string2, $compareCharacters = false){
|
||||
|
||||
// initialise the sequences and comparison start and end positions
|
||||
$start = 0;
|
||||
if ($compareCharacters){
|
||||
$sequence1 = $string1;
|
||||
$sequence2 = $string2;
|
||||
$end1 = strlen($string1) - 1;
|
||||
$end2 = strlen($string2) - 1;
|
||||
}else{
|
||||
$sequence1 = preg_split('/\R/', $string1);
|
||||
$sequence2 = preg_split('/\R/', $string2);
|
||||
$end1 = count($sequence1) - 1;
|
||||
$end2 = count($sequence2) - 1;
|
||||
}
|
||||
|
||||
// skip any common prefix
|
||||
while ($start <= $end1 && $start <= $end2
|
||||
&& $sequence1[$start] == $sequence2[$start]){
|
||||
$start ++;
|
||||
}
|
||||
|
||||
// skip any common suffix
|
||||
while ($end1 >= $start && $end2 >= $start
|
||||
&& $sequence1[$end1] == $sequence2[$end2]){
|
||||
$end1 --;
|
||||
$end2 --;
|
||||
}
|
||||
|
||||
// compute the table of longest common subsequence lengths
|
||||
$table = self::computeTable($sequence1, $sequence2, $start, $end1, $end2);
|
||||
|
||||
// generate the partial diff
|
||||
$partialDiff =
|
||||
self::generatePartialDiff($table, $sequence1, $sequence2, $start);
|
||||
|
||||
// generate the full diff
|
||||
$diff = array();
|
||||
for ($index = 0; $index < $start; $index ++){
|
||||
$diff[] = array($sequence1[$index], self::UNMODIFIED);
|
||||
}
|
||||
while (count($partialDiff) > 0) $diff[] = array_pop($partialDiff);
|
||||
for ($index = $end1 + 1;
|
||||
$index < ($compareCharacters ? strlen($sequence1) : count($sequence1));
|
||||
$index ++){
|
||||
$diff[] = array($sequence1[$index], self::UNMODIFIED);
|
||||
}
|
||||
|
||||
// return the diff
|
||||
return $diff;
|
||||
|
||||
}
|
||||
|
||||
/* Returns the diff for two files. The parameters are:
|
||||
*
|
||||
* $file1 - the path to the first file
|
||||
* $file2 - the path to the second file
|
||||
* $compareCharacters - true to compare characters, and false to compare
|
||||
* lines; this optional parameter defaults to false
|
||||
*/
|
||||
public static function compareFiles(
|
||||
$file1, $file2, $compareCharacters = false){
|
||||
|
||||
// return the diff of the files
|
||||
return self::compare(
|
||||
file_get_contents($file1),
|
||||
file_get_contents($file2),
|
||||
$compareCharacters);
|
||||
|
||||
}
|
||||
|
||||
/* Returns the table of longest common subsequence lengths for the specified
|
||||
* sequences. The parameters are:
|
||||
*
|
||||
* $sequence1 - the first sequence
|
||||
* $sequence2 - the second sequence
|
||||
* $start - the starting index
|
||||
* $end1 - the ending index for the first sequence
|
||||
* $end2 - the ending index for the second sequence
|
||||
*/
|
||||
private static function computeTable(
|
||||
$sequence1, $sequence2, $start, $end1, $end2){
|
||||
|
||||
// determine the lengths to be compared
|
||||
$length1 = $end1 - $start + 1;
|
||||
$length2 = $end2 - $start + 1;
|
||||
|
||||
// initialise the table
|
||||
$table = array(array_fill(0, $length2 + 1, 0));
|
||||
|
||||
// loop over the rows
|
||||
for ($index1 = 1; $index1 <= $length1; $index1 ++){
|
||||
|
||||
// create the new row
|
||||
$table[$index1] = array(0);
|
||||
|
||||
// loop over the columns
|
||||
for ($index2 = 1; $index2 <= $length2; $index2 ++){
|
||||
|
||||
// store the longest common subsequence length
|
||||
if ($sequence1[$index1 + $start - 1]
|
||||
== $sequence2[$index2 + $start - 1]){
|
||||
$table[$index1][$index2] = $table[$index1 - 1][$index2 - 1] + 1;
|
||||
}else{
|
||||
$table[$index1][$index2] =
|
||||
max($table[$index1 - 1][$index2], $table[$index1][$index2 - 1]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// return the table
|
||||
return $table;
|
||||
|
||||
}
|
||||
|
||||
/* Returns the partial diff for the specificed sequences, in reverse order.
|
||||
* The parameters are:
|
||||
*
|
||||
* $table - the table returned by the computeTable function
|
||||
* $sequence1 - the first sequence
|
||||
* $sequence2 - the second sequence
|
||||
* $start - the starting index
|
||||
*/
|
||||
private static function generatePartialDiff(
|
||||
$table, $sequence1, $sequence2, $start){
|
||||
|
||||
// initialise the diff
|
||||
$diff = array();
|
||||
|
||||
// initialise the indices
|
||||
$index1 = count($table) - 1;
|
||||
$index2 = count($table[0]) - 1;
|
||||
|
||||
// loop until there are no items remaining in either sequence
|
||||
while ($index1 > 0 || $index2 > 0){
|
||||
|
||||
// check what has happened to the items at these indices
|
||||
if ($index1 > 0 && $index2 > 0
|
||||
&& $sequence1[$index1 + $start - 1]
|
||||
== $sequence2[$index2 + $start - 1]){
|
||||
|
||||
// update the diff and the indices
|
||||
$diff[] = array($sequence1[$index1 + $start - 1], self::UNMODIFIED);
|
||||
$index1 --;
|
||||
$index2 --;
|
||||
|
||||
}elseif ($index2 > 0
|
||||
&& $table[$index1][$index2] == $table[$index1][$index2 - 1]){
|
||||
|
||||
// update the diff and the indices
|
||||
$diff[] = array($sequence2[$index2 + $start - 1], self::INSERTED);
|
||||
$index2 --;
|
||||
|
||||
}else{
|
||||
|
||||
// update the diff and the indices
|
||||
$diff[] = array($sequence1[$index1 + $start - 1], self::DELETED);
|
||||
$index1 --;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// return the diff
|
||||
return $diff;
|
||||
|
||||
}
|
||||
|
||||
/* Returns a diff as a string, where unmodified lines are prefixed by ' ',
|
||||
* deletions are prefixed by '- ', and insertions are prefixed by '+ '. The
|
||||
* parameters are:
|
||||
*
|
||||
* $diff - the diff array
|
||||
* $separator - the separator between lines; this optional parameter defaults
|
||||
* to "\n"
|
||||
*/
|
||||
public static function toString($diff, $separator = "\n"){
|
||||
|
||||
// initialise the string
|
||||
$string = '';
|
||||
|
||||
// loop over the lines in the diff
|
||||
foreach ($diff as $line){
|
||||
|
||||
// extend the string with the line
|
||||
switch ($line[1]){
|
||||
case self::UNMODIFIED : $string .= ' ' . $line[0];break;
|
||||
case self::DELETED : $string .= '- ' . $line[0];break;
|
||||
case self::INSERTED : $string .= '+ ' . $line[0];break;
|
||||
}
|
||||
|
||||
// extend the string with the separator
|
||||
$string .= $separator;
|
||||
|
||||
}
|
||||
|
||||
// return the string
|
||||
return $string;
|
||||
|
||||
}
|
||||
|
||||
/* Returns a diff as an HTML string, where unmodified lines are contained
|
||||
* within 'span' elements, deletions are contained within 'del' elements, and
|
||||
* insertions are contained within 'ins' elements. The parameters are:
|
||||
*
|
||||
* $diff - the diff array
|
||||
* $separator - the separator between lines; this optional parameter defaults
|
||||
* to '<br>'
|
||||
*/
|
||||
public static function toHTML($diff, $separator = '<br>'){
|
||||
|
||||
// initialise the HTML
|
||||
$html = '';
|
||||
|
||||
// loop over the lines in the diff
|
||||
foreach ($diff as $line){
|
||||
|
||||
// extend the HTML with the line
|
||||
switch ($line[1]){
|
||||
case self::UNMODIFIED : $element = 'span'; break;
|
||||
case self::DELETED : $element = 'del'; break;
|
||||
case self::INSERTED : $element = 'ins'; break;
|
||||
}
|
||||
$html .=
|
||||
'<' . $element . '>'
|
||||
. htmlspecialchars($line[0])
|
||||
. '</' . $element . '>';
|
||||
|
||||
// extend the HTML with the separator
|
||||
$html .= $separator;
|
||||
|
||||
}
|
||||
|
||||
// return the HTML
|
||||
return $html;
|
||||
|
||||
}
|
||||
|
||||
/* Returns a diff as an HTML table. The parameters are:
|
||||
*
|
||||
* $diff - the diff array
|
||||
* $indentation - indentation to add to every line of the generated HTML; this
|
||||
* optional parameter defaults to ''
|
||||
* $separator - the separator between lines; this optional parameter
|
||||
* defaults to '<br>'
|
||||
*/
|
||||
public static function toTable($diff, $indentation = '', $separator = '<br>'){
|
||||
|
||||
// initialise the HTML
|
||||
$html = $indentation . "<table class=\"diff\">\n";
|
||||
|
||||
// loop over the lines in the diff
|
||||
$index = 0;
|
||||
while ($index < count($diff)){
|
||||
|
||||
// determine the line type
|
||||
switch ($diff[$index][1]){
|
||||
|
||||
// display the content on the left and right
|
||||
case self::UNMODIFIED:
|
||||
$leftCell =
|
||||
self::getCellContent(
|
||||
$diff, $indentation, $separator, $index, self::UNMODIFIED);
|
||||
$rightCell = $leftCell;
|
||||
break;
|
||||
|
||||
// display the deleted on the left and inserted content on the right
|
||||
case self::DELETED:
|
||||
$leftCell =
|
||||
self::getCellContent(
|
||||
$diff, $indentation, $separator, $index, self::DELETED);
|
||||
$rightCell =
|
||||
self::getCellContent(
|
||||
$diff, $indentation, $separator, $index, self::INSERTED);
|
||||
break;
|
||||
|
||||
// display the inserted content on the right
|
||||
case self::INSERTED:
|
||||
$leftCell = '';
|
||||
$rightCell =
|
||||
self::getCellContent(
|
||||
$diff, $indentation, $separator, $index, self::INSERTED);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// extend the HTML with the new row
|
||||
$html .=
|
||||
$indentation
|
||||
. " <tr>\n"
|
||||
. $indentation
|
||||
. ' <td class="diff'
|
||||
. ($leftCell == $rightCell
|
||||
? 'Unmodified'
|
||||
: ($leftCell == '' ? 'Blank' : 'Deleted'))
|
||||
. '">'
|
||||
. $leftCell
|
||||
. "</td>\n"
|
||||
. $indentation
|
||||
. ' <td class="diff'
|
||||
. ($leftCell == $rightCell
|
||||
? 'Unmodified'
|
||||
: ($rightCell == '' ? 'Blank' : 'Inserted'))
|
||||
. '">'
|
||||
. $rightCell
|
||||
. "</td>\n"
|
||||
. $indentation
|
||||
. " </tr>\n";
|
||||
|
||||
}
|
||||
|
||||
// return the HTML
|
||||
return $html . $indentation . "</table>\n";
|
||||
|
||||
}
|
||||
|
||||
/* Returns the content of the cell, for use in the toTable function. The
|
||||
* parameters are:
|
||||
*
|
||||
* $diff - the diff array
|
||||
* $indentation - indentation to add to every line of the generated HTML
|
||||
* $separator - the separator between lines
|
||||
* $index - the current index, passes by reference
|
||||
* $type - the type of line
|
||||
*/
|
||||
private static function getCellContent(
|
||||
$diff, $indentation, $separator, &$index, $type){
|
||||
|
||||
// initialise the HTML
|
||||
$html = '';
|
||||
|
||||
// loop over the matching lines, adding them to the HTML
|
||||
while ($index < count($diff) && $diff[$index][1] == $type){
|
||||
$html .=
|
||||
'<span>'
|
||||
. htmlspecialchars($diff[$index][0])
|
||||
. '</span>'
|
||||
. $separator;
|
||||
$index ++;
|
||||
}
|
||||
|
||||
// return the HTML
|
||||
return $html;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
Reference in New Issue
Block a user