Compare commits

..

No commits in common. "master" and "v1.1" have entirely different histories.
master ... v1.1

215 changed files with 16329 additions and 28325 deletions

View file

@ -1,7 +1,6 @@
{ {
"plugins": [ "plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }], ["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-private-methods", { "loose": true }],
["@babel/plugin-proposal-class-properties", { "loose": true }] ["@babel/plugin-proposal-class-properties", { "loose": true }]
] ]
} }

View file

@ -3,20 +3,17 @@ APP_DEBUG=true
APP_KEY=SomeRandomString APP_KEY=SomeRandomString
APP_URL=YourUrl APP_URL=YourUrl
LOG_CHANNEL=stack
DB_CONNECTION=pgsql DB_CONNECTION=pgsql
DB_HOST=localhost DB_HOST=localhost
DB_PORT=5432 DB_PORT=5432
DB_DATABASE=tethys DB_DATABASE=tethys
DB_USERNAME=tethys_admin DB_USERNAME=trethys_admin
DB_PASSWORD=secret DB_PASSWORD=secret
DB_SCHEMA=gba
CACHE_DRIVER=file CACHE_DRIVER=file
SESSION_DRIVER=cookie SESSION_DRIVER=cookie
QUEUE_DRIVER=sync QUEUE_DRIVER=sync
FILESYSTEM_DRIVER=public FILESYSTEM_DRIVER=public
SOLR_HOST=localhost SOLR_HOST=solr.host.at
SOLR_CORE=tethys_data SOLR_CORE=test_data

View file

@ -7,12 +7,6 @@
"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.php_bin": "php",
"phpfmt.psr2": true, "phpfmt.psr2": true
"phpcs.standard": "PSR2",
"phpcs.executablePath": "C:\\Users\\arno\\scoop\\apps\\composer\\current\\home\\vendor\\bin\\phpcs",
"phpsab.standard": "PSR2",
"phpsab.executablePathCBF": "C:\\Users\\arno\\scoop\\apps\\composer\\current\\home\\vendor\\bin\\phpcbf.bat",
"phpsab.executablePathCS":"C:\\Users\\arno\\scoop\\apps\\composer\\current\\home\\vendor\\bin\\phpcs.bat",
"phpsab.snifferEnable": true
} }
} }

View file

@ -63,6 +63,5 @@ class DatasetState extends Command
'server_date_modified' => DB::raw('now()') 'server_date_modified' => DB::raw('now()')
]); ]);
} }
return 0;
} }
} }

View file

@ -29,6 +29,5 @@ class Inspire extends Command
public function handle() public function handle()
{ {
$this->comment(PHP_EOL.Inspiring::quote().PHP_EOL); $this->comment(PHP_EOL.Inspiring::quote().PHP_EOL);
return 0;
} }
} }

View file

@ -5,11 +5,6 @@ namespace App\Console\Commands;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Support\Facades\Log;
use App\Library\Search\SolariumAdapter;
use \Exception;
class SolrIndexBuilder extends Command class SolrIndexBuilder extends Command
{ {
/** /**
@ -48,21 +43,16 @@ class SolrIndexBuilder extends Command
// update statistics table // update statistics table
foreach ($datasets as $dataset) { foreach ($datasets as $dataset) {
$datasetId = $dataset->id; $datasetId = $dataset->id;
// $time = new \Illuminate\Support\Carbon(); $time = new \Illuminate\Support\Carbon();
// $dataset->server_date_modified = $time; $dataset->server_date_modified = $time;
// $dataset->save(); $dataset->save();
// Log::debug(__METHOD__ . ': ' . 'Adding index job for dataset ' . $datasetId . '.'); // try {
// // Opus_Search_Service::selectIndexingService('onDocumentChange')
try { // $service = new SolariumAdapter("solr", config('solarium'));
// Opus_Search_Service::selectIndexingService('onDocumentChange') // $service->addDatasetsToIndex($dataset);
$service = new SolariumAdapter("solr", config('solarium')); // } catch (Exception $e) {
$service->addDatasetsToIndex($dataset); // Log::debug(__METHOD__ . ': ' . 'Indexing document ' . $datasetId . ' failed: ' . $e->getMessage());
} catch (Exception $e) { // }
$this->error(__METHOD__ . ': ' . 'Indexing document ' . $dataset->id . ' failed: ' . $e->getMessage());
}
} }
return 0;
} }
} }

View file

@ -1,56 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Dataset;
use App\Library\Search\SolariumAdapter;
use \Exception;
class UpdateSolrDataset extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'update:dataset {dataset : The ID of the dataset}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update solr dataset with given ID';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$datasetId = $this->argument('dataset');
$dataset = Dataset::find($datasetId);
// $this->info($dataset->authors->implode('full_name', ', '));
try {
// Opus_Search_Service::selectIndexingService('onDocumentChange')
$service = new SolariumAdapter("solr", config('solarium'));
$service->addDatasetsToIndex($dataset);
} catch (Exception $e) {
$this->error(__METHOD__ . ': ' . 'Indexing document ' . $dataset->id . ' failed: ' . $e->getMessage());
}
return 0;
}
}

View file

@ -1,5 +1,4 @@
<?php <?php
namespace App\Console; namespace App\Console;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
@ -13,11 +12,10 @@ class Kernel extends ConsoleKernel
* @var array * @var array
*/ */
protected $commands = [ protected $commands = [
\App\Console\Commands\Inspire::class, 'App\Console\Commands\Inspire',
\App\Console\Commands\DatasetState::class, 'App\Console\Commands\DatasetState',
\App\Console\Commands\SolrIndexBuilder::class, 'App\Console\Commands\SolrIndexBuilder',
\App\Console\Commands\Log\ClearLogFile::class, 'App\Console\Commands\Log\ClearLogFile'
\App\Console\Commands\UpdateSolrDataset::class,
]; ];
/** /**

View file

@ -1,10 +1,7 @@
<?php <?php namespace App\Exceptions;
namespace App\Exceptions; use Exception;
// use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler class Handler extends ExceptionHandler
{ {
@ -15,19 +12,7 @@ class Handler extends ExceptionHandler
* @var array * @var array
*/ */
protected $dontReport = [ protected $dontReport = [
'password', 'Symfony\Component\HttpKernel\Exception\HttpException'
'password_confirmation',
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array<int, string>
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
]; ];
/** /**
@ -35,24 +20,22 @@ class Handler extends ExceptionHandler
* *
* 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 \Throwable $exception * @param \Exception $e
* @return void * @return void
*/ */
public function report(Throwable $exception) public function report(Exception $e)
{ {
return parent::report($exception); 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 \Throwable $exception * @param \Exception $e
* @return \Symfony\Component\HttpFoundation\Response * @return \Illuminate\Http\Response
*
* @throws \Throwable
*/ */
public function render($request, Throwable $ex) public function render($request, Exception $ex)
{ {
if ($ex instanceof \Illuminate\Auth\Access\AuthorizationException) { if ($ex instanceof \Illuminate\Auth\Access\AuthorizationException) {
// return $this->errorResponse($exception->getMessage(), 403); // return $this->errorResponse($exception->getMessage(), 403);

View file

@ -1,7 +1,7 @@
<?php <?php
/** /**
* Get an associative array with localeCodes as keys and translated URLs of current page as value * Get an associative array with localeCodes as keys and translated URLs of current page as value
*/ */
function getLocalizedURLArray() function getLocalizedURLArray()
{ {
$localesOrdered = LaravelLocalization::getLocalesOrder(); $localesOrdered = LaravelLocalization::getLocalesOrder();
@ -11,19 +11,3 @@ function getLocalizedURLArray()
} }
return $localizedURLs; return $localizedURLs;
} }
function get_domain($host)
{
$myhost = strtolower(trim($host));
$count = substr_count($myhost, '.');
if ($count === 2) {
if (strlen(explode('.', $myhost)[1]) > 3) {
$myhost = explode('.', $myhost, 2)[1];
}
} else if ($count > 2) {
$myhost = get_domain(explode('.', $myhost, 2)[1]);
}
$myhost = preg_replace( "#^[^:/.]*[:/]+#i", "", $myhost);
return $myhost;
}

View file

@ -1,40 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}

View file

@ -19,4 +19,14 @@ class ForgotPasswordController extends Controller
*/ */
use SendsPasswordResetEmails; use SendsPasswordResetEmails;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
} }

View file

@ -3,10 +3,7 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;
class LoginController extends Controller class LoginController extends Controller
{ {
@ -28,7 +25,7 @@ class LoginController extends Controller
* *
* @var string * @var string
*/ */
protected $redirectTo = RouteServiceProvider::HOME; protected $redirectTo = '/settings';
/** /**
* Create a new controller instance. * Create a new controller instance.
@ -37,23 +34,17 @@ class LoginController extends Controller
*/ */
public function __construct() public function __construct()
{ {
$this->middleware('guest')->except('logout'); $this->middleware('guest', ['except' => 'logout']);
} }
/** // public function logout(Request $request)
* Logout trait // {
* // $this->guard()->logout();
* @author Yugo <dedy.yugo.purwanto@gmail.com>
* @param Request $request // $request->session()->flush();
* @return void
*/ // $request->session()->regenerate();
protected function logout(Request $request)
{ // return redirect('/');
$this->guard()->logout(); // }
$request->session()->flush();
$request->session()->regenerate();
$frontend = config('tethys.frontend');
return redirect($frontend);
}
} }

View file

@ -2,12 +2,10 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Models\User;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller class RegisterController extends Controller
{ {
@ -29,7 +27,7 @@ class RegisterController extends Controller
* *
* @var string * @var string
*/ */
protected $redirectTo = RouteServiceProvider::HOME; protected $redirectTo = '/';
/** /**
* Create a new controller instance. * Create a new controller instance.
@ -50,9 +48,9 @@ class RegisterController extends Controller
protected function validator(array $data) protected function validator(array $data)
{ {
return Validator::make($data, [ return Validator::make($data, [
'name' => ['required', 'string', 'max:255'], 'name' => 'required|max:255',
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'email' => 'required|email|max:255|unique:users',
'password' => ['required', 'string', 'min:8', 'confirmed'], 'password' => 'required|min:6|confirmed',
]); ]);
} }
@ -67,7 +65,7 @@ class RegisterController extends Controller
return User::create([ return User::create([
'name' => $data['name'], 'name' => $data['name'],
'email' => $data['email'], 'email' => $data['email'],
'password' => Hash::make($data['password']), 'password' => bcrypt($data['password']),
]); ]);
} }
} }

View file

@ -3,7 +3,6 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller class ResetPasswordController extends Controller
@ -26,5 +25,15 @@ class ResetPasswordController extends Controller
* *
* @var string * @var string
*/ */
protected $redirectTo = RouteServiceProvider::HOME; protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
} }

View file

@ -1,42 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}

View file

@ -1,11 +1,11 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; //use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
abstract class Controller extends BaseController abstract class Controller extends BaseController
{ {

View file

@ -2,10 +2,10 @@
namespace App\Http\Controllers\Frontend; namespace App\Http\Controllers\Frontend;
// use Illuminate\Http\Request; use Illuminate\Http\Request;
// use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Input;
// use Illuminate\Support\Facades\Session; use Session;
// use Illuminate\Support\Facades\App; use App;
use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Redirect;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;

View file

@ -26,39 +26,6 @@ class PagesController extends Controller
* @param int $id * @param int $id
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function showDoi($dataset_prefix, $id): View
{
//$dataset = Dataset::findOrFail($id);
$dataset = Dataset::where('publish_id', '=', $id)->firstOrFail();
$dataset->load('titles');
$dataset->load('abstracts');
// $authors = $dataset->persons()
// ->wherePivot('role', 'author')
// ->orderBy('link_documents_persons.sort_order', 'desc')
// ->get();
// $contributors = $dataset->persons()
// ->wherePivot('role', 'contributor')
// ->orderBy('link_documents_persons.sort_order', 'desc')
// ->get();
// $submitters = $dataset->persons()
// ->wherePivot('role', 'submitter')
// ->orderBy('link_documents_persons.sort_order', 'desc')
// ->get();
// $authors = $dataset->persons()
// ->wherePivot('role', 'author')
// ->orderBy('link_documents_persons.sort_order', 'desc')
// ->get();
// return view('frontend.dataset.show', compact('dataset', 'authors', 'contributors', 'submitters'));
return view('frontend.dataset.show', compact('dataset'));
//return view('frontend.dataset.show', compact('id'));//wenn über solr
}
public function show($id): View public function show($id): View
{ {
//$dataset = Dataset::findOrFail($id); //$dataset = Dataset::findOrFail($id);

View file

@ -31,10 +31,7 @@ class SitelinkController extends Controller
// } // }
// }, $years); // }, $years);
$this->ids = array(); $this->ids = array();
return view( return view('frontend.sitelink.index')->with(['years' => $this->years, 'documents' => $this->ids]);
'frontend.sitelink.index',
['years' => $this->years, 'documents' => $this->ids]
);
} }
public function listDocs($year) public function listDocs($year)
@ -53,7 +50,7 @@ class SitelinkController extends Controller
->whereYear('server_date_published', '>=', $from) ->whereYear('server_date_published', '>=', $from)
->whereYear('server_date_published', '<', $until); ->whereYear('server_date_published', '<', $until);
$documents = $select->orderBy('publish_id') $documents = $select->orderBy('publish_id', 'asc')
->get(); ->get();
//$this->years = Dataset::select(DB::raw('YEAR(server_date_modified) as server_date_modified')) //$this->years = Dataset::select(DB::raw('YEAR(server_date_modified) as server_date_modified'))
@ -66,10 +63,8 @@ class SitelinkController extends Controller
//$select->select('id'); //$select->select('id');
//$this->ids = $select->pluck('id'); //$this->ids = $select->pluck('id');
//return view('rdr.sitelink.index')->with(['years'=> $this->years,'ids'=> $this->ids]); //return view('rdr.sitelink.index')->with(['years'=> $this->years,'ids'=> $this->ids]);
return view( return view('frontend.sitelink.index')
'frontend.sitelink.index', ->with(['years' => $this->years, 'documents' => $documents]);
['years' => $this->years, 'documents' => $documents]
);
} }
} }
} }

View file

