mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-25 05:34:06 -08:00
533649f24e
# Conflicts: # .gitignore # .travis.yml # app/Console/Commands/LdapSync.php # app/Console/Commands/SendExpectedCheckinAlerts.php # app/Console/Commands/SendExpirationAlerts.php # app/Console/Commands/SendInventoryAlerts.php # app/Console/Kernel.php # app/Http/Controllers/Api/AssetsController.php # app/Http/Controllers/Api/ManufacturersController.php # app/Http/Controllers/Api/StatuslabelsController.php # app/Http/Controllers/Api/UsersController.php # app/Http/Controllers/AssetMaintenancesController.php # app/Http/Controllers/Assets/AssetsController.php # app/Http/Controllers/Auth/ForgotPasswordController.php # app/Http/Controllers/Auth/LoginController.php # app/Http/Controllers/Auth/ResetPasswordController.php # app/Http/Controllers/ReportsController.php # app/Http/Controllers/SettingsController.php # app/Http/Controllers/UsersController.php # app/Http/Transformers/AssetMaintenancesTransformer.php # app/Importer/Importer.php # app/Importer/ItemImporter.php # app/Importer/UserImporter.php # app/Importer/import_mappings.md # app/Models/Ldap.php # app/Models/License.php # app/Models/Location.php # app/Models/Recipients/AlertRecipient.php # app/Models/User.php # app/Providers/AppServiceProvider.php # composer.json # composer.lock # config/trustedproxy.php # config/version.php # public/js/build/all.js # public/js/build/vue.js # public/js/build/vue.js.map # public/js/dist/all.js # public/mix-manifest.json # resources/assets/js/components/importer/importer-file.vue # resources/lang/ar/admin/settings/general.php # resources/lang/bg/admin/settings/general.php # resources/lang/en-ID/admin/settings/general.php # resources/lang/en-ID/passwords.php # resources/lang/en/passwords.php # resources/lang/es-CO/passwords.php # resources/lang/es-ES/passwords.php # resources/lang/es-MX/passwords.php # resources/lang/es-VE/passwords.php # resources/lang/fi/admin/settings/general.php # resources/lang/id/admin/settings/general.php # resources/lang/id/passwords.php # resources/lang/ja/passwords.php # resources/lang/nl/passwords.php # resources/lang/pl/admin/settings/general.php # resources/lang/pl/passwords.php # resources/lang/pt-BR/admin/settings/general.php # resources/lang/pt-BR/passwords.php # resources/lang/ru/admin/settings/general.php # resources/lang/ru/admin/statuslabels/table.php # resources/lang/ru/passwords.php # resources/lang/sr-CS/general.php # resources/lang/sr-CS/mail.php # resources/lang/sv-SE/admin/settings/general.php # resources/lang/tr/admin/settings/general.php # resources/lang/tr/passwords.php # resources/lang/vi/admin/models/message.php # resources/lang/vi/admin/users/general.php # resources/lang/zh-CN/admin/settings/general.php # resources/views/importer/import.blade.php # resources/views/partials/bootstrap-table.blade.php # resources/views/partials/forms/edit/image-upload.blade.php # resources/views/users/edit.blade.php # resources/views/users/view.blade.php # tests/unit/ImporterTest.php
204 lines
5.4 KiB
PHP
204 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Models\Actionlog;
|
|
use App\Models\Asset;
|
|
use App\Models\CheckoutRequest;
|
|
use App\Models\User;
|
|
use App\Notifications\AuditNotification;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
|
|
trait Loggable
|
|
{
|
|
|
|
/**
|
|
* @author Daniel Meltzer <dmeltzer.devel@gmail.com>
|
|
* @since [v3.4]
|
|
* @return \App\Models\Actionlog
|
|
*/
|
|
|
|
public function log()
|
|
{
|
|
return $this->morphMany(Actionlog::class, 'item');
|
|
}
|
|
|
|
/**
|
|
* @author Daniel Meltzer <dmeltzer.devel@gmail.com>
|
|
* @since [v3.4]
|
|
* @return \App\Models\Actionlog
|
|
*/
|
|
public function logCheckout($note, $target /* What are we checking out to? */)
|
|
{
|
|
$log = new Actionlog;
|
|
$log = $this->determineLogItemType($log);
|
|
if(Auth::user())
|
|
$log->user_id = Auth::user()->id;
|
|
|
|
if (!isset($target)) {
|
|
throw new Exception('All checkout logs require a target');
|
|
return;
|
|
}
|
|
$log->target_type = get_class($target);
|
|
$log->target_id = $target->id;
|
|
|
|
|
|
// Figure out what the target is
|
|
if ($log->target_type == Location::class) {
|
|
$log->location_id = $target->id;
|
|
} elseif ($log->target_type == Asset::class) {
|
|
$log->location_id = $target->location_id;
|
|
} else {
|
|
$log->location_id = $target->location_id;
|
|
}
|
|
|
|
$log->note = $note;
|
|
$log->logaction('checkout');
|
|
|
|
return $log;
|
|
}
|
|
|
|
/**
|
|
* Helper method to determine the log item type
|
|
*/
|
|
private function determineLogItemType($log)
|
|
{
|
|
// We need to special case licenses because of license_seat vs license. So much for clean polymorphism :
|
|
if (static::class == LicenseSeat::class) {
|
|
$log->item_type = License::class;
|
|
$log->item_id = $this->license_id;
|
|
} else {
|
|
$log->item_type = static::class;
|
|
$log->item_id = $this->id;
|
|
}
|
|
|
|
return $log;
|
|
}
|
|
/**
|
|
* @author Daniel Meltzer <dmeltzer.devel@gmail.com>
|
|
* @since [v3.4]
|
|
* @return \App\Models\Actionlog
|
|
*/
|
|
public function logCheckin($target, $note)
|
|
{
|
|
$log = new Actionlog;
|
|
$log->target_type = get_class($target);
|
|
$log->target_id = $target->id;
|
|
|
|
if (static::class == LicenseSeat::class) {
|
|
$log->item_type = License::class;
|
|
$log->item_id = $this->license_id;
|
|
} else {
|
|
|
|
$log->item_type = static::class;
|
|
$log->item_id = $this->id;
|
|
|
|
if (static::class == Asset::class) {
|
|
if ($asset = Asset::find($log->item_id)) {
|
|
\Log::debug('Increment the checkin count for asset: '.$log->item_id);
|
|
$asset->increment('checkin_counter', 1);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
$log->location_id = null;
|
|
$log->note = $note;
|
|
$log->user_id = Auth::user()->id;
|
|
$log->logaction('checkin from');
|
|
|
|
return $log;
|
|
}
|
|
|
|
|
|
/**
|
|
* @author A. Gianotto <snipe@snipe.net>
|
|
* @since [v4.0]
|
|
* @return \App\Models\Actionlog
|
|
*/
|
|
public function logAudit($note, $location_id, $filename = null)
|
|
{
|
|
$log = new Actionlog;
|
|
$location = Location::find($location_id);
|
|
if (static::class == LicenseSeat::class) {
|
|
$log->item_type = License::class;
|
|
$log->item_id = $this->license_id;
|
|
} else {
|
|
$log->item_type = static::class;
|
|
$log->item_id = $this->id;
|
|
}
|
|
$log->location_id = ($location_id) ? $location_id : null;
|
|
$log->note = $note;
|
|
$log->user_id = Auth::user()->id;
|
|
$log->filename = $filename;
|
|
$log->logaction('audit');
|
|
|
|
$params = [
|
|
'item' => $log->item,
|
|
'filename' => $log->filename,
|
|
'admin' => $log->user,
|
|
'location' => ($location) ? $location->name : '',
|
|
'note' => $note
|
|
];
|
|
Setting::getSettings()->notify(new AuditNotification($params));
|
|
|
|
return $log;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @author Daniel Meltzer <dmeltzer.devel@gmail.com>
|
|
* @since [v3.5]
|
|
* @return \App\Models\Actionlog
|
|
*/
|
|
public function logCreate($note = null)
|
|
{
|
|
$user_id = -1;
|
|
if (Auth::user()) {
|
|
$user_id = Auth::user()->id;
|
|
}
|
|
$log = new Actionlog;
|
|
if (static::class == LicenseSeat::class) {
|
|
$log->item_type = License::class;
|
|
$log->item_id = $this->license_id;
|
|
} else {
|
|
$log->item_type = static::class;
|
|
$log->item_id = $this->id;
|
|
}
|
|
$log->location_id = null;
|
|
$log->note = $note;
|
|
$log->user_id = $user_id;
|
|
$log->logaction('create');
|
|
$log->save();
|
|
return $log;
|
|
}
|
|
|
|
/**
|
|
* @author Daniel Meltzer <dmeltzer.devel@gmail.com>
|
|
* @since [v3.4]
|
|
* @return \App\Models\Actionlog
|
|
*/
|
|
public function logUpload($filename, $note)
|
|
{
|
|
$log = new Actionlog;
|
|
if (static::class == LicenseSeat::class) {
|
|
$log->item_type = License::class;
|
|
$log->item_id = $this->license_id;
|
|
} else {
|
|
$log->item_type = static::class;
|
|
$log->item_id = $this->id;
|
|
}
|
|
$log->user_id = Auth::user()->id;
|
|
$log->note = $note;
|
|
$log->target_id = null;
|
|
$log->created_at = date("Y-m-d H:i:s");
|
|
$log->filename = $filename;
|
|
$log->logaction('uploaded');
|
|
|
|
return $log;
|
|
}
|
|
}
|