705 lines
35 KiB
PHP
705 lines
35 KiB
PHP
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
use Coduo\PHPHumanizer\DateTimeHumanizer;
|
|
|
|
class User extends MY_Controller
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct('profile', 'language_names', 'country_names');
|
|
$this->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 {
|
|
$userData = $this->UserModel->getUser($user);
|
|
$userExists = !empty($userData);
|
|
if ($userExists) {
|
|
$userData = $userData[0];
|
|
$userStats = $this->UserModel->getUserStats($userData['ID']);
|
|
|
|
$userPosts = $this->PostsModel->getUserPosts($userData['ID'], 3, 0, 192);
|
|
$userComments = $this->UserModel->getUserComments($userData['ID'], 3, 0);
|
|
$userBlogPosts = $this->UserModel->getUserBlogPosts($userData['ID'], 3, 0);
|
|
|
|
$dateCreated = strtotime($userData['dateCreated']);
|
|
$userData['time_existing'] = DateTimeHumanizer::difference(new DateTime(), new DateTime("@$dateCreated"), $_SESSION['site_lang']);
|
|
$title = $userData['displayname'] . " - Profile";
|
|
$isCurrentUserFollowing = false;
|
|
if (isset($_SESSION['user']['ID']))
|
|
$isCurrentUserFollowing = $this->UserModel->isFollowing($_SESSION['user']['ID'], $userData['ID']);
|
|
|
|
$_SESSION['currentProfilePage'] = $userData['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($userData) && isset($userStats) && isset($userPosts) && isset($userComments) && isset($userBlogPosts)) {
|
|
$this->load->view('network/user/profile_page', ['data' => $userData, 'stats' => $userStats, 'posts' => $userPosts, 'comments' => $userComments, 'blog_posts' => $userBlogPosts, 'isCurrentUserFollowing' => $isCurrentUserFollowing]);
|
|
}
|
|
$this->load->view('footer', ['additionalScripts' => ['profile_page.js', 'comment-item.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['dateCreated']);
|
|
$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', 'comment-item.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['dateCreated']);
|
|
$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['dateCreated']);
|
|
$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 uploadPostMedia()
|
|
{
|
|
if (!isset($_SESSION['user']) || empty($_SESSION['user']))
|
|
redirect(base_url());
|
|
|
|
if (empty($_FILES) || !isset($_FILES['postMedia']))
|
|
redirect(base_url());
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
$file = $_FILES['postMedia'];
|
|
list('name' => $name, 'type' => $type) = $file;
|
|
|
|
switch (explode('/', $type)[0]) {
|
|
case 'video':
|
|
$path = $this->FileModel->uploadVideo('postMedia', 0, $name, 1920, $_SESSION['user']['username']);
|
|
$mediaType = 'video';
|
|
break;
|
|
case 'image':
|
|
$path = $this->FileModel->uploadImage('postMedia', 0, $name, 1920, $_SESSION['user']['username']);
|
|
$mediaType = 'image';
|
|
break;
|
|
default:
|
|
exit;
|
|
break;
|
|
}
|
|
|
|
echo json_encode(['success' => true, 'type' => $mediaType, 'path' => $path]);
|
|
}
|
|
|
|
public function deletePostMedia()
|
|
{
|
|
if (!isset($_SESSION['user']) || empty($_SESSION['user']))
|
|
redirect(base_url());
|
|
|
|
if (empty($_POST) || !isset($_POST['path']))
|
|
redirect(base_url());
|
|
|
|
$url = $_POST['path'];
|
|
|
|
$filePath = $this->FileModel->getFilePath(substr($url, 3), $_SESSION['user']['ID']);
|
|
|
|
if ($filePath != null)
|
|
unlink($filePath);
|
|
}
|
|
|
|
public function publishPost()
|
|
{
|
|
header('Content-Type: application/json');
|
|
if (!isset($_SESSION['user']) || empty($_SESSION['user'])) {
|
|
echo json_encode(['success' => false,
|
|
'title' => lang('post_error_login_title'),
|
|
'message' => lang('post_error_login_lines')
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
$content = $this->input->post('content');
|
|
$content = trim($content);
|
|
if (strlen($content) >= 10000) {
|
|
echo json_encode(['success' => false,
|
|
'title' => lang('post_error_too_long_title'),
|
|
'message' => lang('post_error_too_long_lines')
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
if (strlen($content) == 0 && empty($media)) {
|
|
echo json_encode(['success' => false,
|
|
'title' => lang('post_error_no_content_title'),
|
|
'message' => lang('post_error_no_content_lines')
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
$replyTo = $this->input->post('replyTo');
|
|
if ($replyTo !== "-1" && !$this->PostsModel->isHashIDValid($replyTo)) {
|
|
echo json_encode(['success' => false,
|
|
'title' => lang('post_error_reply_title'),
|
|
'message' => lang('post_error_reply_lines')
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
if ($replyTo !== "-1") {
|
|
$postID = $this->PostsModel->addReply($_SESSION['user']['ID'], $content, $replyTo);
|
|
} else {
|
|
$postID = $this->PostsModel->addPost($_SESSION['user']['ID'], $content);
|
|
}
|
|
|
|
$media = $this->input->post('postMedia');
|
|
if (!empty($media)) {
|
|
$allowedMedia = [];
|
|
foreach ($media as $entry) {
|
|
$name = substr($entry['path'], 3);
|
|
$file = $this->FileModel->getFileID($name, $_SESSION['user']['ID']);
|
|
|
|
if (empty($file)) {
|
|
continue;
|
|
}
|
|
|
|
$fileID = $file[0]['ID'];
|
|
if ($entry['type'] === 'video' || $entry['type'] === 'audio') {
|
|
$allowedMedia = [
|
|
[
|
|
'type' => $entry['type'],
|
|
'fileID' => $fileID
|
|
]
|
|
];
|
|
break;
|
|
}
|
|
|
|
if (sizeof($allowedMedia) < 4) {
|
|
$allowedMedia[] = [
|
|
'type' => $entry['type'],
|
|
'fileID' => $fileID
|
|
];
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach ($allowedMedia as $entry) {
|
|
$this->PostsModel->addMediaToPost($postID, $entry['type'], $entry['fileID']);
|
|
}
|
|
}
|
|
|
|
echo json_encode(['success' => true,
|
|
'title' => lang('post_success_title'),
|
|
'message' => lang('post_success_lines'),
|
|
'buttons' => [
|
|
[
|
|
'type' => 'default',
|
|
'text' => lang('post_success_no')
|
|
],
|
|
[
|
|
'type' => 'primary',
|
|
'action' => base_url('user/' . $_SESSION['user']['username'] . '/posts'),
|
|
'text' => lang('post_success_yes')
|
|
]
|
|
]
|
|
]);
|
|
}
|
|
|
|
public function followers($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['dateCreated']);
|
|
$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['dateCreated']);
|
|
$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
|
|
|
|
foreach ($_POST as $key => $item) {
|
|
if (isset($user_data[$key]) && $user_data[$key] == $item) {
|
|
unset($_POST[$key]);
|
|
}
|
|
}
|
|
|
|
// 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'] .= "<div class='alert alert-danger' role='alert'><b>Zu kurzer Nutzername!</b> Dein Name muss 4 Zeichen oder mehr enthalten.</div>";
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Nutzername bereits vergeben!</b> Ein anderer Nutzer hat anscheinend diesen Namen bereits gewählt.</div>";
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Ungültiger Nutzername!</b> Dein Name darf nur Groß- (A-Z) und Kleinbuchstaben (a-z), Zahlen (0-9) und Punkte (.) sowie Unterstriche (_) enthalten.</div>";
|
|
}
|
|
}
|
|
// 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['about'])) {
|
|
$newData['about'] = trim($_POST['about']);
|
|
}
|
|
// Avatar
|
|
if (isset($_FILES['avatar'])) {
|
|
$image = $this->FileModel->uploadCroppedImage('avatar', 4096, $_FILES['avatar']['name'], 500, 500);
|
|
if ($image != null)
|
|
$newData['profilePicture'] = $image;
|
|
unset($_FILES['avatar']);
|
|
}
|
|
// Header
|
|
if (isset($_FILES['header'])) {
|
|
$image = $this->FileModel->uploadImage('header', 4096, $_FILES['header']['name'], 1920);
|
|
if ($image != null)
|
|
$newData['headerImage'] = $image;
|
|
unset($_FILES['header']);
|
|
}
|
|
// Social Networks
|
|
if (isset($_POST['socialNetworks'])) {
|
|
|
|
}
|
|
// 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'] .= "<div class='alert alert-danger' role='alert'><b>Ungültiger Account</b> Anscheinend versuchst du die E-Mail-Adresse eines nicht existierenden Accounts zu ändern. Sollte es sich um einen Fehler handeln, kontaktiere bitte das Website-Team!</div>";
|
|
} 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'] .= "<div class='alert alert-warning' role='alert'><b>Deine E-Mail-Adresse wurde geändert!</b> Nun musst du nur noch in deinem Postfach vorbeischauen und die neue Adresse aktivieren.</div>";
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= $trashMail;
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= $isRegistered;
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Ungültiges Passwort!</b> Es scheint als wäre das eingegebene Passwort nicht mit dem richtigen übereinstimmend.</div>";
|
|
}
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Bitte gib dein Passwort ein!</b> Das Ändern der E-Mail-Adresse ist ein tiefgreifender Eingriff in den Account. Daher benötigen wir zur Sicherheit nochmal dein Passwort.</div>";
|
|
}
|
|
}
|
|
|
|
// 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['originalName']);
|
|
if ($encryptedPassword == $loginData['password']) {
|
|
if ($this->LoginModel->checkPassword($_POST['passwordNew'])) {
|
|
if (isset($_POST['passwordNewRepeat']) && $_POST['passwordNew'] == $_POST['passwordNewRepeat']) {
|
|
$this->LoginModel->changePassword($_POST['passwordNew'], $loginData['originalName']);
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-success' role='alert'><b>Dein Passwort wurde geändert!</b> Du kannst dich nun damit einloggen</div>";
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Wiederholtes Passwort falsch!</b> Das Passwort, das du wiederholt hast, stimmt nicht mit dem eigentlichen überein.</div>";
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Zu unsicheres Passwort!</b> Dein Passwort sollte mindest 8 Zeichen lang sein und jeweils einen Groß-, einen Kleinbuchstaben, eine Zahl und ein Sonderzeichen enthalten.</div>";
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Altes Passwort falsch!</b> Dein altes eingegebenes Passwort ist falsch!</div>";
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Ungültiger Account</b> Anscheinend versuchst du die E-Mail-Adresse eines nicht existierenden Accounts zu ändern. Sollte es sich um einen Fehler handeln, kontaktiere bitte das Website-Team!</div>";
|
|
}
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Altes Passwort fehlend!</b> Bitte gib dein altes Passwort ebenfalls ein!</div>";
|
|
}
|
|
}
|
|
if (isset($_POST['showAds'])) {
|
|
if ($this->hasPermission('user.disableAds')) {
|
|
$newData['showAds'] = filter_var($_POST['email-notifications'], FILTER_VALIDATE_BOOLEAN);
|
|
} else {
|
|
$_SESSION['profileEditNotification'] .= "<div class='alert alert-danger' role='alert'><b>Du bist dazu nicht berechtigt!</b> Um diese Einstellung zu verändern, musst du mindestens ein Premium-Nutzer oder höher sein!</div>";
|
|
}
|
|
}
|
|
if (!empty($newData)) {
|
|
// Add entry to history
|
|
unset($user_data['rankName']);
|
|
unset($_SESSION['user']);
|
|
$this->UserModel->insertIntoHistory($newData);
|
|
// 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, $hashID = null)
|
|
{
|
|
if ($username == null) {
|
|
echo '<div class="alert alert-danger" role="alert"><b>Es wurde kein Nutzer angegeben!</b> Es können keine Posts von einem undefinierten Nutzer gefunden werden.</div>';
|
|
exit;
|
|
}
|
|
|
|
if ($hashID == null) {
|
|
echo '<div class="alert alert-danger" role="alert"><b>Es wurde keine Post-ID angegeben!</b> Es können keine undefinierten Posts gefunden werden.</div>';
|
|
exit;
|
|
}
|
|
|
|
$user = $this->UserModel->getUser($username);
|
|
if (empty($user)) {
|
|
echo '<div class="alert alert-warning" role="alert"><b>Es wurde kein Nutzer mit dem angegebenen Namen gefunden!</b> Vielleicht kannst du ja diese Lücke füllen?</div>';
|
|
exit;
|
|
}
|
|
$user = $user[0];
|
|
|
|
$post = $this->PostsModel->getPostDetails($user['ID'], $hashID);
|
|
if (empty($post)) {
|
|
echo '<div class="alert alert-warning" role="alert"><b>Es wurde kein Post mit der angegebenen ID gefunden!</b> Vielleicht kannst du ja diesen neuen Content erschaffen?</div>';
|
|
exit;
|
|
}
|
|
$post = $post[0];
|
|
|
|
$replies = $this->PostsModel->getPostReplies($post['ID']);
|
|
|
|
display:
|
|
$this->load->view('network/posts/user_post_content', ['post' => $post, 'replies' => $replies]);
|
|
|
|
}
|
|
}
|