@ -13,8 +13,7 @@ use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use \Exception; use \Exception;
// use Illuminate\Support\Carbon; use Carbon\Carbon;
use \Illuminate\Support\Carbon;
class RequestController extends Controller class RequestController extends Controller
{ {
@ -26,7 +25,7 @@ class RequestController extends Controller
*/ */
private $deliveringDocumentStates = array('published', 'deleted'); // maybe deleted documents too private $deliveringDocumentStates = array('published', 'deleted'); // maybe deleted documents too
//private $xMetaDissRestriction = array('doctoralthesis', 'habilitation'); //private $xMetaDissRestriction = array('doctoralthesis', 'habilitation');
const SET_SPEC_PATTERN = '[A-Za-zäöüÄÖÜß0-9\-_\.!~\*\'\(\)]+'; const SET_SPEC_PATTERN = '[A-Za-z0-9\-_\.!~\*\'\(\)]+';
/** /**
* Holds xml representation of document information to be processed. * Holds xml representation of document information to be processed.
@ -106,9 +105,7 @@ class RequestController extends Controller
//$xml = $this->doc->asXML(); //$xml = $this->doc->asXML();
return response($xml) //->view('rss', array('rss'=>$this->rss)) return response($xml) //->view('rss', array('rss'=>$this->rss))
->header('Content-Type', 'application/xml') ->header('Content-Type', 'application/xml')
->header('charset', 'utf-8') ->header('charset', 'utf-8');
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET');
} }
private function __handleRequest(array $oaiRequest) private function __handleRequest(array $oaiRequest)
@ -124,14 +121,9 @@ class RequestController extends Controller
$this->proc->setParameter('', 'unixTimestamp', $unixTimestamp); $this->proc->setParameter('', 'unixTimestamp', $unixTimestamp);
// set OAI base url // set OAI base url
$frontend = config('tethys.frontend');
$uri = explode('?', $_SERVER['REQUEST_URI'], 2); $uri = explode('?', $_SERVER['REQUEST_URI'], 2);
// $this->proc->setParameter('', 'baseURL', url('/') . $uri[0]); $this->proc->setParameter('', 'baseURL', url('/') . $uri[0]);
$this->proc->setParameter('', 'baseURL', $frontend. '/oai');// . $uri[0]);
$this->proc->setParameter('', 'repURL', url('/')); $this->proc->setParameter('', 'repURL', url('/'));
$this->proc->setParameter('', 'downloadLink', url('/') . '/file/download/');
$this->proc->setParameter('', 'doiLink', 'https://doi.org/');
$this->proc->setParameter('', 'doiPrefix', 'info:eu-repo/semantics/altIdentifier/doi/');
// $resumptionPath = $this->configuration->getResumptionTokenPath(); // $resumptionPath = $this->configuration->getResumptionTokenPath();
@ -153,10 +145,9 @@ class RequestController extends Controller
$this->handleIllegalVerb(); $this->handleIllegalVerb();
} }
} else { } else {
// $oaiRequest['verb'] = 'Identify'; $oaiRequest['verb'] = 'Identify';
// $this->proc->setParameter('', 'oai_verb', $oaiRequest['verb']); $this->proc->setParameter('', 'oai_verb', $oaiRequest['verb']);
// $this->doc = $this->handleIdentify(); $this->doc = $this->handleIdentify();
throw new OaiModelException('The verb provided in the request is illegal.', OaiModelError::BADVERB);
} }
} }
@ -193,15 +184,8 @@ class RequestController extends Controller
{ {
$repIdentifier = "tethys.at"; $repIdentifier = "tethys.at";
$this->proc->setParameter('', 'repIdentifier', $repIdentifier); $this->proc->setParameter('', 'repIdentifier', $repIdentifier);
// Identifier references metadata Urn, not plain Id! // Identifier references metadata Urn, not plain Id!
// Currently implemented as 'oai:foo.bar.de:{docId}' or 'urn:nbn...-123' // Currently implemented as 'oai:foo.bar.de:{docId}' or 'urn:nbn...-123'
if (!array_key_exists('identifier', $oaiRequest)) {
throw new OaiModelException(
'The prefix of the identifier argument is unknown.',
OaiModelError::BADARGUMENT
);
}
$dataId = $this->getDocumentIdByIdentifier($oaiRequest['identifier']); $dataId = $this->getDocumentIdByIdentifier($oaiRequest['identifier']);
$dataset = null; $dataset = null;
@ -219,11 +203,6 @@ class RequestController extends Controller
$metadataPrefix = null; $metadataPrefix = null;
if (true === array_key_exists('metadataPrefix', $oaiRequest)) { if (true === array_key_exists('metadataPrefix', $oaiRequest)) {
$metadataPrefix = $oaiRequest['metadataPrefix']; $metadataPrefix = $oaiRequest['metadataPrefix'];
} else {
throw new OaiModelException(
'The prefix of the metadata argument is unknown.',
OaiModelError::BADARGUMENT
);
} }
$this->proc->setParameter('', 'oai_metadataPrefix', $metadataPrefix); $this->proc->setParameter('', 'oai_metadataPrefix', $metadataPrefix);
@ -326,7 +305,6 @@ class RequestController extends Controller
//$oaiSets = new Oai_Model_Sets(); //$oaiSets = new Oai_Model_Sets();
$sets = array( $sets = array(
'open_access' => 'Set for open access licenses',
// 'bibliography:true' => 'Set for bibliographic entries', // 'bibliography:true' => 'Set for bibliographic entries',
// 'bibliography:false' => 'Set for non-bibliographic entries', // 'bibliography:false' => 'Set for non-bibliographic entries',
); );
@ -385,10 +363,10 @@ class RequestController extends Controller
$reldocIds = array(); $reldocIds = array();
$metadataPrefix = null; $metadataPrefix = null;
// if (true === array_key_exists('metadataPrefix', $oaiRequest)) { if (true === array_key_exists('metadataPrefix', $oaiRequest)) {
// $metadataPrefix = $oaiRequest['metadataPrefix']; $metadataPrefix = $oaiRequest['metadataPrefix'];
// } }
// $this->proc->setParameter('', 'oai_metadataPrefix', $metadataPrefix); $this->proc->setParameter('', 'oai_metadataPrefix', $metadataPrefix);
$tokenWorker = new ResumptionTokens(); $tokenWorker = new ResumptionTokens();
$tokenWorker->setResumptionPath($tokenTempPath); $tokenWorker->setResumptionPath($tokenTempPath);
@ -412,16 +390,6 @@ class RequestController extends Controller
// else no resumptionToken is given // else no resumptionToken is given
} else { } else {
// no resumptionToken is given // no resumptionToken is given
if (true === array_key_exists('metadataPrefix', $oaiRequest)) {
$metadataPrefix = $oaiRequest['metadataPrefix'];
} else {
throw new OaiModelException(
'The prefix of the metadata argument is unknown.',
OaiModelError::BADARGUMENT
);
}
$this->proc->setParameter('', 'oai_metadataPrefix', $metadataPrefix);
$finder = Dataset::query(); $finder = Dataset::query();
// add server state restrictions // add server state restrictions
$finder->whereIn('server_state', $this->deliveringDocumentStates); $finder->whereIn('server_state', $this->deliveringDocumentStates);
@ -439,92 +407,6 @@ class RequestController extends Controller
$q->where('label', $setarray[1]); $q->where('label', $setarray[1]);
}); });
} }
} elseif (!empty($setarray[0]) && $setarray[0] == 'open_access') {
$openAccessLicences = ["CC-BY-4.0", "CC-BY-SA-4.0"];
$finder->whereHas('licenses', function ($q) use ($openAccessLicences) {
$q->whereIn('name', $openAccessLicences);
// $q->where('name', '=', "CC-BY-4.0")->orWhere('name', '=',"CC-BY-SA-4.0");
});
//$test = $finder->toSql();
}
}
if (array_key_exists('from', $oaiRequest) && array_key_exists('until', $oaiRequest)) {
$from = $oaiRequest['from'];
$fromDate = Carbon::parse($from);
$until = $oaiRequest['until'];
$untilDate = \Illuminate\Support\Carbon::parse($until);
if (strlen($from) != strlen($until)) {
throw new OaiModelException(
'The request has different granularities for the from and until parameters.',
OaiModelError::BADARGUMENT
);
}
if ($fromDate->hour == 0) {
$fromDate = $fromDate->startOfDay();
$untilDate = $untilDate->endOfDay();
}
$finder->where('server_date_published', '>=', $fromDate)
->where('server_date_published', '<=', $untilDate);
// $test = $finder->toSql();
} elseif (array_key_exists('until', $oaiRequest) && !array_key_exists('from', $oaiRequest)) {
$until = $oaiRequest['until'];
try {
$untilDate = \Illuminate\Support\Carbon::parse($until);
if ($untilDate->hour == 0) {
$untilDate = $untilDate->endOfDay();
}
// if (strtotime($untilDate) > 0) {
$earliestPublicationDate = Dataset::earliestPublicationDate()->server_date_published;
if ($earliestPublicationDate->gt($untilDate)) {
throw new OaiModelException(
"earliestDatestamp is greater than given until date.
The given values results in an empty list.",
OaiModelError::NORECORDSMATCH
);
} else {
$finder->where('server_date_published', '<=', $untilDate);
$test = $finder->toSql();
}
} catch (OaiModelException $e) {
throw new OaiModelException(
"earliestDatestamp is greater than given until date.
The given values results in an empty list.",
OaiModelError::NORECORDSMATCH
);
} catch (\Exception $e) {
throw new OaiModelException(
'The until date argument is not valid.',
OaiModelError::BADARGUMENT
);
}
} elseif (array_key_exists('from', $oaiRequest) && !array_key_exists('until', $oaiRequest)) {
$from = $oaiRequest['from'];
try {
$fromDate = \Illuminate\Support\Carbon::parse($from);
if ($fromDate->hour == 0) {
$fromDate = $fromDate->startOfDay();
}
// if (strtotime($fromDate) > 0) {
$now = new Carbon();
if ($fromDate->gt($now)) {
throw new OaiModelException(
"Given from date is greater than now. The given values results in an empty list.",
OaiModelError::NORECORDSMATCH
);
} else {
$finder->where('server_date_published', '>=', $fromDate);
}
} catch (OaiModelException $e) {
throw new OaiModelException(
"Given from date is greater than now. The given values results in an empty list.",
OaiModelError::NORECORDSMATCH
);
} catch (\Exception $e) {
throw new OaiModelException(
'The from date argument is not valid.',
OaiModelError::BADARGUMENT
);
} }
} }
@ -566,7 +448,6 @@ class RequestController extends Controller
$this->setParamResumption($res, $cursor, $totalIds); $this->setParamResumption($res, $cursor, $totalIds);
} }
} }
/** /**
* Set parameters for resumptionToken-line. * Set parameters for resumptionToken-line.
* *
@ -576,8 +457,7 @@ class RequestController extends Controller
*/ */
private function setParamResumption($res, $cursor, $totalIds) private function setParamResumption($res, $cursor, $totalIds)
{ {
// $tomorrow = str_replace('+00:00', 'Z', Carbon::now()->addHour(1)->setTimeZone('UTC')); $tomorrow = str_replace('+00:00', 'Z', Carbon::now()->addHour(1)->setTimeZone('UTC'));
$tomorrow = Carbon::now()->addDay(1)->toIso8601ZuluString();
$this->proc->setParameter('', 'dateDelete', $tomorrow); $this->proc->setParameter('', 'dateDelete', $tomorrow);
$this->proc->setParameter('', 'res', $res); $this->proc->setParameter('', 'res', $res);
$this->proc->setParameter('', 'cursor', $cursor); $this->proc->setParameter('', 'cursor', $cursor);
@ -622,9 +502,7 @@ class RequestController extends Controller
*/ */
private function addLandingPageAttribute(\DOMNode $document, $dataid) private function addLandingPageAttribute(\DOMNode $document, $dataid)
{ {
// $url = route('frontend.dataset.show', $dataid); $url = route('frontend.dataset.show', $dataid);
$base_domain = config('tethys.base_domain');
$url ='https://' . get_domain($base_domain) . "/dataset/" . $dataid;
$owner = $document->ownerDocument; $owner = $document->ownerDocument;
$attr = $owner->createAttribute('landingpage'); $attr = $owner->createAttribute('landingpage');
@ -745,7 +623,7 @@ class RequestController extends Controller
$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');
$identify->addChild('earliestDatestamp', $earliestDateFromDb->toDateString()); $identify->addChild('earliestDatestamp', $earliestDateFromDb);
$identify->addChild('deletedRecord', 'persistent'); $identify->addChild('deletedRecord', 'persistent');
//$description = $identify->addChild('description'); //$description = $identify->addChild('description');

View file

@ -1,324 +0,0 @@
<?php
namespace App\Http\Controllers\Publish;
use App\Http\Controllers\Controller;
use App\Interfaces\DoiInterface;
use App\Models\Dataset;
use App\Models\DatasetIdentifier;
use Illuminate\Http\Request;
use App\Models\Oai\OaiModelError;
use App\Exceptions\OaiModelException;
use Illuminate\Support\Facades\View;
use App\Exceptions\GeneralException;
use App\Library\Search\SolariumAdapter;
use \Exception;
class DoiController extends Controller
{
protected $doiService;
protected $LaudatioUtils;
/**
* Holds xml representation of document information to be processed.
*
* @var \DomDocument Defaults to null.
*/
protected $xml = null;
/**
* Holds the stylesheet for the transformation.
*
* @var \DomDocument Defaults to null.
*/
protected $xslt = null;
/**
* Holds the xslt processor.
*
* @var \XSLTProcessor Defaults to null.
*/
protected $proc = null;
/**
* DOIController constructor.
* @param DoiInterface $DOIService
*/
public function __construct(DoiInterface $DoiClient)
{
$this->doiClient = $DoiClient;
$this->xml = new \DomDocument();
$this->proc = new \XSLTProcessor();
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
// public function index()
// {
// //
// }
public function index(): \Illuminate\Contracts\View\View
{
$datasets = Dataset::query()
->has('identifier')
->orderByDesc('server_date_modified')
->get();
return View::make('workflow.doi.index', [
'datasets' => $datasets,
]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$dataId = $request->input('publish_id');
// Setup stylesheet
$this->loadStyleSheet(public_path() . '/prefixes/doi_datacite.xslt');
// set timestamp
$date = new \DateTime();
$unixTimestamp = $date->getTimestamp();
$this->proc->setParameter('', 'unixTimestamp', $unixTimestamp);
$prefix = config('tethys.datacite_prefix');
$this->proc->setParameter('', 'prefix', $prefix);
$repIdentifier = "tethys";
$this->proc->setParameter('', 'repIdentifier', $repIdentifier);
$this->xml->appendChild($this->xml->createElement('Datasets'));
$dataset = Dataset::where('publish_id', '=', $dataId)->firstOrFail();
if (is_null($dataset)) {
throw new OaiModelException('Dataset is not available for registering DOI!', OaiModelError::NORECORDSMATCH);
}
$dataset->fetchValues();
$xmlModel = new \App\Library\Xml\XmlModel();
$xmlModel->setModel($dataset);
$xmlModel->excludeEmptyFields();
$cache = ($dataset->xmlCache) ? $dataset->xmlCache : new \App\Models\XmlCache();
$xmlModel->setXmlCache($cache);
$domNode = $xmlModel->getDomDocument()->getElementsByTagName('Rdr_Dataset')->item(0);
$node = $this->xml->importNode($domNode, true);
$this->addSpecInformation($node, 'data-type:' . $dataset->type);
$this->xml->documentElement->appendChild($node);
$xmlMeta = $this->proc->transformToXML($this->xml);
// Log::alert($xmlMeta);
//create doiValue and correspunfing landingpage of tehtys
$doiValue = $prefix . '/tethys.' . $dataset->publish_id;
$appUrl = config('app.url');
$landingPageUrl = $appUrl . "/dataset/" . $dataset->publish_id;
$response = $this->doiClient->registerDoi($doiValue, $xmlMeta, $landingPageUrl);
// if operation successful, store dataste identifier
if ($response->getStatusCode() == 201) {
$doi = new DatasetIdentifier();
$doi['value'] = $doiValue;
$doi['dataset_id'] = $dataset->id;
$doi['type'] = "doi";
$doi['status'] = "registered";
$doi->save();
}
}
/**
* Display the specified resource.
*
* @param \App\Models\DatasetIdentifier $doi
* @return \Illuminate\Http\Response
*/
public function show(DatasetIdentifier $doi)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\DatasetIdentifier $doi
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$dataset = Dataset::query()
->with([
'titles',
'persons' => function ($query) {
$query->wherePivot('role', 'author');
},
])->findOrFail($id);
return View::make('workflow.doi.edit', [
'dataset' => $dataset,
]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\DatasetIdentifier $doi
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $publish_id)
{
$dataId = $publish_id; //$request->input('publish_id');
// Setup stylesheet
$this->loadStyleSheet(public_path() . '/prefixes/doi_datacite.xslt');
// set timestamp
$date = new \DateTime();
$unixTimestamp = $date->getTimestamp();
$this->proc->setParameter('', 'unixTimestamp', $unixTimestamp);
$prefix = "";
$base_domain = "";
$datacite_environment = config('tethys.datacite_environment');
if ($datacite_environment == "debug") {
$prefix = config('tethys.datacite_test_prefix');
$base_domain = config('tethys.test_base_domain');
} elseif ($datacite_environment == "production") {
$prefix = config('tethys.datacite_prefix');
$base_domain = config('tethys.base_domain');
}
// $prefix = config('tethys.datacite_prefix');
$this->proc->setParameter('', 'prefix', $prefix);
$repIdentifier = "tethys";
$this->proc->setParameter('', 'repIdentifier', $repIdentifier);
$this->xml->appendChild($this->xml->createElement('Datasets'));
$dataset = Dataset::where('publish_id', '=', $dataId)->firstOrFail();
if (is_null($dataset)) {
throw new OaiModelException('Dataset is not available for registering DOI!', OaiModelError::NORECORDSMATCH);
}
$dataset->fetchValues();
$xmlModel = new \App\Library\Xml\XmlModel();
$xmlModel->setModel($dataset);
$xmlModel->excludeEmptyFields();
$cache = ($dataset->xmlCache) ? $dataset->xmlCache : new \App\Models\XmlCache();
$xmlModel->setXmlCache($cache);
$domNode = $xmlModel->getDomDocument()->getElementsByTagName('Rdr_Dataset')->item(0);
$this->addAlternateLandingPageAttribute($domNode, $dataset->publish_id);
$node = $this->xml->importNode($domNode, true);
$this->addSpecInformation($node, 'data-type:' . $dataset->type);
$this->xml->documentElement->appendChild($node);
$newXmlMeta = $this->proc->transformToXML($this->xml);
// Log::alert($xmlMeta);
//create doiValue and correspunfing landingpage of tehtys
$doiValue = $prefix . '/tethys.' . $dataset->publish_id;
$response = $this->doiClient->updateMetadataForDoi($doiValue, $newXmlMeta);
// if operation successful, store dataste identifier
if ($response->getStatusCode() == 201) {
$doi = $dataset->identifier;
// $doi['value'] = $doiValue;
// $doi['type'] = "doi";
// $doi['status'] = "findable";
// $doi->save();
$doi->touch();
try {
$service = new SolariumAdapter("solr", config('solarium'));
$service->addDatasetsToIndex($dataset);
} catch (Exception $e) {
$this->error(__METHOD__ . ': ' . 'Indexing document ' . $dataset->id . ' failed: ' . $e->getMessage());
}
return redirect()
->route('publish.workflow.doi.index')
->with('flash_message', 'You have successfully updated a DOI for the dataset!');
// if ($doi->save()) {
// // update server_date_modified for triggering nex xml cache (doi interface)
// $time = new \Illuminate\Support\Carbon();
// $dataset->server_date_modified = $time;
// $dataset->save();
// return redirect()
// ->route('publish.workflow.editor.index')
// ->with('flash_message', 'You have successfully created a DOI for the dataset!');
// }
} else {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
// $this->log($message, 'err');
throw new GeneralException($message);
}
}
/**
* Add the landingpage attribute to Rdr_Dataset XML output.
*
* @param \DOMNode $document Rdr_Dataset XML serialisation
* @param string $docid Id of the dataset
* @return void
*/
private function addAlternateLandingPageAttribute(\DOMNode $document, $dataid)
{
$base_domain = config('tethys.base_domain');
$url ='https://' . get_domain($base_domain) . "/dataset/" . $dataid;
$owner = $document->ownerDocument;
$attr = $owner->createAttribute('landingpage');
$attr->appendChild($owner->createTextNode($url));
$document->appendChild($attr);
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\DatasetIdentifier $doi
* @return \Illuminate\Http\Response
*/
public function destroy(DatasetIdentifier $doi)
{
//
}
/**
* Load an xslt stylesheet.
*
* @return void
*/
private function loadStyleSheet($stylesheet)
{
$this->xslt = new \DomDocument;
$this->xslt->load($stylesheet);
$this->proc->importStyleSheet($this->xslt);
if (isset($_SERVER['HTTP_HOST'])) {
$this->proc->setParameter('', 'host', $_SERVER['HTTP_HOST']);
}
//$this->proc->setParameter('', 'server', $this->getRequest()->getBaseUrl());
}
private function addSpecInformation(\DOMNode $document, $information)
{
$setSpecAttribute = $this->xml->createAttribute('Value');
$setSpecAttributeValue = $this->xml->createTextNode($information);
$setSpecAttribute->appendChild($setSpecAttributeValue);
$setSpecElement = $this->xml->createElement('SetSpec');
//$setSpecElement =new \DOMElement("SetSpec");
$setSpecElement->appendChild($setSpecAttribute);
$document->appendChild($setSpecElement);
}
}

View file

@ -1,5 +1,4 @@
<?php <?php
namespace App\Http\Controllers\Publish; namespace App\Http\Controllers\Publish;
use App\Exceptions\GeneralException; use App\Exceptions\GeneralException;
@ -18,7 +17,7 @@ use App\Models\User;
use App\Rules\RdrFilesize; use App\Rules\RdrFilesize;
use App\Rules\RdrFiletypes; use App\Rules\RdrFiletypes;
// use Illuminate\View\View; // use Illuminate\View\View;
use Illuminate\Support\Carbon; use Carbon\Carbon;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@ -28,43 +27,12 @@ use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\View;
use \Exception; use \Exception;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Log;
use App\Models\DatasetIdentifier;
use App\Models\Oai\OaiModelError;
use App\Exceptions\OaiModelException;
use App\Interfaces\DoiInterface;
use App\Library\Search\SolariumAdapter;
class EditorController extends Controller class EditorController extends Controller
{ {
/** public function __construct()
* Holds xml representation of document information to be processed.
*
* @var \DomDocument Defaults to null.
*/
protected $xml = null;
/**
* Holds the stylesheet for the transformation.
*
* @var \DomDocument Defaults to null.
*/
protected $xslt = null;
/**
* Holds the xslt processor.
*
* @var \XSLTProcessor Defaults to null.
*/
protected $proc = null;
public function __construct(DoiInterface $DoiClient)
{ {
$this->doiClient = $DoiClient;
//$this->middleware('auth'); //$this->middleware('auth');
$this->xml = new \DomDocument('1.0', 'UTF-8');
$this->proc = new \XSLTProcessor();
} }
/** /**
@ -80,14 +48,13 @@ class EditorController extends Controller
$builder = Dataset::query(); $builder = Dataset::query();
//"select * from [documents] where [server_state] in (?) or ([server_state] = ? and [editor_id] = ?)" //"select * from [documents] where [server_state] in (?) or ([server_state] = ? and [editor_id] = ?)"
$datasets = $builder $datasets = $builder
->where('server_state', 'released') ->where('server_state', 'released')
// ->whereIn('server_state', ['released']) // ->whereIn('server_state', ['released'])
->orWhere(function ($query) use ($user_id) { ->orWhere(function ($query) use ($user_id) {
$query->whereIn('server_state', ['editor_accepted', 'rejected_reviewer', 'reviewed', 'published']) $query->whereIn('server_state', ['editor_accepted', 'rejected_reviewer', 'reviewed'])
->where('editor_id', $user_id)->doesntHave('identifier', 'and'); ->where('editor_id', $user_id);
}) })
->orderByDesc('server_date_modified') ->orderBy('server_date_modified', 'desc')
->get(); ->get();
// return View::make('workflow.editor.index', compact('datasets')); // return View::make('workflow.editor.index', compact('datasets'));
return View::make('workflow.editor.index', [ return View::make('workflow.editor.index', [
@ -138,10 +105,8 @@ class EditorController extends Controller
$dataset->load('licenses', 'authors', 'contributors', 'titles', 'abstracts', 'files', 'coverage', 'subjects', 'references'); $dataset->load('licenses', 'authors', 'contributors', 'titles', 'abstracts', 'files', 'coverage', 'subjects', 'references');
$titleTypes = ['Main' => 'Main', 'Sub' => 'Sub', 'Alternative' => 'Alternative', 'Translated' => 'Translated', 'Other' => 'Other']; $titleTypes = ['Main' => 'Main', 'Sub' => 'Sub', 'Alternative' => 'Alternative', 'Translated' => 'Translated', 'Other' => 'Other'];
$descriptionTypes = [ $descriptionTypes = ['Abstract' => 'Abstract', 'Methods' => 'Methods', 'Series_information' => 'Series_information',
'Abstract' => 'Abstract', 'Methods' => 'Methods', 'Series_information' => 'Series_information', 'Technical_info' => 'Technical_info', 'Translated' => 'Translated', 'Other' => 'Other'];
'Technical_info' => 'Technical_info', 'Translated' => 'Translated', 'Other' => 'Other'
];
$languages = DB::table('languages') $languages = DB::table('languages')
->where('active', true) ->where('active', true)
->pluck('part1', 'part1'); ->pluck('part1', 'part1');
@ -161,9 +126,8 @@ class EditorController extends Controller
$languages = DB::table('languages') $languages = DB::table('languages')
->where('active', true) ->where('active', true)
->pluck('part1', 'part1'); ->pluck('part1', 'part1');
$contributorTypes = Config::get('enums.contributor_types'); $contributorTypes = Config::get('enums.contributor_types');
$nameTypes = Config::get('enums.name_types');
// $options = License::all('id', 'name_long'); // $options = License::all('id', 'name_long');
$licenses = License::select('id', 'name_long', 'link_licence') $licenses = License::select('id', 'name_long', 'link_licence')
@ -174,13 +138,11 @@ class EditorController extends Controller
$keywordTypes = ['uncontrolled' => 'uncontrolled', 'swd' => 'swd']; $keywordTypes = ['uncontrolled' => 'uncontrolled', 'swd' => 'swd'];
$referenceTypes = ["DOI", "Handle", "ISBN", "ISSN", "URL", "URN"]; $referenceTypes = ["rdr-id", "doi", "handle", "isbn", "issn", "url", "urn"];
$referenceTypes = array_combine($referenceTypes, $referenceTypes); $referenceTypes = array_combine($referenceTypes, $referenceTypes);
$relationTypes = [ $relationTypes = ["IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues",
"IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues", "IsNewVersionOf", "IsPartOf", "HasPart", "Compiles", "IsVariantFormOf"];
"IsNewVersionOf", "IsPartOf", "HasPart", "Compiles", "IsVariantFormOf"
];
$relationTypes = array_combine($relationTypes, $relationTypes); $relationTypes = array_combine($relationTypes, $relationTypes);
return View::make( return View::make(
@ -190,7 +152,6 @@ class EditorController extends Controller
'titleTypes', 'titleTypes',
'descriptionTypes', 'descriptionTypes',
'contributorTypes', 'contributorTypes',
'nameTypes',
'languages', 'languages',
'messages', 'messages',
'projects', 'projects',
@ -291,7 +252,7 @@ class EditorController extends Controller
} else { } else {
$dataPerson = new Person($person); $dataPerson = new Person($person);
$dataPerson->status = true; $dataPerson->status = true;
// $dataPerson->name_type = "Organizational"; $dataPerson->name_type = "Organizational";
$dataset->persons()->save($dataPerson, $pivot_data); $dataset->persons()->save($dataPerson, $pivot_data);
} }
$index++; $index++;
@ -314,7 +275,7 @@ class EditorController extends Controller
} else { } else {
$dataPerson = new Person($person); $dataPerson = new Person($person);
$dataPerson->status = true; $dataPerson->status = true;
// $dataPerson->name_type = "Organizational"; $dataPerson->name_type = "Organizational";
$dataset->persons()->save($dataPerson, $pivot_data); $dataset->persons()->save($dataPerson, $pivot_data);
} }
$index++; $index++;
@ -387,21 +348,15 @@ class EditorController extends Controller
if (is_array($keywords) && count($keywords) > 0) { if (is_array($keywords) && count($keywords) > 0) {
foreach ($keywords as $key => $formKeyword) { foreach ($keywords as $key => $formKeyword) {
if (isset($formKeyword['id'])) { if (isset($formKeyword['id'])) {
// is readonly
$subject = Subject::findOrFail($formKeyword['id']); $subject = Subject::findOrFail($formKeyword['id']);
// $subject->value = $formKeyword['value']; $subject->value = $formKeyword['value'];
// $subject->type = $formKeyword['type']; $subject->type = $formKeyword['type'];
// if ($subject->isDirty()) { if ($subject->isDirty()) {
// $subject->save(); $subject->save();
// } }
} else { } else {
// $subject = new Subject($formKeyword); $subject = new Subject($formKeyword);
// $dataset->subjects()->save($subject); $dataset->subjects()->save($subject);
$keyword = Subject::firstOrCreate(
['value' => $formKeyword['value'], 'language' => $formKeyword['language']],
$formKeyword
);
$dataset->subjects()->attach($keyword);
} }
} }
} }
@ -458,8 +413,7 @@ class EditorController extends Controller
$formCoverage $formCoverage
); );
} elseif (isset($data['coverage']) && $this->containsOnlyNull($data['coverage']) } elseif (isset($data['coverage']) && $this->containsOnlyNull($data['coverage'])
&& !is_null($dataset->coverage) && !is_null($dataset->coverage)) {
) {
$dataset->coverage()->delete(); $dataset->coverage()->delete();
} }
@ -636,157 +590,4 @@ class EditorController extends Controller
} }
throw new GeneralException(trans('exceptions.publish.publish.update_error')); throw new GeneralException(trans('exceptions.publish.publish.update_error'));
} }
/**
* Display the specified dataset for publishing.
*
* @param int $id
* @return \Illuminate\View\View
*/
public function doiCreate($id): \Illuminate\Contracts\View\View
{
$dataset = Dataset::query()
->with([
'titles',
'persons' => function ($query) {
$query->wherePivot('role', 'author');
},
])->findOrFail($id);
return View::make('workflow.editor.doi', [
'dataset' => $dataset,
]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function doiStore(Request $request, $publish_id)
{
$dataId = $publish_id; //$request->input('publish_id');
// Setup stylesheet
$this->loadStyleSheet(public_path() . '/prefixes/doi_datacite.xslt');
// set timestamp
$date = new \DateTime();
$unixTimestamp = $date->getTimestamp();
$this->proc->setParameter('', 'unixTimestamp', $unixTimestamp);
$prefix = "";
$base_domain = "";
$datacite_environment = config('tethys.datacite_environment');
if ($datacite_environment == "debug") {
$prefix = config('tethys.datacite_test_prefix');
$base_domain = config('tethys.test_base_domain');
} elseif ($datacite_environment == "production") {
$prefix = config('tethys.datacite_prefix');
$base_domain = config('tethys.base_domain');
}
// $prefix = config('tethys.datacite_prefix');
$this->proc->setParameter('', 'prefix', $prefix);
$repIdentifier = "tethys";
$this->proc->setParameter('', 'repIdentifier', $repIdentifier);
$this->xml->appendChild($this->xml->createElement('Datasets'));
$dataset = Dataset::where('publish_id', '=', $dataId)->firstOrFail();
if (is_null($dataset)) {
throw new OaiModelException('Dataset is not available for registering DOI!', OaiModelError::NORECORDSMATCH);
}
$dataset->fetchValues();
$xmlModel = new \App\Library\Xml\XmlModel();
$xmlModel->setModel($dataset);
$xmlModel->excludeEmptyFields();
$cache = ($dataset->xmlCache) ? $dataset->xmlCache : new \App\Models\XmlCache();
$xmlModel->setXmlCache($cache);
$domNode = $xmlModel->getDomDocument()->getElementsByTagName('Rdr_Dataset')->item(0);
$this->addAlternateLandingPageAttribute($domNode, $dataset->publish_id);
$node = $this->xml->importNode($domNode, true);
$this->addSpecInformation($node, 'data-type:' . $dataset->type);
$this->xml->documentElement->appendChild($node);
$xmlMeta = $this->proc->transformToXML($this->xml);
// Log::alert($xmlMeta);
//create doiValue and correspunfing landingpage of tehtys
$doiValue = $prefix . '/tethys.' . $dataset->publish_id;
// $appUrl = config('app.url');
// $landingPageUrl = $base_domain . "/dataset/" . $dataset->publish_id;
$landingPageUrl = 'https://doi.' . get_domain($base_domain) . "/" . $prefix . "/tethys." . $dataset->publish_id;
$response = $this->doiClient->registerDoi($doiValue, $xmlMeta, $landingPageUrl);
// if operation successful, store dataste identifier
if ($response->getStatusCode() == 201) {
$doi = new DatasetIdentifier();
$doi['value'] = $doiValue; //$landingPageUrl;
$doi['dataset_id'] = $dataset->id;
$doi['type'] = "doi";
$doi['status'] = "findable";
if ($doi->save()) {
// touch unnecessary, save() also updates datasat modified date
// $doi->touch();
$dataset = Dataset::where('publish_id', '=', $dataId)->firstOrFail();
// add to solr
try {
$service = new SolariumAdapter("solr", config('solarium'));
$service->addDatasetsToIndex($dataset);
} catch (Exception $e) {
$this->error(__METHOD__ . ': ' . 'Indexing document ' . $dataset->id . ' failed: ' . $e->getMessage());
}
return redirect()
->route('publish.workflow.editor.index')
->with('flash_message', 'You have successfully created a DOI for the dataset!');
}
} else {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
// $this->log($message, 'err');
throw new GeneralException($message);
}
}
/**
* Add the landingpage attribute to Rdr_Dataset XML output.
*
* @param \DOMNode $document Rdr_Dataset XML serialisation
* @param string $docid Id of the dataset
* @return void
*/
private function addAlternateLandingPageAttribute(\DOMNode $document, $dataid)
{
$base_domain = config('tethys.base_domain');
$url ='https://' . get_domain($base_domain) . "/dataset/" . $dataid;
$owner = $document->ownerDocument;
$attr = $owner->createAttribute('landingpage');
$attr->appendChild($owner->createTextNode($url));
$document->appendChild($attr);
}
/**
* Load an xslt stylesheet.
*
* @return void
*/
private function loadStyleSheet($stylesheet)
{
$this->xslt = new \DomDocument('1.0', 'UTF-8');
$this->xslt->load($stylesheet);
$this->proc->importStyleSheet($this->xslt);
if (isset($_SERVER['HTTP_HOST'])) {
$this->proc->setParameter('', 'host', $_SERVER['HTTP_HOST']);
}
//$this->proc->setParameter('', 'server', $this->getRequest()->getBaseUrl());
}
private function addSpecInformation(\DOMNode $document, $information)
{
$setSpecAttribute = $this->xml->createAttribute('Value');
$setSpecAttributeValue = $this->xml->createTextNode($information);
$setSpecAttribute->appendChild($setSpecAttributeValue);
$setSpecElement = $this->xml->createElement('SetSpec');
//$setSpecElement =new \DOMElement("SetSpec");
$setSpecElement->appendChild($setSpecAttribute);
$document->appendChild($setSpecElement);
}
} }

View file

@ -22,7 +22,6 @@ use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Illuminate\Support\Str;
class IndexController extends Controller class IndexController extends Controller
{ {
@ -61,8 +60,7 @@ class IndexController extends Controller
->pluck('help_text', 'metadata_element'); ->pluck('help_text', 'metadata_element');
$projects = Project::pluck('label', 'id'); $projects = Project::pluck('label', 'id');
// $relatedIdentifierTypes = ["doi", "handle", "isbn", "issn", "url", "urn"]; $relatedIdentifierTypes = ["doi", "handle", "isbn", "issn", "url", "urn"];
$relatedIdentifierTypes = ["DOI", "Handle", "ISBN", "ISSN", "URL", "URN"];
$relatedIdentifierTypes = array_combine($relatedIdentifierTypes, $relatedIdentifierTypes); $relatedIdentifierTypes = array_combine($relatedIdentifierTypes, $relatedIdentifierTypes);
$relationTypes = ["IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues", $relationTypes = ["IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues",
@ -78,7 +76,6 @@ class IndexController extends Controller
$page = Page::query()->where('page_slug', 'terms-and-conditions')->firstOrFail(); $page = Page::query()->where('page_slug', 'terms-and-conditions')->firstOrFail();
$nameTypes = Config::get('enums.name_types');
$contributorTypes = Config::get('enums.contributor_types'); $contributorTypes = Config::get('enums.contributor_types');
//$relationTypes = array('updates' => 'updates', 'updated-by' => 'updated-by', 'other' => 'other'); //$relationTypes = array('updates' => 'updates', 'updated-by' => 'updated-by', 'other' => 'other');
@ -94,7 +91,6 @@ class IndexController extends Controller
'titleTypes', 'titleTypes',
'keywordTypes', 'keywordTypes',
'descriptionTypes', 'descriptionTypes',
'nameTypes',
'contributorTypes', 'contributorTypes',
'page' 'page'
) )
@ -344,8 +340,7 @@ class IndexController extends Controller
$file = $uploadedFile['file']; $file = $uploadedFile['file'];
$label = urldecode($uploadedFile['label']); $label = urldecode($uploadedFile['label']);
$sorting = $uploadedFile['sorting']; $sorting = $uploadedFile['sorting'];
// $fileName = "file-" . time() . '.' . $file->getClientOriginalExtension(); $fileName = "file-" . time() . '.' . $file->getClientOriginalExtension();
$fileName = "file-" . Str::uuid()->toString() . '.' . $file->getClientOriginalExtension();
$mimeType = $file->getMimeType(); $mimeType = $file->getMimeType();
$datasetFolder = 'files/' . $dataset->id; $datasetFolder = 'files/' . $dataset->id;
$path = $file->storeAs($datasetFolder, $fileName); $path = $file->storeAs($datasetFolder, $fileName);
@ -383,7 +378,7 @@ class IndexController extends Controller
} else { } else {
$dataPerson = new Person($person); $dataPerson = new Person($person);
$dataPerson->status = true; $dataPerson->status = true;
// $dataPerson->name_type = "Personal"; $dataPerson->name_type = "Personal";
$dataset->persons()->save($dataPerson, $pivot_data); $dataset->persons()->save($dataPerson, $pivot_data);
} }
} }
@ -480,13 +475,8 @@ class IndexController extends Controller
//save keywords //save keywords
if (isset($data['keywords'])) { if (isset($data['keywords'])) {
foreach ($request->get('keywords') as $key => $keyword) { foreach ($request->get('keywords') as $key => $keyword) {
// $dataKeyword = new Subject($keyword); $dataKeyword = new Subject($keyword);
// $dataset->subjects()->save($dataKeyword); $dataset->subjects()->save($dataKeyword);
$keyword = Subject::firstOrCreate(
['value' => $keyword['value'], 'language' => $keyword['language']],
$keyword
);
$dataset->subjects()->attach($keyword);
} }
} }

View file

@ -82,7 +82,7 @@ class ReviewController extends Controller
$fieldval = $fieldValue->{$property_name}; $fieldval = $fieldValue->{$property_name};
$value = $value . $fieldName . ": " . $fieldval . "; "; $value = $value . $fieldName . ": " . $fieldval . "; ";
} }
} elseif ($fieldValue instanceof \Illuminate\Support\Carbon) { } elseif ($fieldValue instanceof \Carbon\Carbon) {
$value = $value . " Year " . $fieldValue->year; $value = $value . " Year " . $fieldValue->year;
$value = $value . " Month " . $fieldValue->month; $value = $value . " Month " . $fieldValue->month;
$value = $value . " Day " . $fieldValue->day; $value = $value . " Day " . $fieldValue->day;

View file

@ -47,7 +47,7 @@ class SubmitController extends Controller
'released', 'editor_accepted', 'approved', 'reviewed', 'rejected_editor', 'rejected_reviewer']) 'released', 'editor_accepted', 'approved', 'reviewed', 'rejected_editor', 'rejected_reviewer'])
->where('account_id', $user_id) ->where('account_id', $user_id)
->with('user:id,login') ->with('user:id,login')
->orderByDesc('server_date_modified') ->orderBy('server_date_modified', 'desc')
->get(); ->get();
return View::make('workflow.submitter.index', [ return View::make('workflow.submitter.index', [
'datasets' => $myDatasets, 'datasets' => $myDatasets,
@ -78,7 +78,6 @@ class SubmitController extends Controller
->pluck('part1', 'part1'); ->pluck('part1', 'part1');
$contributorTypes = Config::get('enums.contributor_types'); $contributorTypes = Config::get('enums.contributor_types');
$nameTypes = Config::get('enums.name_types');
$messages = DB::table('messages') $messages = DB::table('messages')
->pluck('help_text', 'metadata_element'); ->pluck('help_text', 'metadata_element');
@ -105,7 +104,7 @@ class SubmitController extends Controller
$keywordTypes = ['uncontrolled' => 'uncontrolled', 'swd' => 'swd']; $keywordTypes = ['uncontrolled' => 'uncontrolled', 'swd' => 'swd'];
$referenceTypes = ["DOI", "Handle", "ISBN", "ISSN", "URL", "URN"]; $referenceTypes = ["rdr-id", "doi", "handle", "isbn", "issn", "url", "urn"];
$referenceTypes = array_combine($referenceTypes, $referenceTypes); $referenceTypes = array_combine($referenceTypes, $referenceTypes);
$relationTypes = ["IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues", $relationTypes = ["IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues",
@ -119,7 +118,6 @@ class SubmitController extends Controller
'titleTypes', 'titleTypes',
'descriptionTypes', 'descriptionTypes',
'contributorTypes', 'contributorTypes',
'nameTypes',
'languages', 'languages',
'messages', 'messages',
'projects', 'projects',
@ -220,7 +218,7 @@ class SubmitController extends Controller
} else { } else {
$dataPerson = new Person($person); $dataPerson = new Person($person);
$dataPerson->status = true; $dataPerson->status = true;
// $dataPerson->name_type = "Organizational"; $dataPerson->name_type = "Organizational";
$dataset->persons()->save($dataPerson, $pivot_data); $dataset->persons()->save($dataPerson, $pivot_data);
} }
$index++; $index++;
@ -243,7 +241,7 @@ class SubmitController extends Controller
} else { } else {
$dataPerson = new Person($person); $dataPerson = new Person($person);
$dataPerson->status = true; $dataPerson->status = true;
// $dataPerson->name_type = "Organizational"; $dataPerson->name_type = "Organizational";
$dataset->persons()->save($dataPerson, $pivot_data); $dataset->persons()->save($dataPerson, $pivot_data);
} }
$index++; $index++;
@ -317,19 +315,14 @@ class SubmitController extends Controller
foreach ($keywords as $key => $formKeyword) { foreach ($keywords as $key => $formKeyword) {
if (isset($formKeyword['id'])) { if (isset($formKeyword['id'])) {
$subject = Subject::findOrFail($formKeyword['id']); $subject = Subject::findOrFail($formKeyword['id']);
// $subject->value = $formKeyword['value']; $subject->value = $formKeyword['value'];
// $subject->type = $formKeyword['type']; $subject->type = $formKeyword['type'];
// if ($subject->isDirty()) { if ($subject->isDirty()) {
// $subject->save(); $subject->save();
// } }
} else { } else {
// $subject = new Subject($formKeyword); $subject = new Subject($formKeyword);
// $dataset->subjects()->save($subject); $dataset->subjects()->save($subject);
$keyword = Subject::firstOrCreate(
['value' => $formKeyword['value'], 'language' => $formKeyword['language']],
$formKeyword
);
$dataset->subjects()->attach($keyword);
} }
} }
} }

View file

@ -2,13 +2,11 @@
namespace App\Http\Controllers\Settings\Access; namespace App\Http\Controllers\Settings\Access;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Mail\NewUser;
use App\Models\Role; use App\Models\Role;
use App\Models\User; use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Auth;
class UserController extends Controller class UserController extends Controller
{ {
@ -30,7 +28,7 @@ class UserController extends Controller
//} //}
$users = User::with('roles') $users = User::with('roles')
->orderByDesc('id') ->orderBy('id', 'DESC')
->paginate(5); ->paginate(5);
return view('settings.access.user.user', compact('users')) return view('settings.access.user.user', compact('users'))
->with('i', ($request->input('page', 1) - 1) * 5); ->with('i', ($request->input('page', 1) - 1) * 5);
@ -83,18 +81,6 @@ class UserController extends Controller
} }
} }
// inform main admin about new user
$adminUser = User::where('email', config('mail.mailadmin'))->first();
if ($adminUser) {
// Mail::to("receiver@example.com")->send(new DemoEmail($objDemo));
$details = [
'title' => 'New user ',
'admin_name' => $adminUser->login,
'email' => $user->email,
];
Mail::to($adminUser->email)->send(new NewUser($details));
}
return redirect() return redirect()
->route('access.user.index') ->route('access.user.index')
->with('success', 'User has been created successfully'); ->with('success', 'User has been created successfully');
@ -163,7 +149,7 @@ class UserController extends Controller
$errors = new \Illuminate\Support\MessageBag(); $errors = new \Illuminate\Support\MessageBag();
if (array_key_exists('current_password', $input)) { if (array_key_exists('current_password', $input)) {
// if user is not admin he must enter old_password if a new password is defined // if user is not admin he must enter old_password if a new password is defined
if (!Auth::user()->hasRole('Administrator') && $input['current_password'] == null && $input['password'] != null) { if (!Auth::user()->hasRole('Administrator') && $input['current_password'] == null && $input['password'] != null) {
//ModelState.AddModelError("OldPassword", Resources.User_Edit_OldPasswordEmpty); //ModelState.AddModelError("OldPassword", Resources.User_Edit_OldPasswordEmpty);
//$flash_message = 'Current password should not be empty.'; //$flash_message = 'Current password should not be empty.';
@ -172,6 +158,7 @@ class UserController extends Controller
$valid = false; $valid = false;
} }
if ($input['current_password'] != null && $this->validateUser($user->id, $input['current_password']) == false) { if ($input['current_password'] != null && $this->validateUser($user->id, $input['current_password']) == false) {
//$flash_message = 'Password does not match the current password.'; //$flash_message = 'Password does not match the current password.';
$errors->add('your_custom_error', 'Password does not match the current password.'); $errors->add('your_custom_error', 'Password does not match the current password.');
@ -179,6 +166,8 @@ class UserController extends Controller
} }
} }
//$input = $request->only(['login', 'email', 'password']); //Retreive the name, email and password fields //$input = $request->only(['login', 'email', 'password']); //Retreive the name, email and password fields
if ($valid == true) { if ($valid == true) {
$user->login = $input['login']; $user->login = $input['login'];
@ -186,7 +175,7 @@ class UserController extends Controller
if ($input['password']) { if ($input['password']) {
$user->password = Hash::make($input['password']); $user->password = Hash::make($input['password']);
} }
$user->save(); $user->save();
$roles = $request['roles']; //Retreive all roles $roles = $request['roles']; //Retreive all roles
@ -205,8 +194,8 @@ class UserController extends Controller
// ->with('flash_message', 'User successfully edited.'); // ->with('flash_message', 'User successfully edited.');
} }
return back() return back()
->withInput($input) ->withInput($input)
->withErrors($errors); ->withErrors($errors);
} }
/** /**

View file

@ -32,7 +32,7 @@ class LicenseController extends Controller
//$languages = Language::where('active', true)->pluck('part2_t'); //$languages = Language::where('active', true)->pluck('part2_t');
$languages = DB::table('languages') $languages = DB::table('languages')
->where('active', true) ->where('active', true)
->pluck('part1', 'part1'); ->pluck('part2_t', 'part2_t');
return view('settings.license.edit', compact('license', 'languages')); return view('settings.license.edit', compact('license', 'languages'));
} }

View file

@ -37,9 +37,8 @@ class Kernel extends HttpKernel
], ],
'api' => [ 'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:60,1',
'throttle:api', 'bindings',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
], ],
]; ];
@ -54,12 +53,10 @@ class Kernel extends HttpKernel
//'auth' => 'App\Http\Middleware\Authenticate', //'auth' => 'App\Http\Middleware\Authenticate',
'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
// 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// 'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class, // 'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
// 'perm' => \App\Http\Middleware\PermissionMiddleware::class, // 'perm' => \App\Http\Middleware\PermissionMiddleware::class,

View file

@ -11,6 +11,6 @@ class EncryptCookies extends BaseEncrypter
* @var array * @var array
*/ */
protected $except = [ protected $except = [
'XDEBUG_SESSION' //
]; ];
} }

