UserLog.php 2.74 KB
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;

use Auth;
use Log;

class UserLog extends Model{

	protected $table = 'userlogs';

	//protected $fillable = array('group','status','data');

	
	public function getLastTs($sipid,$nowts=0,$status="",$substatus="")
	{
		$data=json_decode($this->data,true);
	
		if(!isset($data[$sipid]))$data[$sipid]=array();
		if(!isset($data[$sipid]["ts"]))$data[$sipid]["ts"]=microtime(true)*1000;
		if(!isset($data[$sipid]['states']))$data[$sipid]['states']=array();
		
		$oldts=$data[$sipid]["ts"];
		
		if($nowts!=0)
		{
			$data[$sipid]["ts"]=$nowts;
			if($status!="")
			{
				$data[$sipid]['states'][$nowts]=array($status,$substatus);
			}
		}
		
		$this->data=json_encode($data);
		
		return $oldts;
	}
	public function startLog($user)
	{
		$this->user_id=$user->id;
		$this->startdate=date('Y-m-d');
		$this->starttime=date('H:i:s');
	}
	public function stopLog()
	{
		$this->enddate=date('Y-m-d');
		$this->endtime=date('H:i:s');
		$this->durationsec=strtotime($this->enddate." ".$this->endtime) - strtotime($this->startdate." ".$this->starttime);
	}
	public function getLastStatus()
	{
		$stend=array("","");
		$data=json_decode($this->data,true);
		$siplog=end($data);
		if(is_array($siplog))
		{
			if(is_array($siplog["states"]))$stend=end($siplog["states"]);
		}
		return $stend;
	}
	
	protected static function boot()
	{
		parent::boot();

		static::addGlobalScope('groupacl', function(\Illuminate\Database\Eloquent\Builder $builder)
		{
			if(Auth::check())
			{
				$builder->whereIn('group',Auth::user()->getAccessList("group",true,false,false));
			}
		});
		
		static::creating(function($model)
		{
			if(Auth::check())
			{
				if($model->group=='')$model->group=Auth::user()->group;
				if($model->group=='')$model->group="Default";
				
				$groupacl=Auth::user()->getAccessList("group",false,true,false);
				if(!in_array($model->group,$groupacl))
				{
					throw new \Exception("No Access to Create [".Auth::user()->id."] : (".implode(",",$groupacl).") in $model->group");
					return false;
				}
			}
			else if($model->group=='')$model->group="Default";
		});
		static::updating(function($model)
		{
			if(Auth::check())
			{
				$original = $model->getOriginal();
				if($original['group']=='')$original['group']='Default';
				
				if($model->group=='')$model->group=Auth::user()->group;
				if($model->group=='')$model->group="Default";
				
				$groupacl=Auth::user()->getAccessList("group",false,true,false);
				if(!in_array($original['group'],$groupacl)||!in_array($model->group,$groupacl))
				{
					throw new \Exception("No Access to Update [".Auth::user()->id."] : (".implode(",",$groupacl).") in $model->group");
					return false;
				}
			}
			else if($model->group=='')$model->group="Default";
		});
	}
}