generated from jric11/baseProject
25 lines
2.1 KiB
PHP
25 lines
2.1 KiB
PHP
<?php
|
|
if(PHP_SAPI!=='cli')exit;
|
|
require __DIR__.'/../classes/Base.php';
|
|
$settings=(new Base())->getSettings();
|
|
if(!preg_match('/\Ahcr_http_test_[a-f0-9]{12}\z/',(string)$settings->DatabaseName)||!in_array((string)$settings->DatabaseServer,['127.0.0.1','localhost'],true))throw new RuntimeException('Disposable local database required.');
|
|
$ids=json_decode(getenv('HCR_TENANT_IDS'),true,512,JSON_THROW_ON_ERROR);$operation=$argv[1];
|
|
class RepairLockStatement extends PDOStatement {
|
|
protected function __construct(private string $operation){}
|
|
public function execute(?array $params=null):bool{
|
|
if($this->operation==='accept'&&str_starts_with($this->queryString,'SELECT user_serial,user_email,user_email_verified_at,user_status')){echo "WAITING\n";flush();}
|
|
$ok=parent::execute($params);
|
|
if($this->operation!=='accept'&&str_starts_with($this->queryString,'SELECT user_serial,user_status,user_email_verified_at')){echo "LOCKED\n";flush();fgets(STDIN);}
|
|
return $ok;
|
|
}
|
|
}
|
|
$db=new PDO('mysql:host='.$settings->DatabaseServer.';port='.$settings->DatabasePort.';dbname='.$settings->DatabaseName.';charset=utf8mb4',(string)$settings->DatabaseUser,(string)$settings->DatabasePassword,[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES=>false,PDO::ATTR_STATEMENT_CLASS=>[RepairLockStatement::class,[$operation]]]);$db->exec('SET innodb_lock_wait_timeout=5');
|
|
class LockedRepairInvitations extends ClubInvitations {public function __construct(private PDO $db){}public function connect():PDO{return $this->db;}}
|
|
class LockedRepairMembers extends RosterService {public function __construct(private PDO $db){}public function connect():PDO{return $this->db;}}
|
|
$_SESSION=[Base::USER_SERIAL=>$operation==='accept'?$ids['invitee']:1,Base::USER_NAME=>'Concurrency tester'];
|
|
try{
|
|
if($operation==='accept')(new LockedRepairInvitations($db))->accept((int)$argv[2]);
|
|
else (new LockedRepairMembers($db))->saveMember($ids['clubA'],(int)$argv[2],'',$operation==='deactivate'?'inactive':'active','2026-01-01');
|
|
echo json_encode(['ok'=>true]),"\n";
|
|
}catch(AppException $e){echo json_encode(['ok'=>false,'status'=>$e->status]),"\n";}
|