add publish module

This commit is contained in:
Arno Kaimbacher 2018-08-29 17:18:15 +02:00
parent 100f6db9a6
commit ffbbc04206
93 changed files with 8150 additions and 10228 deletions

View file

@ -2,27 +2,28 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Library\Xml\DatasetExtension;
use phpDocumentor\Reflection\Types\Null_;
use Illuminate\Database\Eloquent\Model;
use App\Models\Title;
class Dataset extends Model
{
use DatasetExtension;
protected $table = 'documents';
//public $timestamps = false; //default true
// customize the names of the columns used to store the timestamps:
const CREATED_AT = 'server_date_created';
const CREATED_AT = 'created_at';
const UPDATED_AT = 'server_date_modified';
const PUBLISHED_AT = 'server_date_published';
protected $fillable = [
'type',
'publication_state',
'thesis_year_accepted',
'server_state',
'creating_corporation',
'project_id',
'embargo_date'
'embargo_date',
'belongs_to_bibliography'
];
/**
* The attributes that should be mutated to dates.
@ -32,17 +33,19 @@ class Dataset extends Model
protected $dates = [
'server_date_created',
'server_date_modified',
'server_date_published'
'server_date_published',
];
//protected $dateFormat = 'Y-m-d';
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
// $this->_init();
}
/**
* Get the project that the product belongs to.
*/
public function project()
{
return $this->belongsTo(\App\Project::class, 'project_id', 'id');
@ -82,7 +85,7 @@ class Dataset extends Model
*
* @return void
*/
public function addAuthor(\App\User $user) : void
public function addAuthor(\App\User $user): void
{
$this->persons()->save($user, ['role' => 'author']);
}
@ -102,16 +105,22 @@ class Dataset extends Model
#endregion
#region title table:
public function titlesAbstracts()
{
return $this->hasMany(Title::class, 'document_id', 'id');
}
public function titles()
{
return $this->hasMany(\App\Title::class, 'document_id', 'id')
return $this->hasMany(Title::class, 'document_id', 'id')
->where('type', 'main');
}
// public function addTitle(\App\Title $title)
// {
// $this->persons()->save($title, ['type' => 'main']);
// }
public function addMainTitle(Title $title)
{
$title->type = 'main';
$this->titlesAbstracts()->save($title);
// $this->titles()->save($title, ['type' => 'main']);
}
/**
* Relation abstracts
@ -120,15 +129,17 @@ class Dataset extends Model
*/
public function abstracts()
{
return $this->hasMany(\App\Title::class, 'document_id', 'id')
return $this->hasMany(Title::class, 'document_id', 'id')
->where('type', 'abstract');
}
// public function addAbstract (\App\Title $title)
// {
// $this->persons()->save($title, ['type' => 'abstract']);
// }
public function addMainAbstract(Title $title)
{
$title->type = 'abstract';
$this->titlesAbstracts()->save($title);
// $this->abstracts()->save($title, ['type' => 'abstract']);
}
#endregion
#endregion title table
public function licenses()
{
@ -137,7 +148,7 @@ class Dataset extends Model
public function files()
{
return $this->hasMany(\App\File::class, 'document_id', 'id');
return $this->hasMany(\App\Models\File::class, 'document_id', 'id');
}
/**
@ -150,8 +161,6 @@ class Dataset extends Model
return $this->hasOne(\App\XmlCache::class, 'document_id', 'id');
}
public function scopeOrderByType($query)
{
return $query->orderBy('type');

View file

@ -1,19 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class File extends Model
{
protected $table = 'document_files';
public $timestamps = false;
protected $fillable = [];
public function dataset()
{
return $this->belongsTo(\App\Dataset::class, 'document_id', 'id');
}
}

View file

@ -26,7 +26,7 @@ class LoginController extends Controller
*
* @var string
*/
protected $redirectTo = '/';
protected $redirectTo = '/settings';
/**
* Create a new controller instance.
@ -46,6 +46,6 @@ class LoginController extends Controller
$request->session()->regenerate();
return redirect('/');
return redirect('/settings');
}
}

View file

@ -2,10 +2,19 @@
//https://www.5balloons.info/multi-page-step-form-in-laravel-with-validation/
namespace App\Http\Controllers\Publish;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Dataset;
use App\Http\Controllers\Controller;
use App\License;
use App\Models\File;
use App\Person;
use App\Models\Title;
use App\Rules\RdrFiletypes;
use App\Rules\RdrFilesize;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class IndexController extends Controller
{
@ -26,8 +35,17 @@ class IndexController extends Controller
*/
public function createStep1(Request $request)
{
$dataset = $request->session()->get('dataset');
return view('publish.create-step1', compact('dataset', $dataset));
#$dataset = $request->session()->get('dataset');
$licenses = License::all('id', 'name_long');
$languages = DB::table('languages')
->where('active', true)
->pluck('part2_t', 'part2_t');
// ->toArray();
$persons = Person::where('status', 1)
->pluck('last_name', 'id');
return view('publish.create-step1', compact('licenses', 'languages', 'persons'));
}
/**
@ -40,7 +58,7 @@ class IndexController extends Controller
{
$validatedData = $this->validate($request, [
'Type' => 'required|min:4',
'rights' => 'required|boolean|in:1'
'rights' => 'required|boolean|in:1',
]);
// $validatedData = $request->validate([
// 'name' => 'required|unique:products',
@ -100,21 +118,21 @@ class IndexController extends Controller
"TitleMain.Value" => 'required|min:5|max:255',
"TitleMain.Language" => 'required|min:3',
"TitleAbstract.Value" => 'required|min:5|max:255',
"TitleAbstract.Language" => 'required|min:3'
"TitleAbstract.Language" => 'required|min:3',
]);
$optionalData = $request->all();
// $dataset = $request->except('rights', '_token', 'input_img');
$dataset = $request->session()->get('dataset');
//update dataset with validated data
$dataset['Type'] = $validatedData['Type'];
$dataset['BelongsToBibliography'] = $validatedData['BelongsToBibliography'];
$dataset['TitleMain']['Value'] = $validatedData['TitleMain']['Value'];
$dataset['TitleMain']['Language'] = $validatedData['TitleMain']['Language'];
$dataset['TitleAbstract']['Value'] = $validatedData['TitleAbstract']['Value'];
$dataset['TitleAbstract']['Language'] = $validatedData['TitleAbstract']['Language'];
$dataset['Type'] = $validatedData['Type'];
$dataset['BelongsToBibliography'] = $validatedData['BelongsToBibliography'];
$dataset['TitleMain']['Value'] = $validatedData['TitleMain']['Value'];
$dataset['TitleMain']['Language'] = $validatedData['TitleMain']['Language'];
$dataset['TitleAbstract']['Value'] = $validatedData['TitleAbstract']['Value'];
$dataset['TitleAbstract']['Language'] = $validatedData['TitleAbstract']['Language'];
if (isset($optionalData['CreatingCorporation'])) {
$dataset['CreatingCorporation'] = $optionalData['CreatingCorporation'];
}
@ -124,8 +142,8 @@ class IndexController extends Controller
if (!isset($dataset['DatasetFile'])) {
$this->validate($request, [
'dataset_file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048'
]);
'dataset_file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
//update session variable
// $dataset = $request->session()->get('dataset');
@ -151,7 +169,7 @@ class IndexController extends Controller
*/
public function createStep3(Request $request)
{
//if no dataset is'nt in session variable return to step1
//if no dataset is'nt in session variable return to step1
if (empty($request->session()->get('dataset'))) {
return redirect()->route('dataset.create1');
}
@ -159,17 +177,157 @@ class IndexController extends Controller
return view('publish.create-step3', compact('dataset'));
}
/**
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function storeTest(Request $request)
{
//$data = $request->all();
$data = json_decode($request->getContent(), true);
$validator = Validator::make($data, [
'type' => 'required|min:4',
'belongs_to_bibliography' => 'required|boolean',
]);
if ($validator->passes()) {
//TODO Handle your data
return response()->json(array(
'response' => 'success'));
} else {
//TODO Handle your error
//pass validator errors as errors object for ajax response
return response()->json(['errors' => $validator->errors()->all()], 422);
}
}
//https://laravel.io/forum/06-11-2014-how-to-save-eloquent-model-with-relations-in-one-go
//attach vs save https://stackoverflow.com/questions/35756469/laravel-5-many-to-many-attach-versus-save
public function store(Request $request)
{
$dataset = $request->session()->get('dataset');
// $product->save();
// return redirect('/dataset');
$data = $request->all();
// $validatedData = $this->validate($request, [
// 'type' => 'required|min:4',
// 'rights' => 'required|boolean|in:1',
// ]);
$rules = [
'server_state' => 'required',
'type' => 'required|min:5',
'rights' => 'required|boolean|in:1',
'belongs_to_bibliography' => 'required|boolean',
'title_main.value' => 'required|min:5',
'title_main.language' => 'required',
];
if (null != $request->file('files')) {
$files = count($request->file('files')) - 1;
foreach (range(0, $files) as $index) {
// $rules['files.' . $index] = 'image|max:2048';
$rules['files.' . $index . '.file'] = ['required', 'file', new RdrFiletypes(), new RdrFilesize()];
}
}
$validator = Validator::make($request->all(), $rules);
if ($validator->passes()) {
//store dataset todo
//$data = $request->all();
$input = $request->except('files', 'licenses', 'abstract_main', 'title_main');
// array_push($input, "Himbeere");
$dataset = new Dataset($input);
DB::beginTransaction(); //Start transaction!
try {
$dataset->save();
//store related files
if (null != $data['files']) {
foreach ($data['files'] as $uploadedFile) {
$file = $uploadedFile['file'];
$label = urldecode($uploadedFile['label']);
$sorting = $uploadedFile['sorting'];
$fileName = "productImage-" . time() . '.' . $file->getClientOriginalExtension();
$mimeType = $file->getMimeType();
$datasetFolder = 'files/' . $dataset->id;
$path = $file->storeAs($datasetFolder, $fileName);
$size = Storage::size($path);
//$path = Storage::putFile('files', $image, $fileName);
$file = new File([
'path_name' => $path,
'file_size' => $size,
'mime_type' => $mimeType,
'label' => $label,
'sort_order' => $sorting,
'visible_in_frontdoor' => 1,
'visible_in_oai' => 1
]);
//$test = $file->path_name;
$dataset->files()->save($file);
$file->createHashValues();
}
}
//store licenses:
$licenses = $request->input('licenses');
$dataset->licenses()->sync($licenses);
//save main title:
if (isset($data['title_main'])) {
$formTitle = $request->input('title_main');
$title = new Title();
$title->value = $formTitle['value'];
$title->language = $formTitle['language'];
$dataset->addMainTitle($title);
}
//save main abstract:
if (isset($data['abstract_main'])) {
$formAbstract = $request->input('abstract_main');
$abstract = new Title();
$abstract->value = $formAbstract['value'];
$abstract->language = $formAbstract['language'];
$dataset->addMainAbstract($abstract);
}
// $error = 'Always throw this error';
// throw new \Exception($error);
// all good//commit everything
DB::commit();
} catch (\Exception $e) {
DB::rollback();
Storage::deleteDirectory($datasetFolder);
return response()->json([
'success' => false,
'error' => [
'code' => $e->getCode(),
'message' => $e->getMessage(),
],
], 422);
//throw $e;
} catch (\Throwable $e) {
DB::rollback();
Storage::deleteDirectory($datasetFolder);
return response()->json([
'success' => false,
'error' => [
'code' => $e->getCode(),
'message' => $e->getMessage(),
],
], 422);
//throw $e;
}
return response()->json(array(
'redirect' => route('settings.document', ['state' => $dataset->server_state]),
));
} else {
//TODO Handle validation error
//pass validator errors as errors object for ajax response
return response()->json([
'success' => false,
'errors' => $validator->errors()->all(),
], 422);
}
}
/**

View file

@ -1,13 +1,12 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Project;
use App\Http\Requests\ProjectRequest;
use Illuminate\View\View;
use App\Project;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class CategoryController extends Controller
{
@ -17,7 +16,7 @@ class CategoryController extends Controller
$this->middleware('auth');
}
public function index() : View
public function index(): View
{
$projects = Project::get();
return view('settings.project.category', compact('projects'));
@ -28,12 +27,12 @@ class CategoryController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function add() : View
public function add(): View
{
return view('settings.project.add');
}
public function store(ProjectRequest $request) : RedirectResponse
public function store(ProjectRequest $request): RedirectResponse
{
$input = $request->all();
Project::create($input);
@ -47,7 +46,7 @@ class CategoryController extends Controller
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) : View
public function edit($id): View
{
$project = Project::findOrFail($id);
return view('settings.project.edit', compact('project'));
@ -60,7 +59,7 @@ class CategoryController extends Controller
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update($id, ProjectRequest $request) : RedirectResponse
public function update($id, ProjectRequest $request): RedirectResponse
{
$project = Project::findOrFail($id);
$input = $request->all();
@ -75,16 +74,16 @@ class CategoryController extends Controller
* @param int $id
* @return \Illuminate\Http\Response
*/
public function delete($id) : RedirectResponse
public function delete($id): RedirectResponse
{
$project = Project::with('documents')->findOrFail($id);
if ($project->documents->count() > 0) {
session()->flash(
'flash_message',
'You cannot delete this project!'
. ' There are '
. $project->documents->count()
. ' documents in this project!'
. ' There are '
. $project->documents->count()
. ' documents in this project!'
);
return redirect()->route('settings.project');
} else {

View file

@ -1,5 +1,5 @@
<?php
namespace App\Http\Controllers;
namespace App\Http\Controllers\Settings;
use Illuminate\Http\Request;
use App\Http\Requests;
@ -24,8 +24,8 @@ class CollectionController extends Controller
//$collections = Collection::take(10)->get();
//$collections = Collection::get();
$collections = Collection::with('documents')
->paginate(8); //get();
return view('rdr.settings.collection.collection', compact('collections'));
->paginate(8); //get();
return view('settings.collection.collection', compact('collections'));
}
/**

View file

@ -5,7 +5,7 @@ use App\Http\Controllers\Controller;
use App\Dataset;
use App\Project;
use App\License;
use App\Title;
use App\Models\Title;
use App\Http\Requests\DocumentRequest;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;
@ -27,7 +27,14 @@ class DatasetController extends Controller
//$registers = array();
$filter = $request->input('search');
$state = (strlen($request->input('state')) > 0) ? $request->input('state') : "published";
if (null !== ($request->input('state'))) {
$state = $request->input('state');
} else {
$state = "published";
}
$data = $request->all();
@ -131,7 +138,10 @@ class DatasetController extends Controller
// for($jahr = 1990; $jahr <= $nowYear; $jahr++){
// $years[$jahr] = $jahr;
// }
return view('settings.document.edit', compact('document', 'projects', 'options', 'checkeds', 'years', 'languages'));
return view(
'settings.document.edit',
compact('document', 'projects', 'options', 'checkeds', 'years', 'languages')
);
}
//https://stackoverflow.com/questions/17480200/using-laravel-how-do-i-create-a-view-that-will-update-a-one-to-many-relationshi?rq=1
@ -145,18 +155,18 @@ class DatasetController extends Controller
*/
public function update(DocumentRequest $request, $id) : RedirectResponse
{
$document = Dataset::findOrFail($id);
$dataset = Dataset::findOrFail($id);
//$input = $request->all();
$input = $request->except('licenses', 'titles');
$document->update($input);
// $document->type = $input['type'];
// $document->thesis_year_accepted = $input['thesis_year_accepted'];
// $document->project_id = $input['project_id'];
// $document->save();
$dataset->update($input);
// $dataset->type = $input['type'];
// $dataset->thesis_year_accepted = $input['thesis_year_accepted'];
// $dataset->project_id = $input['project_id'];
// $dataset->save();
$licenses = $request->input('licenses');
//$licenses = $input['licenses'];
$document->licenses()->sync($licenses);
$dataset->licenses()->sync($licenses);
//save the titles:
$titles = $request->input('titles');

View file

@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use Illuminate\View\View;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index(): View
{
return view('settings.home.index');
}
}

View file

@ -35,8 +35,20 @@ class LicenseController extends Controller
return view('settings.license.edit', compact('license', 'languages'));
}
public function update($id, LicenseRequest $request): RedirectResponse
public function update(Request $request, $id): RedirectResponse
{
$validatedData = $this->validate($request, [
'desc_text' => 'max:4000',
'language' => 'max:3',
'link_licence' => 'required|url:max:255',
'link_logo' => 'url|max:255',
'mime_type' => 'max:30',
'name_long' => 'required|min:5|max:255',
'sort_order' => 'required|integer',
'active' => 'required|boolean',
'pod_allowed' => 'required|boolean',
]);
$license = License::findOrFail($id);
$input = $request->all();
$license->update($input);

View file

@ -73,7 +73,7 @@ class PersonController extends Controller
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update($id, PersonRequest $request)
public function update(PersonRequest $request, $id)
{
$person = Person::findOrFail($id);
$input = $request->all();

View file

@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Role;
use App\Permission;
use App\Models\Role;
use App\Models\Permission;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
@ -38,7 +38,28 @@ class RoleController extends Controller
*/
public function store(Request $request)
{
//
$this->validate($request, [
'name' => 'required',
'display_name' => 'max:255',
'description' => 'max:255'
]);
//$input = $request->all();
$input = $request->except('permissions');
//$input = $request->only(['name']); //Retreive the name field
$role = Role::create($input);
$permissions = $request['permissions']; //Retrieving permissions
//Checking if a role was selected
if (isset($permissions)) {
foreach ($permissions as $permission) {
$permission_r = Permission::where('id', '=', $permission)->firstOrFail();
$role->attachPermission($permission_r); //Assigning permission to role
}
}
return redirect()
->route('role.index')
->with('success', 'Role has been created successfully');
}
/**
@ -64,7 +85,7 @@ class RoleController extends Controller
$permissions = Permission::all('id', 'name');
//$userRoles = $user->roles->pluck('name','name')->all();
$checkeds = $role->permissions->pluck('id')->toArray();
$checkeds = $role->perms->pluck('id')->toArray();
return view('settings.role.edit', compact('role', 'permissions', 'checkeds'));
}
@ -78,7 +99,9 @@ class RoleController extends Controller
public function update(Request $request, $id)
{
$this->validate(request(), [
'name' => 'required'
'name' => 'required',
'display_name' => 'max:255',
'description' => 'max:255'
]);
$role = Role::findOrFail($id);
$role->update($request->except('permissions'));
@ -86,9 +109,9 @@ class RoleController extends Controller
$permissions = $request->input('permissions') ? $request->input('permissions') : [];
//$role->syncPermissions($permissions);
if (isset($permissions)) {
$role->permissions()->sync($permissions);//If one or more role is selected associate user to roles
$role->perms()->sync($permissions);//If one or more role is selected associate user to roles
} else {
$role->permissions()->detach(); //If no role is selected remove exisiting role associated to a user
$role->perms()->detach(); //If no role is selected remove exisiting role associated to a user
}
return redirect()->route('role.index')

View file

@ -1,15 +1,18 @@
<?php
namespace App\Http\Controllers\Settings;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Role;
use App\User;
//use Spatie\Permission\Models\Role;
use App\Role;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
class UserController extends Controller
{
// public function __construct()
// {
// $this->middleware('permission:settings');
// }
/**
* Display a listing of the resource.
*
@ -22,9 +25,11 @@ class UserController extends Controller
// return abort(401, 'Unauthorized action.');
//}
$users = User::orderBy('id', 'DESC')->paginate(5);
$users = User::with('roles')
->orderBy('id', 'DESC')
->paginate(5);
return view('settings.user.user', compact('users'))
->with('i', ($request->input('page', 1) - 1) * 5);
->with('i', ($request->input('page', 1) - 1) * 5);
}
/**
@ -35,7 +40,7 @@ class UserController extends Controller
public function create()
{
//$roles = Role::pluck('name','name')->all();
$roles = Role::all('id', 'name');
$roles = Role::all('id', 'name');
return view('settings.user.create', compact('roles'));
}
@ -56,7 +61,7 @@ class UserController extends Controller
$this->validate($request, [
'login' => 'required',
'email' => 'required|email|unique:accounts',
'password' => 'required|min:6|confirmed'
'password' => 'required|min:6|confirmed',
//'roles' => 'required'
]);
@ -64,14 +69,13 @@ class UserController extends Controller
$input = $request->only(['login', 'email', 'password']); //Retreive the name, email and password fields
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$roles = $request['roles']; //Retrieving the roles field
$roles = $request['roles']; //Retrieving roles
//Checking if a role was selected
if (isset($roles)) {
foreach ($roles as $role) {
$role_r = Role::where('id', '=', $role)->firstOrFail();
$user->assignRole($role_r); //Assigning role to user
$user->attachRole($role_r); //Assigning role to user
}
}
@ -122,11 +126,11 @@ class UserController extends Controller
$this->validate(request(), [
'login' => 'required',
'email' => 'required|email|unique:accounts,email,' . $id,
'password' => 'required|min:6|confirmed'
'password' => 'required|min:6|confirmed',
]);
$user = User::findOrFail($id);
// $input = $request->except('roles');
$user = User::findOrFail($id);
// $input = $request->except('roles');
// $user->fill($input)->save();
$input = $request->only(['login', 'email', 'password']); //Retreive the name, email and password fields
@ -139,11 +143,11 @@ class UserController extends Controller
$roles = $request['roles']; //Retreive all roles
if (isset($roles)) {
$user->roles()->sync($roles);//If one or more role is selected associate user to roles
$user->roles()->sync($roles); //If one or more role is selected associate user to roles
} else {
$user->roles()->detach(); //If no role is selected remove exisiting role associated to a user
}
//return back()->with('flash_message', 'user successfully updated.');
return redirect()
->route('user.index')

View file

@ -56,8 +56,12 @@ class Kernel extends HttpKernel
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'perm' => \App\Http\Middleware\PermissionMiddleware::class,
// 'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
// 'perm' => \App\Http\Middleware\PermissionMiddleware::class,
// 'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,
'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,
'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,
];
}

View file

@ -25,6 +25,7 @@ class DocumentRequest extends Request
{
return [
'type' => 'required|min:5',
'server_state' => 'required',
// 'author' => 'required|min:4',
// 'stock' => 'required|integer',
// 'year' => 'required|integer|min:4'

View file

@ -47,7 +47,7 @@ trait DatasetExtension
'fetch' => 'eager'
),
'File' => array(
'model' => 'App\File',
'model' => 'App\Models\File',
'relation' => 'files',
'fetch' => 'eager'
),

69
app/Models/File.php Normal file
View file

@ -0,0 +1,69 @@
<?php
namespace App\Models;
use App\Dataset;
use App\Models\HashValue;
use Illuminate\Database\Eloquent\Model;
class File extends Model
{
protected $table = 'document_files';
public $timestamps = true;
protected $fillable = ['path_name', 'file_size', 'mime_type', 'label', 'sort_order'];
public function dataset()
{
return $this->belongsTo(Dataset::class, 'document_id', 'id');
}
public function hashvalues()
{
return $this->hasMany(HashValue::class, 'file_id', 'id');
}
/**
* Create hash value model objects from original file.
*
* TODO throws Exception in case hash computation is not possible
* (e.g., if referenced file is missing in file system)
*
* @return void
*/
public function createHashValues()
{
$hashtypes = array('md5', 'sha512');
foreach ($hashtypes as $type) {
$hash = new HashValue();
$hash->type = $type;
$hashString = $this->getRealHash($type);
$hash->value = $hashString;
$this->hashvalues()->save($hash);
}
}
/**
* Get the hash value of the file
*
* @param string $type Type of the hash value, @see hash_file();
* @return string hash value
*/
private function getRealHash($type)
{
$hash = @hash_file($type, $this->getPath());
if (empty($hash)) {
throw new \Exception("Empty HASH for file '" . $this->getPath() . "'");
}
return $hash;
}
/**
* Get full path of destination file.
*/
private function getPath()
{
return storage_path('app/public/' . $this->path_name);
}
}

17
app/Models/HashValue.php Normal file
View file

@ -0,0 +1,17 @@
<?php
namespace App\Models;
use App\Models\File;
use Illuminate\Database\Eloquent\Model;
class HashValue extends Model
{
protected $table = 'file_hashvalues';
public $timestamps = false;
public function file()
{
return $this->belongsTo(File::class, 'file_id', 'id');
}
}

10
app/Models/Permission.php Normal file
View file

@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Zizaco\Entrust\EntrustPermission;
class Permission extends EntrustPermission
{
//
}

15
app/Models/Role.php Normal file
View file

@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Zizaco\Entrust\EntrustRole;
class Role extends EntrustRole
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'description'];
}

View file

@ -1,5 +1,5 @@
<?php
namespace App;
namespace App\Models;
//use App\Library\Xml\DatasetExtension;

View file

@ -1,112 +0,0 @@
<?php
namespace App;
use Spatie\Permission\Guard;
use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Traits\HasRoles;
use Spatie\Permission\Traits\RefreshesPermissionCache;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Spatie\Permission\PermissionRegistrar;
use Spatie\Permission\Exceptions\PermissionAlreadyExists;
use Spatie\Permission\Exceptions\PermissionDoesNotExist;
use Spatie\Permission\Contracts\Permission as PermissionContract;
class Permission extends Model implements PermissionContract
{
use HasRoles;
use RefreshesPermissionCache;
public $guarded = ['id'];
public function __construct(array $attributes = [])
{
$attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');
parent::__construct($attributes);
$this->setTable(config('permission.table_names.permissions'));
}
public static function create(array $attributes = [])
{
$attributes['guard_name'] = $attributes['guard_name'] ?? Guard::getDefaultName(static::class);
$permission = static::getPermissions()->filter(function ($permission) use ($attributes) {
return $permission->name === $attributes['name'] && $permission->guard_name === $attributes['guard_name'];
})->first();
if ($permission) {
throw PermissionAlreadyExists::create($attributes['name'], $attributes['guard_name']);
}
if (isNotLumen() && app()::VERSION < '5.4') {
return parent::create($attributes);
}
return static::query()->create($attributes);
}
/**
* A permission can be applied to roles.
*/
public function roles() : BelongsToMany
{
return $this->belongsToMany(
\App\Role::class,
config('permission.table_names.role_has_permissions'),
'permission_id',
'role_id'
);
}
public static function findByName(string $name, $guardName = null): PermissionContract
{
$guardName = $guardName ?? Guard::getDefaultName(static::class);
$permission = static::getPermissions()
->filter(function ($permission) use ($name, $guardName) {
return $permission->name === $name && $permission->guard_name === $guardName;
})
->first();
if (! $permission) {
throw PermissionDoesNotExist::create($name, $guardName);
}
return $permission;
}
public static function findById(int $id, $guardName = null): PermissionContract
{
$guardName = $guardName ?? Guard::getDefaultName(static::class);
$permission = static::getPermissions()
->filter(function ($permission) use ($id, $guardName) {
return $permission->id === $id && $permission->guard_name === $guardName;
})
->first();
if (! $permission) {
throw PermissionDoesNotExist::withId($id, $guardName);
}
return $permission;
}
public static function findOrCreate(string $name, $guardName = null): PermissionContract
{
$guardName = $guardName ?? Guard::getDefaultName(static::class);
$permission = static::getPermissions()
->filter(function ($permission) use ($name, $guardName) {
return $permission->name === $name && $permission->guard_name === $guardName;
})
->first();
if (! $permission) {
return static::create(['name' => $name, 'guard_name' => $guardName]);
}
return $permission;
}
protected static function getPermissions(): Collection
{
return app(PermissionRegistrar::class)->getPermissions();
}
}

View file

@ -1,4 +1,5 @@
<?php namespace App;
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

View file

@ -4,20 +4,20 @@ use Illuminate\Support\ServiceProvider;
class ConfigServiceProvider extends ServiceProvider {
/**
* Overwrite any vendor / package configuration.
*
* This service provider is intended to provide a convenient location for you
* to overwrite any "vendor" or package configuration that you may want to
* modify before the application handles the incoming request / command.
*
* @return void
*/
public function register()
{
config([
//
]);
}
/**
* Overwrite any vendor / package configuration.
*
* This service provider is intended to provide a convenient location for you
* to overwrite any "vendor" or package configuration that you may want to
* modify before the application handles the incoming request / command.
*
* @return void
*/
public function register()
{
config([
//
]);
}
}

View file

@ -1,122 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Contracts\Role as RoleContract;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Spatie\Permission\Exceptions\RoleDoesNotExist;
use Spatie\Permission\Exceptions\GuardDoesNotMatch;
use Spatie\Permission\Exceptions\RoleAlreadyExists;
use Spatie\Permission\Guard;
use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\RefreshesPermissionCache;
class Role extends Model implements RoleContract
{
use HasPermissions;
use RefreshesPermissionCache;
//protected $table = 'user_roles';
public $timestamps = false;
public $guarded = ['id'];
public function __construct(array $attributes = [])
{
$attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');
parent::__construct($attributes);
$this->setTable(config('permission.table_names.roles'));
}
public static function create(array $attributes = [])
{
$attributes['guard_name'] = $attributes['guard_name'] ?? Guard::getDefaultName(static::class);
if (static::where('name', $attributes['name'])
->where('guard_name', $attributes['guard_name'])->first()) {
throw RoleAlreadyExists::create($attributes['name'], $attributes['guard_name']);
}
if (isNotLumen() && app()::VERSION < '5.4') {
return parent::create($attributes);
}
return static::query()->create($attributes);
}
/**
* A role may be given various permissions.
*/
public function permissions() : BelongsToMany
{
return $this->belongsToMany(
\App\Permission::class,
config('permission.table_names.role_has_permissions'),
'role_id',
'permission_id'
);
}
/**
* A role belongs to some users of the model associated with its guard.
*/
public function users() : BelongsToMany
{
return $this->belongsToMany(
\App\User::class,
config('permission.table_names.model_has_roles'),
'role_id',
'account_id'
);
}
public static function findByName(string $name, $guardName = null): RoleContract
{
$guardName = $guardName ?? Guard::getDefaultName(static::class);
$role = static::where('name', $name)->where('guard_name', $guardName)->first();
if (! $role) {
throw RoleDoesNotExist::named($name);
}
return $role;
}
public static function findById(int $id, $guardName = null): RoleContract
{
$guardName = $guardName ?? Guard::getDefaultName(static::class);
$role = static::where('id', $id)->where('guard_name', $guardName)->first();
if (! $role) {
throw RoleDoesNotExist::withId($id);
}
return $role;
}
public static function findOrCreate(string $name, $guardName = null): RoleContract
{
$guardName = $guardName ?? Guard::getDefaultName(static::class);
$role = static::where('name', $name)->where('guard_name', $guardName)->first();
if (! $role) {
return static::create(['name' => $name, 'guard_name' => $guardName]);
}
return $role;
}
public function hasPermissionTo($permission): bool
{
if (is_string($permission)) {
$permission = app(Permission::class)->findByName($permission, $this->getDefaultGuardName());
}
if (is_int($permission)) {
$permission = app(Permission::class)->findById($permission, $this->getDefaultGuardName());
}
if (! $this->getGuardNames()->contains($permission->guard_name)) {
throw GuardDoesNotMatch::create($permission->guard_name, $this->getGuardNames());
}
return $this->permissions->contains('id', $permission->id);
}
}

63
app/Rules/RdrFilesize.php Normal file
View file

@ -0,0 +1,63 @@
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Config;
class RdrFilesize implements Rule
{
protected $maxFileSize;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
$this->maxFileSize = Config::get('enums.max_filesize');
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
//return Rule::in($this->filetypes);
return $this->getSize($attribute, $value) <= $this->maxFileSize;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'file :attribute is too large for the destination storage system.';
}
/**
* Get the size of an attribute.
*
* @param string $attribute
* @param mixed $value
* @return mixed
*/
private function getSize($attribute, $value)
{
if (is_numeric($value) && $hasNumeric) {
return array_get($this->data, $attribute);
} elseif (is_array($value)) {
return count($value);
} elseif ($value instanceof File) {
return $value->getSize() / 1024;
}
return mb_strlen($value);
}
}

View file

@ -0,0 +1,66 @@
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Config;
class RdrFiletypes implements Rule
{
protected $filetypes;
// protected $maxFileSize;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
$this->filetypes = Config::get('enums.filetypes_allowed', ['pdf']);
// $this->maxFileSize = Config::get('enums.max_filesize');
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
//return Rule::in($this->filetypes);
return $value->getPath() != '' &&
in_array($value->guessExtension(), $this->filetypes); // &&
// $this->getSize($attribute, $value) <= $this->maxFileSize;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'attribute :attribute has not a valid mime type.';
}
/**
* Get the size of an attribute.
*
* @param string $attribute
* @param mixed $value
* @return mixed
*/
private function getSize($attribute, $value)
{
if (is_numeric($value) && $hasNumeric) {
return array_get($this->data, $attribute);
} elseif (is_array($value)) {
return count($value);
} elseif ($value instanceof File) {
return $value->getSize() / 1024;
}
return mb_strlen($value);
}
}

View file

@ -2,21 +2,20 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
#use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Collection;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, AuthorizableContract
class User extends Authenticatable
{
// use Authenticatable, CanResetPassword, Authorizable;
use Notifiable;
// use HasRoles;
use EntrustUserTrait;
use Authenticatable, CanResetPassword, Authorizable;
use HasRoles;
/**
* The database table used by the model.
@ -46,6 +45,16 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
$this->attributes['password'] = app('hash')->needsRehash($password) ? Hash::make($password) : $password;
}
}
public function getAvatarUrl()
{
return "https://www.gravatar.com/avatar/" . md5($this->email) . "?d=mm";
}
public function getRoleNames(): Collection
{
return $this->roles->pluck('name');
}
//public function roles()
//{