From 123b08823d1485b9679a652a42d35db574aceddd Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 29 Aug 2023 01:09:55 +0300 Subject: [PATCH] implement comments, init magnet page --- README.md | 4 +- database/yggtracker.mwb | Bin 27617 -> 28407 bytes src/config/app.php.example | 6 + src/library/database.php | 97 ++++ src/public/action.php | 240 +++++++++ .../assets/theme/default/css/common.css | 2 + src/public/edit.php | 7 +- src/public/index.php | 15 +- src/public/magnet.php | 476 ++++++++++++++++++ 9 files changed, 839 insertions(+), 8 deletions(-) create mode 100644 src/public/magnet.php diff --git a/README.md b/README.md index d01055b..e407672 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ git checkout -b my-pr-branch-name + [x] Options + [x] Public + [x] Sensitive - + [ ] Comments + + [x] Comments + [ ] Features + [x] Scrape trackers + [x] Peers @@ -71,7 +71,7 @@ git checkout -b my-pr-branch-name + [x] Leechers + [x] Stars + [x] Downloads - + [ ] Comments + + [x] Threading comments + [ ] Views + [ ] Info page diff --git a/database/yggtracker.mwb b/database/yggtracker.mwb index 59fce6f34c6ed2c6f849c9e27db29eb24305830f..9541d33aefa9f03acdf3e2f2a2a54fe5cd7b53d3 100644 GIT binary patch literal 28407 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