View file

@ -3,10 +3,10 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use Closure; use Closure;
use Illuminate\Support\Facades\Session; use Session;
use Illuminate\Support\Facades\App; use App;
// use Illuminate\Support\Facades\Config; use Config;
// use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Mcamara\LaravelLocalization\LanguageNegotiator; use Mcamara\LaravelLocalization\LanguageNegotiator;
class LocaleSessionRedirect extends LaravelLocalizationMiddlewareBase class LocaleSessionRedirect extends LaravelLocalizationMiddlewareBase

View file

@ -1,7 +1,6 @@
<?php <?php
namespace App\Http\Middleware; namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure; use Closure;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@ -15,17 +14,10 @@ class RedirectIfAuthenticated
* @param \Closure $next * @param \Closure $next
* @return mixed * @return mixed
*/ */
public function handle($request, Closure $next, $guards = [null]) public function handle($request, Closure $next, $guard = null)
{ {
$guards = empty($guards) ? [null] : $guards; if (Auth::guard($guard)->check()) {
return redirect('/home');
// if (Auth::guard($guard)->check()) {
// return redirect('/home');
// }
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
} }
return $next($request); return $next($request);

View file

@ -19,7 +19,6 @@ class TrimStrings extends BaseTrimmer
* @var array * @var array
*/ */
protected $except = [ protected $except = [
'current_password',
'password', 'password',
'password_confirmation', 'password_confirmation',
]; ];

View file

@ -1,29 +0,0 @@
<?php
namespace App\Http\Middleware;
// use Fideloper\Proxy\TrustProxies as Middleware
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array<int, string>|string|null
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}

