PHP code example of meius / flag-forge

1. Go to this page and download the library: Download meius/flag-forge library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

meius / flag-forge example snippets


 enum Permission: int implements Bitwiseable 
 {
     case SendMessages = 1 << 0; // 1
     case DeleteMessages = 1 << 1; // 2
     case AddUsers = 1 << 2; // 4
     case RemoveUsers = 1 << 3; // 8
     case PinMessages = 1 << 4; // 16
     case ManageChat = 1 << 5; // 32
     case ManageModerators = 1 << 6; // 64
 }
 

 use Meius\FlagForge\FlagManager;

 $manager = new FlagManager();
 $manager->getMask(); // Initial mask: 0
 
 // ----------------------------------------------------------------------
 // ADD FLAGS
 // ----------------------------------------------------------------------
 $manager->add(Permission::SendMessages) // - The bit corresponding to SendMessages is not set, so it gets added.
     ->add(Permission::AddUsers) // - The bit for AddUsers is not set, so it is added.
     ->add(Permission::AddUsers) // - Already set.
     ->add(Permission::PinMessages) // - The bit for PinMessages is not set, so it is added.
     ->getMask(); // Expected mask: 21 (SendMessages=1, AddUsers=4, PinMessages=16: 1+4+16=21)
 
 
 // ----------------------------------------------------------------------
 // COMBINE FLAGS
 // ----------------------------------------------------------------------
 $manager->combine(
     Permission::SendMessages, // Already set.
     Permission::DeleteMessages, // Not set; will be added.
     Permission::AddUsers // Already set.
 )->getMask(); // Expected mask: 23 (SendMessages=1, DeleteMessages=2, AddUsers=4, PinMessages=16: 21+2=23)
 
 // ----------------------------------------------------------------------
 // REMOVE FLAGS
 // ----------------------------------------------------------------------
 $manager->remove(Permission::AddUsers) // - Remove AddUsers: bit is set, so it will be removed.
     ->remove(Permission::ManageModerators) // - Remove ManageModerators: bit is not set, so nothing changes.
     ->getMask(); // Expected mask: 19
 
 // ----------------------------------------------------------------------
 // TOGGLE FLAGS
 // ----------------------------------------------------------------------
 $manager->toggle(
     Permission::SendMessages, // Bit is set; toggled off.
     Permission::DeleteMessages, // Bit is set; toggled off.
     Permission::AddUsers, // Bit is not set; toggled on.
     Permission::RemoveUsers // Bit is not set; toggled on.
 )->getMask(); // Expected mask: 28

 // ----------------------------------------------------------------------
 // CHECK FLAGS
 // ----------------------------------------------------------------------
 $manager->has(Permission::SendMessages); // false
 $manager->has(Permission::AddUsers); // true
 $manager->doesntHave(Permission::SendMessages); // true
 $manager->doesntHave(Permission::AddUsers); // false
 
 // ----------------------------------------------------------------------
 // ITERATE OVER ACTIVE FLAGS
 // ----------------------------------------------------------------------
 foreach ($manager as $flag) {
     /**
      * Example output:
      * Active flag: AddUsers (4)
      * Active flag: RemoveUsers (8)
      * Active flag: PinMessages (16)
      */
     echo "Active flag: " . $flag->name . " (" . $flag->value . ")" . PHP_EOL;
 }
 
 // ----------------------------------------------------------------------
 // CLEAR FLAGS
 // ----------------------------------------------------------------------
 $manager->clear(); // Expected mask: 0
 

 use Meius\FlagForge\FlagManager;
 
 /**
 * @var PDO $pdo
 * @var FlagManager $manager
 * @var string $chatId Chat ID to query.
 * @var string $userId User ID to query.
 */
 
 $manager->add(Permission::SendMessages);

 // Prepare the SQL statement
 $stmt = $pdo->prepare('
     SELECT *
     FROM chat_user
     WHERE chat_id = :chat_id
       AND user_id = :user_id
       AND (permissions & :flag) = :flag
 ');

 // Execute the query with the parameters
 $stmt->execute([
     ':chat_id' => $chatId,
     ':user_id' => $userId,
     ':flag' => $manager,
 ]);

 // Fetch the result
 $result = $stmt->fetch(PDO::FETCH_ASSOC);

 if ($result) {
     echo "User has the SendMessages permission.";
 } else {
     echo "User does NOT have the SendMessages permission.";
 }