diff --git a/database/yggtracker.mwb b/database/yggtracker.mwb index c80cb79..59fce6f 100644 Binary files a/database/yggtracker.mwb and b/database/yggtracker.mwb differ diff --git a/src/config/app.php.example b/src/config/app.php.example index 2659267..9feba8d 100644 --- a/src/config/app.php.example +++ b/src/config/app.php.example @@ -78,6 +78,8 @@ define('MAGNET_DEFAULT_PUBLIC', false); define('MAGNET_DEFAULT_COMMENTS', true); define('MAGNET_DEFAULT_SENSITIVE', false); +define('MAGNET_EDITOR_LOCK_TIMEOUT', 60*60); + define('MAGNET_META_TITLE_MIN_LENGTH', 10); define('MAGNET_META_DESCRIPTION_MIN_LENGTH', 0); diff --git a/src/library/database.php b/src/library/database.php index c78a74d..1658d36 100644 --- a/src/library/database.php +++ b/src/library/database.php @@ -839,7 +839,6 @@ class Database { return $this->_db->lastInsertId(); } - public function deleteMagnetToExactSourceByMagnetId(int $magnetId) : int { $this->_debug->query->delete->total++; @@ -938,6 +937,29 @@ class Database { return $this->addMagnetToKeywordTopic($magnetId, $keywordTopicId); } + // Magnet lock + public function addMagnetLock(int $magnetId, int $userId, int $timeAdded) : int { + + $this->_debug->query->insert->total++; + + $query = $this->_db->prepare('INSERT INTO `magnetLock` SET `magnetId` = ?, `userId` = ?, `timeAdded` = ?'); + + $query->execute([$magnetId, $userId, $timeAdded]); + + return $this->_db->lastInsertId(); + } + + public function findLastMagnetLock(int $magnetId) { + + $this->_debug->query->select->total++; + + $query = $this->_db->prepare('SELECT * FROM `magnetLock` WHERE `magnetId` = ? ORDER BY `magnetLockId` DESC LIMIT 1'); + + $query->execute([$magnetId]); + + return $query->fetch(); + } + // Magnet comment public function getMagnetCommentsTotal(int $magnetId) : int { diff --git a/src/public/edit.php b/src/public/edit.php index 947e736..e142c6e 100644 --- a/src/public/edit.php +++ b/src/public/edit.php @@ -155,6 +155,20 @@ else if (!($user->address == $db->getUser($magnet->userId)->address || in_array( // Process form else { + // Validate magnet lock + if ($lastMagnetLock = $db->findLastMagnetLock($magnet->magnetId)) + { + if ($lastMagnetLock->userId != $user->userId && + $lastMagnetLock->timeAdded > time() - MAGNET_EDITOR_LOCK_TIMEOUT) + { + $response->success = false; + $response->message = _('This form have opened by owner or moderator, to prevent overwriting, try attempt later!'); + } + } + + // Lock form for moderators + $db->addMagnetLock($magnet->magnetId, $user->userId, time()); + // Update form if (!empty($_POST)) {