- bug fixes Testphase Januar 2020

This commit is contained in:
Arno Kaimbacher 2020-01-23 17:52:26 +01:00
parent d323e1d4bb
commit a773fe2a1d
29 changed files with 1238 additions and 496 deletions

View file

@ -145,7 +145,7 @@ class RequestController extends Controller
private function handleIdentify()
{
$email = "repository@geologie.ac.at";
$repositoryName = "TETHYS - Data Research Repository";
$repositoryName = "TETHYS RDR";
$repIdentifier = "tethys.geologie.ac.at";
$sampleIdentifier = "oai:" . $repIdentifier . ":27";//$this->_configuration->getSampleIdentifier();
$earliestDateFromDb = optional(Dataset::earliestPublicationDate())->server_date_published;

View file

@ -52,7 +52,10 @@ class EditorController extends Controller
})
->orderBy('server_date_modified', 'desc')
->get();
return View::make('workflow.editor.index', compact($datasets));
// return View::make('workflow.editor.index', compact('datasets'));
return View::make('workflow.editor.index', [
'datasets' => $datasets,
]);
}
/**
@ -94,9 +97,14 @@ class EditorController extends Controller
*/
public function edit($id): \Illuminate\Contracts\View\View
{
$dataset = Dataset::findOrFail($id);
$dataset->load('licenses', 'titles', 'abstracts', 'files', 'coverage', 'subjects', 'references');
$dataset = Dataset::findOrFail($id);
$dataset->load('licenses', 'authors', 'contributors', 'titles', 'abstracts', 'files', 'coverage', 'subjects', 'references');
$titleTypes = ['Main' => 'Main', 'Sub' => 'Sub', 'Alternative' => 'Alternative', 'Translated' => 'Translated', 'Other' => 'Other'];
$descriptionTypes = ['Abstract' => 'Abstract', 'Methods' => 'Methods', 'Series_information' => 'Series_information', 'Technical_info' => 'Technical_info', 'Translated' => 'Translated', 'Other' => 'Other'];
$languages = DB::table('languages')
->where('active', true)
->pluck('part1', 'part1');
$projects = Project::pluck('label', 'id');
$datum = date('Y-m-d');
@ -109,22 +117,20 @@ class EditorController extends Controller
$languages = DB::table('languages')
->where('active', true)
->pluck('part1', 'part1');
//$options = License::all();
// $options = License::all('id', 'name_long');
$licenses = License::select('id', 'name_long', 'link_licence')
->orderBy('sort_order')
->get();
//$checkeds = $dataset->licenses->pluck('id')->toArray();
->orderBy('sort_order')
->get();
// $checkeds = $dataset->licenses->pluck('id')->toArray();
$checkeds = $dataset->licenses->first()->id;
$keywordTypes = ['uncontrolled' => 'uncontrolled', 'swd' => 'swd'];
$referenceTypes = ["rdr-id", "arXiv", "bibcode", "DOI", "EAN13", "EISSN", "Handle", "IGSN", "ISBN", "ISSN", "ISTC", "LISSN", "LSID", "PMID", "PURL", "UPC", "URL", "URN"];
$referenceTypes = ["rdr-id", "doi", "handle", "isbn", "issn", "url", "urn"];
$referenceTypes = array_combine($referenceTypes, $referenceTypes);
$relationTypes = ["IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues", "HasMetadata", "IsMetadataFor","IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", "IsReferencedBy", "References"];
// "IsDocumentedBy", "Documents", "IsCompiledBy", "Compiles", "IsVariantFormOf", "IsOriginalFormOf", "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", "IsSourceOf"];
$relationTypes = ["IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues", "HasMetadata", "IsMetadataFor", "IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", "IsReferencedBy", "References", "IsDocumentedBy", "Documents", "IsCompiledBy", "Compiles", "IsVariantFormOf", "IsOriginalFormOf", "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", "IsSourceOf"];
$relationTypes = array_combine($relationTypes, $relationTypes);
@ -132,6 +138,9 @@ class EditorController extends Controller
'workflow.editor.edit',
compact(
'dataset',
'titleTypes',
'descriptionTypes',
'languages',
'projects',
'licenses',
'checkeds',
@ -156,42 +165,127 @@ class EditorController extends Controller
public function update(DocumentRequest $request, $id): RedirectResponse
{
$rules = [
'type' => 'required|min:5',
'coverage.xmin' => [
'nullable',
'type' => 'required|min:3',
'titles.*.value' => 'required|min:4|max:255',
'titles.*.language' => 'required',
'descriptions.*.value' => 'required|min:4|max:2500',
'descriptions.*.language' => 'required',
'coverage.x_min' => [
'required',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
],
'coverage.ymin' => [
'nullable',
'coverage.y_min' => [
'required',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
],
'coverage.xmax' => [
'nullable',
'coverage.x_max' => [
'required',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
],
'coverage.ymax' => [
'nullable',
'coverage.y_max' => [
'required',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
],
'subjects' => 'required|array|min:3',
'subjects.*.value' => 'required|string',
'subjects.*.type' => 'required|string',
'files' => 'required|array|min:1',
'files.*.label' => 'required|string',
];
$validator = Validator::make($request->all(), $rules);
$customMessages = [
'subjects.min' => 'Minimal three keywords are required.',
'subjects.*.type.required' => 'The types of all keywords are required.',
'files.min' => 'Minimal one file is required.',
];
if (null != $request->file('files')) {
$data = $request->all();
$files = count($request->input('files')) - 1;
foreach (range(0, $files) as $index) {
// $rules['files.' . $index] = 'image|max:2048';
$rules['files.' . $index . '.file'] = [new RdrFilesize($index + 1), 'file', new RdrFiletypes()];
}
}
$validator = Validator::make($request->all(), $rules, $customMessages);
if (!$validator->fails()) {
$dataset = Dataset::findOrFail($id);
$data = $request->all();
$input = $request->except('abstracts', 'licenses', 'titles', 'coverage', '_method', '_token');
$input = $request->except(
'abstracts',
'licenses',
'authors',
'contributors',
'titles',
'coverage',
'subjects',
'references',
'files'
);
$licenses = $request->input('licenses');
//$licenses = $input['licenses'];
$dataset->licenses()->sync($licenses);
$dataset->authors()->sync([]);
//store authors
if (isset($data['authors'])) {
// $data_to_sync = [];
$index = 0;
foreach ($request->get('authors') as $key => $person) {
$pivot_data = ['role' => 'author', 'sort_order' => $index + 1, 'allow_email_contact' => false];
// if ($galery_id == $request->get('mainPicture')) $pivot_data = ['main' => 1];
if (isset($person['id'])) {
// $data_to_sync[$person['id']] = $pivot_data;
$dataset->persons()->attach($person['id'], $pivot_data);
} else {
$dataPerson = new Person($person);
$dataPerson->status = true;
$dataPerson->name_type = "Organizational";
$dataset->persons()->save($dataPerson, $pivot_data);
}
$index++;
}
// $dataset->persons()->sync($data_to_sync);
}
$dataset->contributors()->sync([]);
//store contributors
if (isset($data['contributors'])) {
// $data_to_sync = [];
$index = 0;
foreach ($request->get('contributors') as $key => $person) {
$pivot_data = ['role' => 'contributor', 'sort_order' => $index + 1, 'allow_email_contact' => false];
// if ($galery_id == $request->get('mainPicture')) $pivot_data = ['main' => 1];
if (isset($person['id'])) {
// $data_to_sync[$person['id']] = $pivot_data;
$dataset->persons()->attach($person['id'], $pivot_data);
} else {
$dataPerson = new Person($person);
$dataPerson->status = true;
$dataPerson->name_type = "Organizational";
$dataset->persons()->save($dataPerson, $pivot_data);
}
$index++;
}
// $dataset->persons()->sync($data_to_sync);
}
//save the titles:
$titles = $request->input('titles');
if (is_array($titles) && count($titles) > 0) {
foreach ($titles as $key => $formTitle) {
$title = Title::findOrFail($key);
$title->value = $formTitle['value'];
$title->language = $formTitle['language'];
$title->save();
// if (isset($key) && $key != 'undefined') {
if (isset($formTitle['id'])) {
$title = Title::findOrFail($formTitle['id']);
$title->value = $formTitle['value'];
$title->language = $formTitle['language'];
$title->type = $formTitle['type'];
if ($title->isDirty()) {
$title->save();
}
} else {
$title = new Title($formTitle);
$dataset->titles()->save($title);
}
}
}
@ -199,10 +293,18 @@ class EditorController extends Controller
$abstracts = $request->input('abstracts');
if (is_array($abstracts) && count($abstracts) > 0) {
foreach ($abstracts as $key => $formAbstract) {
$abstract = Description::findOrFail($key);
$abstract->value = $formAbstract['value'];
$abstract->language = $formAbstract['language'];
$abstract->save();
// if (isset($key) && $key != 'undefined') {
if (isset($formAbstract['id'])) {
$abstract = Description::findOrFail($formAbstract['id']);
$abstract->value = $formAbstract['value'];
$abstract->language = $formAbstract['language'];
if ($abstract->isDirty()) {
$abstract->save();
}
} else {
$abstract = new Description($formAbstract);
$dataset->abstracts()->save($abstract);
}
}
}
@ -210,46 +312,102 @@ class EditorController extends Controller
$references = $request->input('references');
if (is_array($references) && count($references) > 0) {
foreach ($references as $key => $formReference) {
$reference = DatasetReference::findOrFail($key);
$reference->value = $formReference['value'];
$reference->label = $formReference['label'];
$reference->type = $formReference['type'];
$reference->relation = $formReference['relation'];
$reference->save();
// if (isset($key) && $key != 'undefined') {
if (isset($formReference['id'])) {
$reference = DatasetReference::findOrFail($formReference['id']);
$reference->value = $formReference['value'];
$reference->label = $formReference['label'];
$reference->type = $formReference['type'];
$reference->relation = $formReference['relation'];
if ($reference->isDirty()) {
$reference->save();
}
} else {
$reference = new DatasetReference($formReference);
$dataset->references()->save($reference);
}
}
}
//save the keywords:
$keywords = $request->input('keywords');
$keywords = $request->input('subjects');
if (is_array($keywords) && count($keywords) > 0) {
foreach ($keywords as $key => $formKeyword) {
$subject = Subject::findOrFail($key);
$subject->value = $formKeyword['value'];
$subject->type = $formKeyword['type'];
$subject->save();
if (isset($formKeyword['id'])) {
$subject = Subject::findOrFail($formKeyword['id']);
$subject->value = $formKeyword['value'];
$subject->type = $formKeyword['type'];
if ($subject->isDirty()) {
$subject->save();
}
} else {
$subject = new Subject($formKeyword);
$dataset->subjects()->save($subject);
}
}
}
//save the files:
$files = $request->input('files');
$files = $request->get('files');
// $files = $request->file('files');
if (is_array($files) && count($files) > 0) {
$index = 1;
foreach ($files as $key => $formFile) {
$file = File::findOrFail($key);
$file->label = $formFile['label'];
$file->save();
// if (isset($key) && $key != 'undefined') {
if (isset($formFile['id'])) {
$file = File::findOrFail($formFile['id']);
$file->label = $formFile['label'];
if ($file->isDirty()) {
$file->save();
}
} else {
$uploads = $request->file('uploads');
$fileIndex = $formFile['file'];
$file = $uploads[$fileIndex];
// $file = new \Illuminate\Http\UploadedFile($file);
$label = urldecode($formFile['label']);
$sort_order = $index;//$formFile['sort_order'];
$fileName = "file-" . 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);
$fileDb = new File([
'path_name' => $path,
'file_size' => $size,
'mime_type' => $mimeType,
'label' => $label,
'sort_order' => $sort_order,
'visible_in_frontdoor' => 1,
'visible_in_oai' => 1
]);
//$test = $file->path_name;
$dataset->files()->save($fileDb);
$fileDb->createHashValues();
}
$index++;
}
}
// save coverage
if (isset($data['coverage'])) {
if (isset($data['coverage']) && !$this->containsOnlyNull($data['coverage'])) {
$formCoverage = $request->input('coverage');
$coverage = $dataset->coverage()->updateOrCreate(
['dataset_id' => $dataset->id],
$formCoverage
);
} elseif (isset($data['coverage']) && $this->containsOnlyNull($data['coverage'])
&& !is_null($dataset->coverage)) {
$dataset->coverage()->delete();
}
if (!$dataset->isDirty(dataset::UPDATED_AT)) {
$dataset->fill($input);
// $dataset->creating_corporation = "Peter";
if (!$dataset->isDirty()) {
$time = new \Illuminate\Support\Carbon();
$dataset->setUpdatedAt($time);
}
@ -266,12 +424,31 @@ class EditorController extends Controller
// 'success' => false,
// 'errors' => $validator->errors()->all(),
// ], 422);
return back()
->withErrors($validator->errors()->all());
// $errors = $validator->errors();
return back()->withErrors($validator);
// return redirect()->route('publish.workflow.submit.edit', ['id' => $id])->withInput()
// ->withErrors($validator);
}
throw new GeneralException(trans('exceptions.backend.dataset.update_error'));
}
private function containsOnlyNull($input)
{
return empty(array_filter($input, function ($a) {
return $a !== null;
}));
}
public function download($id)
{
//$report = $this->report->find($id);
$file = File::findOrFail($id);
$file_path = public_path('storage/' . $file->path_name);
$ext = \Illuminate\Support\Facades\File::extension($file_path);
return response()->download($file_path, $file->label . "." . $ext, ['Content-Type:' . $file->mime_type]);
// return response()->download($file_path, $file->label, ['Content-Type:' . $file->mime_type]);
}
/**
* Display the specified resource.
*

View file

@ -55,7 +55,7 @@ class IndexController extends Controller
->pluck('part1', 'part1');
// ->toArray();
// $projects = Project::pluck('label', 'id');
$projects = Project::pluck('label', 'id');
$relatedIdentifierTypes = ["doi", "handle", "isbn", "issn", "url", "urn"];
$relatedIdentifierTypes = array_combine($relatedIdentifierTypes, $relatedIdentifierTypes);
@ -73,7 +73,7 @@ class IndexController extends Controller
//$relationTypes = array('updates' => 'updates', 'updated-by' => 'updated-by', 'other' => 'other');
return view(
'publish.create-step1',
compact('licenses', 'languages', 'relatedIdentifierTypes', 'relationTypes', 'titleTypes', 'keywordTypes', 'descriptionTypes', 'page')
compact('licenses', 'languages', 'projects', 'relatedIdentifierTypes', 'relationTypes', 'titleTypes', 'keywordTypes', 'descriptionTypes', 'page')
);
}
@ -246,26 +246,38 @@ class IndexController extends Controller
'type' => 'required|min:5',
'rights' => 'required|boolean|in:1',
'belongs_to_bibliography' => 'required|boolean',
'title_main.value' => 'required|min:4',
'title_main.value' => 'required|min:4|max:255',
'title_main.language' => 'required',
'abstract_main.value' => 'required|min:4',
'titles.*.value' => 'required|min:4|max:255',
'abstract_main.value' => 'required|min:4|max:2500',
'abstract_main.language' => 'required',
'descriptions.*.value' => 'required|min:4|max:2500',
'coverage.x_min' => [
'nullable',
'required',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
],
'coverage.y_min' => [
'nullable',
'required',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
],
'coverage.x_max' => [
'nullable',
'required',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
],
'coverage.y_max' => [
'nullable',
'required',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
],
'keywords' => 'required|array|min:3',
'keywords.*.value' => 'required|string',
'keywords.*.type' => 'required|string',
'files' => 'required|array|min:1',
'files.*.label' => 'required|string',
];
$customMessages = [
'keywords.required' => 'Minimal three keywords are required.',
'keywords.*.type.required' => 'The types of all keywords are required.',
'files.min' => 'Minimal one file is required.',
];
if (null != $request->file('files')) {
$files = count($request->file('files')) - 1;
@ -274,7 +286,7 @@ class IndexController extends Controller
$rules['files.' . $index . '.file'] = [new RdrFilesize($index + 1), 'file', 'required', new RdrFiletypes()];
}
}
$validator = Validator::make($request->all(), $rules);
$validator = Validator::make($request->all(), $rules, $customMessages);
if (!$validator->fails()) {
//store dataset todo
//$data = $request->all();
@ -501,7 +513,7 @@ class IndexController extends Controller
$errors = $validator->errors();
return response()->json([
'success' => false,
'errors' => $errors->all(),
'errors' => $errors,
], 422);
}
}

View file

@ -129,29 +129,37 @@ class SubmitController extends Controller
public function update(DocumentRequest $request, $id): RedirectResponse
{
$rules = [
'type' => 'required|min:5',
'coverage.xmin' => [
'nullable',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/',
'type' => 'required|min:3',
'titles.*.value' => 'required|min:4|max:255',
'titles.*.language' => 'required',
'descriptions.*.value' => 'required|min:4|max:2500',
'descriptions.*.language' => 'required',
'coverage.x_min' => [
'required',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
],
'coverage.ymin' => [
'nullable',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/',
'coverage.y_min' => [
'required',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
],
'coverage.xmax' => [
'nullable',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/',
'coverage.x_max' => [
'required',
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
],
'coverage.ymax' => [
'nullable',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/',
'coverage.y_max' => [
'required',
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
],
'keywords.*.value' => 'required|string',
'keywords.*.type' => 'required|string',
'subjects' => 'required|array|min:3',
'subjects.*.value' => 'required|string',
'subjects.*.type' => 'required|string',
'files' => 'required|array|min:1',
'files.*.label' => 'required|string',
];
$customMessages = [
'keywords.*.type.required' => 'The types of all keywords are required.',
'subjects.min' => 'Minimal three keywords are required.',
'subjects.*.type.required' => 'The types of all keywords are required.',
'files.min' => 'Minimal one file is required.',
];
if (null != $request->file('files')) {
$data = $request->all();
@ -168,6 +176,8 @@ class SubmitController extends Controller
$input = $request->except(
'abstracts',
'licenses',
'authors',
'contributors',
'titles',
'coverage',
'subjects',
@ -303,6 +313,7 @@ class SubmitController extends Controller
//save the files:
$files = $request->get('files');
// $files = $request->file('files');
if (is_array($files) && count($files) > 0) {
$index = 1;
foreach ($files as $key => $formFile) {
@ -314,7 +325,12 @@ class SubmitController extends Controller
$file->save();
}
} else {
$file = $formFile['file'];
$uploads = $request->file('uploads');
$fileIndex = $formFile['file'];
$file = $uploads[$fileIndex];
// $file = new \Illuminate\Http\UploadedFile($file);
$label = urldecode($formFile['label']);
$sort_order = $index;//$formFile['sort_order'];
$fileName = "file-" . time() . '.' . $file->getClientOriginalExtension();
@ -372,8 +388,10 @@ class SubmitController extends Controller
// 'success' => false,
// 'errors' => $validator->errors()->all(),
// ], 422);
return back()->withInput()
->withErrors($validator->errors()->all());
// $errors = $validator->errors();
return back()->withErrors($validator);
// return redirect()->route('publish.workflow.submit.edit', ['id' => $id])->withInput()
// ->withErrors($validator);
}
throw new GeneralException(trans('exceptions.backend.dataset.update_error'));
}
@ -425,6 +443,9 @@ class SubmitController extends Controller
if ($dataset->reject_editor_note != null) {
$input['reject_editor_note'] = null;
}
if ($dataset->reviewer_id !== null) {
$input['reviewer_id'] = null;
}
if ($dataset->reject_reviewer_note != null) {
$input['reject_reviewer_note'] = null;
}