ctf0 / odin
GUI to manage model revisions
Fund package maintenance!
ctf0
Installs: 2 165
Dependents: 0
Suggesters: 0
Security: 0
Stars: 61
Watchers: 4
Forks: 3
Open Issues: 0
Requires
- ctf0/package-changelog: *
- fico7489/laravel-pivot: *
- illuminate/support: >=5.4 <9.0
- owen-it/laravel-auditing: *
- phpspec/php-diff: ^1.1
README
Odin
Manage model revisions with ease.
If you are also looking to preview the form data before submitting to the db, you may want to give OverSeer a try.
- package requires Laravel v5.4+
Installation
-
composer require ctf0/odin
-
(Laravel < 5.5) add the service provider & facade
'providers' => [ ctf0\Odin\OdinServiceProvider::class, ];
-
publish the package assets with
php artisan vendor:publish --provider="ctf0\Odin\OdinServiceProvider"
-
after installation, run
php artisan odin:setup
to add- package routes to
routes/web.php
- package assets compiling to
webpack.mix.js
- package routes to
-
check laravel-auditing docs for configuration
-
install dependencies
yarn add vue vue-awesome@v2 vue-notif axios keycode
-
add this one liner to your main js file and run
npm run watch
to compile yourjs/css
files.- if you are having issues Check.
// app.js window.Vue = require('vue') require('../vendor/Odin/js/manager') new Vue({ el: '#app' })
Features
-
support single & nested values.
-
delete & restore revisions.
-
support soft deletes.
-
clear audits for permanently deleted models.
php artisan odin:gc
- which can be scheduled as well
$schedule->command('odin:gc')->sundays();
- which can be scheduled as well
-
shortcuts
-
events "JS"
Usage
-
run
php artisan migrate
-
add
Revisions
trait &AuditableContract
contract to your model- for
User model
Check
use ctf0\Odin\Traits\Revisions; use Illuminate\Database\Eloquent\Model; use OwenIt\Auditing\Contracts\Auditable as AuditableContract; class Post extends Model implements AuditableContract { use Revisions; /** * resolve model title/name for the revision relation * this is needed so we can render * the model relation attach/detach changes */ public function getMiscTitleAttribute() { return $this->name; } // ... }
- for
-
you can disable creating ghost audits where both
old/new
values are empty by using- remember that without the parent model audit log we cant show the relation changes
// app/Providers/EventServiceProvider use OwenIt\Auditing\Models\Audit; public function boot() { parent::boot(); Audit::creating(function (Audit $model) { if (empty($model->old_values) && empty($model->new_values)) { return false; } }); }
-
inside the model view ex.
post edit view
add@if (count($post->revisionsWithRelation)) @include('Odin::list', ['revisions' => $post->revisionsWithRelation]) @endif
Notes
-
model
user_id
&id
are excluded from the audit log by default. -
data:uri
-
if you use
data:uri
in your revisionable content, changeaudits_table
columns type to eithermediumText
orlongText
before migrating to avoid future errors of long data. -
because
data:uri
is a render blocking & isn't readable by humans, we truncate it to 75 char max
note that this ONLY effects the displaying of the revision diff, we never touch the data that gets saved to the db.
-
-
model-relation
- atm the relation revision is limited, it means we can only show the
attach/detach
changes but we cantundo/redo
any of them through the package it self. - also if you use mass update like
Model::update()
make sure to call$model->touch();
afterwards to make sure an audit is created ex.$model = Model::update([...]); $model->touch();
- atm the relation revision is limited, it means we can only show the
Security
If you discover any security-related issues, please email ctf0-dev@protonmail.com.