From d7f7a49a2413929be6e9969c7f1a3d7b75536cfc Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 18 Oct 2018 14:49:07 +0200 Subject: [PATCH 1/4] Fix #5 - Project Edit Page isn't working and more --- application/controllers/admin/Projects.php | 11 +- application/models/PostsModel.php | 16 +- application/models/ProjectsModel.php | 374 ++++++++++-------- application/views/admin/footer.php | 2 +- application/views/admin/project_edit.php | 18 +- application/views/admin/projects.php | 4 +- application/views/footer.php | 6 +- application/views/header.php | 5 + application/views/home.php | 82 ++-- application/views/network/posts/post_item.php | 6 +- .../views/network/posts/user_post_content.php | 13 +- assets/css/main.css | 52 +-- assets/js/custom.js | 71 ++-- assets/js/main.js | 12 + 14 files changed, 374 insertions(+), 298 deletions(-) diff --git a/application/controllers/admin/Projects.php b/application/controllers/admin/Projects.php index d42391d..878074b 100644 --- a/application/controllers/admin/Projects.php +++ b/application/controllers/admin/Projects.php @@ -32,7 +32,8 @@ if ($edit) { if ($this->ProjectsModel->checkIfExists($id)) { - $content = $this->ProjectsModel->getEntry($id)[0]; + $content = $this->ProjectsModel->getEntry($id); + $content = $this->ProjectsModel->mergeFullTranslationData($content)[0]; $projectCategories = $this->ProjectsModel->getEntryCategories($id); } else { redirect(base_url('admin/projects/edit')); @@ -42,7 +43,7 @@ $categories = $this->ProjectsModel->getCategories(); $this->load->view('admin/sidebar', ['title' => 'Projekt erstellen', 'additionalStyles' => ['lib/content-tools/content-tools.min.css', 'project-edit.css']]); - $this->load->view('admin/project_edit', ['edit' => -1, 'categories' => $categories, 'content' => $content, 'pCategories' => $projectCategories]); + $this->load->view('admin/project_edit', ['edit' => $id === NULL ? -1 : $id, 'categories' => $categories, 'content' => $content, 'pCategories' => $projectCategories]); $this->load->view('admin/footer', ['additionalScripts' => ['lib/content-tools/content-tools.min.js', 'project-edit.js']]); } @@ -58,6 +59,12 @@ $translations['de']['title'] = $this->input->post('titleDE'); $translations['de']['description'] = $this->input->post('headlineDE'); $translations['de']['content'] = $this->input->post('contentDE'); + $translations['en']['title'] = $this->input->post('titleEN'); + $translations['en']['description'] = $this->input->post('headlineEN'); + $translations['en']['content'] = $this->input->post('contentEN'); + $translations['fr']['title'] = $this->input->post('titleFR'); + $translations['fr']['description'] = $this->input->post('headlineFR'); + $translations['fr']['content'] = $this->input->post('contentFR'); $url = $this->input->post('url'); diff --git a/application/models/PostsModel.php b/application/models/PostsModel.php index c614d04..ba38ffa 100644 --- a/application/models/PostsModel.php +++ b/application/models/PostsModel.php @@ -229,10 +229,18 @@ } private function mergeReplyData($post) { - $data = $this->db->query('SELECT uuid, username, displayname FROM user_posts LEFT JOIN users ON users.ID = user_posts.user_id WHERE user_posts.ID = ?', [$post['reply_to']])->result_array(); - $post['replyToUuid'] = $data[0]['uuid']; - $post['replyToUsername'] = $data[0]['username']; - $post['replyToDisplayname'] = $data[0]['displayname']; + $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(); + $data = $this->preparePostList($data); + if(!empty($data)) { + $post['replyToPost'] = $data[0]; + } else { + $post['replyToPost'] = [ + 'username' => '', + 'displayname' => '', + 'content' => 'Nicht existent', + 'date' => '', + ]; + } return $post; } diff --git a/application/models/ProjectsModel.php b/application/models/ProjectsModel.php index 2365921..a8ac722 100644 --- a/application/models/ProjectsModel.php +++ b/application/models/ProjectsModel.php @@ -1,207 +1,243 @@ load->model('projectsModel', '', TRUE); - } - - public function getEntries($category) { - if($category !== 'all') { - $content = $this->db->query('SELECT *, (SELECT (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = 1) - (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = -1)) voteCount FROM projects p WHERE ID IN (SELECT projectID FROM projects_entry_categories WHERE categoryID = ?) ORDER BY datetime DESC', [$category])->result_array(); - } else { - $content = $this->db->query('SELECT *, (SELECT (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = 1) - (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = -1)) voteCount FROM projects p ORDER BY datetime DESC')->result_array(); + public function __construct() + { + parent::__construct(); + $this->load->model('projectsModel', '', TRUE); } - $content = $this->mergeTranslationData($content, $_SESSION['site_lang']); + public function getEntries($category) + { + if ($category !== 'all') { + $content = $this->db->query('SELECT *, (SELECT (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = 1) - (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = -1)) voteCount FROM projects p WHERE ID IN (SELECT projectID FROM projects_entry_categories WHERE categoryID = ?) ORDER BY datetime DESC', [$category])->result_array(); + } else { + $content = $this->db->query('SELECT *, (SELECT (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = 1) - (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = p.ID AND type = -1)) voteCount FROM projects p ORDER BY datetime DESC')->result_array(); + } - return $content; - } + $content = $this->mergeTranslationData($content, $_SESSION['site_lang']); - 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(); - return $collections; - } - - public function editEntry($data, $id) { - $this->db->update('projects', $data, ['id' => $id]); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - $this->db->cache_delete('admin', 'projects'); - } - - public function addEntry($data) { - $this->db->insert('projects', $data); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('admin', 'projects'); - } - - public function delete($id) { - $this->db->query('DELETE FROM projects WHERE ID = ? LIMIT 1', [$id]); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - $this->db->cache_delete('admin', 'projects'); - } - - public function deleteCategory($id) { - $this->db->query('DELETE FROM projects_entry_categories WHERE categoryID = ?', [$id]); - $this->db->query('DELETE FROM projects_categories WHERE ID = ? LIMIT 1', [$id]); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - $this->db->cache_delete('admin', 'projects'); - } - - public function checkIfExists($id) { - $result = $this->db->query('SELECT ID FROM projects WHERE ID = ? LIMIT 1', [$id])->result_array(); - if(!empty($result)) { - return true; - } else { - return false; + return $content; } - } - public function checkIfNameExists($name) { - $result = $this->db->query('SELECT ID FROM projects WHERE name = ? LIMIT 1', [$name])->result_array(); - if(!empty($result)) { - return true; - } else { - return false; + 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]); + continue; + } + + $merged = []; + foreach ($data[0] as $key => $value) { + if (($value == NULL && $data[1][$key] == NULL) || ($value != NULL && $data[1][$key] == NULL)) { + $merged[$key] = $value; + } else { + $merged[$key] = $data[1][$key]; + } + } + + $postList[$i] = array_merge($post, $merged); + } + return $postList; } - } - public function getEntry($id) { - return $this->db->query('SELECT * FROM projects WHERE ID = ? LIMIT 1', [$id])->result_array(); - } - - public function getEntryByName($name, $lang = 'de') { - $result = $this->db->query('SELECT * FROM projects WHERE name = ? LIMIT 1', [$name])->result_array(); - - $result = $this->mergeTranslationData($result, $lang); - - return !empty($result) ? $result[0] : null; - } - - 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(); - } - - public function resetEntryCategories($postID) { - $this->db->query('DELETE FROM projects_entry_categories WHERE projectID = ?', $postID); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - $this->db->cache_delete('admin', 'projects'); - } - - public function addCategoryToEntryID($postID, $categoryID) { - $this->db->query('INSERT INTO projects_entry_categories (projectID, categoryID) VALUES (?, ?)', [$postID, $categoryID]); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - $this->db->cache_delete('admin', 'projects'); - } - - public function updateCategories($postID, $categories) { - $this->resetEntryCategories($postID); - foreach ($categories as $category) { - $this->addCategoryToEntryID($postID, $category); + 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(); + return $collections; } - } - public function addCategoryToEntryName($name, $categoryID) { - $id = $this->db->query('SELECT ID FROM projects WHERE name = ? LIMIT 1', [$name])->result_array()[0]; - $this->addCategoryToEntryID(intval($id['ID']), $categoryID); - } + public function editEntry($data, $id) + { + $this->db->update('projects', $data, ['id' => $id]); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); + $this->db->cache_delete('admin', 'projects'); + } - public function getPrevProject($id) { - $result = $this->db->query('SELECT * FROM projects WHERE datetime < (SELECT datetime FROM projects WHERE ID = ?) ORDER BY datetime DESC LIMIT 1', [$id])->result_array(); + public function addEntry($data) + { + $this->db->insert('projects', $data); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('admin', 'projects'); + } - $result = $this->mergeTranslationData($result, $_SESSION['site_lang']); + public function delete($id) + { + $this->db->query('DELETE FROM projects WHERE ID = ? LIMIT 1', [$id]); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); + $this->db->cache_delete('admin', 'projects'); + } - return $result; - } + public function deleteCategory($id) + { + $this->db->query('DELETE FROM projects_entry_categories WHERE categoryID = ?', [$id]); + $this->db->query('DELETE FROM projects_categories WHERE ID = ? LIMIT 1', [$id]); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); + $this->db->cache_delete('admin', 'projects'); + } - public function getNextProject($id) { - $result = $this->db->query('SELECT * FROM projects WHERE datetime > (SELECT datetime FROM projects WHERE ID = ?) ORDER BY datetime ASC LIMIT 1', [$id])->result_array(); + public function checkIfExists($id) + { + $result = $this->db->query('SELECT ID FROM projects WHERE ID = ? LIMIT 1', [$id])->result_array(); + if (!empty($result)) { + return true; + } else { + return false; + } + } - $result = $this->mergeTranslationData($result, $_SESSION['site_lang']); + public function checkIfNameExists($name) + { + $result = $this->db->query('SELECT ID FROM projects WHERE name = ? LIMIT 1', [$name])->result_array(); + if (!empty($result)) { + return true; + } else { + return false; + } + } - return $result; - } + public function getEntry($id) + { + return $this->db->query('SELECT * FROM projects WHERE ID = ? LIMIT 1', [$id])->result_array(); + } - public function addVote($projectID, $userID, $voteType) { - $this->db->query('DELETE FROM projects_entry_votes WHERE projectID = ? AND userID = ?', [$projectID, $userID]); - $this->db->query('INSERT INTO projects_entry_votes (projectID, userID, type) VALUES (?, ?, ?)', [$projectID, $userID, $voteType]); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - $this->db->cache_delete('projects', 'addVote'); - $this->db->cache_delete('admin', 'projects'); - } + public function getEntryByName($name, $lang = 'de') + { + $result = $this->db->query('SELECT * FROM projects WHERE name = ? LIMIT 1', [$name])->result_array(); - public function getVoteCount($projectID) { - $result = $this->db->query('SELECT (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = ? AND type = 1) - (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = ? AND type = -1) voteCount', [$projectID, $projectID])->result_array(); - return $result[0]['voteCount']; - } + $result = $this->mergeTranslationData($result, $lang); - public function getUserVoteType($projectID, $userID) { - $result = $this->db->query('SELECT type FROM projects_entry_votes WHERE projectID = ? AND userID = ?', [$projectID, $userID])->result_array(); - if(empty($result)) - return 0; - return $result[0]['type']; - } + return !empty($result) ? $result[0] : null; + } - public function createNewProjectDraft() { - $this->db->query('INSERT INTO projects () VALUES ()'); + 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(); + } - $this->db->cache_delete('admin', 'projects'); + public function updateCategories($postID, $categories) + { + $this->resetEntryCategories($postID); + foreach ($categories as $category) { + $this->addCategoryToEntryID($postID, $category); + } + } - $data = $this->db->query('SELECT ID FROM projects ORDER BY ID DESC LIMIT 1')->result_array(); - return $data[0]['ID']; - } + public function resetEntryCategories($postID) + { + $this->db->query('DELETE FROM projects_entry_categories WHERE projectID = ?', $postID); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); + $this->db->cache_delete('admin', 'projects'); + } - public function updateProject($id, $translations, $url, $download, $openSource, $customLink, $date, $image) { - $this->db->query('UPDATE projects SET name = ?, isDownloadable = ?, downloadLink = ?, isOpenSource = ?, openSourceLink = ?, customLink = ?, datetime = ?, source = ? WHERE ID = ?', [$url, $download['available'], $download['link'], $openSource['available'], $openSource['link'], $customLink['link'], $date, $image, $id]); + public function addCategoryToEntryID($postID, $categoryID) + { + $this->db->query('INSERT INTO projects_entry_categories (projectID, categoryID) VALUES (?, ?)', [$postID, $categoryID]); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); + $this->db->cache_delete('admin', 'projects'); + } - $this->db->cache_off(); - foreach($translations as $lang => $translation) { - $data = $this->db->query('SELECT translationID FROM projects_translations WHERE projectID = ? AND lang = ?', [$id, $lang])->result_array(); + public function addCategoryToEntryName($name, $categoryID) + { + $id = $this->db->query('SELECT ID FROM projects WHERE name = ? LIMIT 1', [$name])->result_array()[0]; + $this->addCategoryToEntryID(intval($id['ID']), $categoryID); + } - if(empty($data)) { - $this->db->query('INSERT INTO projects_translations (projectID, lang) VALUES (?, ?)', [$id, $lang]); + public function getPrevProject($id) + { + $result = $this->db->query('SELECT * FROM projects WHERE datetime < (SELECT datetime FROM projects WHERE ID = ?) ORDER BY datetime DESC LIMIT 1', [$id])->result_array(); + $result = $this->mergeTranslationData($result, $_SESSION['site_lang']); + + return $result; + } + + public function getNextProject($id) + { + $result = $this->db->query('SELECT * FROM projects WHERE datetime > (SELECT datetime FROM projects WHERE ID = ?) ORDER BY datetime ASC LIMIT 1', [$id])->result_array(); + + $result = $this->mergeTranslationData($result, $_SESSION['site_lang']); + + return $result; + } + + public function addVote($projectID, $userID, $voteType) + { + $this->db->query('DELETE FROM projects_entry_votes WHERE projectID = ? AND userID = ?', [$projectID, $userID]); + $this->db->query('INSERT INTO projects_entry_votes (projectID, userID, type) VALUES (?, ?, ?)', [$projectID, $userID, $voteType]); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); + $this->db->cache_delete('projects', 'addVote'); + $this->db->cache_delete('admin', 'projects'); + } + + public function getVoteCount($projectID) + { + $result = $this->db->query('SELECT (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = ? AND type = 1) - (SELECT COUNT(*) FROM projects_entry_votes WHERE projectID = ? AND type = -1) voteCount', [$projectID, $projectID])->result_array(); + return $result[0]['voteCount']; + } + + public function getUserVoteType($projectID, $userID) + { + $result = $this->db->query('SELECT type FROM projects_entry_votes WHERE projectID = ? AND userID = ?', [$projectID, $userID])->result_array(); + if (empty($result)) + return 0; + return $result[0]['type']; + } + + public function createNewProjectDraft() + { + $this->db->query('INSERT INTO projects () VALUES ()'); + + $this->db->cache_delete('admin', 'projects'); + + $data = $this->db->query('SELECT ID FROM projects ORDER BY ID DESC LIMIT 1')->result_array(); + return $data[0]['ID']; + } + + public function updateProject($id, $translations, $url, $download, $openSource, $customLink, $date, $image) + { + $this->db->query('UPDATE projects SET name = ?, isDownloadable = ?, downloadLink = ?, isOpenSource = ?, openSourceLink = ?, customLink = ?, datetime = ?, source = ? WHERE ID = ?', [$url, $download['available'], $download['link'], $openSource['available'], $openSource['link'], $customLink['link'], $date, $image, $id]); + + $this->db->cache_off(); + foreach ($translations as $lang => $translation) { $data = $this->db->query('SELECT translationID FROM projects_translations WHERE projectID = ? AND lang = ?', [$id, $lang])->result_array(); + + if (empty($data)) { + $this->db->query('INSERT INTO projects_translations (projectID, lang) VALUES (?, ?)', [$id, $lang]); + + $data = $this->db->query('SELECT translationID FROM projects_translations WHERE projectID = ? AND lang = ?', [$id, $lang])->result_array(); + } + + $translationID = $data[0]['translationID']; + + $this->db->query('UPDATE projects_translations SET title = ?, description = ?, content = ?, downloadName = ?, openSourceName = ?, customLinkName = ? WHERE translationID = ?', array_merge($translation, [$download['name'], $openSource['name'], $customLink['name'], $translationID])); } + $this->db->cache_on(); - $translationID = $data[0]['translationID']; - - $this->db->query('UPDATE projects_translations SET title = ?, description = ?, content = ?, downloadName = ?, openSourceName = ?, customLinkName = ? WHERE translationID = ?', array_merge($translation, [$download['name'], $openSource['name'], $customLink['name'], $translationID])); + $this->db->cache_delete('admin', 'projects'); + $this->db->cache_delete('projects', 'index'); + $this->db->cache_delete('projects', 'entry'); } - $this->db->cache_on(); - $this->db->cache_delete('admin', 'projects'); - $this->db->cache_delete('projects', 'index'); - $this->db->cache_delete('projects', 'entry'); - } - - 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]); - continue; - } - - $merged = []; - foreach ($data[0] as $key => $value) { - if(($value == NULL && $data[1][$key] == NULL) || ($value != NULL && $data[1][$key] == NULL)) { - $merged[$key] = $value; - } else { - $merged[$key] = $data[1][$key]; + public function mergeFullTranslationData($postList) + { + foreach ($postList as $i => $post) { + $data = $this->db->query('SELECT * FROM projects_translations WHERE projectID = ? ORDER BY lang', [$post['ID']])->result_array(); + foreach ($data as $lang) { + $postList[$i]['translations'][$lang['lang']] = $lang; } } - - $postList[$i] = array_merge($post, $merged); + return $postList; } - return $postList; } -} diff --git a/application/views/admin/footer.php b/application/views/admin/footer.php index ab2bdb6..3f87390 100644 --- a/application/views/admin/footer.php +++ b/application/views/admin/footer.php @@ -15,6 +15,7 @@ defined('BASEPATH') OR exit('No direct script access allowed'); + required value="">
@@ -162,13 +162,13 @@ + required>
- +
@@ -177,20 +177,20 @@
+ value="">
+ class="form-control">
- +
@@ -199,20 +199,20 @@
+ value="">
+ class="form-control">
- +
diff --git a/application/views/admin/projects.php b/application/views/admin/projects.php index ad4eac5..2eb0335 100644 --- a/application/views/admin/projects.php +++ b/application/views/admin/projects.php @@ -117,8 +117,8 @@ -