mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-26 06:04:08 -08:00
2a95a95e00
* Fix the actionlog/companyables problem by adding a company_id to all actionlogs and scoping directly on that. Works around bugs in laravel where trying to hunt down the polymorphic relationship would lead to an infinite loop * Scope companyables in getactivityreport. Also eager load. * Improve reportscontroller, work on seeder to test this. * Only show company users in checkout dialogs * If no admin associated with log, it might be a request. Leave blank instead of saying deleted admin * When injecting company_id, use target instead of user if user is a superadmin * Build up the seeder to generate users, companies, and logs. * Eager load the log, don't scope the users log because the log should already include things only related to the user.
131 lines
3.2 KiB
PHP
Executable file
131 lines
3.2 KiB
PHP
Executable file
<?php
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
/**
|
|
* Model for the Actionlog (the table that keeps a historical log of
|
|
* checkouts, checkins, and updates).
|
|
*
|
|
* @version v1.0
|
|
*/
|
|
class Actionlog extends Model
|
|
{
|
|
use SoftDeletes;
|
|
|
|
protected $dates = [ 'deleted_at' ];
|
|
|
|
protected $table = 'action_logs';
|
|
public $timestamps = true;
|
|
protected $fillable = [ 'created_at', 'item_type','user_id','item_id','action_type','note','target_id', 'target_type' ];
|
|
|
|
// Overridden from Builder to automatically add the company
|
|
public static function boot()
|
|
{
|
|
parent::boot();
|
|
static::creating( function (Actionlog $actionlog) {
|
|
// If the admin is a superadmin, let's see if the target instead has a company.
|
|
if (Auth::user() && Auth::user()->isSuperUser()) {
|
|
$actionlog->company_id = $actionlog->target->company_id;
|
|
} else if (Auth::user() && Auth::user()->company) {
|
|
$actionlog->company_id = Auth::user()->company_id;
|
|
}
|
|
});
|
|
}
|
|
// Eloquent Relationships below
|
|
public function item()
|
|
{
|
|
return $this->morphTo('item')->withTrashed();
|
|
}
|
|
|
|
public function itemType()
|
|
{
|
|
|
|
if($this->item_type == AssetModel::class) {
|
|
return "model";
|
|
}
|
|
return camel_case(class_basename($this->item_type));
|
|
}
|
|
|
|
public function uploads()
|
|
{
|
|
return $this->morphTo('item')
|
|
->where('action_type', '=', 'uploaded')
|
|
->withTrashed();
|
|
}
|
|
|
|
public function userlog()
|
|
{
|
|
return $this->target();
|
|
}
|
|
|
|
public function user()
|
|
{
|
|
return $this->belongsTo(User::class, 'user_id')
|
|
->withTrashed();
|
|
}
|
|
|
|
public function target()
|
|
{
|
|
return $this->morphTo('target');
|
|
}
|
|
|
|
public function childlogs()
|
|
{
|
|
return $this->hasMany('\App\Models\ActionLog', 'thread_id');
|
|
}
|
|
|
|
public function parentlog()
|
|
{
|
|
return $this->belongsTo('\App\Models\ActionLog', 'thread_id');
|
|
}
|
|
|
|
/**
|
|
* Check if the file exists, and if it does, force a download
|
|
**/
|
|
public function get_src($type = 'assets')
|
|
{
|
|
|
|
$file = config('app.private_uploads') . '/' . $type . '/' . $this->filename;
|
|
|
|
return $file;
|
|
|
|
}
|
|
|
|
/**
|
|
* Get the parent category name
|
|
*/
|
|
public function logaction($actiontype)
|
|
{
|
|
|
|
$this->action_type = $actiontype;
|
|
|
|
if ($this->save()) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* getListingOfActionLogsChronologicalOrder
|
|
*
|
|
* @return mixed
|
|
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
|
* @version v1.0
|
|
*/
|
|
public function getListingOfActionLogsChronologicalOrder()
|
|
{
|
|
|
|
return $this->all()
|
|
->where('action_type', '!=', 'uploaded')
|
|
->orderBy('item_id', 'asc')
|
|
->orderBy('created_at', 'asc')
|
|
->get();
|
|
}
|
|
}
|