1. Timer auf 60 Minuten und 10 Minuten vorher eine Warnung

11. Continue statt Review Dataset (im Step 3)
12. keywords auf default 'uncontrolled' einfrieren
14. Lizenzen mit Links versehen
19. Timezone: 'timezone' => 'Europe/Vienna'
20. angefangen mit RDR -> TETHYS Unbenennungen
21. translated validation ausgebessert
22. dataset als Typescript Instanz
This commit is contained in:
Arno Kaimbacher 2019-11-21 18:43:56 +01:00
parent 300c8a13a9
commit 4b8f2a63d8
45 changed files with 1729 additions and 826 deletions

View File

@ -5,7 +5,8 @@
} }
], ],
"settings": { "settings": {
"phpfmt.php_bin": "\"C:\\ProgramData\\scoop\\apps\\php-nts\\current\\php.exe\"", // "phpfmt.php_bin": "\"C:\\ProgramData\\scoop\\apps\\php-nts\\current\\php.exe\"",
"phpfmt.php_bin": "php",
"phpfmt.psr2": true "phpfmt.psr2": true
} }
} }

View File

@ -3,40 +3,65 @@
use Exception; use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler { class Handler extends ExceptionHandler
{
/** /**
* A list of the exception types that should not be reported. * A list of the exception types that should not be reported.
* *
* @var array * @var array
*/ */
protected $dontReport = [ protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException' 'Symfony\Component\HttpKernel\Exception\HttpException'
]; ];
/** /**
* Report or log an exception. * Report or log an exception.
* *
* This is a great spot to send exceptions to Sentry, Bugsnag, etc. * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
* *
* @param \Exception $e * @param \Exception $e
* @return void * @return void
*/ */
public function report(Exception $e) public function report(Exception $e)
{ {
return parent::report($e); return parent::report($e);
} }
/** /**
* Render an exception into an HTTP response. * Render an exception into an HTTP response.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @param \Exception $e * @param \Exception $e
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function render($request, Exception $e) public function render($request, Exception $ex)
{ {
return parent::render($request, $e); if ($ex instanceof \Illuminate\Auth\Access\AuthorizationException) {
} // return $this->errorResponse($exception->getMessage(), 403);
return redirect('/login', 302)
->with('error', 'The form has expired due to inactivity. Please try again');
// redirect()->guest($ex->redirectTo() ?? route('login'));
}
// if ($ex instanceof AuthorizationException) {
// // return $this->errorResponse($exception->getMessage(), 403);
// return redirect('/login', 302)
// // ->back()
// // ->withInput($request->except(['password', 'password_confirmation']))
// ->with('error', 'The form has expired due to inactivity. Please try again');
// }
// if ($ex instanceof \Illuminate\Session\TokenMismatchException) {
// // return redirect('/login', 302)
// // // ->back()
// // // ->withInput($request->except(['password', 'password_confirmation']))
// // ->with('error', 'The form has expired due to inactivity. Please try again');
// return response()->json(array(
// 'success' => true,
// //'redirect' => route('settings.document.edit', ['id' => $dataset->server_state]),
// 'redirect' => route('login')
// ));
// }
return parent::render($request, $ex);
}
} }

View File

@ -145,8 +145,8 @@ class RequestController extends Controller
private function handleIdentify() private function handleIdentify()
{ {
$email = "repository@geologie.ac.at"; $email = "repository@geologie.ac.at";
$repositoryName = "RDR - Data Research Repository"; $repositoryName = "TETHYS - Data Research Repository";
$repIdentifier = "rdr.gba.ac.at"; $repIdentifier = "tethys.geologie.ac.at";
$sampleIdentifier = "oai:" . $repIdentifier . ":27";//$this->_configuration->getSampleIdentifier(); $sampleIdentifier = "oai:" . $repIdentifier . ":27";//$this->_configuration->getSampleIdentifier();
$earliestDateFromDb = optional(Dataset::earliestPublicationDate())->server_date_published; $earliestDateFromDb = optional(Dataset::earliestPublicationDate())->server_date_published;
@ -281,7 +281,7 @@ class RequestController extends Controller
*/ */
private function handleListSets() private function handleListSets()
{ {
$repIdentifier = "rdr.gba.ac.at"; $repIdentifier = "tethys.geologie.ac.at";
$this->_proc->setParameter('', 'repIdentifier', $repIdentifier); $this->_proc->setParameter('', 'repIdentifier', $repIdentifier);
$this->_xml->appendChild($this->_xml->createElement('Datasets')); $this->_xml->appendChild($this->_xml->createElement('Datasets'));
@ -332,7 +332,7 @@ class RequestController extends Controller
$maxRecords = 100; $maxRecords = 100;
} }
$repIdentifier = "rdr.gba.ac.at"; $repIdentifier = "tethys.geologie.ac.at";
$tokenTempPath = storage_path('app/resumption'); //$this->_configuration->getResumptionTokenPath(); $tokenTempPath = storage_path('app/resumption'); //$this->_configuration->getResumptionTokenPath();
$this->_proc->setParameter('', 'repIdentifier', $repIdentifier); $this->_proc->setParameter('', 'repIdentifier', $repIdentifier);
@ -512,7 +512,7 @@ class RequestController extends Controller
$identify = $sxe->addChild('Identify'); $identify = $sxe->addChild('Identify');
$identify->addChild('repositoryName', "Data Research Repository"); $identify->addChild('repositoryName', "Data Research Repository");
$identify->addChild('baseURL', "http://rdr.gba.geolba.ac.at/"); $identify->addChild('baseURL', "http://tethys.geologie.ac.at/");
$identify->addChild('protocolVersion', '2.0'); $identify->addChild('protocolVersion', '2.0');
$identify->addChild('adminEmail', 'repository@geologie.ac.at'); $identify->addChild('adminEmail', 'repository@geologie.ac.at');
//$identify->addChild('earliestDatestamp', '2017-04-07'); //$identify->addChild('earliestDatestamp', '2017-04-07');

View File

@ -47,7 +47,7 @@ class IndexController extends Controller
public function createStep1(Request $request) public function createStep1(Request $request)
{ {
#$dataset = $request->session()->get('dataset'); #$dataset = $request->session()->get('dataset');
$licenses = License::select('id', 'name_long') $licenses = License::select('id', 'name_long', 'link_licence')
->orderBy('sort_order') ->orderBy('sort_order')
->get(); ->get();
$languages = DB::table('languages') $languages = DB::table('languages')

View File

@ -39,7 +39,7 @@ class PermissionMiddleware
//{ //{
// abort(401); // abort(401);
//} //}
return abort(401); // return abort(403);
//return $next($request); throw new \Illuminate\Auth\Access\AuthorizationException('This action is unauthorized.');
} }
} }

View File

