load->model('UserModel', '', TRUE); $this->load->model('PostsModel', '', TRUE); } public function index() { if (isset($_SESSION['user']) && !empty($_SESSION['user'])) redirect(base_url('posts/feed')); redirect(base_url('posts/popular')); } public function feed() { if (!isset($_SESSION['user']) || empty($_SESSION['user'])) redirect(base_url('posts')); $this->load->view('header', ['active' => 'feed', 'title' => 'Dein Feed', 'additionalStyles' => ['posts_list.css']]); $this->load->view('network/posts/posts_list', ['active', 'feed']); $this->load->view('footer', ['additionalScripts' => ['post_feed.js', 'post_search.js']]); } public function getFeedPosts() { if (!isset($_SESSION['user']) || empty($_SESSION['user'])) redirect(base_url('posts')); $amount = (int)$this->input->get('amount'); $offset = (int)$this->input->get('offset') * $amount; $posts = $this->PostsModel->getFeedPosts($_SESSION['user']['ID'], $amount, $offset); foreach ($posts as $post) { $this->load->view('network/posts/post_item', $post); } } public function popular() { $this->load->view('header', ['active' => 'popular', 'title' => 'Beliebte Posts', 'additionalStyles' => ['posts_list.css']]); $this->load->view('network/posts/posts_list', ['active' => 'popular']); $this->load->view('footer', ['additionalScripts' => ['post_feed.js', 'post_search.js']]); } public function getPopularPosts() { $amount = (int)$this->input->get('amount'); $offset = (int)$this->input->get('offset') * $amount; $posts = $this->PostsModel->getPopularPosts($amount, $offset); foreach ($posts as $post) { $this->load->view('network/posts/post_item', $post); } } public function addPostLike() { header('Content-Type: application/json'); if (!isset($_SESSION['user']) || empty($_SESSION['user'])) { echo json_encode([ 'success' => false, 'message' => lang('post_like_account_missing') ]); exit; } $hashID = $this->input->post('postUUID'); $isLiked = $this->PostsModel->addPostLikeByHashID($hashID, $_SESSION['user']['ID']); $likeCount = $this->PostsModel->getPostLikeCountByHashID($hashID); echo json_encode([ 'success' => true, 'message' => 'Du hast den Post erfolgreich bewertet.', 'isLiked' => $isLiked, 'likeCount' => $likeCount ]); } public function search() { $type = $this->input->get('type'); $query = $this->input->get('q'); $rank = $this->input->get('rank'); $this->load->view('header', ['active' => 'search', 'title' => 'Suche', 'additionalStyles' => ['posts_list.css']]); $this->load->view('network/posts/posts_list', ['active' => 'search', 'search' => ['query' => $query, 'type' => $type, 'rank' => $rank]]); $this->load->view('footer', ['additionalScripts' => ['post_search.js']]); } public function getSearchPosts() { $type = $this->input->get('type'); $query = $this->input->get('query'); $rank = $type == 'type-users' ? $this->input->get('rank') : ''; $lang = $type == 'type-users' ? $this->input->get('lang') : ''; $country = $type == 'type-users' ? $this->input->get('country') : ''; $amount = (int)$this->input->get('amount'); $offset = (int)$this->input->get('offset') * $amount; if ($type !== 'type-users' && $rank !== '' && $lang !== '' && strlen($query) < 4) { exit; } if (($type == 'type-all' && $offset == 0) || $type == 'type-users') { $userAmount = $type == 'type-users' ? $amount : 3; $userOffset = $type == 'type-users' ? $offset : 0; $users = $this->UserModel->searchUsers($query, $rank, $country, $lang, $userAmount, $userOffset); if (!empty($users)) { if ($offset == 0) { echo '

Nutzer (' . sizeof($users) . ')

'; } echo '
'; foreach ($users as $user) { $user['about'] = strlen($user['about']) > 60 ? substr($user['about'], 0, 60) . '...' : $user['about']; echo $this->load->view('network/user/user_overview_card', $user, true); } echo '
'; } } if ($type == 'type-all' || $type == 'type-posts') { $posts = $this->PostsModel->searchPosts($query, $amount, $offset); if (!empty($posts) && $offset == 0) { echo '

Posts

'; } foreach ($posts as $post) { $this->load->view('network/posts/post_item', $post); } } } public function getAvailableCountries() { $countries = $this->UserModel->getAvailableCountries(); foreach ($countries as $i => $country) { $countries[$i]['name'] = lang('country_' . $country['country']); } header('Content-Type: application/json'); echo json_encode(['countries' => $countries]); } public function getAvailableLanguages() { $languages = $this->UserModel->getAvailableLanguages(); foreach ($languages as $i => $language) { $languages[$i]['name'] = lang('lang_' . strtolower($language['language'])); } header('Content-Type: application/json'); echo json_encode(['languages' => $languages]); } public function getReportModal() { $this->load->view('network/posts/report_modal'); } public function reportPost() { header('Content-Type: application/json'); $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 == '') { 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->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($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() { 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; } $hashID = $this->input->post('hashID'); if ($hashID == NULL) { echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']); exit; } $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; } $post = $this->PostsModel->preparePostList($post); $body = $this->load->view('network/posts/delete_modal', ['post' => $post[0]], true); echo json_encode(['success' => true, 'title' => 'Post löschen', 'body' => $body]); } public function deletePost() { 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; } $hashID = $this->input->post('hashID'); if ($hashID == NULL) { echo json_encode(['success' => false, 'message' => 'Der angegebene Post existiert nicht.']); exit; } $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'], $hashID); echo json_encode(['success' => true, 'message' => 'Der Post wurde erfolgreich gelöscht.']); } }