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.* 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 * FROM blog_post WHERE state = 1 ORDER BY initialRelease DESC LIMIT ? OFFSET ?', [$amount, $offset])->result_array(); } $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_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_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 * 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($categories, $amount = 3, $postID = NULL) { function getIDs($val) { return $val['ID']; } 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; $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, 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']; } return $return; } function incrementViews($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'); } public function getCategories() { $this->db->cache_off(); $categories = $this->db->query('SELECT * FROM blog_categories')->result_array(); $this->db->cache_on(); return $categories; } public function getPost($postUrl) { $content = $this->db->query(' 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->mergePostTranslation($content, true); $content = $this->mergePostStats($content); $content = $this->mergePostCategories($content); $content = $this->mergePostAuthorData($content); return $content[0]; } public function getPostDataByID($postID) { $data = $this->db->query(' SELECT * FROM blog_post WHERE ID = ?', [$postID])->result_array(); $data = $this->mergePostCategories($data); return $data; } public function getRandomPosts($postID) { $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 getPostTranslation($postID, $showContent, $language) { $data = $this->db->query('SELECT * FROM blog_post_versions WHERE postID = ? AND active ORDER BY lang ASC', [$postID])->result_array(); if (empty($data)) { 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']; } $url = $data[0]['url']; $title = $data[0]['title']; $description = $data[0]['description']; $content = $data[0]['content']; foreach ($data as $row) { if ($row['lang'] == $language) { $url = $row['url']; $title = $row['title']; $description = $row['description']; $content = $row['content']; break; } } $return = [ 'url' => $url, 'title' => $title, 'description' => $description, ]; if($showContent) { $return['content'] = $content; } return $return; } 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_post_comments WHERE postID = ? ORDER BY date DESC', [$postID])->result_array(); return $comments; } public function getCommentsByUrl($postUrl) { $ID = $this->getPostIDByUrl($postUrl); if($ID !== NULL) { return $this->getComments($ID); } else { return NULL; } } 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 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'); } 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]); $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() { return $this->db->query('SELECT * FROM blog_tags')->result_array(); } public function getTags($postID) { $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) { foreach ($tags as $i => $tag) { $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; } return $tags; } public function hasAlreadyLiked($postID, $userID) { $getLikes = $this->db->query('SELECT * FROM blog_post_likes WHERE postID = ? AND userID = ?', [$postID, $userID])->result_array(); if (empty($getLikes)) { return false; } else { return true; } } public function addLike($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 postID = ?', [$postID])->result_array()[0]; } public function removeLike($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 postID = ?', [$postID])->result_array()[0]; } public function getPostList($onlyTrash) { 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 getAllPostVersions($postID, $lang) { $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; } public function createTagIfNotExists($tag) { $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, displayname) VALUES (?, ?)', [strtolower($tag), $tag]); $tagData = $this->db->query('SELECT ID FROM blog_tags WHERE name = ?', [strtolower($tag)])->result_array(); } $this->db->cache_on(); $tagID = $tagData[0]['ID']; return $tagID; } public function addPostTagByID($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'); $this->db->cache_delete('blog', 'like'); $this->db->cache_delete('admin', 'blog'); } public function deleteAllPostTags($postID) { $this->db->query('DELETE FROM blog_post_tags WHERE postID = ?', [$postID]); $this->db->cache_delete('blog', 'index'); $this->db->cache_delete('blog', 'post'); $this->db->cache_delete('blog', 'tag'); $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) { $dom = new Dom; $dom->load($content); $images = $dom->find('img'); foreach ($images as $image) { $image_src = $image->getAttribute('src'); $image_caption = $image->getAttribute('alt'); $image->removeAllAttributes(); $image->setAttribute('class', 'img-fluid'); $image->setAttribute('src', $image_src); $image->setAttribute('alt', $image_caption); $container = new HtmlNode('div'); $container->setAttribute('class', 'img'); $caption_node = new HtmlNode('p'); $caption = new TextNode($image_caption); $caption_node->addChild($caption); $parent = $image->getParent(); $parent->addChild($container); $container->addChild($image); $container->addChild($caption_node); } $iframes = $dom->find('iframe'); foreach ($iframes as $iframe) { $container = new HtmlNode('div'); $container->setAttribute('class', 'responsive-video'); $parent = $iframe->getParent(); $parent->addChild($container); $container->addChild($iframe); } return $dom; } public function getFirstImage($content) { $dom = new Dom; $dom->load($content); $images = $dom->find('img'); if ($images[0] == null) return ''; $imageSrc = $images[0]->getAttribute('src'); return $imageSrc; } public function deletePost($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'); $this->db->cache_delete('blog', 'like'); $this->db->cache_delete('blog', 'comment'); $this->db->cache_delete('blog', 'getComments'); $this->db->cache_delete('admin', 'blog'); } public function restorePost($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'); $this->db->cache_delete('blog', 'like'); $this->db->cache_delete('blog', 'comment'); $this->db->cache_delete('blog', 'getComments'); $this->db->cache_delete('admin', 'blog'); } public function deletePostFinally($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'); $this->db->cache_delete('blog', 'like'); $this->db->cache_delete('blog', 'comment'); $this->db->cache_delete('blog', 'getComments'); $this->db->cache_delete('admin', 'blog'); } public function getPrevPost($initialRelease) { $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($initialRelease) { $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 ID, image, initialRelease FROM blog_post WHERE state = 1 ORDER BY initialRelease DESC LIMIT ?', [$count])->result_array(); $posts = $this->mergePostTranslation($posts); return $posts; } public function getReadingTime($wordCount) { $wordsPerSecond = 3; $duration = $wordCount / $wordsPerSecond; $duration /= 60; $duration = round($duration); return $duration; } public function createNewPostDraft($authorID) { $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 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 ID FROM blog_post_versions WHERE postID = ? ORDER BY ID DESC LIMIT 1', [$postID])->result_array(); return intval($data[0]['ID']); } public function updatePostDraft($postID, $initialRelease, $postImage) { $this->db->query('UPDATE blog_post SET initialRelease = ?, image = ? WHERE ID = ?', [$initialRelease, $postImage, $postID]); $this->db->cache_delete('admin', 'blog'); } public function updateTranslationDraft($versionID, $url, $title, $description, $content, $lang) { $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_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'); $this->db->cache_delete('blog', 'category'); $this->db->cache_delete('blog', 'search'); $this->db->cache_delete('admin', 'blog'); } public function publishTranslationDraft($postID, $versionID, $authorID, $lang) { $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]); } 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 getPostVersions($postID) { function getIDs($val) { return $val['ID']; } $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 ID FROM blog_post WHERE ID = ?', [$postID])->result_array(); return !empty($data); } public function versionIDExisting($postID, $versionID) { $data = $this->db->query('SELECT ID FROM blog_post_versions WHERE postID = ? AND ID = ?', [$postID, $versionID])->result_array(); return !empty($data); } public function postUrlExisting($postUrl) { $data = $this->db->query('SELECT url FROM blog_post_versions WHERE url = ?', [$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; } }