(BW~V4%h?&9pfUQJ6gTz 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 CKs<{8 diff --git a/src/config/app.php.example b/src/config/app.php.example index 9feba8d..c459053 100644 --- a/src/config/app.php.example +++ b/src/config/app.php.example @@ -83,6 +83,12 @@ define('MAGNET_EDITOR_LOCK_TIMEOUT', 60*60); define('MAGNET_META_TITLE_MIN_LENGTH', 10); define('MAGNET_META_DESCRIPTION_MIN_LENGTH', 0); +// Comment +define('COMMENT_DEFAULT_APPROVED', false); +define('COMMENT_DEFAULT_PUBLIC', false); +define('COMMENT_MIN_LENGTH', 1); +define('COMMENT_MAX_LENGTH', 1000); + // Trackers define('TRACKER_LINKS', (object) [ diff --git a/src/library/database.php b/src/library/database.php index 1658d36..c6d78e1 100644 --- a/src/library/database.php +++ b/src/library/database.php @@ -471,6 +471,17 @@ class Database { return $this->addUser($address, $approved, $timeAdded); } + public function updateUserApproved(int $userId, mixed $approved, int $timeUpdated) : int { + + $this->_debug->query->update->total++; + + $query = $this->_db->prepare('UPDATE `user` SET `approved` = ?, `timeUpdated` = ? WHERE `userId` = ?'); + + $query->execute([(int) $approved, $timeUpdated, $userId]); + + return $query->rowCount(); + } + // Magnet public function addMagnet(int $userId, string $xt, @@ -961,6 +972,61 @@ class Database { } // Magnet comment + public function addMagnetComment( int $magnetId, + int $userId, + mixed $magnetCommentIdParent, + string $value, + bool $approved, + bool $public, + int $timeAdded) : int { + + $this->_debug->query->insert->total++; + + $query = $this->_db->prepare('INSERT INTO `magnetComment` SET `magnetId` = ?, + `userId` = ?, + `magnetCommentIdParent` = ?, + `value` = ?, + `approved` = ?, + `public` = ?, + `timeAdded` = ?'); + + $query->execute( + [ + $magnetId, + $userId, + $magnetCommentIdParent, + $value, + $approved, + $public, + $timeAdded + ] + ); + + return $this->_db->lastInsertId(); + } + + public function updateMagnetCommentPublic(int $magnetCommentId, mixed $public) : int { + + $this->_debug->query->update->total++; + + $query = $this->_db->prepare('UPDATE `magnetComment` SET `public` = ? WHERE `magnetCommentId` = ?'); + + $query->execute([(int) $public, $magnetCommentId]); + + return $query->rowCount(); + } + + public function updateMagnetCommentApproved(int $magnetCommentId, mixed $approved) : int { + + $this->_debug->query->update->total++; + + $query = $this->_db->prepare('UPDATE `magnetComment` SET `approved` = ? WHERE `magnetCommentId` = ?'); + + $query->execute([(int) $approved, $magnetCommentId]); + + return $query->rowCount(); + } + public function getMagnetCommentsTotal(int $magnetId) : int { $this->_debug->query->select->total++; @@ -972,6 +1038,26 @@ class Database { return $query->fetch()->result; } + public function getMagnetComments(int $magnetId, mixed $magnetCommentIdParent = null) { + + $this->_debug->query->select->total++; + + if ($magnetCommentIdParent) + { + $query = $this->_db->prepare('SELECT * FROM `magnetComment` WHERE `magnetId` = ? AND `magnetCommentIdParent` = ?'); + + $query->execute([$magnetId, $magnetCommentIdParent]); + } + else + { + $query = $this->_db->prepare('SELECT * FROM `magnetComment` WHERE `magnetId` = ? AND `magnetCommentIdParent` IS NULL'); + + $query->execute([$magnetId]); + } + + return $query->fetchAll(); + } + public function findMagnetCommentsTotalByUserId(int $magnetId, int $userId) : int { $this->_debug->query->select->total++; @@ -983,6 +1069,17 @@ class Database { return $query->fetch()->result; } + public function getMagnetComment(int $magnetCommentId) { + + $this->_debug->query->select->total++; + + $query = $this->_db->prepare('SELECT * FROM `magnetComment` WHERE `magnetCommentId` = ?'); + + $query->execute([$magnetCommentId]); + + return $query->fetch(); + } + // Magnet star public function addMagnetStar(int $magnetId, int $userId, int $timeAdded) : int { diff --git a/src/public/action.php b/src/public/action.php index 9ceba22..0cb7581 100644 --- a/src/public/action.php +++ b/src/public/action.php @@ -29,6 +29,246 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) { case 'comment': + switch (isset($_GET['toggle']) ? $_GET['toggle'] : false) + { + case 'approved': + + // Yggdrasil connections only + if (!preg_match(YGGDRASIL_URL_REGEX, $_SERVER['REMOTE_ADDR'])) + { + $response->success = false; + $response->message = _('Yggdrasil connection required for this action'); + } + + // Init session + else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time())) + { + $response->success = false; + $response->message = _('Could not init user session'); + } + + // Get user + else if (!$user = $db->getUser($userId)) + { + $response->success = false; + $response->message = _('Could not init user info'); + } + + // Magnet comment exists + else if (!$magnetComment = $db->getMagnetComment(isset($_GET['magnetCommentId']) && $_GET['magnetCommentId'] > 0 ? (int) $_GET['magnetCommentId'] : 0)) + { + $response->success = false; + $response->message = _('Requested magnet comment not found'); + } + + // Access allowed + else if (!in_array($user->address, MODERATOR_IP_LIST)) { + + $response->success = false; + $response->message = _('Access denied'); + } + + // Validate callback + else if (empty($_GET['callback'])) + { + $response->success = false; + $response->message = _('Callback required'); + } + + // Validate base64 + else if (!$callback = (string) @base64_decode($_GET['callback'])) + { + $response->success = false; + $response->message = _('Invalid callback encoding'); + } + + // Request valid + else + { + if ($magnetComment->approved) + { + $db->updateMagnetCommentApproved($magnetComment->magnetCommentId, false); + + if (USER_AUTO_APPROVE_ON_COMMENT_APPROVE) + { + $db->updateUserApproved($magnetComment->userId, false, time()); + } + } + else + { + $db->updateMagnetCommentApproved($magnetComment->magnetCommentId, true); + + if (USER_AUTO_APPROVE_ON_COMMENT_APPROVE) + { + $db->updateUserApproved($magnetComment->userId, true, time()); + } + } + + // Redirect to edit page + header( + sprintf('Location: %s', $callback) + ); + } + + break; + + case 'public': + + // Yggdrasil connections only + if (!preg_match(YGGDRASIL_URL_REGEX, $_SERVER['REMOTE_ADDR'])) + { + $response->success = false; + $response->message = _('Yggdrasil connection required for this action'); + } + + // Init session + else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time())) + { + $response->success = false; + $response->message = _('Could not init user session'); + } + + // Get user + else if (!$user = $db->getUser($userId)) + { + $response->success = false; + $response->message = _('Could not init user info'); + } + + // Magnet comment exists + else if (!$magnetComment = $db->getMagnetComment(isset($_GET['magnetCommentId']) && $_GET['magnetCommentId'] > 0 ? (int) $_GET['magnetCommentId'] : 0)) + { + $response->success = false; + $response->message = _('Requested magnet comment not found'); + } + + // Access allowed + else if (!($user->address == $db->getUser($magnetComment->userId)->address || in_array($user->address, MODERATOR_IP_LIST))) { + + $response->success = false; + $response->message = _('Access denied'); + } + + // Validate callback + else if (empty($_GET['callback'])) + { + $response->success = false; + $response->message = _('Callback required'); + } + + // Validate base64 + else if (!$callback = (string) @base64_decode($_GET['callback'])) + { + $response->success = false; + $response->message = _('Invalid callback encoding'); + } + + // Request valid + else + { + if ($magnetComment->public) + { + $db->updateMagnetCommentPublic($magnetComment->magnetCommentId, false); + } + else{ + $db->updateMagnetCommentPublic($magnetComment->magnetCommentId, true); + } + + // Redirect to edit page + header( + sprintf('Location: %s', $callback) + ); + } + + break; + + case 'new': + + // Yggdrasil connections only + if (!preg_match(YGGDRASIL_URL_REGEX, $_SERVER['REMOTE_ADDR'])) + { + $response->success = false; + $response->message = _('Yggdrasil connection required for this action'); + } + + // Init session + else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time())) + { + $response->success = false; + $response->message = _('Could not init user session'); + } + + // Get user + else if (!$user = $db->getUser($userId)) + { + $response->success = false; + $response->message = _('Could not init user info'); + } + + // Magnet exists + else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) && $_GET['magnetId'] > 0 ? (int) $_GET['magnetId'] : 0)) + { + $response->success = false; + $response->message = _('Requested magnet not found'); + } + + // Access allowed + else if (!($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved))) { + + $response->success = false; + $response->message = _('Magnet not available for this action'); + } + + // Validate callback + else if (empty($_GET['callback'])) + { + $response->success = false; + $response->message = _('Callback required'); + } + + // Validate base64 + else if (!$callback = (string) @base64_decode($_GET['callback'])) + { + $response->success = false; + $response->message = _('Invalid callback encoding'); + } + + // Validate comment value + else if (empty($_POST['comment']) || + mb_strlen($_POST['comment']) < COMMENT_MIN_LENGTH || + mb_strlen($_POST['comment']) > COMMENT_MAX_LENGTH) + { + $response->success = false; + $response->message = sprintf(_('Valid comment value required, %s-%s chars allowed'), COMMENT_MIN_LENGTH, COMMENT_MAX_LENGTH); + } + + // Request valid + else + { + if ($magnetCommentId = $db->addMagnetComment($magnet->magnetId, + $user->userId, + null, // @TODO implement threads + trim($_POST['comment']), + $user->approved || in_array($user->address, MODERATOR_IP_LIST) ? true : COMMENT_DEFAULT_APPROVED, + COMMENT_DEFAULT_PUBLIC, + time())) + { + // Redirect to referrer page + header( + sprintf('Location: %s#comment-%s', $callback, $magnetCommentId) + ); + } + } + + break; + + default: + + header( + sprintf('Location: %s', WEBSITE_URL) + ); + } + break; case 'star': diff --git a/src/public/assets/theme/default/css/common.css b/src/public/assets/theme/default/css/common.css index 2919dfb..1636283 100644 --- a/src/public/assets/theme/default/css/common.css +++ b/src/public/assets/theme/default/css/common.css @@ -50,9 +50,11 @@ input:focus { color: #fff; } +/* @TODO improve focus out textarea:focus { min-height: 120px; } +*/ textarea::placeholder, input::placeholder { diff --git a/src/public/edit.php b/src/public/edit.php index 888dfb0..309ca13 100644 --- a/src/public/edit.php +++ b/src/public/edit.php @@ -114,6 +114,10 @@ $response = (object) 'message' => false, ] ], + 'approved' => (object) + [ + 'value' => false, + ], ] ]; @@ -370,6 +374,7 @@ else { $response->form->public->value = (bool) $magnet->public; $response->form->comments->value = (bool) $magnet->comments; $response->form->sensitive->value = (bool) $magnet->sensitive; + $response->form->approved->value = (bool) $magnet->approved; // Display Name $response->form->dn->value = $magnet->dn; @@ -549,7 +554,7 @@ else { address, MODERATOR_IP_LIST)) { ?>

- + form->approved->value) { ?> diff --git a/src/public/index.php b/src/public/index.php index 3126d13..aa9c142 100644 --- a/src/public/index.php +++ b/src/public/index.php @@ -64,6 +64,13 @@ else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROV $response->message = _('Could not init user session'); } +// Get user +else if (!$user = $db->getUser($userId)) +{ + $response->success = false; + $response->message = _('Could not init user info'); +} + // Request valid else { @@ -89,10 +96,10 @@ else if ($magnet = $db->getMagnet($result->magnetid)) { // Get access info - $accessRead = ($_SERVER['REMOTE_ADDR'] == $db->getUser($magnet->userId)->address || in_array($_SERVER['REMOTE_ADDR'], MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved)); - $accessEdit = ($_SERVER['REMOTE_ADDR'] == $db->getUser($magnet->userId)->address || in_array($_SERVER['REMOTE_ADDR'], MODERATOR_IP_LIST)); + $accessRead = ($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved)); + $accessEdit = ($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST)); - // Update magnet viwed + // Update magnet viewed if ($accessRead) { $db->addMagnetView($magnet->magnetId, $userId, time()); @@ -360,7 +367,6 @@ echo '' . PHP_EOL ?> star->total ?> - download->status) { ?> diff --git a/src/public/magnet.php b/src/public/magnet.php new file mode 100644 index 0000000..4d5f30a --- /dev/null +++ b/src/public/magnet.php @@ -0,0 +1,476 @@ + true, + 'message' => false, + 'magnet' => [], + 'comments' => [], +]; + +// Yggdrasil connections only +if (!preg_match(YGGDRASIL_URL_REGEX, $_SERVER['REMOTE_ADDR'])) +{ + $response->success = false; + $response->message = _('Yggdrasil connection required to enable resource features'); +} + +// Init session +else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time())) +{ + $response->success = false; + $response->message = _('Could not init user session'); +} + +// Get user +else if (!$user = $db->getUser($userId)) +{ + $response->success = false; + $response->message = _('Could not init user info'); +} + +// Init magnet +else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) ? (int) $_GET['magnetId'] : 0)) +{ + $response->success = false; + $response->message = _('Magnet not found! Submit new magnet link by sending address to the search field.'); +} + +// Request valid +else +{ + // Get access info + $accessRead = ($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved)); + $accessEdit = ($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST)); + + // Update magnet viwed + if ($accessRead) + { + $db->addMagnetView($magnet->magnetId, $userId, time()); + } + + // Keywords + $keywords = []; + + foreach ($db->findKeywordTopicByMagnetId($magnet->magnetId) as $keyword) + { + $keywords[] = $db->getKeywordTopic($keyword->keywordTopicId)->value; + } + + // Scrapes + $localScrape = (object) + [ + 'seeders' => 0, + 'completed' => 0, + 'leechers' => 0, + ]; + + $totalScrape = (object) + [ + 'seeders' => 0, + 'completed' => 0, + 'leechers' => 0, + ]; + + $trackers = []; + + foreach (TRACKER_LINKS as $tracker) + { + $trackers[] = $tracker->announce; + } + + foreach ($db->findAddressTrackerByMagnetId($magnet->magnetId) as $magnetToAddressTracker) + { + if ($addressTracker = $db->getAddressTracker($magnetToAddressTracker->addressTrackerId)) + { + $scheme = $db->getScheme($addressTracker->schemeId); + $host = $db->getHost($addressTracker->hostId); + $port = $db->getPort($addressTracker->portId); + $uri = $db->getUri($addressTracker->uriId); + + $url = $port->value ? sprintf('%s://%s:%s%s', $scheme->value, + $host->value, + $port->value, + $uri->value) : sprintf('%s://%s%s', $scheme->value, + $host->value, + $uri->value); + + if (in_array($url, $trackers)) + { + $localScrape->seeders += (int) $magnetToAddressTracker->seeders; + $localScrape->completed += (int) $magnetToAddressTracker->completed; + $localScrape->leechers += (int) $magnetToAddressTracker->leechers; + } + + $totalScrape->seeders += (int) $magnetToAddressTracker->seeders; + $totalScrape->completed += (int) $magnetToAddressTracker->completed; + $totalScrape->leechers += (int) $magnetToAddressTracker->leechers; + } + } + + $response->user = $user; + $response->magnet = (object) + [ + 'magnetId' => $magnet->magnetId, + 'metaTitle' => $magnet->metaTitle ? htmlentities($magnet->metaTitle) : ($magnet->dn ? htmlentities($magnet->dn): false), + 'metaDescription' => $magnet->metaDescription ? nl2br( + htmlentities( + substr($magnet->metaDescription, 0, WEBSITE_MAGNET_SHORT_META_DESCRIPTION_LENGTH) + ) + ) : false, + 'approved' => (bool) $magnet->approved, + 'public' => (bool) $magnet->public, + 'sensitive' => (bool) $magnet->sensitive, + 'comments' => (bool) $magnet->comments, + 'timeAdded' => $magnet->timeAdded ? Time::ago((int) $magnet->timeAdded) : false, + 'timeUpdated' => $magnet->timeUpdated ? Time::ago((int) $magnet->timeUpdated) : false, + 'keywords' => $keywords, + 'comment' => (object) + [ + 'total' => $db->getMagnetCommentsTotal($magnet->magnetId), + 'status' => $db->findMagnetCommentsTotalByUserId($magnet->magnetId, $userId), + ], + 'download' => (object) + [ + 'total' => $db->getMagnetDownloadsTotalByUserId($magnet->magnetId), + 'status' => $db->findMagnetDownloadsTotalByUserId($magnet->magnetId, $userId), + ], + 'star' => (object) + [ + 'total' => $db->getMagnetStarsTotal($magnet->magnetId), + 'status' => $db->findMagnetStarsTotalByUserId($magnet->magnetId, $userId), + ], + 'access' => (object) + [ + 'read' => $accessRead, + 'edit' => $accessEdit, + ], + 'scrape' => (object) + [ + 'local' => $localScrape, + 'total' => $totalScrape + ] + ]; +} + +if (isset($_GET['rss']) && $response->success) { ?>' . PHP_EOL ?> + + + + <?php echo sprintf(_('%s - Comments - %s'), htmlentities($response->magnet->metaTitle), WEBSITE_NAME) ?> + + magnet->magnetId) ?> + getMagnetComments($response->magnet->magnetId) as $magnetComment) { ?> + user->address == $db->getUser($magnetComment->userId)->address || in_array($response->user->address, MODERATOR_IP_LIST)) { ?> + + <?php echo sprintf('%s - comment #%s', htmlspecialchars($magnet->metaTitle, ENT_QUOTES, 'UTF-8'), $magnetComment->magnetCommentId) ?> + value, ENT_QUOTES, 'UTF-8') ?> + magnet->magnetId, $magnetComment->magnetCommentId) ?> + magnet->magnetId, $magnetComment->magnetCommentId) ?> + + + + + + + + + + + + success) { ?> + <?php echo sprintf(_('%s - %s'), htmlentities($response->magnet->metaTitle), WEBSITE_NAME) ?> + + + + <?php echo $response->message ?> + + + + + +
+ +
+
+
+
+
+ success) { ?> + magnet->access->read) { ?> +
+
+ +

magnet->metaTitle ?>

+
+ magnet->public) { ?> + + + + + + + + magnet->approved) { ?> + + + + + + + magnet->access->edit) { ?> + + + + + + + + + +
+ magnet->metaDescription) { ?> +
magnet->metaDescription ?>
+ + magnet->keywords) { ?> +
+ magnet->keywords as $keyword) { ?> + + # + + +
+ +
+ + + + magnet->timeUpdated ? _('Updated') : _('Added') ?> + magnet->timeUpdated ? $response->magnet->timeUpdated : $response->magnet->timeAdded ?> + + + + + + + magnet->scrape->local->seeders ?> / magnet->scrape->total->seeders ?> + + + + + + magnet->scrape->local->completed ?> / magnet->scrape->total->completed ?> + + + + + + + magnet->scrape->local->leechers ?> / magnet->scrape->total->leechers ?> + + + + magnet->star->status) { ?> + + + + + + + + + + magnet->star->total ?> + + + + magnet->comment->status) { ?> + + + + + + + + + + magnet->comment->total ?> + + + + magnet->download->status) { ?> + + + + + + + + + + magnet->download->total ?> + +
+
+ magnet->comments) { ?> +
+ +

+ +
+
+ getMagnetComments($response->magnet->magnetId) as $magnetComment) { ?> +
+ + user->address == $db->getUser($magnetComment->userId)->address || in_array($response->user->address, MODERATOR_IP_LIST)) { ?> +
+ value)) ?> +
+ + timeAdded) ?> + + + public) { ?> + + + + + + + + approved) { ?> + + + + + + + + + public) { ?> + + + + + + user->address, MODERATOR_IP_LIST)) { ?> + + approved) { ?> + + + + + + + + + +
+ +
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
+ + +
+
message ?>
+
+ +
+
+
+
+
+
+
+
+ $value) { ?> + + / + + | + + + | + +
+
+
+
+ + + \ No newline at end of file