diff --git a/system/admin/admin.php b/system/admin/admin.php index b1831af..8daf023 100644 --- a/system/admin/admin.php +++ b/system/admin/admin.php @@ -39,37 +39,149 @@ function create_user($userName, $password, $role = "user") } } -// Create a session -function session($user, $pass) +// Add author +function add_author($title, $user, $password, $content) { - $user_file = 'config/users/' . $user . '.ini'; - if (!file_exists($user_file)) { - return $str = '
'; + create_user($user, $password); + + $user_title = safe_html($title); + $user_content = '' . "\n\n" . $content; + + if (!empty($user_title) && !empty($user_content)) { + + $user_content = stripslashes($user_content); + + $dir = 'content/' . $user . '/'; + $filename = 'content/' . $user . '/author.md'; + if (is_dir($dir)) { + file_put_contents($filename, print_r($user_content, true)); + } else { + mkdir($dir, 0775, true); + file_put_contents($filename, print_r($user_content, true)); + } + rebuilt_cache('all'); + $redirect = site_url() . 'admin/authors'; + header("Location: $redirect"); + } +} + +// Edit author +function edit_author($name, $title, $user, $password, $content) +{ + $name = get_author_info($name); + $name = $name[0]; + + create_user($user, $password, $name->role); + + $user_title = safe_html($title); + $user_content = '' . "\n\n" . $content; + + if (!empty($user_title) && !empty($user_content)) { + + $user_content = stripslashes($user_content); + + $dir = 'content/' . $user . '/'; + $filename = 'content/' . $user . '/author.md'; + if (is_dir($dir)) { + file_put_contents($filename, print_r($user_content, true)); + } else { + mkdir($dir, 0775, true); + file_put_contents($filename, print_r($user_content, true)); + } + + // Jika username lama tidak sama dengan yang baru maka file username lama akan dihapus + if($name->username !== $user) { + copy_folders('content/' . $name->username, 'content/' . $user); + remove_folders('content/' . $name->username); + // Memastikan kalau username sesi sama dengan username lama + if($_SESSION[config("site.url")]['user'] === $name->username) { + if (session_status() == PHP_SESSION_NONE) session_start(); + $_SESSION[config("site.url")]['user'] = $user; + } + unlink($name->file); + } + + rebuilt_cache('all'); + $redirect = site_url() . 'admin/authors'; + header("Location: $redirect"); } +} +// Check old password +function valid_password($user, $pass) +{ $user_enc = user('encryption', $user); $user_pass = user('password', $user); $user_role = user('role', $user); if ($user_enc == "password_hash") { if (password_verify($pass, $user_pass)) { - if (session_status() == PHP_SESSION_NONE) session_start(); if (password_needs_rehash($user_pass, PASSWORD_DEFAULT)) { update_user($user, $pass, $user_role); } - $_SESSION[config("site.url")]['user'] = $user; - header('location: admin'); + return true; } else { - return $str = ''; + return false; } } else if (old_password_verify($pass, $user_enc, $user_pass)) { - if (session_status() == PHP_SESSION_NONE) session_start(); update_user($user, $pass, $user_role); + return true; + } else { + return false; + } +} + +// Check username exists +function username_exists($username, $user = null) +{ + // Jika username baru tidak sama dengan username lama + if($username !== $user || $user === null) { + $file = 'config/users/' . $username . '.ini'; + if(file_exists($file)) + { + return true; + } else { + return false; + } + } else { // Jika username baru sama dengan username lama + $file = 'config/users/' . $username . '.ini'; + if(!file_exists($file)) + { + return true; + } else { + return false; + } + } +} + +// Matching password and password confirm +function password_match($password, $confirm) +{ + if($password === $confirm) + { + return true; + } else { + return false; + } +} + +// Create a session +function session($user, $pass) +{ + $user_file = 'config/users/' . $user . '.ini'; + if (!file_exists($user_file)) { + return $str = ''; + } + + if(valid_password($user, $pass)) + { + if (session_status() == PHP_SESSION_NONE) session_start(); $_SESSION[config("site.url")]['user'] = $user; header('location: admin'); } else { return $str = ''; } + } function old_password_verify($pass, $user_enc, $user_pass) @@ -702,6 +814,94 @@ function edit_frontpage($title, $content) } } +// Move folder and files +function copy_folders($oldfolder, $newfolder) +{ + if (is_dir($oldfolder)) + { + $dir = opendir($oldfolder); + if (!is_dir($newfolder)) + { + mkdir($newfolder, 0775, true); + } + while (($file = readdir($dir))) + { + if (($file != '.') && ($file != '..')) + { + if (is_dir($oldfolder . '/' . $file)) + { + copy_folders($oldfolder . '/' . $file, $newfolder . '/' . $file); + } + else + { + copy($oldfolder . '/' . $file, $newfolder . '/' . $file); + } + } + } + closedir($dir); + } +} + + +// Delete folder and files +function remove_folders($dir) +{ + if (false === file_exists($dir)) { + return false; + } + + $files = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($files as $fileinfo) { + if ($fileinfo->isDir()) { + if (false === rmdir($fileinfo->getRealPath())) { + return false; + } + } else { + if (false === unlink($fileinfo->getRealPath())) { + return false; + } + } + } + + return rmdir($dir); +} + +// Delete author +function delete_author($file, $destination) +{ + if (!login()) + return null; + $deleted_content = $file; + + if (!empty($deleted_content)) { + + $str = explode('/', $file); + $str = str_replace('.ini', '', $str); + $username = $str[2]; + + $dir = 'content/' . $username . '/'; + + $user = $_SESSION[config("site.url")]['user']; + // Melarang untuk menghapus diri sendiri, karena bunuh diri itu dosa :D + if($user !== $username) { + remove_folders($dir); + unlink($deleted_content); + rebuilt_cache('all'); + } + if ($destination == 'author') { + $redirect = site_url(); + header("Location: $redirect"); + } else { + $redirect = site_url() . $destination; + header("Location: $redirect"); + } + } +} + // Delete blog post function delete_post($file, $destination) { diff --git a/system/admin/views/add-author.html.php b/system/admin/views/add-author.html.php new file mode 100644 index 0000000..5b65667 --- /dev/null +++ b/system/admin/views/add-author.html.php @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + +| + | + | + |
|---|---|---|
| title ?> | +username ?> | +username): ?> | +
title);?>
+ \ No newline at end of file diff --git a/system/admin/views/edit-author.html.php b/system/admin/views/edit-author.html.php new file mode 100644 index 0000000..912ca4c --- /dev/null +++ b/system/admin/views/edit-author.html.php @@ -0,0 +1,115 @@ + +title; + $aUsername = $a->username; + $aContent = $a->content; +} + +?> + + + + + + + + + + + + + + ++ + +
+ + +