View file

@ -11,6 +11,6 @@ class VerifyCsrfToken extends Middleware
* @var array * @var array
*/ */
protected $except = [ protected $except = [
'oai*', //
]; ];
} }

View file

@ -27,13 +27,8 @@ class CollectionRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'name' => [ 'name' => 'required|max:255',
'required', 'role_id' => 'required',
'max:255',
],
'role_id' => [
'required',
],
]; ];
} }
} }

View file

@ -24,13 +24,8 @@ class DocumentRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'type' => [ 'type' => 'required|min:3',
'required', 'server_state' => 'required',
'min:3',
],
'server_state' => [
'required',
],
// 'author' => 'required|min:4', // 'author' => 'required|min:4',
// 'stock' => 'required|integer', // 'stock' => 'required|integer',
// 'year' => 'required|integer|min:4' // 'year' => 'required|integer|min:4'

View file

@ -24,40 +24,15 @@ class LicenseRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'desc_text' => [ 'desc_text' => 'max:4000',
'max:4000', 'language' => 'max:3',
], 'link_licence' => 'required|url:max:255',
'language' => [ 'link_logo' => 'url|max:255',
'max:3', 'mime_type' => 'max:30',
], 'name_long' => 'required|min:5|max:255',
'link_licence' => [ 'sort_order' => 'required|integer',
'required', 'active' => 'required|boolean',
'url:max:255', 'pod_allowed' => 'required|boolean'
],
'link_logo' => [
'url',
'max:255',
],
'mime_type' => [
'max:30',
],
'name_long' => [
'required',
'min:5',
'max:255',
],
'sort_order' => [
'required',
'integer',
],
'active' => [
'required',
'boolean',
],
'pod_allowed' => [
'required',
'boolean',
],
]; ];
} }
} }

