kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			
		
			
				
	
	
		
			139 wiersze
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			139 wiersze
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
 | 
						|
namespace App\Services;
 | 
						|
 | 
						|
use Auth;
 | 
						|
use App\ModLog;
 | 
						|
use App\Notification;
 | 
						|
use App\User;
 | 
						|
 | 
						|
class ModLogService {
 | 
						|
 | 
						|
	protected $log;
 | 
						|
 | 
						|
	public function __construct()
 | 
						|
	{
 | 
						|
		$this->log = new \StdClass;
 | 
						|
	}
 | 
						|
 | 
						|
	public static function boot()
 | 
						|
	{
 | 
						|
		return new self;
 | 
						|
	}
 | 
						|
 | 
						|
	public function user(User $user)
 | 
						|
	{
 | 
						|
		$this->log->user = $user;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function objectUid($val = null)
 | 
						|
	{
 | 
						|
		$this->log->object_uid = $val;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function objectId($val = null)
 | 
						|
	{
 | 
						|
		$this->log->object_id = $val;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function objectType($val = null)
 | 
						|
	{
 | 
						|
		$this->log->object_type = $val;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function action($val = null)
 | 
						|
	{
 | 
						|
		$this->log->action = $val;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function message($val = null)
 | 
						|
	{
 | 
						|
		$this->log->message = $val;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function metadata(array $val = null)
 | 
						|
	{
 | 
						|
		$this->log->metadata = json_encode($val);
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function accessLevel($val = null)
 | 
						|
	{
 | 
						|
		if(!in_array($val, ['admin', 'mod'])) {
 | 
						|
			return $this;
 | 
						|
		}
 | 
						|
		$this->log->access_level = $val;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function save($res = false)
 | 
						|
	{
 | 
						|
		$log = $this->log;
 | 
						|
		if(!isset($log->user)) {
 | 
						|
			throw new \Exception('Invalid ModLog attribute.');
 | 
						|
		}
 | 
						|
 | 
						|
		$ml = new ModLog();
 | 
						|
		$ml->user_id = $log->user->id;
 | 
						|
		$ml->user_username = $log->user->username;
 | 
						|
		$ml->object_uid = $log->object_uid ?? null;
 | 
						|
		$ml->object_id = $log->object_id ?? null;
 | 
						|
		$ml->object_type = $log->object_type ?? null;
 | 
						|
		$ml->action = $log->action ?? null;
 | 
						|
		$ml->message = $log->message ?? null;
 | 
						|
		$ml->metadata = $log->metadata ?? null;
 | 
						|
		$ml->access_level = $log->access_level ?? 'admin';
 | 
						|
		$ml->save();
 | 
						|
 | 
						|
		if($res == true) {
 | 
						|
			return $ml;
 | 
						|
		} else {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public function load($modLog)
 | 
						|
	{
 | 
						|
		$this->log = $modLog;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	public function fanout()
 | 
						|
	{
 | 
						|
		$log = $this->log;
 | 
						|
 | 
						|
		$item_id = $log->id;
 | 
						|
		$item_type = 'App\ModLog';
 | 
						|
		$action = 'admin.user.modlog.comment';
 | 
						|
 | 
						|
		$admins = User::whereNull('status')
 | 
						|
			->whereNotIn('id', [$log->user_id])
 | 
						|
			->whereIsAdmin(true)
 | 
						|
			->pluck('profile_id')
 | 
						|
			->toArray();
 | 
						|
 | 
						|
		foreach($admins as $user) {
 | 
						|
			$n = new Notification;
 | 
						|
			$n->profile_id = $user;
 | 
						|
			$n->actor_id = $log->admin->profile_id;
 | 
						|
			$n->item_id = $item_id;
 | 
						|
			$n->item_type = $item_type;
 | 
						|
			$n->action = $action;
 | 
						|
			$n->save();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public function unfanout()
 | 
						|
	{
 | 
						|
		Notification::whereItemType('App\ModLog')
 | 
						|
			->whereItemId($this->log->id)
 | 
						|
			->delete();
 | 
						|
	}
 | 
						|
}
 |