load->model('UserModel', '', TRUE); $this->load->model('PostsModel', '', TRUE); $this->load->model('FileModel', '', TRUE); } public function index($user = "") { if ($user == "") { $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']); $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); $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"; $isCurrentUserFollowing = false; if (isset($_SESSION['user']['ID'])) $isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']); $_SESSION['currentProfilePage'] = $user_data['ID']; } else { $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."]; $title = "Error - Profile"; } } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['profile_page.css']]); 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]); } $this->load->view('footer', ['additionalScripts' => ['profile_page.js']]); } public function comments($user = "") { if ($user == "") { $title = "Error - Profile"; $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Es wurde kein Nutzername angegeben."]; } $user_data = $this->UserModel->getUser($user); $user_exists = !empty($user_data); if ($user_exists) { $user_data = $user_data[0]; $dateCreated = strtotime($user_data['date_created']); $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"; $isCurrentUserFollowing = false; if (isset($_SESSION['user']['ID'])) $isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']); $_SESSION['currentProfilePage'] = $user_data['ID']; } else { $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."]; $title = "Error - Profile"; } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['profile_page.css']]); if (isset($message)) { $this->load->view('network/message', $message); } 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('network/blog/user_comments_end', ['data' => $user_data]); } public function getComments() { $user = (int)$this->input->get('user'); $amount = (int)$this->input->get('amount'); $offset = (int)$this->input->get('offset') * $amount; $user_comments = $this->UserModel->getUserComments($user, $amount, $offset); $comment_user = $this->UserModel->getUserByID($user)[0]; foreach ($user_comments as $comment) { $this->load->view('network/blog/comment_item', ['data' => $comment_user, 'c' => $comment]); } } public function posts($user = "") { if ($user == "") { redirect(base_url('user')); } $user_data = $this->UserModel->getUser($user); $user_exists = !empty($user_data); if ($user_exists) { $user_data = $user_data[0]; $dateCreated = strtotime($user_data['date_created']); $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"; $isCurrentUserFollowing = false; if (isset($_SESSION['user']['ID'])) $isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']); $_SESSION['currentProfilePage'] = $user_data['ID']; } else { $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."]; $title = "Error - Profile"; } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['profile_page.css']]); if (isset($message)) { $this->load->view('network/message', $message); } if ($user_exists) { $this->load->view('network/user/user_posts', ['data' => $user_data, 'stats' => $user_stats, 'isCurrentUserFollowing' => $isCurrentUserFollowing]); } $this->load->view('footer', ['additionalScripts' => ['profile_page.js']]); $this->load->view('network/user/user_posts_end', ['data' => $user_data]); } public function getPosts() { $user = (int)$this->input->get('user'); $amount = (int)$this->input->get('amount'); $offset = (int)$this->input->get('offset') * $amount; $user_posts = $this->PostsModel->getUserPosts($user, $amount, $offset); foreach ($user_posts as $post) { $this->load->view('network/posts/post_item', $post); } } public function blogposts($user = "") { if ($user == "") { redirect(base_url('user')); } $user_data = $this->UserModel->getUser($user); $user_exists = !empty($user_data); if ($user_exists) { $user_data = $user_data[0]; $dateCreated = strtotime($user_data['date_created']); $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"; $isCurrentUserFollowing = false; if (isset($_SESSION['user']['ID'])) $isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']); $_SESSION['currentProfilePage'] = $user_data['ID']; } else { $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."]; $title = "Error - Profile"; } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['profile_page.css']]); if (isset($message)) { $this->load->view('network/message', $message); } if ($user_exists) { $this->load->view('network/blog/user_blog_posts', ['data' => $user_data, 'stats' => $user_stats, 'isCurrentUserFollowing' => $isCurrentUserFollowing]); } $this->load->view('footer', ['additionalScripts' => ['profile_page.js']]); $this->load->view('network/blog/user_blog_posts_end', ['data' => $user_data]); } public function getBlogPosts() { $user = (int)$this->input->get('user'); $amount = (int)$this->input->get('amount'); $offset = (int)$this->input->get('offset') * $amount; $user_posts = $this->UserModel->getUserBlogPosts($user, $amount, $offset); $post_user = $this->UserModel->getUserByID($user)[0]; foreach ($user_posts as $post) { $this->load->view('network/blog/blog_post_item', ['data' => $post_user, 'post' => $post]); } } public function publishPost() { if (!isset($_SESSION['user']) || empty($_SESSION['user'])) { ?> input->post('content'); if (strlen($content) >= 10000) { ?> input->post('replyTo'); if ($replyTo !== "-1" && !$this->PostsModel->isUUIDValid($replyTo)) { ?> PostsModel->addReply($_SESSION['user']['ID'], $content, $replyTo); } else { $postID = $this->PostsModel->addPost($_SESSION['user']['ID'], $content); } $media = $this->input->post('postMedia'); if (!empty($media)) { foreach ($media as $entry) { $image = str_replace(' ', '+', $entry['image']); $image = substr($image, strpos($image, ',') + 1); $image = base64_decode($image); $fileUrl = $this->FileModel->uploadFileByContent($image, $entry['name'], $entry['type'], $entry['size']); $this->PostsModel->addImageToPost($postID, $fileUrl); } ?> "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Es wurde kein Nutzername angegeben."]; } $user_data = $this->UserModel->getUser($user); $user_exists = !empty($user_data); if ($user_exists) { $user_data = $user_data[0]; $dateCreated = strtotime($user_data['date_created']); $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']); $title = $user_data['displayname'] . " - Follower"; $isCurrentUserFollowing = false; if (isset($_SESSION['user']['ID'])) $isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']); $_SESSION['currentProfilePage'] = $user_data['ID']; } else { $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."]; $title = "Error - Profile"; } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['profile_page.css']]); if (isset($message)) { $this->load->view('network/message', $message); } if ($user_exists) { $this->load->view('network/user/user_followers', ['data' => $user_data, 'active' => 'followers', 'stats' => $user_stats, 'isCurrentUserFollowing' => $isCurrentUserFollowing, 'followers' => $followers]); } $this->load->view('footer', ['additionalScripts' => ['profile_page.js']]); } public function following($user = "") { if ($user == "") { $title = "Error - Profile"; $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Es wurde kein Nutzername angegeben."]; } $user_data = $this->UserModel->getUser($user); $user_exists = !empty($user_data); if ($user_exists) { $user_data = $user_data[0]; $dateCreated = strtotime($user_data['date_created']); $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']); $title = $user_data['displayname'] . " - Follower"; $isCurrentUserFollowing = false; if (isset($_SESSION['user']['ID'])) $isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $user_data['ID']); $_SESSION['currentProfilePage'] = $user_data['ID']; } else { $message = ["type" => "danger", "message1" => "Dieser Nutzer existiert nicht!", "message2" => "Der angegebene Nutzername konnte nicht gefunden werden."]; $title = "Error - Profile"; } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['profile_page.css']]); if (isset($message)) { $this->load->view('network/message', $message); } if ($user_exists) { $this->load->view('network/user/user_followers', ['data' => $user_data, 'active' => 'following', 'stats' => $user_stats, 'isCurrentUserFollowing' => $isCurrentUserFollowing, 'followers' => $following]); } $this->load->view('footer', ['additionalScripts' => ['profile_page.js']]); } public function switchFollowing() { header('Content-Type: application/json'); if (!isset($_SESSION['currentProfilePage'])) { $response = ['type' => 'error', 'code' => -1]; echo json_encode($response); exit; } $followedUser = $_SESSION['currentProfilePage']; // code 0: not logged in // code 1: same user // code 10: unfollowed // code 11: now following if (!isset($_SESSION['user']['username'])) { $response = ['type' => 'error', 'code' => 0]; echo json_encode($response); exit; } $follower = $_SESSION['user']['ID']; if ($follower == $followedUser) { $response = ['type' => 'error', 'code' => 1]; echo json_encode($response); exit; } if ($this->UserModel->isFollowing($follower, $followedUser)) { $this->UserModel->unfollow($follower, $followedUser); $response = ['type' => 'success', 'code' => 10]; echo json_encode($response); exit; } $this->UserModel->follow($follower, $followedUser); $response = ['type' => 'success', 'code' => 11]; echo json_encode($response); exit; } public function edit($user = "") { if ($user == "") { redirect(base_url('user')); } $user_data = $this->UserModel->getUser($user); $user_exists = !empty($user_data); if ($user_exists) { $user_data = $user_data[0]; // Update Settings $newData = []; // TODO: Error messages // Username if (isset($_POST['username'])) { if (!preg_match('/[^A-Za-z0-9._]/', $_POST['username'])) { if ($this->LoginModel->isAvailable($_POST['username'])) { if (strlen($_POST['username']) >= 4) { $newData['username'] = strtolower($_POST['username']); $newData['displayname'] = $_POST['username']; } else { $_SESSION['profileEditNotification'] .= ""; } } else { $_SESSION['profileEditNotification'] .= ""; } } else { $_SESSION['profileEditNotification'] .= ""; } } // Gender if (isset($_POST['gender'])) { if ($_POST['gender'] == "male" || $_POST['gender'] == "female" || $_POST['gender'] == 'other') { $newData['gender'] = $_POST['gender']; } } // Birth date if (isset($_POST['birthdate-day']) && isset($_POST['birthdate-month'])) { $day = intval($_POST['birthdate-day']); $month = intval($_POST['birthdate-month']); if ($month > 0 && $month <= 12) { $monthDayCount = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if ($day <= $monthDayCount[$month - 1]) { $newData['birthdate'] = $day . '.' . $month . '.'; } } } if (isset($_POST['birthdate-year'])) { } // Language if (isset($_POST['language'])) { $newData['language'] = $_POST['language']; } // Country if (isset($_POST['country'])) { $newData['country'] = $_POST['country']; } // Biography/About if (isset($_POST['biography'])) { $newData['about'] = $_POST['biography']; } // Avatar if (isset($_FILES['avatar'])) { $image = $this->FileModel->uploadCroppedImage('avatar', 4096, $_FILES['avatar']['name'], 500, 500); if ($image != null) $newData['profile_picture'] = $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; unset($_FILES['header']); } // Social Networks if (isset($_POST['social-networks'])) { } // Profile color if (isset($_POST['color'])) { } // E-Mail-Address if (isset($_POST['email'])) { if (isset($_POST['email-password']) && !empty($_POST['email-password'])) { $loginData = $this->LoginModel->getLoginData($_SESSION['user']['username']); if (empty($loginData)) { $_SESSION['profileEditNotification'] .= ""; } else { $loginData = $loginData[0]; $encryptedPassword = $this->LoginModel->getPasswordHash($_POST['email-password'], $loginData['original_name']); if ($loginData['password'] == $encryptedPassword) { $isRegistered = $this->LoginModel->isRegistered($_POST['email']); if ($isRegistered == "") { $trashMail = $this->LoginModel->isTrashMail($_POST['email']); if ($trashMail == '') { $this->LoginModel->changeMailAddress($_POST['email'], $loginData['username']); $_SESSION['profileEditNotification'] .= ""; } else { $_SESSION['profileEditNotification'] .= $trashMail; } } else { $_SESSION['profileEditNotification'] .= $isRegistered; } } else { $_SESSION['profileEditNotification'] .= ""; } } } else { $_SESSION['profileEditNotification'] .= ""; } } // Notifications if (isset($_POST['email-notifications'])) { $newData['receiveEmails'] = filter_var($_POST['email-notifications'], FILTER_VALIDATE_BOOLEAN); } // Newsletter if (isset($_POST['newsletter'])) { $newData['receiveNewsletter'] = filter_var($_POST['newsletter'], FILTER_VALIDATE_BOOLEAN); } // Password if (isset($_POST['passwordNew'])) { if (isset($_POST['passwordOld'])) { $loginData = $this->LoginModel->getLoginData($_SESSION['user']['username']); if (!empty($loginData)) { $loginData = $loginData[0]; $encryptedPassword = $this->LoginModel->getPasswordHash($_POST['passwordOld'], $loginData['original_name']); if ($encryptedPassword == $loginData['password']) { if ($this->LoginModel->checkPassword($_POST['passwordNew'])) { if (isset($_POST['passwordNewRepeat']) && $_POST['passwordNew'] == $_POST['passwordNewRepeat']) { $this->LoginModel->changePassword($_POST['passwordNew'], $loginData['original_name']); $_SESSION['profileEditNotification'] .= ""; } else { $_SESSION['profileEditNotification'] .= ""; } } else { $_SESSION['profileEditNotification'] .= ""; } } else { $_SESSION['profileEditNotification'] .= ""; } } else { $_SESSION['profileEditNotification'] .= ""; } } else { $_SESSION['profileEditNotification'] .= ""; } } if (isset($_POST['showAds'])) { if ($this->hasPermission('user.disableAds')) { $newData['showAds'] = filter_var($_POST['email-notifications'], FILTER_VALIDATE_BOOLEAN); } else { $_SESSION['profileEditNotification'] .= ""; } } if (!empty($newData)) { // Add entry to history unset($user_data['rankName']); unset($_SESSION['user']); $this->UserModel->insertIntoHistory($user_data); // Update profile $this->UserModel->updateProfile($newData, $user_data['ID']); $this->db->cache_delete('user', $user_data['username']); $this->LoginModel->reloadLoginSession($user_data); redirect(base_url(uri_string())); } $user_stats = $this->UserModel->getUserStats($user_data['ID']); $title = $user_data['displayname'] . ' - Profil bearbeiten'; } $this->load->view('header', ['active' => 'profile', 'title' => $title, 'additionalStyles' => ['lib/selectize.css', 'lib/selectize.bootstrap3.css', 'lib/bootstrap-colorpicker.min.css', 'profile_page.css']]); $editMessage = isset($_SESSION['profileEditNotification']) ? $_SESSION['profileEditNotification'] : ""; $_SESSION['profileEditNotification'] = ""; if (isset($message)) { $this->load->view('network/message', $message); } if ($user_exists) { $this->load->view('network/user/profile_edit', ['message' => $editMessage, 'data' => $user_data, 'stats' => $user_stats]); } $this->load->view('footer', ['additionalScripts' => ['lib/selectize.js', 'lib/bootstrap-colorpicker.min.js', 'profile_page.js', 'profile_edit.js']]); } public function single_post($username = null, $uuid = null, $origin = null) { $origin = isset($_GET['o']) ? $_GET['o'] : null; if ($origin == null) { $origin = base_url('user/' . $username); } else { $origin = base64_decode(urldecode($origin)); } $this->load->view('header', ['active' => 'profile', 'title' => 'Test']); $this->load->view('network/posts/user_post_page', ['origin' => $origin, 'username' => $username, 'uuid' => $uuid]); $this->load->view('footer', ['additionalScripts' => ['single-post-page.js']]); } public function single_post_data($username = null, $uuid = null) { $message = ""; $post = []; $replies = []; if ($username == null) { $message .= ''; goto display; } if ($uuid == null) { $message .= ''; goto display; } $user = $this->UserModel->getUser($username); if (empty($user)) { $message .= ''; goto display; } $user = $user[0]; $post = $this->PostsModel->getPostDetails($user['ID'], $uuid); if (empty($post)) { $message .= ''; goto display; } $post = $post[0]; $replies = $this->PostsModel->getPostReplies($post['ID']); display: $this->load->view('network/posts/user_post_content', ['message' => $message, 'post' => $post, 'replies' => $replies]); } }