Вход Регистрация
Файл: system/moderation.php
Строк: 91
<?php
declare(strict_types=1);

function 
moderation_can_punish(array $actor,array $target): bool {
    
$actorAccess=(int)($actor['access']??0); $targetAccess=(int)($target['access']??0);
    if(
$actorAccess<=|| (int)($actor['id']??0)===(int)($target['id']??0)) return false;
    
// Модератор/администратор никогда не может наказать равного или старшего по роли.
    
return $actorAccess>$targetAccess;
}
function 
moderation_normalize_reason(string $reason): string {
    
$reason=trim(preg_replace('/s+/u',' ',$reason)??'');
    return 
mb_substr($reason,0,300,'UTF-8');
}
function 
moderation_duration(int $days,int $hours,int $minutes): int {
    
$days=max(0,min(3650,$days)); $hours=max(0,min(23,$hours)); $minutes=max(0,min(59,$minutes));
    
$seconds=$days*86400+$hours*3600+$minutes*60;
    return 
max(300,min($seconds,10*365*86400));
}
function 
moderation_cleanup_expired(int $uid=0): void {
    
$now=time();
    if(
$uid>0){
        
db_query('DELETE FROM `ban` WHERE `time`<='.$now.' AND `user`='.(int)$uid);
        
db_query('DELETE FROM `banned` WHERE `time`<='.$now.' AND `user`='.(int)$uid);
        return;
    }
    
// Глобальная уборка не должна делать две DELETE на каждом просмотре страницы.
    
$stamp=dirname(__DIR__).'/logs/moderation-cleanup.tick';
    if(
is_file($stamp) && (int)@filemtime($stamp)>=$now-60) return;
    @
touch($stamp);
    
db_query('DELETE FROM `ban` WHERE `time`<='.$now);
    
db_query('DELETE FROM `banned` WHERE `time`<='.$now);
}
function 
moderation_log(int $actor,int $target,string $kind,string $reason,int $until,string $action='apply'): void {
    
db_execute('INSERT INTO `moderation_log` (`actor`,`target`,`kind`,`reason`,`until_at`,`action`,`created_at`,`ip`) VALUES (:a,:t,:k,:r,:u,:ac,:c,:ip)',[
      
'a'=>$actor,'t'=>$target,'k'=>$kind,'r'=>$reason,'u'=>$until,'ac'=>$action,'c'=>time(),'ip'=>security_client_ip()
    ]);
}
Онлайн: 3
Реклама