View file

@ -28,10 +28,7 @@ class UpdatePageRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'en_title' => [ 'en_title' => 'required|max:191'
'required',
'max:191',
],
// 'description_en' => 'required' // 'description_en' => 'required'
]; ];
} }

View file

@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class PeminjamanRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
];
}
}

View file

@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class PeriodeRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'days' => 'required|integer'
];
}
}

View file

@ -24,45 +24,17 @@ class CreatePersonRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'academic_title' => [ 'academic_title' => 'nullable|min:2|max:255',
'nullable', 'last_name' => 'required|min:3|max:255|unique_with:persons,first_name,date_of_birth',
'min:2', 'first_name' => 'required|min:3|max:255',
'max:255', 'email' => 'required|email|max:50|unique:persons,email',
],
'last_name' => [
'required',
'min:3',
'max:255',
'unique_with:persons,first_name,date_of_birth',
],
'first_name' => [
'required',
'min:3',
'max:255',
],
'email' => [
'required',
'email',
'max:50',
'unique:persons,email',
],
// 'email' => [ // 'email' => [
// 'required', 'email', 'max:100', // 'required', 'email', 'max:100',
// Rule::unique('persons')->ignore($user->id), // Rule::unique('persons')->ignore($user->id),
// ], // ],
'identifier_orcid' => [ 'identifier_orcid' => 'nullable|min:19|max:50',
'nullable', 'status' => 'required|boolean',
'min:19', 'date_of_birth' => 'nullable|date'
'max:50',
],
'status' => [
'required',
'boolean',
],
'date_of_birth' => [
'nullable',
'date',
],
]; ];
} }
} }

View file

@ -26,45 +26,17 @@ class EditPersonRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'academic_title' => [ 'academic_title' => 'nullable|min:2|max:255',
'nullable', 'last_name' => 'required|min:3|max:255|unique_with:persons,first_name,date_of_birth',
'min:2', 'first_name' => 'required|min:3|max:255',
'max:255', 'email' => 'required|email|max:50|unique:persons,email',
],
'last_name' => [
'required',
'min:3',
'max:255',
'unique_with:persons,first_name,date_of_birth',
],
'first_name' => [
'required',
'min:3',
'max:255',
],
'email' => [
'required',
'email',
'max:50',
'unique:persons,email',
],
// 'email' => [ // 'email' => [
// 'required', 'email', 'max:100', // 'required', 'email', 'max:100',
// Rule::unique('persons')->ignore($user->id), // Rule::unique('persons')->ignore($user->id),
// ], // ],
'identifier_orcid' => [ 'identifier_orcid' => 'nullable|min:19|max:50',
'nullable', 'status' => 'required|boolean',
'min:19', 'date_of_birth' => 'nullable|date'
'max:50',
],
'status' => [
'required',
'boolean',
],
'date_of_birth' => [
'nullable',
'date',
],
]; ];
} }
} }

View file

@ -24,19 +24,9 @@ class ProjectRequest extends Request
{ {
return [ return [
'name' => [ 'name' => 'required|min:3|max:255',
'required', 'label' => 'required|min:3|max:20',
'min:3', 'description' => 'required'
'max:255',
],
'label' => [
'required',
'min:3',
'max:20',
],
'description' => [
'required',
],
]; ];
} }
} }

View file

@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class ShelfRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'shelf' => 'required'
];
}
}

View file

@ -1,16 +0,0 @@
<?php
/**
* Created by Visual Studio Code.
* User: kaiarn
* Date: 19.02.2021
*/
namespace App\Interfaces;
interface DoiInterface
{
public function registerDoi($doiValue, $xmlMeta, $landingPageUrl);
public function getMetadataForDoi($identifier);
public function updateMetadataForDoi($identifier, $new_meta);
public function deleteMetadataForDoi($identifier);
// public function deleteDoiByCurlRequest($doi);
}

View file

