From 7ef5f2513780d611034ebd9ae17bc68a3820659d Mon Sep 17 00:00:00 2001 From: Floorb <132411956+Neetpone@users.noreply.github.com> Date: Sun, 29 Aug 2021 01:26:29 -0400 Subject: [PATCH] Some code --- admin/js/jquery.dataTables.js | 4 +- composer.json | 5 ++ composer.lock | 44 +++++----- discover.php | 12 +-- .../SessionHelper.php} | 10 +-- includes/{models => Models}/Paste.php | 19 ++++- includes/{models => Models}/Tag.php | 24 ++---- includes/{models => Models}/User.php | 7 +- includes/{models => Models}/UserSession.php | 2 + includes/common.php | 14 ++-- index.php | 82 +++++++++++-------- paste.php | 2 +- theme/bulma/common.php | 2 +- theme/bulma/discover.php | 6 +- user.php | 5 ++ vendor/composer/autoload_files.php | 8 +- vendor/composer/autoload_psr4.php | 3 +- vendor/composer/autoload_static.php | 17 ++-- vendor/composer/installed.json | 56 ++++++------- vendor/composer/installed.php | 36 ++++---- vendor/illuminate/collections/Collection.php | 8 +- .../Container/ContextualBindingBuilder.php | 2 +- .../BroadcastableModelEventOccurred.php | 11 +++ .../database/Eloquent/BroadcastsEvents.php | 4 + .../Concerns/QueriesRelationships.php | 66 +++++++++++++++ vendor/illuminate/database/Eloquent/Model.php | 26 ++++++ vendor/illuminate/support/Facades/Http.php | 2 +- 27 files changed, 314 insertions(+), 163 deletions(-) rename includes/{SessionManager.class.php => Helpers/SessionHelper.php} (88%) rename includes/{models => Models}/Paste.php (77%) rename includes/{models => Models}/Tag.php (75%) rename includes/{models => Models}/User.php (81%) rename includes/{models => Models}/UserSession.php (90%) diff --git a/admin/js/jquery.dataTables.js b/admin/js/jquery.dataTables.js index 8a359fe..e12f1a3 100644 --- a/admin/js/jquery.dataTables.js +++ b/admin/js/jquery.dataTables.js @@ -8389,8 +8389,8 @@ DataTable.settings = []; /** - * Object models container, for the various models that DataTables has - * available to it. These models define the objects that are used to hold + * Object Models container, for the various Models that DataTables has + * available to it. These Models define the objects that are used to hold * the active state and configuration of the table. * @namespace */ diff --git a/composer.json b/composer.json index dfeb688..0c7318b 100644 --- a/composer.json +++ b/composer.json @@ -19,5 +19,10 @@ "scrivo/highlight.php": "v9.18.1.7", "erusev/parsedown": "^1.7", "illuminate/database": "^8.56" + }, + "autoload": { + "psr-4": { + "PonePaste\\": "includes/" + } } } diff --git a/composer.lock b/composer.lock index 1660a11..a92b356 100644 --- a/composer.lock +++ b/composer.lock @@ -153,16 +153,16 @@ }, { "name": "illuminate/collections", - "version": "v8.56.0", + "version": "v8.57.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "dd68b267ada1893126d53792b6c57b19e95a9d04" + "reference": "673d71d9db2827b04c096c4fe9739edddea14ac4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/dd68b267ada1893126d53792b6c57b19e95a9d04", - "reference": "dd68b267ada1893126d53792b6c57b19e95a9d04", + "url": "https://api.github.com/repos/illuminate/collections/zipball/673d71d9db2827b04c096c4fe9739edddea14ac4", + "reference": "673d71d9db2827b04c096c4fe9739edddea14ac4", "shasum": "" }, "require": { @@ -203,11 +203,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-08-23T08:57:48+00:00" + "time": "2021-08-25T13:02:21+00:00" }, { "name": "illuminate/container", - "version": "v8.56.0", + "version": "v8.57.0", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", @@ -258,16 +258,16 @@ }, { "name": "illuminate/contracts", - "version": "v8.56.0", + "version": "v8.57.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "e4fa45682e8b558ccca02829e8e6e521ff9458d2" + "reference": "7354badf7b57eae805a56d1163fb023e0f58a639" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/e4fa45682e8b558ccca02829e8e6e521ff9458d2", - "reference": "e4fa45682e8b558ccca02829e8e6e521ff9458d2", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/7354badf7b57eae805a56d1163fb023e0f58a639", + "reference": "7354badf7b57eae805a56d1163fb023e0f58a639", "shasum": "" }, "require": { @@ -302,20 +302,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-08-19T13:06:39+00:00" + "time": "2021-08-24T21:29:28+00:00" }, { "name": "illuminate/database", - "version": "v8.56.0", + "version": "v8.57.0", "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "18c2660dd2d5398263907d5717f0a611b901a05a" + "reference": "828d1cd4ee824c405f6edc52ab3d333b549be4ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/18c2660dd2d5398263907d5717f0a611b901a05a", - "reference": "18c2660dd2d5398263907d5717f0a611b901a05a", + "url": "https://api.github.com/repos/illuminate/database/zipball/828d1cd4ee824c405f6edc52ab3d333b549be4ee", + "reference": "828d1cd4ee824c405f6edc52ab3d333b549be4ee", "shasum": "" }, "require": { @@ -370,11 +370,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-08-19T19:38:53+00:00" + "time": "2021-08-26T14:48:34+00:00" }, { "name": "illuminate/macroable", - "version": "v8.56.0", + "version": "v8.57.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -420,16 +420,16 @@ }, { "name": "illuminate/support", - "version": "v8.56.0", + "version": "v8.57.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "586f77ee7f8568ecc60866f171074dccfbe69db5" + "reference": "5e8f059a5d1f298324e847822b997778a3472128" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/586f77ee7f8568ecc60866f171074dccfbe69db5", - "reference": "586f77ee7f8568ecc60866f171074dccfbe69db5", + "url": "https://api.github.com/repos/illuminate/support/zipball/5e8f059a5d1f298324e847822b997778a3472128", + "reference": "5e8f059a5d1f298324e847822b997778a3472128", "shasum": "" }, "require": { @@ -484,7 +484,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-08-22T17:54:36+00:00" + "time": "2021-08-25T13:04:37+00:00" }, { "name": "nesbot/carbon", diff --git a/discover.php b/discover.php index 2932be9..48aa975 100644 --- a/discover.php +++ b/discover.php @@ -3,6 +3,8 @@ define('IN_PONEPASTE', 1); require_once('includes/common.php'); require_once('includes/functions.php'); +use PonePaste\Models\Paste; + function transformPasteRow(Paste $row) : array { return [ 'id' => $row['id'], @@ -16,11 +18,11 @@ function transformPasteRow(Paste $row) : array { ]; } -$popular_pastes = Paste::getMostViewed()->map('transformPasteRow'); -$monthly_popular_pastes = Paste::getMonthPopular()->map('transformPasteRow'); -$recent_pastes = Paste::getRecent()->map('transformPasteRow'); -$updated_pastes = Paste::getRecentlyUpdated()->map('transformPasteRow'); -$random_pastes = Paste::getRandom()->map('transformPasteRow'); +$popular_pastes = Paste::getMostViewed();//->map('transformPasteRow'); +$monthly_popular_pastes = Paste::getMonthPopular();//->map('transformPasteRow'); +$recent_pastes = Paste::getRecent();//->map('transformPasteRow'); +$updated_pastes = Paste::getRecentlyUpdated();//->map('transformPasteRow'); +$random_pastes = Paste::getRandom();//->map('transformPasteRow'); // Theme $page_template = 'discover'; diff --git a/includes/SessionManager.class.php b/includes/Helpers/SessionHelper.php similarity index 88% rename from includes/SessionManager.class.php rename to includes/Helpers/SessionHelper.php index 2fe61bb..0b45518 100644 --- a/includes/SessionManager.class.php +++ b/includes/Helpers/SessionHelper.php @@ -2,8 +2,8 @@ namespace PonePaste\Helpers; use DateTime; - -require_once(__DIR__ . '/models/UserSession.php'); +use PonePaste\Models\User; +use PonePaste\Models\UserSession; class SessionHelper { public const REMEMBER_TOKEN_COOKIE = '_ponepaste_token'; @@ -27,14 +27,14 @@ class SessionHelper { public static function destroySession() { $token = $_COOKIE[SessionHelper::REMEMBER_TOKEN_COOKIE]; - \UserSession::where('token', $token)->delete(); + UserSession::where('token', $token)->delete(); unset($_COOKIE[SessionHelper::REMEMBER_TOKEN_COOKIE]); setcookie(SessionHelper::REMEMBER_TOKEN_COOKIE, null, time() - 3600); } private static function currentUserFromRememberToken(string $remember_token) { - $session = \UserSession + $session = UserSession ::with('user') ->where('token', $remember_token) ->first(); @@ -61,6 +61,6 @@ class SessionHelper { } - return \User::find(intval($_SESSION['user_id'])); + return User::find(intval($_SESSION['user_id'])); } } \ No newline at end of file diff --git a/includes/models/Paste.php b/includes/Models/Paste.php similarity index 77% rename from includes/models/Paste.php rename to includes/Models/Paste.php index 1ed3fcc..30a32aa 100644 --- a/includes/models/Paste.php +++ b/includes/Models/Paste.php @@ -1,13 +1,15 @@ belongsTo(User::class); } @@ -16,6 +18,19 @@ class Paste extends Model { return $this->belongsToMany(Tag::class, 'paste_taggings'); } + public function replaceTags(array $tags) { + $this->tags()->detach(); + + foreach ($tags as $tagName) { + $tag = Tag::getOrCreateByName($tagName); + $this->tags()->attach($tag); + } + + // FIXME: We need to get rid of tagsys. + $this->tagsys = implode(',', $tags); + $this->save(); + } + public static function getRecent(int $count = 10) : Collection { return Paste::with('user') ->orderBy('created_at', 'DESC') diff --git a/includes/models/Tag.php b/includes/Models/Tag.php similarity index 75% rename from includes/models/Tag.php rename to includes/Models/Tag.php index 2ec9e0c..801072b 100644 --- a/includes/models/Tag.php +++ b/includes/Models/Tag.php @@ -1,34 +1,24 @@ querySelectOne('SELECT id, name, slug FROM tags WHERE name = ?', [$name])) { - return new Tag($row); + if ($tag = Tag::where('name', $name)->first()) { + return $tag; } - $new_slug = Tag::encodeSlug($name); - $new_tag_id = $conn->queryInsert('INSERT INTO tags (name, slug) VALUES (?, ?)', [$name, $new_slug]); - - return new Tag([ - 'id' => $new_tag_id, + return Tag::create([ 'name' => $name, - 'slug' => $new_slug + 'slug' => Tag::encodeSlug($name) ]); } - public static function findBySlug(DatabaseHandle $conn, string $slug) : Tag|null { - if ($row = $conn->querySelectOne('SELECT id, name, slug FROM tags WHERE slug = ?', [$slug])) { - return new Tag($row); - } - - return null; - } - public static function replacePasteTags(DatabaseHandle $conn, int $pasteId, array $tags) { $conn->query('DELETE FROM paste_taggings WHERE paste_id = ?', [$pasteId]); diff --git a/includes/models/User.php b/includes/Models/User.php similarity index 81% rename from includes/models/User.php rename to includes/Models/User.php index c46ae5e..18fff9c 100644 --- a/includes/models/User.php +++ b/includes/Models/User.php @@ -1,6 +1,7 @@ belongsToMany(Paste::class, 'user_favourites'); } - /*public function pastes() { + public function pastes() { return $this->hasMany(Paste::class); - }*/ + } } diff --git a/includes/models/UserSession.php b/includes/Models/UserSession.php similarity index 90% rename from includes/models/UserSession.php rename to includes/Models/UserSession.php index a5e250b..44d2e32 100644 --- a/includes/models/UserSession.php +++ b/includes/Models/UserSession.php @@ -1,4 +1,6 @@ id}"; } - return "/paste.php?id=${paste_id}"; + return "/paste.php?id={$paste->id}"; } -function urlForMember(string $member_name) : string { +function urlForMember(User $member_name) : string { if (PP_MOD_REWRITE) { return '/user/' . urlencode($member_name); } diff --git a/index.php b/index.php index b41024e..e90eda7 100644 --- a/index.php +++ b/index.php @@ -1,4 +1,9 @@ user_id === (int) $conn->querySelectOne('SELECT user_id FROM pastes WHERE id = ?', [$_POST['paste_id']])['user_id']) { $paste_id = intval($_POST['paste_id']); - $conn->query( - "UPDATE pastes SET title = ?, content = ?, visible = ?, code = ?, expiry = ?, password = ?, encrypt = ?, ip = ?, updated_at = NOW() - WHERE id = ?", - [$p_title, $p_content, $p_visible, $p_code, $expires, $p_password, $p_encrypt, $ip, $paste_id] - ); + $paste = Paste::find(intval($_POST['paste_id'])); + $paste->update([ + 'title' => $paste_title, + 'content' => $paste_content, + 'visible' => $paste_visibility, + 'code' => $paste_code, + 'expiry' => $expires, + 'password' => $paste_password, + 'encrypt' => $paste_encrypt, + 'ip' => $ip + ]); - Tag::replacePasteTags($conn, $paste_id, Tag::parseTagInput($tag_input)); + $paste->replaceTags(Tag::parseTagInput($tag_input)); } else { $error = 'You must be logged in to do that.'; } } else { - $paste_owner = $current_user ? $current_user->user_id : 1; /* 1 is the guest user's user ID */ + $paste_owner = $current_user ?: User::find(1); /* 1 is the guest user's user ID */ + $paste = new Paste([ + 'title' => $paste_title, + 'code' => $paste_code, + 'content' => $paste_content, + 'visible' => $paste_visibility, + 'expiry' => $expires, + 'password' => $paste_password, + 'encrypt' => $paste_encrypt, + 'created_at' => date_create(), + 'ip' => $ip + ]); - $paste_id = $conn->queryInsert( - "INSERT INTO pastes (title, content, visible, code, expiry, password, encrypt, user_id, created_at, ip, views) VALUES - (?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, 0)", - [$p_title, $p_content, $p_visible, $p_code, $expires, $p_password, $p_encrypt, $paste_owner, $ip] - ); + $paste->user()->associate($paste_owner); + $paste->save(); - Tag::replacePasteTags($conn, $paste_id, Tag::parseTagInput($tag_input)); + $paste->replaceTags(Tag::parseTagInput($tag_input)); + + $paste_id = $new_paste->id; if ($p_visible == '0') { addToSitemap($paste_id, $priority, $changefreq, $mod_rewrite); @@ -153,8 +171,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } // Redirect to paste on successful entry, or on successful edit redirect back to edited paste - if (isset($paste_id)) { - header('Location: ' . urlForPaste($paste_id)); + if (isset($paste)) { + header('Location: ' . urlForPaste($paste)); die(); } } diff --git a/paste.php b/paste.php index 0bcf0cf..646c4eb 100644 --- a/paste.php +++ b/paste.php @@ -3,9 +3,9 @@ define('IN_PONEPASTE', 1); require_once('includes/common.php'); require_once('includes/functions.php'); require_once('includes/passwords.php'); -require_once('includes/models/Paste.php'); use Highlight\Highlighter; +use PonePaste\Models\Paste; function rawView($content, $p_code) { if ($p_code) { diff --git a/theme/bulma/common.php b/theme/bulma/common.php index 5a1d024..6b392d4 100644 --- a/theme/bulma/common.php +++ b/theme/bulma/common.php @@ -93,7 +93,7 @@ $flashes = getFlashes();