From e328a8c5e064f70af900cab828239d0efc1c0e62 Mon Sep 17 00:00:00 2001 From: netkas Date: Thu, 31 Oct 2024 19:09:13 -0400 Subject: [PATCH] Refactor peer flag removal logic --- .../Managers/RegisteredPeerManager.php | 18 ++++++++---------- .../Objects/Database/RegisteredPeerRecord.php | 9 +++++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/Socialbox/Managers/RegisteredPeerManager.php b/src/Socialbox/Managers/RegisteredPeerManager.php index b37bc58..9b0ec58 100644 --- a/src/Socialbox/Managers/RegisteredPeerManager.php +++ b/src/Socialbox/Managers/RegisteredPeerManager.php @@ -331,35 +331,33 @@ class RegisteredPeerManager /** * Removes a specific flag from the peer identified by the given UUID or RegisteredPeerRecord. * - * @param string|RegisteredPeerRecord $uuid The UUID or RegisteredPeerRecord instance representing the peer. + * @param string|RegisteredPeerRecord $peer * @param PeerFlags $flag The flag to be removed from the peer. * @return void * @throws DatabaseOperationException If there is an error while updating the database. */ - public static function removeFlag(string|RegisteredPeerRecord $uuid, PeerFlags $flag): void + public static function removeFlag(string|RegisteredPeerRecord $peer, PeerFlags $flag): void { - if($uuid instanceof RegisteredPeerRecord) + if(is_string($peer)) { - $uuid = $uuid->getUuid(); + $peer = self::getPeer($peer); } - Logger::getLogger()->verbose(sprintf("Removing flag %s from peer %s", $flag->value, $uuid)); + Logger::getLogger()->verbose(sprintf("Removing flag %s from peer %s", $flag->value, $peer->getUuid())); - $peer = self::getPeer($uuid); if(!$peer->flagExists($flag)) { return; } - $flags = $peer->getFlags(); - unset($flags[array_search($flag, $flags)]); + $peer->removeFlag($flag); try { - $implodedFlags = implode(',', $flags); + $implodedFlags = PeerFlags::toString($peer->getFlags()); $statement = Database::getConnection()->prepare('UPDATE `registered_peers` SET flags=? WHERE uuid=?'); $statement->bindParam(1, $implodedFlags); - $statement->bindParam(2, $uuid); + $statement->bindParam(2, $registeredPeer); $statement->execute(); } catch(PDOException $e) diff --git a/src/Socialbox/Objects/Database/RegisteredPeerRecord.php b/src/Socialbox/Objects/Database/RegisteredPeerRecord.php index 417c3e4..acb864a 100644 --- a/src/Socialbox/Objects/Database/RegisteredPeerRecord.php +++ b/src/Socialbox/Objects/Database/RegisteredPeerRecord.php @@ -104,6 +104,15 @@ class RegisteredPeerRecord implements SerializableInterface return in_array($flag, $this->flags, true); } + public function removeFlag(PeerFlags $flag): void + { + $key = array_search($flag, $this->flags, true); + if($key !== false) + { + unset($this->flags[$key]); + } + } + /** * Checks if the current instance is enabled. *