Archived
1
0

Database refactoring and improving blog comments, blog post history and more

This commit is contained in:
Marcel
2019-01-08 22:42:54 +01:00
parent 56aed78b00
commit 7f887a99b0
67 changed files with 3076 additions and 1755 deletions

View File

@@ -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)