Co do tych ciągłych postów odnośnie błedu z usuwaniem flag z usług, takie 2 moje małe poprawki kodu. Możliwe, że dzięki temu to już się nie powtorzy. Edycja pierwszego pliku jest spowodowana tym, że za każdym razem sprawdzane są wszystkie usługi (wygasłe i aktywne), po co ? Tego nie wiem, stąd poprawka kodu. Drugi pliczek tam prawdopodobnie tkwi problem, usuwanie flag. Hmm zrobiłem to prościej
Otwieramy: modules/Service.php
Szukamy:
static public function refreshBuyCache()
{
$stmt = Core::db()->query('SELECT c.*, s.`amxbans_id`, s.`flags` FROM `services_buy_cache_` c LEFT JOIN `services_` s ON s.`id` = c.`service_id` AND c.`status`=1');
$all = $stmt->fetchAll();
$time = time();
$amxbans_handle = new AmxBans();
$remove = 0;
$stmt = Core::db()->prepare('UPDATE `services_buy_cache_` SET `status` = 0 where `member_id` = ? AND `amxbans_member_id` = ? AND `service_id` = ?');
foreach($all as $data)
{
if(!$data['amxbans_id'])
{
continue;
}
$amxbans = $amxbans_handle->getAmxBans($data['amxbans_id']);
$amxbans = $amxbans_handle->connect($amxbans);
if(!$amxbans)
{
continue;
}
if($data['expired'] <= $time)
{
$amxbans->usunFlagi($data['amxbans_member_id'], $data['flags']);
$stmt->execute(array($data['member_id'], $data['amxbans_member_id'], $data['service_id']));
$remove++;
}
}
return $remove;
}
Zamieniamy na:
static public function refreshBuyCache( ) {
$q1 = Core::db( ) -> query( "SELECT `c`.*, `s`.`amxbans_id`, `s`.`flags` FROM `services_buy_cache_` AS `c` LEFT JOIN `services_` AS `s` ON `c`.`service_id` = `s`.`id` WHERE `c`.`status` = 1 AND `c`.`expired` <= UNIX_TIMESTAMP()" );
if( !$q1 -> rowCount( ) )
return 0;
$ah = new AmxBans( );
$count = 0;
$q2 = Core::db( ) -> prepare( "UPDATE `services_buy_cache_` SET `status` = 0 WHERE `member_id` = ? AND `amxbans_member_id` = ? AND `service_id` = ?" );
while( $r = $q1 -> fetch( ) ) {
if( !$r[ 'amxbans_id' ] )
continue;
$ab = $ah -> getAmxBans( $r[ 'amxbans_id' ] );
$ab = $ah -> connect( $ab );
if( !$ab )
continue;
$ab -> usunFlagi( $r[ 'amxbans_member_id' ], $r[ 'flags' ] );
$q2 -> execute( array( $r[ 'member_id' ], $r[ 'amxbans_member_id' ], $r[ 'service_id' ] ) );
$count++;
}
return $count;
}
Teraz pora na inny plik: modules\AmxBans\GM.php
Szukamy:
public function usunFlagi($amxbans_member_id, $flagi)
{
$stmt = $this->db->prepare("SELECT `id`, `access` FROM `{$this->data['prefix']}_amxadmins` where `id` = ?");
$stmt->execute(array($amxbans_member_id));
$stmt = $stmt->fetch();
$access = $stmt['access'];
$flagi = str_split($flagi);
for($i=0; $i<count($flagi); $i++)
{
$access = str_replace($flagi[$i], '', $access);
}
$this->ZmienFlagi($access, $amxbans_member_id);
}
Zamieniamy na:
public function usunFlagi( $id, $flags ) {
$q = $this -> db -> prepare( "SELECT `id`, `access` FROM `{$this -> data[ 'prefix' ]}_amxadmins` WHERE `id` = ?" );
$q -> execute( array( $id ) );
$r = $q -> fetch( );
$n = str_replace( str_split( $flags ), '', $r[ 'access' ] );
$this -> ZmienFlagi( $n, $r[ 'id' ] );
}