@ -48,7 +48,7 @@ class SolrDocumentXslt
} }
/** /**
* Retrieves XML describing model data of provided RDR dataset. * Retrieves XML describing model data of provided TETHYS dataset.
* *
* @param Dataset $rdrDataset * @param Dataset $rdrDataset
* @return DOMDocument * @return DOMDocument

855
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -64,8 +64,8 @@ return [
| ahead and set this to a sensible default for you out of the box. | ahead and set this to a sensible default for you out of the box.
| |
*/ */
// https://www.php.net/manual/en/timezones.europe.php
'timezone' => 'UTC', 'timezone' => 'Europe/Vienna',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@ -78,7 +78,7 @@ class PagesTableSeeder extends Seeder
'page_id' => 1, //terms and conditions 'page_id' => 1, //terms and conditions
'locale' => 'de', 'locale' => 'de',
'title' => 'Geschäftsbedingungen', 'title' => 'Geschäftsbedingungen',
'description' => '<h2>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Open Access und FAIR Erklärung</h2><p>iwas große Fokus liegt beim GBA-RDR beim Erlangen eines hohen Grades an die Zugänglichkeit und nachhaltige Verfügbarkeit für alle interessierten Nutzer. Dadurch soll eine <strong>verantwortungsvolle </strong>Weiterverwertung sowie Weiterentwicklung der Daten ermöglicht werden. Ebenfalls wird von Seitens des GBA-RDRs großen Wert auf das Ermöglichen von der Weiterverwendung von den publizierten Forschungsdaten gelegt. Dies wird durch das Einhalten der Prinzipien von Open Access und FAIR erlangt.</p><p>Unter Open Access wird der kostenfreie sowie öffentliche Zugang zu den im RDR archivierten Datenpublikationen verstanden.</p><p>Das Prinzip FAIR<a href="#_ftn1">[1]</a>, welches ein Akronym für <i>Findability</i> (Auffindbarkeit), <i>Accessibility</i> (Zugänglichkeit), <i>Interoperability</i> (Kompatibilität), und <i>Reusability</i> (Wiederverwendbarkeit) ist, unterstützt eine nachhaltige wissenschaftliche Datenpflege sowie verwaltung. Erst durch die garantierte Auffindbarkeit, volle Zugänglichkeit zu den Daten, gewährleistete Kompatibilität mit anderen Datenbeständen so wie die wissenschaftliche Wiederverwendbarkeit, erhält die Datenpublikation einen großen Wert.</p><p>Das GBA-RDR behält sich vor, bei Einzelfällen und begründet Datenpublikationen nur eingeschränkt zur Verfügung zu stellen oder/und mit einem Embargo zu belegen. Grundsätzlich sollen die Nutzer die publizierten Daten uneingeschränkt lesen, kopieren, drucken und je nach vergebener Lizenz verarbeiten sowie verteilen können. Dabei verpflichtet sich der Nutzer ausnahmslos die Daten zu zitieren. Die Urheberrechte der Autorenschaft werden dabei nicht berührt.</p><p>&nbsp;</p><h2>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Leitlinie</h2><ul><li>Ziele</li><li>Anforderungen an die elektronische Publikation</li><li>Urheber- und Nutzungsrechte</li><li>Sacherschließung auf dem Publikationsserver</li><li>Archivierung von Publikationen</li><li>Technische Eigenschaften des Publikationsservers</li><li>Organisatorische Regelungen</li></ul><p>&nbsp;</p><h2>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rechte und Pflichten</h2><p>Die im GBA-RDR veröffentlichten Informationen und Metadaten unterliegen grundsätzlich den Open-Access-Bedingungen, wenn nicht anders angegeben. Die publizierten Datensets unterliegen einem definierten Zugriffs- sowie Nutzungsrecht welche in den Metadaten eindeutig beschrieben sind.</p><p>&nbsp;</p><p>Zugriffsrecht</p><p>Es wird zwischen uneingeschränkten und eingeschränkten Zugriffsrecht unterschieden. Während bei dem uneingeschränkten Zugriffsrecht voller Zugriff auf die Daten und den dazugehörigen Informationen besteht, so kann ein eingeschränktes Zugriffsrecht auf bestimmte oder unbestimmte Zeit sowie auf alle oder nur auf Teile der Daten bestehen. Die detaillierte Zugriffsrechtsbestimmung sowie die Dauer einer Zugriffsbeschränkung sind in den Metadaten vermerkt. Grundsätzlich wird ein uneingeschränktes Zugriffsrecht vergeben. Unter bestimmten Voraussetzungen jedoch kann diese eingeschränkt sein.</p><p><br>&nbsp;</p><p>Nutzungsrecht</p><p>Durch die Vergabe von Creative Commons Lizenzen werden jeder Datenpublikation mit definierten Nutzungsrechte ausgestattet. Die dabei verwendete Lizenz wird verpflichtend mit den zur Datenpublikation gehörenden Metadaten bereitgestellt.</p><p>&nbsp;</p><p><br>Urheberrecht</p><p>Die Urheberrechte der auf dem GBA-RDR Server veröffentlichten Dokumenten liegen ausnahmslos bei den jeweiligen Autoren.</p><p>Der Urheber räumt jedoch durch die Publikation der Daten ein grundsätzliches Zugriffs- sowie Nutzungsrecht ein, welches mit der Datenpublikation geklärt und in den Metadaten verankert ist. Zusätzlich stimmt der Urheber zu, dass die Metadaten des Dokuments unentgeltlich anderen öffentlich einsehbaren Datenbanken zur Verfügung gestellt werden und somit an der Forschungsdateninfrastruktur teilnimmt.</p><p>Mit der Publikation sowie der Archivierung der Daten und allen dazugehörigen Dokumenten im GBA-RDR erklärt der Urheber keine Rechte Dritter verletzt zu haben. Der Urheber verpflichtet sich vor dem Einreichen der Daten und allen dazugehörigen Dokumenten, alle darin involvierten Miturheber, Co-Autoren und Drittmittelgeber in Kenntnis zu setzen. Wenn die zu veröffentlichenden Daten auf Fremddaten aufbauen oder diese ergänzen, so ist der Urheber der aktuellen Daten und den dazugehörigen Dokumenten verpflichtet die Rec</p>', 'description' => '<h2>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Open Access und FAIR Erklärung</h2><p>iwas große Fokus liegt bei TETHYS beim Erlangen eines hohen Grades an die Zugänglichkeit und nachhaltige Verfügbarkeit für alle interessierten Nutzer. Dadurch soll eine <strong>verantwortungsvolle </strong>Weiterverwertung sowie Weiterentwicklung der Daten ermöglicht werden. Ebenfalls wird von Seitens des GBA-RDRs großen Wert auf das Ermöglichen von der Weiterverwendung von den publizierten Forschungsdaten gelegt. Dies wird durch das Einhalten der Prinzipien von Open Access und FAIR erlangt.</p><p>Unter Open Access wird der kostenfreie sowie öffentliche Zugang zu den im TETHYS archivierten Datenpublikationen verstanden.</p><p>Das Prinzip FAIR<a href="#_ftn1">[1]</a>, welches ein Akronym für <i>Findability</i> (Auffindbarkeit), <i>Accessibility</i> (Zugänglichkeit), <i>Interoperability</i> (Kompatibilität), und <i>Reusability</i> (Wiederverwendbarkeit) ist, unterstützt eine nachhaltige wissenschaftliche Datenpflege sowie verwaltung. Erst durch die garantierte Auffindbarkeit, volle Zugänglichkeit zu den Daten, gewährleistete Kompatibilität mit anderen Datenbeständen so wie die wissenschaftliche Wiederverwendbarkeit, erhält die Datenpublikation einen großen Wert.</p><p>Das GBA-RDR behält sich vor, bei Einzelfällen und begründet Datenpublikationen nur eingeschränkt zur Verfügung zu stellen oder/und mit einem Embargo zu belegen. Grundsätzlich sollen die Nutzer die publizierten Daten uneingeschränkt lesen, kopieren, drucken und je nach vergebener Lizenz verarbeiten sowie verteilen können. Dabei verpflichtet sich der Nutzer ausnahmslos die Daten zu zitieren. Die Urheberrechte der Autorenschaft werden dabei nicht berührt.</p><p>&nbsp;</p><h2>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Leitlinie</h2><ul><li>Ziele</li><li>Anforderungen an die elektronische Publikation</li><li>Urheber- und Nutzungsrechte</li><li>Sacherschließung auf dem Publikationsserver</li><li>Archivierung von Publikationen</li><li>Technische Eigenschaften des Publikationsservers</li><li>Organisatorische Regelungen</li></ul><p>&nbsp;</p><h2>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rechte und Pflichten</h2><p>Die im TETHYS veröffentlichten Informationen und Metadaten unterliegen grundsätzlich den Open-Access-Bedingungen, wenn nicht anders angegeben. Die publizierten Datensets unterliegen einem definierten Zugriffs- sowie Nutzungsrecht welche in den Metadaten eindeutig beschrieben sind.</p><p>&nbsp;</p><p>Zugriffsrecht</p><p>Es wird zwischen uneingeschränkten und eingeschränkten Zugriffsrecht unterschieden. Während bei dem uneingeschränkten Zugriffsrecht voller Zugriff auf die Daten und den dazugehörigen Informationen besteht, so kann ein eingeschränktes Zugriffsrecht auf bestimmte oder unbestimmte Zeit sowie auf alle oder nur auf Teile der Daten bestehen. Die detaillierte Zugriffsrechtsbestimmung sowie die Dauer einer Zugriffsbeschränkung sind in den Metadaten vermerkt. Grundsätzlich wird ein uneingeschränktes Zugriffsrecht vergeben. Unter bestimmten Voraussetzungen jedoch kann diese eingeschränkt sein.</p><p><br>&nbsp;</p><p>Nutzungsrecht</p><p>Durch die Vergabe von Creative Commons Lizenzen werden jeder Datenpublikation mit definierten Nutzungsrechte ausgestattet. Die dabei verwendete Lizenz wird verpflichtend mit den zur Datenpublikation gehörenden Metadaten bereitgestellt.</p><p>&nbsp;</p><p><br>Urheberrecht</p><p>Die Urheberrechte der auf dem GBA-RDR Server veröffentlichten Dokumenten liegen ausnahmslos bei den jeweiligen Autoren.</p><p>Der Urheber räumt jedoch durch die Publikation der Daten ein grundsätzliches Zugriffs- sowie Nutzungsrecht ein, welches mit der Datenpublikation geklärt und in den Metadaten verankert ist. Zusätzlich stimmt der Urheber zu, dass die Metadaten des Dokuments unentgeltlich anderen öffentlich einsehbaren Datenbanken zur Verfügung gestellt werden und somit an der Forschungsdateninfrastruktur teilnimmt.</p><p>Mit der Publikation sowie der Archivierung der Daten und allen dazugehörigen Dokumenten im GBA-RDR erklärt der Urheber keine Rechte Dritter verletzt zu haben. Der Urheber verpflichtet sich vor dem Einreichen der Daten und allen dazugehörigen Dokumenten, alle darin involvierten Miturheber, Co-Autoren und Drittmittelgeber in Kenntnis zu setzen. Wenn die zu veröffentlichenden Daten auf Fremddaten aufbauen oder diese ergänzen, so ist der Urheber der aktuellen Daten und den dazugehörigen Dokumenten verpflichtet die Rec</p>',
], ],
[ [
'page_id' => 1, //terms and conditions 'page_id' => 1, //terms and conditions

5
package-lock.json generated
View File

@ -3291,6 +3291,11 @@
"stream-shift": "^1.0.0" "stream-shift": "^1.0.0"
} }
}, },
"easytimer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/easytimer/-/easytimer-1.1.1.tgz",
"integrity": "sha1-Gt3eclZG3iWSQw0DBIp0jWM1TpQ="
},
"ecc-jsbn": { "ecc-jsbn": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",

View File

@ -42,6 +42,7 @@
"@fortawesome/fontawesome-free": "^5.10.2", "@fortawesome/fontawesome-free": "^5.10.2",
"datatables.net": "^1.10.19", "datatables.net": "^1.10.19",
"datatables.net-buttons": "^1.5.6", "datatables.net-buttons": "^1.5.6",
"easytimer": "^1.1.1",
"single-page-nav": "^1.0.0" "single-page-nav": "^1.0.0"
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
/** /**
* This file is part of RDR. * This file is part of TETHYS.
* *
* LICENCE * LICENCE
* RDR is free software; you can redistribute it and/or modify it under the * TETHYS is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software * terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the Licence, or any later version. * Foundation; either version 2 of the Licence, or any later version.
* OPUS is distributed in the hope that it will be useful, but WITHOUT ANY * OPUS is distributed in the hope that it will be useful, but WITHOUT ANY
@ -17,14 +17,14 @@
* @category Application * @category Application
* @package Module_Oai * @package Module_Oai
* @author Arno Kaimbacher <arno.kaimbacher@geologie.ac.at> * @author Arno Kaimbacher <arno.kaimbacher@geologie.ac.at>
* @copyright Copyright (c) 2018-2019, GBA RDR development team * @copyright Copyright (c) 2018-2019, GBA TETHYS development team
* @license http://www.gnu.org/licenses/gpl.html General Public License * @license http://www.gnu.org/licenses/gpl.html General Public License
*/ */
--> -->
<!-- <!--
/** /**
* Transforms the xml representation of an RDR model dataset to datacite * Transforms the xml representation of an TETHYS model dataset to datacite
* xml as required by the OAI-PMH protocol. * xml as required by the OAI-PMH protocol.
*/ */
--> -->

View File

@ -1,3 +1,3 @@
##RDR ##TETHYS
Research Data Repository build with Laravel 5.5 Research Data Repository build with Laravel 5.5

View File

@ -0,0 +1,144 @@
import { Component, Vue, Watch } from 'vue-property-decorator';
//outside of the component:
function initialState() {
return {
type: "",
state: "",
rights: null,
project_id: "",
creating_corporation: "GBA Repository",
language: "",
embargo_date: "",
belongs_to_bibliography: 0,
title_main: {
value: "",
language: ""
},
abstract_main: {
value: "",
language: ""
},
// geolocation: {
// xmin: "",
// ymin: "",
// xmax: "",
// ymax: ""
// },
coverage: {
xmin: "",
ymin: "",
xmax: "",
ymax: "",
elevation_min: "",
elevation_max: "",
elevation_absolut: "",
depth_min: "",
depth_max: "",
depth_absolut: "",
time_min: "",
time_max: "",
time_absolut: ""
},
checkedAuthors: [],
checkedLicenses: [], // [],
files: [],
keywords: [],
references: [],
titles: [],
descriptions: [],
checkedContributors: [],
// checkedSubmitters: [],
persons: [],
contributors: []
// submitters: []
};
}
// const dataset = new Vue({
@Component
export default class Dataset extends Vue {
// data: function() {
// return initialState();
// }
initialState = {};
type= "";
state= "";
rights= null;
project_id= "";
creating_corporation= "TETHYS Repository";
language= "";
embargo_date= "";
belongs_to_bibliography= 0;
title_main= {
value: "",
language: ""
};
abstract_main= {
value: "",
language: ""
};
// geolocation: {
// xmin: "",
// ymin: "",
// xmax: "",
// ymax: ""
// },
coverage= {
xmin: "",
ymin: "",
xmax: "",
ymax: "",
elevation_min: "",
elevation_max: "",
elevation_absolut: "",
depth_min: "",
depth_max: "",
depth_absolut: "",
time_min: "",
time_max: "",
time_absolut: ""
};
checkedAuthors= [];
checkedLicenses= [];
files= [];
keywords= [];
references= [];
titles= [];
descriptions= [];
checkedContributors= [];
// checkedSubmitters: [],
persons= [];
contributors= [];
// submitters: []
created () {
this.initialState = Object.assign({}, this);
// let json = JSON.stringify(this.$data);
// this.reset = () => {
// Object.assign(this.$data, JSON.parse(json));
// };
// this.reset(json);
}
@Watch('language')
onLanguageChanged(val) {
this.title_main.language = val;
this.abstract_main.language = val;
}
reset() {
// Object.assign(this.$data, initialState());
Object.assign(this.$data, this.initialState);
}
}
// export default dataset;

View File

@ -1,87 +0,0 @@
// <script>
import Vue from "vue";
//outside of the component:
function initialState() {
return {
type: "",
state: "",
rights: null,
project_id: "",
creating_corporation: "GBA Repository",
language: "",
embargo_date: "",
belongs_to_bibliography: 0,
title_main: {
value: "",
language: ""
},
abstract_main: {
value: "",
language: ""
},
// geolocation: {
// xmin: "",
// ymin: "",
// xmax: "",
// ymax: ""
// },
coverage: {
xmin: "",
ymin: "",
xmax: "",
ymax: "",
elevation_min: "",
elevation_max: "",
elevation_absolut: "",
depth_min: "",
depth_max: "",
depth_absolut: "",
time_min: "",
time_max: "",
time_absolut: ""
},
checkedAuthors: [],
checkedLicenses: [], // [],
files: [],
keywords: [],
references: [],
titles: [],
descriptions: [],
checkedContributors: [],
// checkedSubmitters: [],
persons: [],
contributors: []
// submitters: []
};
}
const dataset = new Vue({
data: function() {
return initialState();
},
created: function() {
// let json = JSON.stringify(this.$data);
// this.reset = () => {
// Object.assign(this.$data, JSON.parse(json));
// };
// this.reset(json);
},
watch: {
language(val) {
this.title_main.language = val;
this.abstract_main.language = val;
}
},
methods: {
reset() {
Object.assign(this.$data, initialState());
}
}
});
export default dataset;
//export { dataset };
</script>

View File

@ -0,0 +1,118 @@
import EasyTimer from 'easytimer';
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
@Component
export default class VueCountdown extends Vue {
// props: {
// seconds: Number,
// countdown: Boolean,
// message: String,
// date: String,
// units: Array,
// start: {
// type: Boolean,
// default: true
// }
// },
@Prop(Number)
seconds;
@Prop(Boolean)
countdown;
@Prop([String])
message;
@Prop([String])
date;
@Prop([Array])
units;
@Prop({ default: true, type: Boolean })
start: boolean;
// data () {
// return {
// timer: null,
// time: '',
// label: this.message ? this.message : 'Time\'s up!',
// timerUnits: this.units ? this.units : ['hours', 'minutes', 'seconds'],
// timerOptions: {}
// };
// },
warningSeconds: Number = this.seconds;
timer: EasyTimer = null;
time: string = '';
label: string = this.message ? this.message : 'Time\'s up!';
timerUnits = this.units ? this.units : ['hours', 'minutes', 'seconds'];
timerOptions = {
startValues: {},
// target: {},
countdown: true,
current_page: 0,
data: []
};
get parsedDate(): number {
if (!this.date) {
return 0;
}
return Date.parse(this.date);
}
created() {
this.timer = new EasyTimer();
const parsedDate = this.parsedDate;
const now = Date.now();
let seconds = this.seconds;
this.timerOptions.countdown = true;
// = {
// countdown: true
// };
if (!parsedDate && this.date) {
throw new Error('Please provide valid date');
}
if (now < parsedDate) {
seconds = (parsedDate - now) / 1000;
}
this.timerOptions.startValues = {
seconds: seconds
};
if (this.start) {
this.timer.start(this.timerOptions);
}
this.time = this.timer.getTimeValues().toString(this.timerUnits);
this.timer.addEventListener('secondsUpdated', this.onTimeChange.bind(this));
this.timer.addEventListener('targetAchieved', this.onTimeExpire.bind(this));
}
onTimeChange() {
this.warningSeconds = this.timer.getTotalTimeValues().seconds;
this.time = this.timer.getTimeValues().toString(this.timerUnits);
}
onTimeExpire() {
this.$emit('time-expire');
this.time = this.label;
}
@Watch('start')
onStartChanged(newValue) {
if (newValue) {
this.timer.start(this.timerOptions);
} else {
this.timer.stop();
}
}
}

View File

@ -0,0 +1,18 @@
<template>
<div v-show="warningSeconds <= 600" class="vue-countdown">
<div class="vue-countdown--time">
remaining time: {{ time }}
</div>
</div>
</template>
<script lang="ts">
import VueCountdown from "./VueCountdown";
export default VueCountdown;
</script>
<style scoped>
.vue-countdown--time {
color:red;
}
</style>

View File

@ -31,8 +31,9 @@ import axios from 'axios';
import MyAutocomplete from './components/MyAutocomplete.vue'; import MyAutocomplete from './components/MyAutocomplete.vue';
import messagesEN from './strings/messages/en.js'; import messagesEN from './strings/messages/en.js';
import VeeValidate from 'vee-validate'; import VeeValidate from 'vee-validate';
import dataset from './components/Dataset'; import Dataset from './components/Dataset';
import LocationsMap from './components/LocationsMap.vue'; import LocationsMap from './components/LocationsMap.vue';
import VueCountdown from './components/vue-countdown';
import PersonTable from './components/PersonTable.vue'; import PersonTable from './components/PersonTable.vue';
import modal from './components/ShowModal.vue'; import modal from './components/ShowModal.vue';
// import datetime from 'vuejs-datetimepicker'; // import datetime from 'vuejs-datetimepicker';
@ -62,7 +63,7 @@ Vue.use(VeeValidate, {
const STATUS_INITIAL = 0, STATUS_SAVING = 1, STATUS_SUCCESS = 2, STATUS_FAILED = 3; const STATUS_INITIAL = 0, STATUS_SAVING = 1, STATUS_SUCCESS = 2, STATUS_FAILED = 3;
const app = new Vue({ const app = new Vue({
el: '#app', el: '#app',
components: { MyAutocomplete, LocationsMap, modal, PersonTable }, components: { MyAutocomplete, LocationsMap,VueCountdown, modal, PersonTable },
data() { data() {
return { return {
list: [ list: [
@ -90,35 +91,10 @@ const app = new Vue({
isModalVisible: false, isModalVisible: false,
step: 0, step: 0,
dataset: dataset, dataset: new Dataset(),
elevation: "no_elevation", elevation: "no_elevation",
depth: "no_depth", depth: "no_depth",
time: "no_time", time: "no_time"
// dataset: {
// type: '',
// state: '',
// rights: null,
// project_id: '',
// creating_corporation: "GBA",
// embargo_date: '',
// belongs_to_bibliography: 0,
// title_main: {
// value: '',
// language: ''
// },
// abstract_main: {
// value: '',
// language: ''
// },
// checkedAuthors: [],
// checkedLicenses: [],// [],
// files: [],
// references: [],
// checkedContributors: [],
// checkedSubmitters: [],
// }
} }
}, },
created: function () { created: function () {
@ -138,7 +114,7 @@ const app = new Vue({
VeeValidate.Validator.extend('translatedLanguage', { VeeValidate.Validator.extend('translatedLanguage', {
getMessage: field => 'The translated ' + field + ' must be in a language other than than the dataset language.', getMessage: field => 'The translated ' + field + ' must be in a language other than than the dataset language.',
validate: (value, [mainLanguage, type]) => { validate: (value, [mainLanguage, type]) => {
if (type == "translated") { if (type == "Translated") {
return value !== mainLanguage; return value !== mainLanguage;
} }
return true; return true;
@ -355,7 +331,6 @@ const app = new Vue({
formData.append('descriptions[' + i + '][language]', description.language); formData.append('descriptions[' + i + '][language]', description.language);
formData.append('descriptions[' + i + '][type]', description.type); formData.append('descriptions[' + i + '][type]', description.type);
} }
/* /*
Make the request to the POST /multiple-files URL Make the request to the POST /multiple-files URL
*/ */
@ -363,7 +338,9 @@ const app = new Vue({
formData, formData,
{ {
headers: { headers: {
'Content-Type': 'multipart/form-data' 'Content-Type': 'multipart/form-data',
'X-CSRF-TOKEN' : document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
'X-Requested-With': 'XMLHttpRequest',
} }
}) })
.then((response) => { .then((response) => {
@ -375,9 +352,9 @@ const app = new Vue({
_this.currentStatus = STATUS_SUCCESS; _this.currentStatus = STATUS_SUCCESS;
_this.releaseLink = response.data.release; _this.releaseLink = response.data.release;
_this.deleteLink = response.data.delete; _this.deleteLink = response.data.delete;
// if (response.data.redirect) { if (response.data.redirect) {
// window.location = response.data.redirect; window.location = response.data.redirect;
// } }
}) })
.catch((error) => { .catch((error) => {
// this.loading = false; // this.loading = false;
@ -397,12 +374,18 @@ const app = new Vue({
var error = error.response.data.error; var error = error.response.data.error;
_this.serrors.push(error.message); _this.serrors.push(error.message);
} }
//raundtrip to server was not possible //roundtrip to server was not possible
if (error.message && error.message.includes('413')) { if (error.message && error.message.includes('413')) {
console.log('The file you tried to upload is too large.') // console.log('The file you tried to upload is too large.')
var error = 'The file you tried to upload is too large.'; var error = 'The file you tried to upload is too large.';
_this.serrors.push(error); _this.serrors.push(error);
} }
else if(error.response && error.response.status == 419) {
// session timed out | not authenticated
// _this.serrors.push(error.response.data.message);
_this.serrors.push('This page has expired due to inactivity, please refresh and try again');
window.location = '/login';
}
if (error.message && error.message) { if (error.message && error.message) {
_this.serrors.push( error.message); _this.serrors.push( error.message);
} }
@ -441,7 +424,7 @@ const app = new Vue({
adds a new Keyword adds a new Keyword
*/ */
addKeyword() { addKeyword() {
let newKeyword = { value: '', type: '', language: this.dataset.language }; let newKeyword = { value: '', type: 'uncontrolled', language: this.dataset.language };
//this.dataset.files.push(uploadedFiles[i]); //this.dataset.files.push(uploadedFiles[i]);
this.dataset.keywords.push(newKeyword); this.dataset.keywords.push(newKeyword);
}, },
@ -572,6 +555,9 @@ const app = new Vue({
// alert('Submit to blah and show blah and etc.'); // alert('Submit to blah and show blah and etc.');
// save it // save it
this.save(status); this.save(status);
},
handleTimeExpire() {
window.location = '/login';
} }
} }
}); });

View File

@ -1,4 +1,4 @@
import { Component, Vue, Prop, Provide } from 'vue-property-decorator'; import { Component, Vue } from 'vue-property-decorator';
import VsInput from './text-search/vs-input.vue'; import VsInput from './text-search/vs-input.vue';
import VsResults from './search-results/vs-results.vue'; import VsResults from './search-results/vs-results.vue';
import FacetList from './search-results/facet-list.vue'; import FacetList from './search-results/facet-list.vue';

View File

@ -32,7 +32,7 @@ export default {
var limit = "&rows=" + SOLR_CONFIG["limit"]; var limit = "&rows=" + SOLR_CONFIG["limit"];
// var limit = solrConfig.limit; // var limit = solrConfig.limit;
var qfFields = "title^3 author^3 subject^2"; var qfFields = "title^3 author^2 subject^1";
var params = "fl=" + fields; var params = "fl=" + fields;
if (term == "*%3A*") { if (term == "*%3A*") {
params += "&defType=edismax&wt=json&indent=on"; //edismax params += "&defType=edismax&wt=json&indent=on"; //edismax

View File

@ -1,5 +1,5 @@
import Vue from "vue"; import Vue from "vue";
import { Component, Prop, Watch } from 'vue-property-decorator'; import { Component, Prop } from 'vue-property-decorator';
import debounce from 'lodash/debounce'; import debounce from 'lodash/debounce';
import rdrApi from '../search-results/dataservice'; import rdrApi from '../search-results/dataservice';
@ -88,11 +88,6 @@ export default class VsInput extends Vue {
// this.loading = false; // this.loading = false;
// } // }
// reset() {
// this.display = "";
// this.items = [];
// this.showResults = false;
// }
/** /**
* Clear all values, results and errors * Clear all values, results and errors
*/ */
@ -230,7 +225,7 @@ export default class VsInput extends Vue {
} }
find(myarray, searchterm): string { private find(myarray, searchterm): string {
for (var i = 0, len = myarray.length; i < len; i += 1) { for (var i = 0, len = myarray.length; i < len; i += 1) {
if (typeof (myarray[i]) === 'string' && myarray[i].toLowerCase().indexOf(searchterm) !== -1) { if (typeof (myarray[i]) === 'string' && myarray[i].toLowerCase().indexOf(searchterm) !== -1) {
// print or whatever // print or whatever
@ -240,7 +235,6 @@ export default class VsInput extends Vue {
return ""; return "";
} }
/** /**
* Close the results list. If nothing was selected clear the search * Close the results list. If nothing was selected clear the search
*/ */
@ -256,8 +250,4 @@ export default class VsInput extends Vue {
//this.removeEventListener() //this.removeEventListener()
this.$emit('close'); this.$emit('close');
} }
} }

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Unauthorized'))
@section('code', '401')
@section('message', __('Unauthorized'))

View File

@ -1,18 +1,5 @@
{{-- \resources\views\errors\403.blade.php --}} @extends('errors::minimal')
@extends('layouts.app')
@section('content') @section('title', __('Forbidden'))
<section class="normal dataset u-full-width"> @section('code', '403')
<div class="container"> @section('message', __($exception->getMessage() ?: 'Forbidden'))
<h1>
<center>403<br>
ACCESS DENIED</center>
</h1>
<a href="{{ URL::previous() }}" class="btn btn-default">Back</a>
<h2>{{ $exception->getMessage() }}</h2>
</div>
</section>
@endsection

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Not Found'))
@section('code', '404')
@section('message', __('Not Found'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Page Expired'))
@section('code', '419')
@section('message', __('Page Expired'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Too Many Requests'))
@section('code', '429')
@section('message', __('Too Many Requests'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Server Error'))
@section('code', '500')
@section('message', __('Server Error'))

View File

@ -1,41 +1,5 @@
<html> @extends('errors::minimal')
<head>
<link href='//fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'>
<style> @section('title', __('Service Unavailable'))
body { @section('code', '503')
margin: 0; @section('message', __($exception->getMessage() ?: 'Service Unavailable'))
padding: 0;
width: 100%;
height: 100%;
color: #B0BEC5;
display: table;
font-weight: 100;
font-family: 'Lato';
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.content {
text-align: center;
display: inline-block;
}
.title {
font-size: 72px;
margin-bottom: 40px;
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<div class="title">Be right back.</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,486 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>@yield('title')</title>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
<!-- Styles -->
<style>
html {
line-height: 1.15;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
}
header,
nav,
section {
display: block;
}
figcaption,
main {
display: block;
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
strong {
font-weight: inherit;
}
strong {
font-weight: bolder;
}
code {
font-family: monospace, monospace;
font-size: 1em;
}
dfn {
font-style: italic;
}
svg:not(:root) {
overflow: hidden;
}
button,
input {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0;
}
button,
input {
overflow: visible;
}
button {
text-transform: none;
}
button,
html [type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
legend {
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal;
}
[type="checkbox"],
[type="radio"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit;
}
menu {
display: block;
}
canvas {
display: inline-block;
}
template {
display: none;
}
[hidden] {
display: none;
}
html {
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-family: sans-serif;
}
*,
*::before,
*::after {
-webkit-box-sizing: inherit;
box-sizing: inherit;
}
p {
margin: 0;
}
button {
background: transparent;
padding: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
*,
*::before,
*::after {
border-width: 0;
border-style: solid;
border-color: #dae1e7;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
border-radius: 0;
}
button,
input {
font-family: inherit;
}
input::-webkit-input-placeholder {
color: inherit;
opacity: .5;
}
input:-ms-input-placeholder {
color: inherit;
opacity: .5;
}
input::-ms-input-placeholder {
color: inherit;
opacity: .5;
}
input::placeholder {
color: inherit;
opacity: .5;
}
button,
[role=button] {
cursor: pointer;
}
.bg-transparent {
background-color: transparent;
}
.bg-white {
background-color: #fff;
}
.bg-teal-light {
background-color: #64d5ca;
}
.bg-blue-dark {
background-color: #2779bd;
}
.bg-indigo-light {
background-color: #7886d7;
}
.bg-purple-light {
background-color: #a779e9;
}
.bg-no-repeat {
background-repeat: no-repeat;
}
.bg-cover {
background-size: cover;
}
.border-grey-light {
border-color: #dae1e7;
}
.hover\:border-grey:hover {
border-color: #b8c2cc;
}
.rounded-lg {
border-radius: .5rem;
}
.border-2 {
border-width: 2px;
}
.hidden {
display: none;
}
.flex {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.items-center {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
}
.justify-center {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.font-sans {
font-family: Nunito, sans-serif;
}
.font-light {
font-weight: 300;
}
.font-bold {
font-weight: 700;
}
.font-black {
font-weight: 900;
}
.h-1 {
height: .25rem;
}
.leading-normal {
line-height: 1.5;
}
.m-8 {
margin: 2rem;
}
.my-3 {
margin-top: .75rem;
margin-bottom: .75rem;
}
.mb-8 {
margin-bottom: 2rem;
}
.max-w-sm {
max-width: 30rem;
}
.min-h-screen {
min-height: 100vh;
}
.py-3 {
padding-top: .75rem;
padding-bottom: .75rem;
}
.px-6 {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
.pb-full {
padding-bottom: 100%;
}
.absolute {
position: absolute;
}
.relative {
position: relative;
}
.pin {
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.text-black {
color: #22292f;
}
.text-grey-darkest {
color: #3d4852;
}
.text-grey-darker {
color: #606f7b;
}
.text-2xl {
font-size: 1.5rem;
}
.text-5xl {
font-size: 3rem;
}
.uppercase {
text-transform: uppercase;
}
.antialiased {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.tracking-wide {
letter-spacing: .05em;
}
.w-16 {
width: 4rem;
}
.w-full {
width: 100%;
}
@media (min-width: 768px) {
.md\:bg-left {
background-position: left;
}
.md\:bg-right {
background-position: right;
}
.md\:flex {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.md\:my-6 {
margin-top: 1.5rem;
margin-bottom: 1.5rem;
}
.md\:min-h-screen {
min-height: 100vh;
}
.md\:pb-0 {
padding-bottom: 0;
}
.md\:text-3xl {
font-size: 1.875rem;
}
.md\:text-15xl {
font-size: 9rem;
}
.md\:w-1\/2 {
width: 50%;
}
}
@media (min-width: 992px) {
.lg\:bg-center {
background-position: center;
}
}
</style>
</head>
<body class="antialiased font-sans">
<div class="md:flex min-h-screen">
<div class="w-full md:w-1/2 bg-white flex items-center justify-center">
<div class="max-w-sm m-8">
<div class="text-black text-5xl md:text-15xl font-black">
@yield('code', __('Oh no'))
</div>
<div class="w-16 h-1 bg-purple-light my-3 md:my-6"></div>
<p class="text-grey-darker text-2xl md:text-3xl font-light mb-8 leading-normal">
@yield('message')
</p>
<a href="{{ app('router')->has('home') ? route('home') : url('/') }}">
<button class="bg-transparent text-grey-darkest font-bold uppercase tracking-wide py-3 px-6 border-2 border-grey-light hover:border-grey rounded-lg">
{{ __('Go Home') }}
</button>
</a>
</div>
</div>
<div class="relative pb-full md:flex md:pb-0 md:min-h-screen w-full md:w-1/2">
@yield('image')
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Nunito', sans-serif;
font-weight: 100;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.content {
text-align: center;
}
.title {
font-size: 36px;
padding: 20px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="content">
<div class="title">
@yield('message')
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Nunito', sans-serif;
font-weight: 100;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.code {
border-right: 2px solid;
font-size: 26px;
padding: 0 15px 0 15px;
text-align: center;
}
.message {
font-size: 18px;
text-align: center;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="code">
@yield('code')
</div>
<div class="message" style="padding: 10px;">
@yield('message')
</div>
</div>
</body>
</html>

View File

@ -21,16 +21,16 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="twelve columns"> <div class="twelve columns">
<h3 class="separator">Introduction RDR</h3> <h3 class="separator">Introduction TETHYS</h3>
<h4> <h4>
RDR offers institutions and researchers a comprehensive archiving TETHYS offers institutions and researchers a comprehensive archiving
and publishing service with reliable storage options for backing up and publishing service with reliable storage options for backing up
and managing research data. With RDR you can promote research data and managing research data. With TETHYS you can promote research data
management at your institution and make an important contribution to improve management at your institution and make an important contribution to improve
availability, long-term preservation and independent publication of your research data. availability, long-term preservation and independent publication of your research data.
</h4> </h4>
<p> <p>
The use of RDR as a data centre for archiving and/or publishing research data is invoiced annually. The use of TETHYS as a data centre for archiving and/or publishing research data is invoiced annually.
The invoice consists of a basic annual contract fee and a usage-related fee. The invoice consists of a basic annual contract fee and a usage-related fee.
</p> </p>
</div> </div>
@ -43,7 +43,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="twelve columns"> <div class="twelve columns">
<h3 class="separator">RDR SERVICES</h3> <h3 class="separator">TETHYS SERVICES</h3>
</div> </div>
</div> </div>
@ -61,7 +61,7 @@
<div class="vertical-centered"> <div class="vertical-centered">
<p class="separator orange">Data Archival</p> <p class="separator orange">Data Archival</p>
<p> <p>
RDR provides format-independent archiving services for data protection. TETHYS provides format-independent archiving services for data protection.
</p> </p>
</div> </div>
</div> </div>
@ -78,7 +78,7 @@
<div class="vertical-centered"> <div class="vertical-centered">
<p class="separator orange">Data Publication</p> <p class="separator orange">Data Publication</p>
<p> <p>
With RDR you can publish research data, With TETHYS you can publish research data,
so that your data is citable and reusable. so that your data is citable and reusable.
</p> </p>
</div> </div>
@ -96,7 +96,7 @@
<div class="vertical-centered"> <div class="vertical-centered">
<p class="separator orange">Peer Review</p> <p class="separator orange">Peer Review</p>
<p> <p>
All RDR datasets undergo a full, efficient peer review process. All TETHYS datasets undergo a full, efficient peer review process.
</p> </p>
</div> </div>
</div> </div>
@ -134,7 +134,7 @@
<div class="twelve columns"> <div class="twelve columns">
<h3 class="separator">About us</h3> <h3 class="separator">About us</h3>
<h4> <h4>
RDR focuses on disciplines who do not have a tradition TETHYS focuses on disciplines who do not have a tradition
of data sharing thus ensuring better availability, of data sharing thus ensuring better availability,
sustainable preservation and (independent) publication sustainable preservation and (independent) publication
capacity of their research data. capacity of their research data.

View File

@ -8,7 +8,7 @@
<!-- Basic Page Needs <!-- Basic Page Needs
--> -->
<meta charset="utf-8"> <meta charset="utf-8">
<title>RDR - Geology Geophysics Meteorology</title> <title>TETHYS - Geology Geophysics Meteorology</title>
<meta name="description" content="An awesome one page website"> <meta name="description" content="An awesome one page website">
<meta name="author" content="Arno Kaimbacher"> <meta name="author" content="Arno Kaimbacher">
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
@ -46,7 +46,7 @@
<body class="layout-home-html"> <body class="layout-home-html">
<div id="trynewsite"> <div id="trynewsite">
<span>RDR Testphase</span> <span>TETHYS Testphase</span>
</div> </div>
<!-- Menu --> <!-- Menu -->
@ -128,7 +128,7 @@
<div class="four columns footer-about"> <div class="four columns footer-about">
<!-- <h5>&copy 2015 Tuts+ Web Design.</h5> --> <!-- <h5>&copy 2015 Tuts+ Web Design.</h5> -->
<div class="block"> <div class="block">
<h3 class="block-title">About RDR</h3> <h3 class="block-title">About TETHYS</h3>
<ul> <ul>
<li class="last"><a <li class="last"><a
href="{!! URL::route('frontend.pages.show', ['page_slug'=>'about']) !!}">About href="{!! URL::route('frontend.pages.show', ['page_slug'=>'about']) !!}">About

View File

@ -10,6 +10,10 @@
</div> </div>
<div id="app" class="box-content" v-cloak> <div id="app" class="box-content" v-cloak>
{{-- v-on:time-expire="handleTimeExpire" --}}
@if (Auth::check())
<vue-countdown v-on:time-expire="handleTimeExpire" :seconds="({{config('session.lifetime')}} * 60)"></vue-countdown>
@endif
{{-- {{--
<form action={{ route( 'publish.dataset.store1') }} method="post" class="pure-form" enctype="multipart/form-data"> <form action={{ route( 'publish.dataset.store1') }} method="post" class="pure-form" enctype="multipart/form-data">
--}} --}}
@ -318,7 +322,7 @@
</div> </div>
</fieldset> --}} </fieldset> --}}
<fieldset-dates> <fieldset id="fieldset-dates">
<legend>Date(s)</legend> <legend>Date(s)</legend>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('EmbargoDate', 'Embargo Date') !!} {!! Form::label('EmbargoDate', 'Embargo Date') !!}
@ -326,7 +330,7 @@
=> 'pure-u-23-24', 'v-model' => 'dataset.embargo_date', 'data-vv-scope' => 'step-2']) !!} => 'pure-u-23-24', 'v-model' => 'dataset.embargo_date', 'data-vv-scope' => 'step-2']) !!}
<small id="projectHelp" class="pure-form-message-inline">EmbargoDate is optional</small> <small id="projectHelp" class="pure-form-message-inline">EmbargoDate is optional</small>
</div> </div>
</fieldset-dates> </fieldset>
<fieldset id="fieldset-geolocation"> <fieldset id="fieldset-geolocation">
<legend>Geo Location</legend> <legend>Geo Location</legend>
@ -526,8 +530,10 @@
data-vv-scope="step-2" /> data-vv-scope="step-2" />
</td> </td>
<td> <td>
{!! Form::select('Keyword[Type]', $keywordTypes, null, ['placeholder' => '[keyword type]', 'v-model' => {{-- {!! Form::select('Keyword[Type]', $keywordTypes, null, ['placeholder' => '[keyword type]', 'v-model' =>
'item.type', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!} 'item.type', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!} --}}
<input name="Keyword Type" readonly class="form-control" placeholder="[KEYWORD TYPE]" v-model="item.type" v-validate="'required'"
data-vv-scope="step-2" />
</td> </td>
<td> <td>
<input name="Keyword Language" readonly class="form-control" placeholder="[KEYWORD LANGUAGE]" v-model="item.language" v-validate="'required'" <input name="Keyword Language" readonly class="form-control" placeholder="[KEYWORD LANGUAGE]" v-model="item.language" v-validate="'required'"
@ -574,36 +580,18 @@
@if ($loop->first) @if ($loop->first)
<input name="licenses" value={{ $license->id }} v-model="dataset.checkedLicenses" type="radio" class="form-check-input" v-validate="'required'" <input name="licenses" value={{ $license->id }} v-model="dataset.checkedLicenses" type="radio" class="form-check-input" v-validate="'required'"
data-vv-as="Licence" data-vv-scope="step-3"> data-vv-as="Licence" data-vv-scope="step-3">
{{ $license->name_long }} <a href="{{ $license->link_licence }}" target="_blank">{{ $license->name_long }}</a>
@else @else
<input name="licenses" value={{ $license->id }} v-model="dataset.checkedLicenses" type="radio" class="form-check-input" data-vv-scope="step-3"> <input name="licenses" value={{ $license->id }} v-model="dataset.checkedLicenses" type="radio" class="form-check-input" data-vv-scope="step-3">
{{ $license->name_long }} <a href="{{ $license->link_licence }}" target="_blank">{{ $license->name_long }}</a>
@endif @endif
</label> </label>
@endforeach @endforeach
<br> <br>
{{-- <span>Checked license: @{{ dataset.checkedLicenses }}</span> --}} {{-- <span>Checked license: @{{ dataset.checkedLicenses }}</span> --}}
</div> </div>
</fieldset> </fieldset>
{{-- <fieldset id="fieldset-submitters">
<legend>Submitters</legend>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-2 pure-div">
<my-autocomplete title="searching active person table" @person="onAddSubmitter"></my-autocomplete>
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
<div class="pure-control-group checkboxlist">
<label v-for="(submitter, index) in dataset.submitters" :for="submitter.id" class="pure-checkbox">
<input type="checkbox" name="submitters" v-bind:value="submitter.id" v-model="dataset.checkedSubmitters" class="form-check-input" data-vv-scope="step-3">
@{{ submitter.full_name }}
</label>
<br />
<span>Checked Submitters: @{{ dataset.checkedSubmitters }}</span>
</div>
</div>
</div>
</fieldset> --}}
<br /> <br />
<div class="pure-controls"> <div class="pure-controls">
<button @click.prevent="prev()" class="pure-button button-small"> <button @click.prevent="prev()" class="pure-button button-small">
@ -613,7 +601,7 @@
<button @click.prevent="next('step-3')" class="pure-button button-small"> <button @click.prevent="next('step-3')" class="pure-button button-small">
<i class="fa fa-arrow-right"></i> <i class="fa fa-arrow-right"></i>
<span>Review Dataset</span> <span>Continue</span>
</button> </button>
</div> </div>
<div v-if="errors.items.length > 0"> <div v-if="errors.items.length > 0">
@ -715,10 +703,7 @@
<h2>Uploaded failed.</h2> <h2>Uploaded failed.</h2>
<p> <p>
<a href="javascript:void(0)" @click="retry()">Retry: Edit inputs</a> <a href="javascript:void(0)" @click="retry()">Retry: Edit inputs</a>
</p> </p>
{{-- <p>
<a href="javascript:void(0)" @click="reset()">Submit new dataset</a>
</p> --}}
<div v-if="serrors.length > 0"> <div v-if="serrors.length > 0">
<b>Please correct the following server error(s):</b> <b>Please correct the following server error(s):</b>
<ul class="alert validation-summary-errors"> <ul class="alert validation-summary-errors">

View File

@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
<title>BACKEND RDR</title> <title>BACKEND TETHYS</title>
<link rel="shortcut icon" type="image/x-icon" href="{{ asset('favicon.ico') }}"> <link rel="shortcut icon" type="image/x-icon" href="{{ asset('favicon.ico') }}">
{{-- <link rel='stylesheet' href="{{ asset('css/pure-min.css') }}" /> {{-- <link rel='stylesheet' href="{{ asset('css/pure-min.css') }}" />
@ -30,7 +30,7 @@
<div id="menu"> <div id="menu">
<nav class="pure-menu sidebar-menu"> <nav class="pure-menu sidebar-menu">
<h1 class="site-logo">Backend<strong>RDR</strong></h1> <h1 class="site-logo">Backend<strong>TETHYS</strong></h1>
{{-- <div class="menu-item-divided"></div> --}} {{-- <div class="menu-item-divided"></div> --}}
{{-- <h2 class="pure-menu-heading">Home</h2> --}} {{-- <h2 class="pure-menu-heading">Home</h2> --}}
@ -175,7 +175,7 @@
<section class="user-info"> <section class="user-info">
<i class="fas fa-home"></i> <i class="fas fa-home"></i>
<a class=" pure-menu-linkab-item" aria-haspopup="true" href="{{ route('frontend.home.index') }}"> <a class=" pure-menu-linkab-item" aria-haspopup="true" href="{{ route('frontend.home.index') }}">
repository TETHYS
</a> </a>
</section> </section>
</div> </div>

View File

@ -1,146 +1,167 @@
<fieldset id="fieldset-General"> <fieldset id="fieldset-General">
<legend>General</legend> <legend>General</legend>
<div class="pure-g"> <div class="pure-g">
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('type', 'Type..') !!} {!! Form::label('Language', 'Language..') !!}
<div class="select pure-u-23-24"> <div class="select pure-u-23-24">
{!! Form::select('type', Lang::get('doctypes'), null, ['id' => 'type', 'placeholder' => '-- select type --']) !!} {!! Form::select('Language', $languages, null, ['placeholder' => '[language]', 'v-model' =>
</div> 'dataset.language', "v-validate" => "'required'"]) !!}
</div> </div>
<small id="languageHelp" class="pure-form-message-inline">select dataset main language</small>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('project_id', 'Project..') !!}
<div class="select pure-u-23-24">
{!! Form::select('project_id', $projects, null, ['id' => 'project_id', 'placeholder' => '--no project--']) !!}
</div> </div>
<small id="projectHelp" class="pure-form-message-inline">project is optional</small>
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('server_state', 'Status..') !!} {!! Form::label('type', 'Type..') !!}
{{-- {!! Form::select('server_state', Config::get('enums.server_states'), null, ['id' => 'server_state', 'placeholder' => '-- select server state --']) !!} --}} <div class="select pure-u-23-24">
{!! Form::text('server_state', null, ['class'=>'pure-u-23-24','readonly']) !!} {!! Form::select('type', Lang::get('doctypes'), null, ['id' => 'type', 'placeholder' => '-- select type
--']) !!}
</div> </div>
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('reject_reviewer_note', 'reviewer reject note..') !!} {!! Form::label('project_id', 'Project..') !!}
{{-- {!! Form::select('server_state', Config::get('enums.server_states'), null, ['id' => 'server_state', 'placeholder' => '-- select server state --']) !!} --}} <div class="select pure-u-23-24">
{!! Form::textarea('reject_reviewer_note', null, ['class'=>'pure-u-23-24','readonly']) !!} {!! Form::select('project_id', $projects, null, ['id' => 'project_id', 'placeholder' => '--no
project--']) !!}
</div> </div>
<small id="projectHelp" class="pure-form-message-inline">project is optional</small>
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('server_state', 'Status..') !!}
{{-- {!! Form::select('server_state', Config::get('enums.server_states'), null, ['id' => 'server_state', 'placeholder' => '-- select server state --']) !!} --}}
{!! Form::text('server_state', null, ['class'=>'pure-u-23-24','readonly']) !!}
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('reject_reviewer_note', 'reviewer reject note..') !!}
{{-- {!! Form::select('server_state', Config::get('enums.server_states'), null, ['id' => 'server_state', 'placeholder' => '-- select server state --']) !!} --}}
{!! Form::textarea('reject_reviewer_note', null, ['class'=>'pure-u-23-24','readonly']) !!}
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('embargo_date', 'Embargo Date') !!}
{!! Form::date('embargo_date', null, ['placeholder' => date('y-m-d'), 'class' => 'pure-u-23-24']) !!}
<small id="projectHelp" class="pure-form-message-inline">embargo_date is optional</small>
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('creating_corporation', 'Creating Corporation') !!}
{!! Form::text('creating_corporation', null, ['class' =>
'pure-u-23-24', 'v-model' => 'dataset.creating_corporation', "v-validate" => "'required'", 'data-vv-scope'
=> 'step-1']) !!}
</div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('embargo_date', 'Embargo Date') !!}
{!! Form::date('embargo_date', null, ['placeholder' => date('y-m-d'), 'class' => 'pure-u-23-24']) !!}
<small id="projectHelp" class="pure-form-message-inline">embargo_date is optional</small>
</div> </div>
<div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('creating_corporation', 'Creating Corporation') !!}
{!! Form::text('creating_corporation', null, ['class' =>
'pure-u-23-24', 'v-model' => 'dataset.creating_corporation', "v-validate" => "'required'", 'data-vv-scope' => 'step-1']) !!}
</div>
</div>
</fieldset> </fieldset>
<fieldset id="fieldset-geolocation"> <fieldset id="fieldset-geolocation">
<legend>Coverage: Geolocation, Elevation, Depth, Time</legend> <legend>Coverage: Geolocation, Elevation, Depth, Time</legend>
<div class="pure-g"> <div class="pure-g">
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('xmin', 'xmin: ') !!} {!! Form::label('xmin', 'xmin: ') !!}
{!! Form::text('coverage[xmin]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.xmin']) !!} {!! Form::text('coverage[xmin]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.xmin']) !!}
</div> </div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('ymin', 'ymin: ') !!} {!! Form::label('ymin', 'ymin: ') !!}
{!! Form::text('coverage[ymin]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.ymin']) !!} {!! Form::text('coverage[ymin]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.ymin']) !!}
</div> </div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('xmax', 'xmax: ') !!} {!! Form::label('xmax', 'xmax: ') !!}
{!! Form::text('coverage[xmax]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.xmax']) !!} {!! Form::text('coverage[xmax]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.xmax']) !!}
</div> </div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{!! Form::label('ymax', 'ymax: ') !!} {!! Form::label('ymax', 'ymax: ') !!}
{!! Form::text('coverage[ymax]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.ymax']) !!} {!! Form::text('coverage[ymax]', null, ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.ymax']) !!}
</div> </div>
@if (isset($dataset->elevation_absolut)) @if (isset($dataset->elevation_absolut))
<div v-show="elevation === 'absolut'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'absolut'" class="pure-u-1 pure-u-md-1">
{!! Form::label('elevation_absolut', 'elevation absolut: ') !!} {!! Form::label('elevation_absolut', 'elevation absolut: ') !!}
{!! Form::text('coverage[elevation_absolut]', null, {!! Form::text('coverage[elevation_absolut]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.elevation_absolut', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationAbsolut ? 'required|integer' : '' " ]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.elevation_absolut', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationAbsolut ? 'required|integer' : '' " ]) !!}
</div> </div>
@elseif (isset($dataset->elevation_min) && isset($dataset->elevation_max)) @elseif (isset($dataset->elevation_min) && isset($dataset->elevation_max))
<div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1">
{!! Form::label('elevation_min', 'elevation min: ') !!} {!! Form::label('elevation_min', 'elevation min: ') !!}
{!! Form::text('coverage[elevation_min]', null, {!! Form::text('coverage[elevation_min]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.elevation_min', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.elevation_min', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!}
</div> </div>
<div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1">
{!! Form::label('elevation_max', 'elevation max: ') !!} {!! Form::label('elevation_max', 'elevation max: ') !!}
{!! Form::text('coverage[elevation_max]', null, {!! Form::text('coverage[elevation_max]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.elevation_max', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.elevation_max', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!}
</div> </div>
@endif @endif
@if (isset($dataset->depth_absolut)) @if (isset($dataset->depth_absolut))
<div v-show="elevation === 'absolut'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'absolut'" class="pure-u-1 pure-u-md-1">
{!! Form::label('depth_absolut', 'depth absolut: ') !!} {!! Form::label('depth_absolut', 'depth absolut: ') !!}
{!! Form::text('coverage[depth_absolut]', null, {!! Form::text('coverage[depth_absolut]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.depth_absolut', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationAbsolut ? 'required|integer' : '' " ]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.depth_absolut', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationAbsolut ? 'required|integer' : '' " ]) !!}
</div> </div>
@elseif (isset($dataset->elevation_min) && isset($dataset->elevation_max)) @elseif (isset($dataset->elevation_min) && isset($dataset->elevation_max))
<div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1">
{!! Form::label('depth_min', 'depth min: ') !!} {!! Form::label('depth_min', 'depth min: ') !!}
{!! Form::text('coverage[depth_min]', null, {!! Form::text('coverage[depth_min]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.depth_min', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.depth_min', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!}
</div> </div>
<div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1">
{!! Form::label('depth_max', 'depth max: ') !!} {!! Form::label('depth_max', 'depth max: ') !!}
{!! Form::text('coverage[depth_max]', null, {!! Form::text('coverage[depth_max]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.depth_max', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.depth_max', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!}
</div> </div>
@endif @endif
@if (isset($dataset->depth_absolut)) @if (isset($dataset->depth_absolut))
<div v-show="elevation === 'absolut'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'absolut'" class="pure-u-1 pure-u-md-1">
{!! Form::label('time_absolut', 'time absolut: ') !!} {!! Form::label('time_absolut', 'time absolut: ') !!}
{!! Form::text('coverage[time_absolut]', null, {!! Form::text('coverage[time_absolut]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.time_absolut', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationAbsolut ? 'required|integer' : '' " ]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.time_absolut', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationAbsolut ? 'required|integer' : '' " ]) !!}
</div> </div>
@elseif (isset($dataset->elevation_min) && isset($dataset->elevation_max)) @elseif (isset($dataset->elevation_min) && isset($dataset->elevation_max))
<div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1">
{!! Form::label('time_min', 'time min: ') !!} {!! Form::label('time_min', 'time min: ') !!}
{!! Form::text('coverage[time_min]', null, {!! Form::text('coverage[time_min]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.time_min', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.time_min', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!}
</div> </div>
<div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1"> <div v-show="elevation === 'range'" class="pure-u-1 pure-u-md-1">
{!! Form::label('time_max', 'time max: ') !!} {!! Form::label('time_max', 'time max: ') !!}
{!! Form::text('coverage[time_max]', null, {!! Form::text('coverage[time_max]', null,
['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.time_max', 'data-vv-scope' => 'step-2', "v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!} ['class' => 'pure-u-23-24', 'v-model' => 'dataset.coverage.time_max', 'data-vv-scope' => 'step-2',
"v-validate" => "this.isElevationRange ? 'required|integer' : '' "]) !!}
</div> </div>
@endif, @endif,
</div> </div>
</fieldset> </fieldset>
<fieldset id="fieldset-titles"> <fieldset id="fieldset-titles">
<legend>Title</legend> <legend>Title</legend>
<div class="pure-g"> <div class="pure-g">
@foreach($dataset->titles as $key => $title) @foreach($dataset->titles as $key => $title)
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{{ Form::label('title', 'Title ' .($key+1).':') }} {{ Form::label('title', 'Title ' .($key+1).':') }}
<!-- Notice this is an array now: --> <!-- Notice this is an array now: -->
{{ Form::text('titles['.$title->id.'][value]', $title->value, ['class' => 'pure-u-23-24']) }} {{ Form::text('titles['.$title->id.'][value]', $title->value, ['class' => 'pure-u-23-24']) }}
</div> </div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{{ Form::label('language', 'Language..') }} {{ Form::label('language', 'Language..') }}
{{ Form::text('titles['.$title->id.'][language]', $title->language, ['placeholder' => '--no language--', 'class' => 'pure-u-23-24', 'readonly']) }} {{ Form::text('titles['.$title->id.'][language]', $title->language, ['placeholder' => '--no language--', 'class' => 'pure-u-23-24', 'readonly']) }}
</div> </div>
@endforeach @endforeach
</div> </div>
</fieldset> </fieldset>
@ -149,17 +170,17 @@
<legend>Abstract</legend> <legend>Abstract</legend>
<div class="pure-g"> <div class="pure-g">
@foreach($dataset->abstracts as $key => $abstract) @foreach($dataset->abstracts as $key => $abstract)
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{{ Form::label('abstract', 'Abstract ' .($key+1).':') }} {{ Form::label('abstract', 'Abstract ' .($key+1).':') }}
<!-- Notice this is an array now: --> <!-- Notice this is an array now: -->
{{ Form::textarea('abstracts['.$abstract->id.'][value]', $abstract->value, ['class' => 'pure-u-23-24', 'size' => '70x6']) }} {{ Form::textarea('abstracts['.$abstract->id.'][value]', $abstract->value, ['class' => 'pure-u-23-24', 'size' => '70x6']) }}
</div> </div>
<div class="pure-u-1 pure-u-md-1-2 pure-div"> <div class="pure-u-1 pure-u-md-1-2 pure-div">
{{ Form::label('language', 'Language..') }} {{ Form::label('language', 'Language..') }}
{{ Form::text('abstracts['.$abstract->id.'][language]', $abstract->language, ['placeholder' => '--no language--', 'class' => 'pure-u-23-24', 'readonly']) }} {{ Form::text('abstracts['.$abstract->id.'][language]', $abstract->language, ['placeholder' => '--no language--', 'class' => 'pure-u-23-24', 'readonly']) }}
</div> </div>
@endforeach @endforeach
</div> </div>
</fieldset> </fieldset>
@ -176,7 +197,9 @@
@foreach ($options as $license) @foreach ($options as $license)
<label for={{"license". $license->id }} class="pure-checkbox"> <label for={{"license". $license->id }} class="pure-checkbox">
<input name="licenses[]" value={{ $license->id }} {{ (in_array($license->id, $checkeds)) ? 'checked=checked' : '' }} type="checkbox" class="form-check-input"> <input name="licenses[]" value={{ $license->id }}
{{ (in_array($license->id, $checkeds)) ? 'checked=checked' : '' }} type="checkbox"
class="form-check-input">
{{ $license->name_long }} {{ $license->name_long }}
</label> </label>
@ -187,54 +210,56 @@
</fieldset> </fieldset>
<fieldset id="fieldset-references"> <fieldset id="fieldset-references">
<legend>Dataset References</legend> <legend>Dataset References</legend>
{{-- <table class="table table-hover" v-if="dataset.keywords.length"> --}} {{-- <table class="table table-hover" v-if="dataset.keywords.length"> --}}
@if ($dataset->references->count() > 0) @if ($dataset->references->count() > 0)
<table id="references" class="pure-table pure-table-horizontal"> <table id="references" class="pure-table pure-table-horizontal">
<thead> <thead>
<tr> <tr>
<th style="width: 20px;">Reference value</th> <th style="width: 20px;">Reference value</th>
<th style="width: 20px;">Label</th> <th style="width: 20px;">Label</th>
<th>Type</th> <th>Type</th>
<th>Relation</th> <th>Relation</th>
<th style="width: 130px;"></th> <th style="width: 130px;"></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{-- <tr v-for="(item, index) in dataset.keywords"> --}} {{-- <tr v-for="(item, index) in dataset.keywords"> --}}
@foreach($dataset->references as $key => $reference) @foreach($dataset->references as $key => $reference)
<tr> <tr>
<td> <td>
{{ Form::text('references['.$reference->id.'][value]', $reference->value, ['class' => 'form-control', 'placeholder' => '[REFERENCE VALUE]']) }} {{ Form::text('references['.$reference->id.'][value]', $reference->value, ['class' => 'form-control', 'placeholder' => '[REFERENCE VALUE]']) }}
</td> </td>
<td> <td>
{{ Form::text('references['.$reference->id.'][label]', $reference->label, ['class' => 'form-control', 'placeholder' => '[REFERENCE LABEL]']) }} {{ Form::text('references['.$reference->id.'][label]', $reference->label, ['class' => 'form-control', 'placeholder' => '[REFERENCE LABEL]']) }}
</td> </td>
<td> <td>
{!! Form::select('references['.$reference->id.'][type]', $referenceTypes, $reference->type, ['placeholder' => '[reference type]', 'v-model' => {!! Form::select('references['.$reference->id.'][type]', $referenceTypes, $reference->type,
'item.type', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!} ['placeholder' => '[reference type]', 'v-model' =>
</td> 'item.type', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!}
<td> </td>
{!! Form::select('references['.$reference->id.'][relation]', $relationTypes, $reference->relation, ['placeholder' => '[relation type]', 'v-model' => <td>
'item.relation', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!} {!! Form::select('references['.$reference->id.'][relation]', $relationTypes, $reference->relation,
</td> ['placeholder' => '[relation type]', 'v-model' =>
<td> 'item.relation', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!}
</td>
</td> <td>
</tr>
@endforeach </td>
</tbody> </tr>
</table> @endforeach
@else </tbody>
<span>...there are no references</span> </table>
@endif @else
</fieldset> <span>...there are no references</span>
@endif
</fieldset>
<fieldset id="fieldset-keywords"> <fieldset id="fieldset-keywords">
<legend>Dataset Keywords</legend> <legend>Dataset Keywords</legend>
{{-- <table class="table table-hover" v-if="dataset.keywords.length"> --}} {{-- <table class="table table-hover" v-if="dataset.keywords.length"> --}}
@if ($dataset->subjects->count() > 0) @if ($dataset->subjects->count() > 0)
<table id="keywords" class="pure-table pure-table-horizontal"> <table id="keywords" class="pure-table pure-table-horizontal">
<thead> <thead>
<tr> <tr>
<th style="width: 20px;">Keyword</th> <th style="width: 20px;">Keyword</th>
@ -245,15 +270,15 @@
<tbody> <tbody>
{{-- <tr v-for="(item, index) in dataset.keywords"> --}} {{-- <tr v-for="(item, index) in dataset.keywords"> --}}
@foreach($dataset->subjects as $key => $keyword) @foreach($dataset->subjects as $key => $keyword)
<tr> <tr>
<td> <td>
{{-- <input name="Keyword Value" class="form-control" placeholder="[KEYWORD VALUE]" v-model="item.value" v-validate="'required'" {{-- <input name="Keyword Value" class="form-control" placeholder="[KEYWORD VALUE]" v-model="item.value" v-validate="'required'"
data-vv-scope="step-2" /> --}} data-vv-scope="step-2" /> --}}
{{ Form::text('keywords['.$keyword->id.'][value]', $keyword->value, ['class' => 'form-control', 'placeholder' => '[KEYWORD VALUE]']) }} {{ Form::text('keywords['.$keyword->id.'][value]', $keyword->value, ['class' => 'form-control', 'placeholder' => '[KEYWORD VALUE]']) }}
</td> </td>
<td> <td>
{!! Form::select('keywords['.$keyword->id.'][type]', $keywordTypes, $keyword->type, ['placeholder' => '[keyword type]', 'v-model' => {!! Form::select('keywords['.$keyword->id.'][type]', $keywordTypes, $keyword->type, ['placeholder'
'item.type', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!} => '[keyword type]', 'v-model' => 'item.type', "v-validate" => "'required'", 'data-vv-scope' => 'step-2']) !!}
</td> </td>
<td> <td>
{{-- <button class="pure-button button-small is-warning" @click.prevent="removeKeyword(index)">Remove</button> --}} {{-- <button class="pure-button button-small is-warning" @click.prevent="removeKeyword(index)">Remove</button> --}}
@ -275,20 +300,20 @@
<th>Path Name</th> <th>Path Name</th>
<th>Label</th> <th>Label</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach($dataset->files as $key => $file) @foreach($dataset->files as $key => $file)
<tr> <tr>
<td> <td>
@if($file->exists() === true) @if($file->exists() === true)
<a href="{{ route('settings.file.download', ['id' => $file->id]) }}"> {{ $file->path_name }} </a> <a href="{{ route('settings.file.download', ['id' => $file->id]) }}"> {{ $file->path_name }} </a>
@else @else
<span class="alert">missing file: {{ $file->path_name }}</span> <span class="alert">missing file: {{ $file->path_name }}</span>
@endif @endif
</td> </td>
<td> <td>
{{-- {{ $file->label }} --}} {{-- {{ $file->label }} --}}
{{ Form::text('files['.$file->id.'][label]', $file->label, ['class' => 'form-control', 'placeholder' => '[FILE LABEL]']) }} {{ Form::text('files['.$file->id.'][label]', $file->label, ['class' => 'form-control', 'placeholder' => '[FILE LABEL]']) }}
</td> </td>
</tr> </tr>
@endforeach @endforeach

View File

@ -1,6 +1,5 @@
<?php <?php
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -507,7 +506,6 @@ Route::get('history', [
'as' => 'borrow.history', 'uses' => 'BorrowController@histori', 'as' => 'borrow.history', 'uses' => 'BorrowController@histori',
]); ]);
//====================================authentication=========================================================================== //====================================authentication===========================================================================
// Route::controllers([ // Route::controllers([
// 'auth' => 'Auth\AuthController', // 'auth' => 'Auth\AuthController',
@ -515,9 +513,9 @@ Route::get('history', [
// ]); // ]);
// Auth::routes(); // Auth::routes();
// Authentication Routes... // Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login'); Route::post('login', 'Auth\LoginController@login');
Route::get('logout', 'Auth\LoginController@logout')->name('logout'); Route::get('logout', 'Auth\LoginController@logout')->name('logout');
// // Registration Routes... // // Registration Routes...
// Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); // Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
@ -526,4 +524,8 @@ Route::get('history', [
// Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); // Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
// Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); // Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
// Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); // Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
// Route::post('password/reset', 'Auth\ResetPasswordController@reset'); // Route::post('password/reset', 'Auth\ResetPasswordController@reset');
Route::get('refresh-csrf', function () {
return csrf_token();
});