@ -4,12 +4,10 @@ namespace App\Library\Search;
//use App\Library\Util\SolrSearchQuery; //use App\Library\Util\SolrSearchQuery;
use App\Library\Search\SearchResult; use App\Library\Search\SearchResult;
use App\Library\Search\SolariumDocument;
use App\Library\Util\SearchParameter; use App\Library\Util\SearchParameter;
use App\Models\Dataset;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Solarium\Core\Client\Adapter\Curl; use App\Library\Search\SolariumDocument;
use Symfony\Component\EventDispatcher\EventDispatcher; use App\Models\Dataset;
use \Solarium\QueryType\Select\Query\Query; use \Solarium\QueryType\Select\Query\Query;
class SolariumAdapter class SolariumAdapter
@ -24,11 +22,7 @@ class SolariumAdapter
public function __construct($serviceName, $options) public function __construct($serviceName, $options)
{ {
$this->options = $options; $this->options = $options;
$adapter = new Curl(); $this->client = new \Solarium\Client($options);
$dispatcher = new EventDispatcher();
$this->client = new \Solarium\Client($adapter, $dispatcher, $options);
// $this->client = new \Solarium\Client($options);
// ensure service is basically available // ensure service is basically available
$ping = $this->client->createPing(); $ping = $this->client->createPing();
@ -67,30 +61,25 @@ class SolariumAdapter
$slices = array_chunk($datasets, 16); $slices = array_chunk($datasets, 16);
// update documents of every chunk in a separate request // update documents of every chunk in a separate request
foreach ($slices as $slice) { foreach ($slices as $slice) {
// get an update query instance
$update = $this->client->createUpdate(); $update = $this->client->createUpdate();
$updateDocs = array_map(function ($rdrDoc) use ($builder, $update) { $updateDocs = array_map(function ($rdrDoc) use ($builder, $update) {
$solarium_document = $update->createDocument(); $solarium_document = $update->createDocument();
return $builder->toSolrUpdateDocument($rdrDoc, $solarium_document); return $builder->toSolrUpdateDocument($rdrDoc, $solarium_document);
}, $slice); }, $slice);
// add the documents and a commit command to the update query // adding the document to the update query
$update->addDocuments($updateDocs); $update->addDocuments($updateDocs);
$update->addCommit(); // Then commit the update:
$update->addCommit();
// this executes the query and returns the result $result = $this->client->update($update);
$result = $this->client->update($update);
echo '<b>Update query executed</b><br/>';
echo 'Query status: ' . $result->getStatus() . '<br/>';
echo 'Query time: ' . $result->getQueryTime();
//$this->execute($update, 'failed updating slice of documents'); //$this->execute($update, 'failed updating slice of documents');
} }
// finally commit all updates // finally commit all updates
// $update = $this->client->createUpdate(); // $update = $this->client->createUpdate();
// $update->addCommit(); // $update->addCommit();
// $this->execute($update, 'failed committing update of documents'); // $this->execute($update, 'failed committing update of documents');
@ -106,7 +95,7 @@ class SolariumAdapter
foreach ($documents as $document) { foreach ($documents as $document) {
if (!($document instanceof Dataset)) { if (!($document instanceof Dataset)) {
throw new \InvalidArgumentException("invalid dataset in provided set"); throw new InvalidArgumentException("invalid dataset in provided set");
} }
} }
@ -207,7 +196,7 @@ class SolariumAdapter
$result = null; $result = null;
try { try {
$result = $this->client->execute($query); $result = $this->client->execute($query);
} catch (\Solarium\Exception\HttpException$e) { } catch (\Solarium\Exception\HttpException $e) {
sprintf('%s: %d %s', $actionText, $e->getCode(), $e->getStatusMessage()); sprintf('%s: %d %s', $actionText, $e->getCode(), $e->getStatusMessage());
} finally { } finally {
return $result; return $result;
@ -218,7 +207,7 @@ class SolariumAdapter
// } // }
} }
protected function processQuery(\Solarium\QueryType\Select\Query\Query$query): SearchResult protected function processQuery(\Solarium\QueryType\Select\Query\Query $query): SearchResult
{ {
// send search query to service // send search query to service
$request = $this->execute($query, 'failed querying search engine'); $request = $this->execute($query, 'failed querying search engine');

View file

@ -3,7 +3,7 @@
namespace App\Library\Search; namespace App\Library\Search;
use App\Models\Dataset; use App\Models\Dataset;
use Solarium\QueryType\Update\Query\Document; use Solarium\QueryType\Update\Query\Document\Document;
use Solarium\QueryType\Update\Query\Document\DocumentInterface; use Solarium\QueryType\Update\Query\Document\DocumentInterface;
class SolariumDocument extends SolrDocumentXslt class SolariumDocument extends SolrDocumentXslt
@ -13,10 +13,10 @@ class SolariumDocument extends SolrDocumentXslt
parent::__construct($options); parent::__construct($options);
} }
public function toSolrUpdateDocument(Dataset $rdrDataset, $solrDoc) public function toSolrUpdateDocument(Dataset $rdrDataset, DocumentInterface $solrDoc)
{ {
if (!($solrDoc instanceof Document)) { if (!($solrDoc instanceof Document)) {
throw new \Exception(get_class($solrDoc) . 'provided Solr document must be instance of Solarium Update Document'); throw new \Exception('provided Solr document must be instance of Solarium Update Document');
} }
// convert Opus document to Solr XML document for supporting custom transformations // convert Opus document to Solr XML document for supporting custom transformations

View file

@ -1,7 +1,7 @@
<?php <?php
namespace App\Library\Util; namespace App\Library\Util;
use Illuminate\Support\Carbon; use Carbon\Carbon;
/** /**
* Describes local document as a match in context of a related search query. * Describes local document as a match in context of a related search query.

View file

@ -7,7 +7,6 @@ use App\Models\License;
use App\Models\Person; use App\Models\Person;
use App\Models\File; use App\Models\File;
use App\Models\Coverage; use App\Models\Coverage;
use App\Models\DatasetIdentifier;
use App\Models\Subject; use App\Models\Subject;
use App\Models\DatasetReference; use App\Models\DatasetReference;
@ -34,7 +33,7 @@ trait DatasetExtension
), ),
'TitleAbstract' => array( 'TitleAbstract' => array(
'model' => Description::class, 'model' => Description::class,
'options' => array('type' => ['Abstract', 'Translated']), 'options' => array('type' => ['Abstract']),
'fetch' => 'eager' 'fetch' => 'eager'
), ),
'TitleAbstractAdditional' => array( 'TitleAbstractAdditional' => array(
@ -51,7 +50,7 @@ trait DatasetExtension
'PersonAuthor' => array( 'PersonAuthor' => array(
'model' => Person::class, 'model' => Person::class,
'through' => 'link_documents_persons', 'through' => 'link_documents_persons',
'pivot' => array('role' => 'author', 'sort_order' => 'sort_order'), 'pivot' => array('role' => 'author'),
//'sort_order' => array('sort_order' => 'ASC'), // <-- We need a sorted authors list. //'sort_order' => array('sort_order' => 'ASC'), // <-- We need a sorted authors list.
//'sort_field' => 'SortOrder', //'sort_field' => 'SortOrder',
'relation' => 'persons', 'relation' => 'persons',
@ -60,7 +59,7 @@ trait DatasetExtension
'PersonContributor' => array( 'PersonContributor' => array(
'model' => Person::class, 'model' => Person::class,
'through' => 'link_documents_persons', 'through' => 'link_documents_persons',
'pivot' => array('role' => 'contributor', 'contributor_type' => 'contributor_type', 'sort_order' => 'sort_order'), 'pivot' => array('role' => 'contributor', 'contributor_type' => 'contributor_type'),
// 'sort_order' => array('sort_order' => 'ASC'), // <-- We need a sorted authors list. // 'sort_order' => array('sort_order' => 'ASC'), // <-- We need a sorted authors list.
//'sort_field' => 'SortOrder', //'sort_field' => 'SortOrder',
'relation' => 'persons', 'relation' => 'persons',
@ -71,14 +70,8 @@ trait DatasetExtension
'relation' => 'references', 'relation' => 'references',
'fetch' => 'eager' 'fetch' => 'eager'
), ),
'Identifier' => array(
'model' => DatasetIdentifier::class,
'relation' => 'identifier',
'fetch' => 'eager'
),
'Subject' => array( 'Subject' => array(
'model' => Subject::class, 'model' => Subject::class,
'through' => 'link_dataset_subjects',
'relation' => 'subjects', 'relation' => 'subjects',
'fetch' => 'eager' 'fetch' => 'eager'
), ),
@ -234,7 +227,7 @@ trait DatasetExtension
if (true === empty($fieldval)) { if (true === empty($fieldval)) {
$fieldval = null; $fieldval = null;
} else { } else {
$fieldval = new \Illuminate\Support\Carbon($fieldval); $fieldval = new \Carbon\Carbon($fieldval);
} }
} }
@ -298,13 +291,12 @@ trait DatasetExtension
//$through = $this->externalFields[$fieldname]['through']; //$through = $this->externalFields[$fieldname]['through'];
$rows = $this->{$relation}()->wherePivot('role', $pivotValue)->get(); $rows = $this->{$relation}()->wherePivot('role', $pivotValue)->get();
//$rows = $this->{$relation}()->get(); //$rows = $this->{$relation}()->get();
//$rows = $this->belongsToMany($modelclass, $through, 'document_id') //$rows = $this->belongsToMany($modelclass, $through, 'document_id')->wherePivot('role', $pivotValue)->get();
//->wherePivot('role', $pivotValue)->get();
} }
} else { } else {
$rows = $select->whereHas('dataset', function ($q) use ($datasetId) { $rows = $select->whereHas('dataset', function ($q) use ($datasetId) {
$q->where('id', $datasetId); $q->where('id', $datasetId);
})->orderBy('id')->get(); })->get();
} }
foreach ($rows as $row) { foreach ($rows as $row) {

View file

@ -157,7 +157,7 @@ class Strategy
if ($value instanceof \Illuminate\Database\Eloquent\Model) { if ($value instanceof \Illuminate\Database\Eloquent\Model) {
$this->_mapModelAttributes($value, $dom, $childNode); $this->_mapModelAttributes($value, $dom, $childNode);
} elseif ($value instanceof \Illuminate\Support\Carbon) { } elseif ($value instanceof \Carbon\Carbon) {
$this->_mapDateAttributes($value, $dom, $childNode); $this->_mapDateAttributes($value, $dom, $childNode);
} elseif (is_array($value)) { } elseif (is_array($value)) {
$this->_mapArrayAttributes($value, $dom, $childNode); $this->_mapArrayAttributes($value, $dom, $childNode);
@ -181,7 +181,7 @@ class Strategy
return $dom->createElement($fieldName); return $dom->createElement($fieldName);
} }
protected function _mapDateAttributes(\Illuminate\Support\Carbon $model, DOMDocument $dom, \DOMNode $rootNode) protected function _mapDateAttributes(\Carbon\Carbon $model, DOMDocument $dom, \DOMNode $rootNode)
{ {
$rootNode->setAttribute("Year", $model->year); $rootNode->setAttribute("Year", $model->year);
$rootNode->setAttribute("Month", $model->month); $rootNode->setAttribute("Month", $model->month);

View file

@ -2,11 +2,12 @@
namespace App\Listeners; namespace App\Listeners;
// use Illuminate\Queue\InteractsWithQueue;
// use Illuminate\Contracts\Queue\ShouldQueue;
use App\Events\Dataset\DatasetUpdated as DatasetUpdatedEvent; use App\Events\Dataset\DatasetUpdated as DatasetUpdatedEvent;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use App\Library\Search\SolariumAdapter; use App\Library\Search\SolariumAdapter;
use \Exception;
class DatasetUpdated class DatasetUpdated
{ {
@ -58,8 +59,10 @@ class DatasetUpdated
// Opus_Search_Service::selectIndexingService('onDocumentChange') // Opus_Search_Service::selectIndexingService('onDocumentChange')
$service = new SolariumAdapter("solr", config('solarium')); $service = new SolariumAdapter("solr", config('solarium'));
$service->addDatasetsToIndex($dataset); $service->addDatasetsToIndex($dataset);
} catch (Exception $e) { } catch (Opus_Search_Exception $e) {
Log::warning(__METHOD__ . ': ' . 'Indexing document ' . $dataset->id . ' failed: ' . $e->getMessage()); Log::debug(__METHOD__ . ': ' . 'Indexing document ' . $documentId . ' failed: ' . $e->getMessage());
} catch (InvalidArgumentException $e) {
Log::warning(__METHOD__ . ': ' . $e->getMessage());
} }
} }
} }

View file

@ -1,36 +0,0 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class NewUser extends Mailable
{
use Queueable, SerializesModels;
public $details;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this
->subject('Mail from www.tethys.at')
->view('emails.newUserEmail');
}
}

View file

@ -3,13 +3,10 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use App\Models\Dataset; use App\Models\Dataset;
class Collection extends Model class Collection extends Model
{ {
use HasFactory;
public $timestamps = false; public $timestamps = false;
//mass assignable //mass assignable
protected $fillable = [ protected $fillable = [

View file

@ -3,14 +3,11 @@
namespace App\Models; namespace App\Models;
use App\Models\Collection; use App\Models\Collection;
// use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class CollectionRole extends Model class CollectionRole extends Model
{ {
use HasFactory;
protected $table = 'collections_roles'; protected $table = 'collections_roles';
public $timestamps = false; public $timestamps = false;
protected $fillable = [ protected $fillable = [

View file

@ -2,13 +2,10 @@
namespace App\Models; namespace App\Models;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use DateTimeInterface;
class Coverage extends Model class Coverage extends Model
{ {
use HasFactory;
protected $table = 'coverage'; protected $table = 'coverage';
public $timestamps = true; public $timestamps = true;
protected $dateFormat = 'Y-m-d H:i:s'; protected $dateFormat = 'Y-m-d H:i:s';
@ -50,16 +47,6 @@ class Coverage extends Model
{ {
$this->attributes['time_max'] = empty($date) ? null : \Illuminate\Support\Carbon::createFromFormat('Y-m-d H:i:s', $date); $this->attributes['time_max'] = empty($date) ? null : \Illuminate\Support\Carbon::createFromFormat('Y-m-d H:i:s', $date);
} }
/**
* Prepare a date for array / JSON serialization.
*
* @param \DateTimeInterface $date
* @return string
*/
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
/** /**
* relationship to dataset * relationship to dataset

View file

@ -2,7 +2,6 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use App\Library\Xml\DatasetExtension; use App\Library\Xml\DatasetExtension;
use App\Models\Collection; use App\Models\Collection;
use App\Models\Coverage; use App\Models\Coverage;
@ -14,14 +13,13 @@ use App\Models\Project;
use App\Models\Title; use App\Models\Title;
use App\Models\User; use App\Models\User;
use App\Models\XmlCache; use App\Models\XmlCache;
use App\Models\DatasetIdentifier; use Carbon\Carbon;
use Illuminate\Support\Carbon;
// use App\Models\GeolocationBox; // use App\Models\GeolocationBox;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Dataset extends Model class Dataset extends Model
{ {
use DatasetExtension, HasFactory; use DatasetExtension;
protected $table = 'documents'; protected $table = 'documents';
//public $timestamps = false; //default true //public $timestamps = false; //default true
@ -98,14 +96,6 @@ class Dataset extends Model
return $this->belongsTo(Project::class, 'project_id', 'id'); return $this->belongsTo(Project::class, 'project_id', 'id');
} }
/**
* Get the doi indentifier that owns the dataset.
*/
public function identifier()
{
return $this->hasOne(DatasetIdentifier::class, 'dataset_id', 'id');
}
/** /**
* Get the account that the dataset belongs to * Get the account that the dataset belongs to
*/ */
@ -162,8 +152,7 @@ class Dataset extends Model
return $this return $this
->persons() ->persons()
//->belongsToMany(Person::class, 'link_documents_persons', 'document_id', 'person_id') //->belongsToMany(Person::class, 'link_documents_persons', 'document_id', 'person_id')
->wherePivot('role', 'author') ->wherePivot('role', 'author');
->orderBy('link_documents_persons.sort_order');
} }
/** /**
@ -188,8 +177,7 @@ class Dataset extends Model
return $this return $this
->persons() ->persons()
// ->belongsToMany(Person::class, 'link_documents_persons', 'document_id', 'person_id') // ->belongsToMany(Person::class, 'link_documents_persons', 'document_id', 'person_id')
->wherePivot('role', 'contributor') ->wherePivot('role', 'contributor');
->orderBy('link_documents_persons.sort_order');
} }
#endregion #endregion
@ -261,13 +249,9 @@ class Dataset extends Model
return $this->hasMany(\App\Models\DatasetReference::class, 'document_id', 'id'); return $this->hasMany(\App\Models\DatasetReference::class, 'document_id', 'id');
} }
// public function subjects()
// {
// return $this->hasMany(\App\Models\Subject::class, 'document_id', 'id');
// }
public function subjects() public function subjects()
{ {
return $this->belongsToMany(\App\Models\Subject::class, 'link_dataset_subjects', 'document_id', 'subject_id'); return $this->hasMany(\App\Models\Subject::class, 'document_id', 'id');
} }
/** /**
@ -301,7 +285,7 @@ class Dataset extends Model
$result = Dataset::select('server_date_published') $result = Dataset::select('server_date_published')
->where('server_date_published', '<>', null) ->where('server_date_published', '<>', null)
->where('server_state', 'published') ->where('server_state', 'published')
->orderBy('server_date_published') ->orderBy('server_date_published', 'asc')
->first(); ->first();
//->server_date_published; //->server_date_published;
return $result; return $result;

View file

@ -1,26 +0,0 @@
<?php
namespace App\Models;
use App\Models\Dataset;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class DatasetIdentifier extends Model
{
use HasFactory;
protected $table = 'dataset_identifiers';
protected $guarded = array();
public $timestamps = true;
// See the array called $touches? This is where you put all the relationships you want to get
// updated_at as soon as this Model is updated
protected $touches = ['dataset'];
/**
* The dataset that belong to the DocumentIdentifier.
*/
public function dataset()
{
return $this->belongsTo(Dataset::class, 'dataset_id', 'id');
}
}

View file

@ -4,11 +4,9 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class DatasetReference extends Model class DatasetReference extends Model
{ {
use HasFactory;
protected $table = 'document_references'; protected $table = 'document_references';
public $timestamps = false; public $timestamps = false;

View file

@ -3,11 +3,9 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Description extends Model class Description extends Model
{ {
use HasFactory;
protected $table = 'dataset_abstracts'; protected $table = 'dataset_abstracts';
public $timestamps = false; public $timestamps = false;

View file

@ -5,11 +5,9 @@ namespace App\Models;
use App\Models\Dataset; use App\Models\Dataset;
use App\Models\HashValue; use App\Models\HashValue;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class File extends Model class File extends Model
{ {
use HasFactory;
protected $table = 'document_files'; protected $table = 'document_files';
public $timestamps = true; public $timestamps = true;

View file

@ -3,11 +3,9 @@ namespace App\Models;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class GeolocationBox extends Model class GeolocationBox extends Model
{ {
use HasFactory;
protected $table = 'geolocation_box'; protected $table = 'geolocation_box';
public $timestamps = false; public $timestamps = false;

View file

@ -4,11 +4,9 @@ namespace App\Models;
use App\Models\File; use App\Models\File;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class HashValue extends Model class HashValue extends Model
{ {
use HasFactory;
protected $table = 'file_hashvalues'; protected $table = 'file_hashvalues';
public $timestamps = false; public $timestamps = false;

View file

@ -2,11 +2,10 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Language extends Model class Language extends Model
{ {
use HasFactory;
//protected $table = 'languages'; //protected $table = 'languages';
public $timestamps = false; public $timestamps = false;

View file

@ -3,17 +3,14 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class License extends Model class License extends Model
{ {
use HasFactory;
protected $table = 'document_licences'; protected $table = 'document_licences';
public $timestamps = false; public $timestamps = false;
protected $fillable = [ protected $fillable = [
'name_long', 'name_long',
'name',
'language', 'language',
'link_licence', 'link_licence',
'link_logo', 'link_logo',
@ -22,15 +19,10 @@ class License extends Model
'comment_internal', 'comment_internal',
'mime_type', 'mime_type',
'sort_order', 'sort_order',
'language',
'active', 'active',
'pod_allowed' 'pod_allowed'
]; ];
// See the array called $touches? This is where you put all the relationships you want to get
// updated_at as soon as this Model is updated
protected $touches = ['datasets'];
public function datasets() public function datasets()
{ {
return $this->belongsToMany(Dataset::class, 'link_documents_licences', 'licence_id', 'document_id'); return $this->belongsToMany(Dataset::class, 'link_documents_licences', 'licence_id', 'document_id');

View file

@ -3,9 +3,8 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Message extends Model class Message extends Model
{ {
use HasFactory; //
} }

View file

@ -2,11 +2,10 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class MimeType extends Model class MimeType extends Model
{ {
use HasFactory;
protected $table = 'mime_types'; protected $table = 'mime_types';
// for using $input = $request->all(); // for using $input = $request->all();

View file

@ -2,8 +2,6 @@
namespace App\Models\Oai; namespace App\Models\Oai;
use App\Exceptions\OaiModelException;
class OaiModelError class OaiModelError
{ {
/** /**
@ -37,7 +35,7 @@ class OaiModelError
public static function mapCode($code) public static function mapCode($code)
{ {
if (false === array_key_exists($code, self::$oaiErrorCodes)) { if (false === array_key_exists($code, self::$oaiErrorCodes)) {
throw new OaiModelException("Unknown oai error code $code"); throw new Oai_Model_Exception("Unknown oai error code $code");
} }
return self::$oaiErrorCodes[$code]; return self::$oaiErrorCodes[$code];
} }

View file

@ -8,11 +8,9 @@ use App\Models\User;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract; use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Astrotomic\Translatable\Translatable;// use Dimsav\Translatable\Translatable; use Astrotomic\Translatable\Translatable;// use Dimsav\Translatable\Translatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Page extends Model implements TranslatableContract class Page extends Model implements TranslatableContract
{ {
use HasFactory;
use ModelTrait; use ModelTrait;
use Translatable; // 2. To add translation methods use Translatable; // 2. To add translation methods

View file

@ -3,11 +3,9 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class PageTranslation extends Model class PageTranslation extends Model
{ {
Use HasFactory;
public $timestamps = false; public $timestamps = false;
protected $fillable = ['title', 'description']; protected $fillable = ['title', 'description'];
protected $guarded = ['id']; protected $guarded = ['id'];

View file

@ -1,14 +1,12 @@
<?php <?php
namespace App\Models; namespace App\Models;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Person extends Model class Person extends Model
{ {
use HasFactory;
protected $fillable = [ protected $fillable = [
'academic_title', 'academic_title',
'date_of_birth', 'date_of_birth',
@ -17,13 +15,10 @@ class Person extends Model
'email', 'email',
'identifier_orcid', 'identifier_orcid',
'status', 'status',
'name_type', 'name_type'
]; ];
protected $table = 'persons'; protected $table = 'persons';
public $timestamps = false; public $timestamps = false;
protected $appends = ['full_name']; protected $appends = ['full_name'];
public function documents() public function documents()
@ -44,7 +39,7 @@ class Person extends Model
*/ */
public function getFullNameAttribute() public function getFullNameAttribute()
{ {
return $this->first_name.' '.$this->last_name.' '.$this->date_of_birth; return $this->first_name . " " . $this->last_name . " " . $this->date_of_birth;
} }
public function scopeActive($query) public function scopeActive($query)

View file

@ -3,11 +3,10 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Project extends Model class Project extends Model
{ {
use HasFactory;
//protected $table = 'projects'; //protected $table = 'projects';
// for using $input = $request->all(); // for using $input = $request->all();

View file

@ -3,11 +3,9 @@
namespace App\Models; namespace App\Models;
use Zizaco\Entrust\EntrustRole; use Zizaco\Entrust\EntrustRole;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Role extends EntrustRole class Role extends EntrustRole
{ {
use HasFactory;
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
* *

View file

@ -4,23 +4,16 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Subject extends Model class Subject extends Model
{ {
Use HasFactory; protected $table = 'document_subjects';
// protected $table = 'document_subjects';
protected $table = 'dataset_subjects';
public $timestamps = false; public $timestamps = false;
protected $fillable = ['value', 'type', 'language']; protected $fillable = ['value', 'type', 'language'];
// public function dataset() public function dataset()
// {
// return $this->belongsTo(Dataset::class, 'document_id', 'id');
// }
public function datasets()
{ {
return $this->belongsToMany(Dataset::class, 'link_dataset_subjects', 'subject_id', 'document_id'); return $this->belongsTo(Dataset::class, 'document_id', 'id');
} }
} }

View file

@ -3,11 +3,9 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Title extends Model class Title extends Model
{ {
use HasFactory;
protected $table = 'dataset_titles'; protected $table = 'dataset_titles';
public $timestamps = false; public $timestamps = false;

View file

@ -1,11 +1,9 @@
<?php <?php
namespace App\Models; namespace App\Models;
// use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait; use Zizaco\Entrust\Traits\EntrustUserTrait;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@ -14,7 +12,7 @@ use App\Models\Dataset;
class User extends Authenticatable class User extends Authenticatable
{ {
// use Authenticatable, CanResetPassword, Authorizable; // use Authenticatable, CanResetPassword, Authorizable;
use HasFactory, Notifiable; use Notifiable;
// use HasRoles; // use HasRoles;
use EntrustUserTrait; use EntrustUserTrait;

View file

@ -6,7 +6,6 @@ namespace App\Observers;
use App\Models\Dataset; use App\Models\Dataset;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use App\Library\Search\SolariumAdapter; use App\Library\Search\SolariumAdapter;
use \Exception;
class DatasetObserver class DatasetObserver
{ {
@ -93,8 +92,10 @@ class DatasetObserver
// Opus_Search_Service::selectIndexingService('onDocumentChange') // Opus_Search_Service::selectIndexingService('onDocumentChange')
$service = new SolariumAdapter("solr", config('solarium')); $service = new SolariumAdapter("solr", config('solarium'));
$service->addDatasetsToIndex($dataset); $service->addDatasetsToIndex($dataset);
} catch (Exception $e) { } catch (Opus_Search_Exception $e) {
Log::error(__METHOD__ . ': ' . 'Indexing document ' . $dataset->id . ' failed: ' . $e->getMessage()); Log::debug(__METHOD__ . ': ' . 'Indexing document ' . $datasetId . ' failed: ' . $e->getMessage());
} catch (InvalidArgumentException $e) {
Log::warning(__METHOD__ . ': ' . $e->getMessage());
} }
} }
} }

View file

@ -2,7 +2,7 @@
namespace App\Providers; namespace App\Providers;
// use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider class AuthServiceProvider extends ServiceProvider

View file

@ -1,45 +0,0 @@
<?php
/**
* Visual Studio Code.
* User: kaiarn
* Date: 19.02.21
*/
namespace App\Providers;
use App\Tethys\Utils\DoiClient;
use App\Interfaces\DoiInterface;
use Illuminate\Support\ServiceProvider;
class DoiServiceProvider extends ServiceProvider
{
protected $defer = true;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
$this->app->singleton(\App\Interfaces\DoiInterface::class, function ($app) {
return new DoiClient();
});
}
public function provides()
{
return [DoiClient::class];
}
}

View file

@ -11,8 +11,8 @@ class EventServiceProvider extends ServiceProvider
* @var array * @var array
*/ */
protected $listen = [ protected $listen = [
\App\Events\Event::class => [ 'App\Events\Event' => [
\App\Listeners\EventListener::class, 'App\Listeners\EventListener',
], ],
\App\Events\Dataset\DatasetUpdated::class => [ \App\Events\Dataset\DatasetUpdated::class => [
\App\Listeners\DatasetUpdated::class, \App\Listeners\DatasetUpdated::class,

View file

@ -3,24 +3,12 @@ namespace App\Providers;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
class RouteServiceProvider extends ServiceProvider class RouteServiceProvider extends ServiceProvider
{ {
/**
* The path to the "home" route for your application.
*
* This is used by Laravel authentication to redirect users after login.
*
* @var string
*/
public const HOME = '/settings';
/** /**
* If specified, this namespace is automatically applied to your controller routes. * This namespace is applied to the controller routes in your routes file.
* *
* In addition, it is set as the URL generator's root namespace. * In addition, it is set as the URL generator's root namespace.
* *
@ -36,19 +24,7 @@ class RouteServiceProvider extends ServiceProvider
*/ */
public function boot() public function boot()
{ {
// parent::boot(); parent::boot();
$this->configureRateLimiting();
$this->routes(function () {
// Route::prefix('api')
Route::middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
// //
} }
@ -96,17 +72,4 @@ class RouteServiceProvider extends ServiceProvider
->namespace($this->namespace) ->namespace($this->namespace)
->group(base_path('routes/api.php')); ->group(base_path('routes/api.php'));
} }
/**
* Configure the rate limiters for the application.
*
* @return void
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
}
} }

View file

@ -4,8 +4,6 @@ namespace App\Providers;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Solarium\Client; use Solarium\Client;
use Solarium\Core\Client\Adapter\Curl;
use Symfony\Component\EventDispatcher\EventDispatcher;
class SolariumServiceProvider extends ServiceProvider class SolariumServiceProvider extends ServiceProvider
{ {
@ -20,9 +18,6 @@ class SolariumServiceProvider extends ServiceProvider
public function register() public function register()
{ {
$this->app->bind(Client::class, function ($app) { $this->app->bind(Client::class, function ($app) {
$adapter = new Curl();
$dispatcher = new EventDispatcher();
// $config = config('solarium'); // $config = config('solarium');
$config = array( $config = array(
'endpoint' => array( 'endpoint' => array(
@ -35,7 +30,7 @@ class SolariumServiceProvider extends ServiceProvider
) )
); );
//return new Client($config); //return new Client($config);
return new Client($adapter, $dispatcher, $config); return new Client($config);
//return new Client($app['config']['solarium']); //return new Client($app['config']['solarium']);
}); });
} }

View file

@ -2,7 +2,6 @@
namespace App\Rules; namespace App\Rules;
use Illuminate\Support\Arr;
use Illuminate\Contracts\Validation\Rule; use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
@ -103,7 +102,7 @@ class RdrFilesize implements Rule
private function getSize($attribute, $value) private function getSize($attribute, $value)
{ {
if (is_numeric($value) && $hasNumeric) { if (is_numeric($value) && $hasNumeric) {
return Arr::get($this->data, $attribute); return array_get($this->data, $attribute);
} elseif (is_array($value)) { } elseif (is_array($value)) {
return count($value); return count($value);
} elseif ($value instanceof File) { } elseif ($value instanceof File) {

40
app/Services/Registrar.php Executable file
View file

@ -0,0 +1,40 @@
<?php
namespace App\Services;
use App\Models\User;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
class Registrar implements RegistrarContract
{
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
public function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
public function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}

View file

@ -1,273 +0,0 @@
<?php
namespace App\Tethys\Utils;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Log;
use App\Interfaces\DoiInterface;
class DoiClient implements DoiInterface
{
private $username;
private $password;
private $serviceUrl;
private $prefix;
private $base_domain;
public function __construct()
{
$datacite_environment = config('tethys.datacite_environment');
if ($datacite_environment == "debug") {
$this->username = config('tethys.datacite_test_username');
$this->password = config('tethys.datacite_test_password');
$this->serviceUrl = config('tethys.datacite_test_service_url');
$this->prefix = config('tethys.datacite_test_prefix');
$this->base_domain = config('tethys.test_base_domain');
} elseif ($datacite_environment == "production") {
$this->username = config('tethys.datacite_username');
$this->password = config('tethys.datacite_password');
$this->serviceUrl = config('tethys.datacite_service_url');
$this->prefix = config('tethys.datacite_prefix');
$this->base_domain = config('tethys.base_domain');
}
if (is_null($this->username) || is_null($this->password) || is_null($this->serviceUrl)) {
$message = 'missing configuration settings to properly initialize DOI client';
Log::error($message);
throw new DoiClientException($message);
}
}
/**
* Creates a DOI with the given identifier
*
* @param string $identifier The desired DOI identifier e.g. '10.5072/tethys.999',
* @param $xmlMeta
* @param $landingPageUrl e.g. https://www.tethys.at/dataset/1
*
* @return GuzzleHttp\Psr7\Response The http response in the form of a Guzzle response
*/
public function registerDoi($doiValue, $xmlMeta, $landingPageUrl)
{
// Schritt 1: Metadaten als XML registrieren
// state draft
$response = null;
$url = $this->serviceUrl . '/metadata/' . $doiValue;
try {
$client = new Client([
'auth' => [$this->username, $this->password],
// 'base_uri' => $url,
'verify' => false,
'headers' => [
'Content-Type' => 'application/xml;charset=UTF-8',
],
// 'body' => $xmlMeta,
]);
// Provide the body as a string.
$response = $client->request('PUT', $url, [
'body' => $xmlMeta,
]);
} catch (\Exception $e) {
$message = 'request to ' . $url . ' failed with ' . $e->getMessage();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
// Response Codes
// 201 Created: operation successful
// 401 Unauthorised: no login
// 403 Forbidden: login problem, quota exceeded
// 415 Wrong Content Type : Not including content type in the header.
// 422 Unprocessable Entity : invalid XML
if ($response->getStatusCode() != 201) {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
// Schritt 2: Register the DOI name
// DOI und URL der Frontdoor des zugehörigen Dokuments übergeben: state findable
$url = $this->serviceUrl . '/doi/' . $doiValue;
try {
$client = new Client(
[
'auth' => [$this->username, $this->password],
'verify' => false,
'headers' => [
'Content-Type' => 'text/plain;charset=UTF-8',
],
]
);
$data = "doi=$doiValue\nurl=" . $landingPageUrl;
// $client->setRawData($data, 'text/plain;charset=UTF-8');
$response = $client->request('PUT', $url, [
'body' => $data,
'headers' => [
'Content-Type' => 'text/plain;charset=UTF-8',
],
]);
} catch (\Exception $e) {
$message = 'request to ' . $url . ' failed with ' . $e->getMessage();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
// Response Codes
// 201 Created: operation successful
// 400 Bad Request: request body must be exactly two lines: DOI and URL; wrong domain, wrong prefix;
// 401 Unauthorised: no login
// 403 Forbidden: login problem, quota exceeded
// 412 Precondition failed: metadata must be uploaded first.
// $this->log('DataCite response status code (expected 201): ' . $response->getStatus());
// $this->log('DataCite response body: ' . $response->getBody());
if ($response->getStatusCode() != 201) {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
return $response;
}
/* Response Status Codes
* 200 OK: operation successful
* 204 No Content : DOI is known to DataCite Metadata Store (MDS), but is not minted (or not resolvable e.g. due
* to handle's latency)
* 401 Unauthorized: no login
* 403 Login problem or dataset belongs to another party
* 404 Not Found: DOI does not exist in our database (e.g. registration pending)
*
* @param $doiValue
* @param $landingPageURL
*
* @return bool Methode liefert true, wenn die DOI erfolgreich registiert wurde und die Prüfung positiv ausfällt.
*
* @throws ClientException
*
*/
public function checkDoi($doiValue, $landingPageURL): bool
{
$response = null;
$url = $this->serviceUrl . '/doi/' . $doiValue;
try {
$client = new Client([
'base_uri' => $this->serviceUrl . '/doi/' . $doiValue,
'auth' => [$this->username, $this->password],
'verify' => false,
]);
$response = $client->request('GET');
} catch (\Exception $e) {
$message = 'request to ' . $url . ' failed with ' . $e->getMessage();
Log::error($message);
// throw new \Exception($message);
return false;
}
$statusCode = $response->getStatusCode();
// in $body steht die URL zur Frontdoor, die mit der DOI verknüpft wurde
$body = $response->getBody();
// $this->log('DataCite response status code (expected 200): ' . $statusCode);
// $this->log('DataCite response body (expected ' . $landingPageURL . '): ' . $body);
return ($statusCode == 200 && $landingPageURL == $body);
}
public function getMetadataForDoi($doiValue)
{
$response = null;
$url = $this->serviceUrl . '/metadata/' . $doiValue;
try {
$client = new Client([
'auth' => [$this->username, $this->password],
'base_uri' => $url,
'verify' => false,
]);
$response = $client->request('GET');
} catch (\Exception $e) {
$message = 'request to ' . $url . ' failed with ' . $e->getMessage();
throw new DoiClientException($message);
}
// Response Codes
// 200 OK: operation successful;
// 204 No Content: the DOI is known to DataCite Metadata Store (MDS), but no metadata have been registered;
// 401 Unauthorised: no login
// 403 Forbidden: permission problem or dataset belongs to another party;
// 404 Not Found: DOI does not exist in our database.
// 422 Unprocessable Entity Metadata failed validation against the DataCite Schema.
if ($response->getStatusCode() != 200) {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
return $response;
}
public function updateMetadataForDoi($doiValue, $newMeta)
{
$response = null;
$url = $this->serviceUrl . '/metadata/' . $doiValue;
try {
$client = new Client([
'auth' => [$this->username, $this->password],
// 'base_uri' => $url,
'verify' => false,
'headers' => [
'Content-Type' => 'application/xml;charset=UTF-8',
],
// 'body' => $xmlMeta,
]);
// Provide the body as a string.
$response = $client->request('PUT', $url, [
'body' => $newMeta,
]);
} catch (\Exception $e) {
$message = 'request to ' . $url . ' failed with ' . $e->getMessage();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
// Response Codes
// 201 Created: operation successful
// 401 Unauthorised: no login
// 403 Forbidden: login problem, quota exceeded
// 415 Wrong Content Type : Not including content type in the header.
// 422 Unprocessable Entity : invalid XML
if ($response->getStatusCode() != 201) {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
// $this->log($message, 'err');
throw new DoiClientException($message);
}
return $response;
}
/**
* Markiert den Datensatz zur übergebenen DOI als inaktiv - Status registered (not findable)
*
* @param $doiValue
*
* @throws ClientException
*/
public function deleteMetadataForDoi($doiValue)
{
$response = null;
$url = $this->serviceUrl . '/metadata/' . $doiValue;
try {
$client = new Client([
'base_uri' => $url,
'auth' => [$this->username, $this->password],
'verify' => false,
]);
$response = $client->request('DELETE');
} catch (\Exception $e) {
$message = 'request to ' . $url . ' failed with ' . $e->getMessage();
Log::error($message, 'err');
throw new DoiClientException($message);
}
// $this->log('DataCite response status code (expected 200): ' . $response->getStatus());
if ($response->getStatusCode() != 200) {
$message = 'unexpected DataCite MDS response code ' . $response->getStatusCode();
Log::error($message, 'err');
throw new DoiClientException($message);
}
}
}

View file

@ -1,7 +0,0 @@
<?php
namespace App\Tethys\Utils;
class DoiClientException extends \Exception
{
}

View file

@ -1,47 +1,42 @@
{ {
"name": "laravel/laravel", "name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.", "description": "The Laravel Framework.",
"keywords": [ "keywords": [
"framework", "framework",
"laravel" "laravel"
], ],
"license": "MIT", "license": "MIT",
"type": "project",
"require": { "require": {
"php": "^7.3||^8.0", "php": "^7.2",
"arifhp86/laravel-clear-expired-cache-file": "^0.0.4", "arifhp86/laravel-clear-expired-cache-file": "^0.0.4",
"astrotomic/laravel-translatable": "^11.1", "astrotomic/laravel-translatable": "^11.1",
"diglactic/laravel-breadcrumbs": "7.2", "davejamesmiller/laravel-breadcrumbs": "5.x",
"doctrine/dbal": "^3.3",
"felixkiss/uniquewith-validator": "^3.1", "felixkiss/uniquewith-validator": "^3.1",
"gghughunishvili/entrust": "4.0", "fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^7.2", "laravel/framework": "^6.2",
"laravel/framework": "^8.75", "laravel/tinker": "^2.0",
"laravel/tinker": "^2.5",
"laravel/ui": "^3.4",
"laravelcollective/html": "^6.1", "laravelcollective/html": "^6.1",
"mcamara/laravel-localization": "^1.3", "mcamara/laravel-localization": "^1.3",
"solarium/solarium": "^6.1", "solarium/solarium": "^3.8",
"yajra/laravel-datatables-oracle": "^9.0" "yajra/laravel-datatables-oracle": "^9.0",
"halpdesk/zizaco-entrust-laravel-6.0": "^1.9"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9.5.10" "fzaninotto/faker": "^1.8",
"phpunit/phpunit": "^7.0"
}, },
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": { "autoload": {
"files": [ "files": [
"app/Helpers/utils.php", "app/Helpers/utils.php",
"app/Constants/constants.php" "app/Constants/constants.php"
], ],
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": { "psr-4": {
"App\\": "app/", "App\\": "app/"
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
} }
}, },
"autoload-dev": { "autoload-dev": {
@ -50,10 +45,6 @@
} }
}, },
"scripts": { "scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-install-cmd": [ "post-install-cmd": [
"@php artisan clear-compiled" "@php artisan clear-compiled"
], ],
@ -61,12 +52,12 @@
"php -r \"copy('.env.example', '.env');\"", "php -r \"copy('.env.example', '.env');\"",
"@php artisan key:generate --ansi" "@php artisan key:generate --ansi"
], ],
"test": "php vendor/phpunit/phpunit/phpunit --testsuite Feature" "post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
]
}, },
"config": { "config": {
"platform": {
"php": "7.3"
},
"preferred-install": "dist", "preferred-install": "dist",
"sort-packages": true, "sort-packages": true,
"optimize-autoloader": true "optimize-autoloader": true

5242
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Name | Application Name
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -11,13 +11,13 @@ return [
| framework needs to place the application's name in a notification or | framework needs to place the application's name in a notification or
| any other location as required by the application or its packages. | any other location as required by the application or its packages.
| |
*/ */
'workspacePath' => storage_path() . DIRECTORY_SEPARATOR . "workspace", 'workspacePath' => storage_path() . DIRECTORY_SEPARATOR . "workspace",
'name' => env('APP_NAME', 'Tethys'), 'name' => env('APP_NAME', 'App'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Environment | Application Environment
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -26,10 +26,10 @@ return [
| running in. This may determine how you prefer to configure various | running in. This may determine how you prefer to configure various
| services your application utilizes. Set this in your ".env" file. | services your application utilizes. Set this in your ".env" file.
| |
*/ */
'env' => env('APP_ENV', 'production'), 'env' => env('APP_ENV', 'production'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Debug Mode | Application Debug Mode
@ -39,7 +39,7 @@ return [
| stack traces will be shown on every error that occurs within your | stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown. | application. If disabled, a simple generic error page is shown.
| |
*/ */
'debug' => env('APP_DEBUG', false), 'debug' => env('APP_DEBUG', false),
@ -52,10 +52,9 @@ return [
| the Artisan command line tool. You should set this to the root of | the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks. | your application so that it is used when running Artisan tasks.
| |
*/ */
'url' => env('APP_URL', 'http://localhost'), 'url' => env('APP_URL', 'http://localhost'),
'alias_url' => env('ALIAS_URL'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -66,7 +65,7 @@ return [
| will be used by the PHP date and date-time functions. We have gone | will be used by the PHP date and date-time functions. We have gone
| 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 // https://www.php.net/manual/en/timezones.europe.php
'timezone' => 'Europe/Vienna', 'timezone' => 'Europe/Vienna',
@ -79,7 +78,7 @@ return [
| by the translation service provider. You are free to set this value | by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application. | to any of the locales which will be supported by the application.
| |
*/ */
'locale' => env('APP_LOCALE', 'en'), 'locale' => env('APP_LOCALE', 'en'),
@ -92,7 +91,7 @@ return [
| is not available. You may change the value to correspond to any of | is not available. You may change the value to correspond to any of
| the language folders that are provided through your application. | the language folders that are provided through your application.
| |
*/ */
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
@ -105,7 +104,7 @@ return [
| to a random, 32 character string, otherwise these encrypted strings | to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application! | will not be safe. Please do this before deploying an application!
| |
*/ */
'key' => env('APP_KEY', 'SomeRandomString'), 'key' => env('APP_KEY', 'SomeRandomString'),
@ -122,7 +121,7 @@ return [
| |
| Available Settings: "single", "daily", "syslog", "errorlog" | Available Settings: "single", "daily", "syslog", "errorlog"
| |
*/ */
// 'log' => 'single', // 'log' => 'single',
// //debug, info, notice, warning, error, critical, alert, emergency. // //debug, info, notice, warning, error, critical, alert, emergency.
@ -137,7 +136,7 @@ return [
| request to your application. Feel free to add your own services to | request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications. | this array to grant expanded functionality to your applications.
| |
*/ */
'providers' => [ 'providers' => [
@ -168,7 +167,7 @@ return [
'Illuminate\Validation\ValidationServiceProvider', 'Illuminate\Validation\ValidationServiceProvider',
'Illuminate\View\ViewServiceProvider', 'Illuminate\View\ViewServiceProvider',
/* /*
* Package Service Providers... * Package Service Providers...
*/ */
// 'Illuminate\Html\HtmlServiceProvider', // 'Illuminate\Html\HtmlServiceProvider',
@ -179,15 +178,15 @@ return [
/* /*
* Application Service Providers... * Application Service Providers...
*/ */
App\Providers\AppServiceProvider::class, 'App\Providers\AppServiceProvider',
App\Providers\AuthServiceProvider::class, App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class, // App\Providers\BroadcastServiceProvider::class,
App\Providers\ConfigServiceProvider::class, 'App\Providers\ConfigServiceProvider',
App\Providers\EventServiceProvider::class, 'App\Providers\EventServiceProvider',
App\Providers\RouteServiceProvider::class, 'App\Providers\RouteServiceProvider',
// List off others providers... // List off others providers...
App\Providers\SolariumServiceProvider::class, App\Providers\SolariumServiceProvider::class,
App\Providers\DoiServiceProvider::class,
], ],
@ -200,56 +199,55 @@ return [
| is started. However, feel free to register as many as you wish as | is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance. | the aliases are "lazy" loaded so they don't hinder performance.
| |
*/ */
'aliases' => [ 'aliases' => [
'App' => Illuminate\Support\Facades\App::class, 'App' => 'Illuminate\Support\Facades\App',
'Arr' => Illuminate\Support\Arr::class, 'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => Illuminate\Support\Facades\Auth::class, 'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class, 'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => 'Illuminate\Support\Facades\Bus', 'Bus' => 'Illuminate\Support\Facades\Bus',
'Cache' => 'Illuminate\Support\Facades\Cache', 'Cache' => 'Illuminate\Support\Facades\Cache',
'Config' => 'Illuminate\Support\Facades\Config', 'Config' => 'Illuminate\Support\Facades\Config',
'Cookie' => 'Illuminate\Support\Facades\Cookie', 'Cookie' => 'Illuminate\Support\Facades\Cookie',
'Crypt' => 'Illuminate\Support\Facades\Crypt', 'Crypt' => 'Illuminate\Support\Facades\Crypt',
'DB' => 'Illuminate\Support\Facades\DB', 'DB' => 'Illuminate\Support\Facades\DB',
'Eloquent' => 'Illuminate\Database\Eloquent\Model', 'Eloquent' => 'Illuminate\Database\Eloquent\Model',
'Event' => 'Illuminate\Support\Facades\Event', 'Event' => 'Illuminate\Support\Facades\Event',
'File' => 'Illuminate\Support\Facades\File', 'File' => 'Illuminate\Support\Facades\File',
'Gate' => Illuminate\Support\Facades\Gate::class, 'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class, 'Hash' => 'Illuminate\Support\Facades\Hash',
'Input' => Illuminate\Support\Facades\Input::class, 'Input' => 'Illuminate\Support\Facades\Input',
// 'Inspiring' => 'Illuminate\Foundation\Inspiring', // 'Inspiring' => 'Illuminate\Foundation\Inspiring',
'Lang' => Illuminate\Support\Facades\Lang::class, 'Lang' => 'Illuminate\Support\Facades\Lang',
'Log' => Illuminate\Support\Facades\Log::class, 'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => 'Illuminate\Support\Facades\Mail', 'Mail' => 'Illuminate\Support\Facades\Mail',
'Notification' => Illuminate\Support\Facades\Notification::class, 'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => 'Illuminate\Support\Facades\Password', 'Password' => 'Illuminate\Support\Facades\Password',
'Queue' => 'Illuminate\Support\Facades\Queue', 'Queue' => 'Illuminate\Support\Facades\Queue',
'Redirect' => 'Illuminate\Support\Facades\Redirect', 'Redirect' => 'Illuminate\Support\Facades\Redirect',
'Redis' => 'Illuminate\Support\Facades\Redis', 'Redis' => 'Illuminate\Support\Facades\Redis',
'Request' => 'Illuminate\Support\Facades\Request', 'Request' => 'Illuminate\Support\Facades\Request',
'Response' => 'Illuminate\Support\Facades\Response', 'Response' => 'Illuminate\Support\Facades\Response',
'Route' => 'Illuminate\Support\Facades\Route', 'Route' => 'Illuminate\Support\Facades\Route',
'Schema' => 'Illuminate\Support\Facades\Schema', 'Schema' => 'Illuminate\Support\Facades\Schema',
'Session' => 'Illuminate\Support\Facades\Session', 'Session' => 'Illuminate\Support\Facades\Session',
'Storage' => 'Illuminate\Support\Facades\Storage', 'Storage' => 'Illuminate\Support\Facades\Storage',
'URL' => 'Illuminate\Support\Facades\URL', 'URL' => 'Illuminate\Support\Facades\URL',
'Validator' => 'Illuminate\Support\Facades\Validator', 'Validator' => 'Illuminate\Support\Facades\Validator',
'View' => 'Illuminate\Support\Facades\View', 'View' => 'Illuminate\Support\Facades\View',
/* /*
* Third Party Aliases * Third Party Aliases
*/ */
// 'Form' => 'Illuminate\Html\FormFacade', // 'Form' => 'Illuminate\Html\FormFacade',
// 'HTML' => 'Illuminate\Html\HtmlFacade', // 'HTML' => 'Illuminate\Html\HtmlFacade',
// 'Form' => 'Collective\Html\FormFacade', // 'Form' => 'Collective\Html\FormFacade',
// 'Html' => 'Collective\Html\HtmlFacade', // 'Html' => 'Collective\Html\HtmlFacade',
// 'Breadcrumbs' => DaveJamesMiller\Breadcrumbs\Facades\Breadcrumbs::class, 'Breadcrumbs' => DaveJamesMiller\Breadcrumbs\Facades\Breadcrumbs::class,
'Breadcrumbs' => Diglactic\Breadcrumbs\Breadcrumbs::class,
//'Datatables' => Yajra\DataTables\Facades\DataTables::class //'Datatables' => Yajra\DataTables\Facades\DataTables::class
], ],

View file

@ -63,9 +63,9 @@ return [
*/ */
// Manager // Manager
'manager-class' => Diglactic\Breadcrumbs\Manager::class, 'manager-class' => DaveJamesMiller\Breadcrumbs\BreadcrumbsManager::class,
// Generator // Generator
'generator-class' => Diglactic\Breadcrumbs\Generator::class, 'generator-class' => DaveJamesMiller\Breadcrumbs\BreadcrumbsGenerator::class,
]; ];

View file

@ -45,18 +45,6 @@ return [
*/ */
'connections' => [ 'connections' => [
'testing' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', 'pgsql'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'prefix' => '',
'schema' => env('DB_SCHEMA', 'public'),
'sslmode' => 'prefer',
],
'sqlite' => [ 'sqlite' => [
'driver' => 'sqlite', 'driver' => 'sqlite',
@ -68,9 +56,9 @@ return [
'driver' => 'pgsql', 'driver' => 'pgsql',
'host' => env('DB_HOST', 'pgsql'), 'host' => env('DB_HOST', 'pgsql'),
'port' => env('DB_PORT', '5432'), 'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE'), 'database' => env('DB_DATABASE', 'repository'),
'username' => env('DB_USERNAME'), 'username' => env('DB_USERNAME', 'opus4admin'),
'password' => env('DB_PASSWORD'), 'password' => env('DB_PASSWORD', 'opus4admin007'),
'charset' => 'utf8', 'charset' => 'utf8',
'prefix' => '', 'prefix' => '',
'schema' => env('DB_SCHEMA', 'public'), 'schema' => env('DB_SCHEMA', 'public'),
@ -80,10 +68,10 @@ return [
'sqlsrv' => [ 'sqlsrv' => [
'driver' => 'sqlsrv', 'driver' => 'sqlsrv',
'host' => env('DB_HOST'), 'host' => env('DB_HOST', 'zontik\test'),
'database' => env('DB_DATABASE'), 'database' => env('DB_DATABASE', 'opusdb'),
'username' => env('DB_USERNAME'), 'username' => env('DB_USERNAME', 'opus4'),
'password' => env('DB_PASSWORD'), 'password' => env('DB_PASSWORD', 'opus4007'),
'prefix' => '', 'prefix' => '',
], ],

View file

@ -19,7 +19,7 @@ return [
| the role if it is in a different namespace. | the role if it is in a different namespace.
| |
*/ */
'role' => App\Models\Role::class, 'role' => 'App\Models\Role',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -51,7 +51,7 @@ return [
| Update the User if it is in a different namespace. | Update the User if it is in a different namespace.
| |
*/ */
'user' => App\Models\User::class, 'user' => 'App\Models\User',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -95,7 +95,7 @@ return [
| Update the permission if it is in a different namespace. | Update the permission if it is in a different namespace.
| |
*/ */
'permission' => App\Models\Permission::class, 'permission' => 'App\Models\Permission',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View file

@ -26,10 +26,6 @@ return [
"png" => "image/png", "png" => "image/png",
"jpg|jpeg|jpe" => "image/jpeg", "jpg|jpeg|jpe" => "image/jpeg",
], ],
'name_types' => [
'personal' => 'Personal',
'organizational' => 'Organizational',
],
'contributor_types' => [ 'contributor_types' => [
'contact_person' => 'ContactPerson', 'contact_person' => 'ContactPerson',
'data_collector' => 'DataCollector', 'data_collector' => 'DataCollector',

View file

@ -54,10 +54,7 @@ return [
| |
*/ */
'from' => [ 'from' => ['address' => env('MAIL_FROM', null), 'name' => 'Hasan Doha'],
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -70,7 +67,7 @@ return [
| |
*/ */
'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'encryption' => 'tls',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -98,8 +95,6 @@ return [
'password' => env('MAIL_PASSWORD'), 'password' => env('MAIL_PASSWORD'),
'mailadmin' => env('MAIL_ADMIN', 'hello@example.com'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Sendmail System Path | Sendmail System Path
@ -111,48 +106,19 @@ return [
| |
*/ */
// 'sendmail' => '/usr/sbin/sendmail -bs', 'sendmail' => '/usr/sbin/sendmail -bs',
'sendmail' => 'sendmail -bs',
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
/*
|--------------------------------------------------------------------------
| Markdown Mail Settings
|--------------------------------------------------------------------------
|
| If you are using Markdown based email rendering, you may configure your
| theme and component paths here, allowing you to customize the design
| of the emails. Or, you may simply stick with the Laravel defaults!
|
*/
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Log Channel | Mail "Pretend"
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| If you are using the "log" driver, you may specify the logging channel | When this option is enabled, e-mail will not actually be sent over the
| if you prefer to keep mail messages separate from other log entries | web and will instead be written to your application's logs files so
| for simpler reading. Otherwise, the default channel will be used. | you may inspect the message. This is great for local development.
| |
*/ */
'log_channel' => env('MAIL_LOG_CHANNEL'), 'pretend' => false,
]; ];

View file

@ -16,7 +16,7 @@ return [
'workspacePath' => public_path() . DIRECTORY_SEPARATOR . "workspace", 'workspacePath' => public_path() . DIRECTORY_SEPARATOR . "workspace",
'max' => [ 'max' => [
'listidentifiers' => 100, 'listidentifiers' => 15,
'listrecords' => 100 'listrecords' => 15
], ],
]; ];

View file

@ -30,7 +30,7 @@ return [
], ],
'stripe' => [ 'stripe' => [
'model' => App\Models\User::class, 'model' => 'App\Models\User',
'secret' => '', 'secret' => '',
], ],

View file

@ -71,7 +71,7 @@ return [
| |
*/ */
'connection' => env('SESSION_CONNECTION', null), 'connection' => null,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -86,21 +86,6 @@ return [
'table' => 'sessions', 'table' => 'sessions',
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| While using one of the framework's cache driven session backends you may
| list a cache store that should be used for these sessions. This value
| must match with one of the application's configured cache "stores".
|
| Affects: "apc", "dynamodb", "memcached", "redis"
|
*/
'store' => env('SESSION_STORE', null),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Sweeping Lottery | Session Sweeping Lottery
@ -162,23 +147,8 @@ return [
| to the server if the browser has a HTTPS connection. This will keep | to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you if it can not be done securely. | the cookie from being sent to you if it can not be done securely.
| |
*/ */
'secure' => env('SESSION_SECURE_COOKIE', false), 'secure' => false,
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" since this is a secure default value.
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => 'lax',
]; ];

View file

@ -5,7 +5,7 @@ return [
'repository' => [ 'repository' => [
'host' => env('SOLR_HOST', 'repository.geologie.ac.at'), 'host' => env('SOLR_HOST', 'repository.geologie.ac.at'),
'port' => env('SOLR_PORT', '8983'), 'port' => env('SOLR_PORT', '8983'),
'path' => env('SOLR_PATH', '/'), 'path' => env('SOLR_PATH', '/solr/'),
'core' => env('SOLR_CORE', 'rdr_data') 'core' => env('SOLR_CORE', 'rdr_data')
] ]
], ],

View file

@ -1,23 +0,0 @@
<?php
return [
'repoid' => 3156505,
'ccBaseuri' => 'https://creativecommons.org/licenses/|/3.0/',
'datacite_environment' => env('DATACITE_ENVIRONMENT'),
'datacite_username' => env('DATACITE_USERNAME'),
'datacite_test_username' => env('DATACITE_TEST_USERNAME'),
'datacite_password' => env('DATACITE_PASSWORD'),
'datacite_test_password' => env('DATACITE_TEST_PASSWORD'),
'datacite_prefix' => env('DATACITE_PREFIX'),
'datacite_test_prefix' => env('DATACITE_TEST_PREFIX'),
'datacite_service_url' => env('DATACITE_SERVICE_URL'),
'datacite_test_service_url' => env('DATACITE_TEST_SERVICE_URL'),
'base_domain' => env('BASE_DOMAIN', 'https://tethys.at'),
'test_base_domain' => env('TEST_BASE_DOMAIN'),
'frontend' => env('FRONTEND', 'https://tethys.at')
];

Some files were not shown because too many files have changed in this diff Show more