Skip to content

Commit

Permalink
Réécrit le parsing des URLs (suite à mise à jour d'e-periodica)
Browse files Browse the repository at this point in the history
  • Loading branch information
nchachereau committed Sep 28, 2020
1 parent 87f6a3f commit dee59b9
Showing 1 changed file with 26 additions and 21 deletions.
47 changes: 26 additions & 21 deletions app/Http/Controllers/MainController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public function getSuffix(Request $request)
$url = $request->input('url');
session(['url' => $url]);

$url = urldecode($url);

$example = 'par exemple <a href="' .
route('get_suffix', ['url' => 'https://www.e-periodica.ch/digbib/view?pid=sha-001:1896:14::412#412']) .
'">https://www.e-periodica.ch/digbib/view?pid=sha-001:1896:14::412#412</a> ?';
Expand All @@ -31,16 +33,15 @@ public function getSuffix(Request $request)
)) {
return redirect('/')->with(
'error',
e($url) . ' ne ressemble pas à une URL. ' .
'«'. e($url) . '» ne ressemble pas à une URL. ' .
'Et si vous essayiez avec une numérisation de la FOSC ' .
'sur le site e-periodica, ' . $example
);
}

if (!preg_match(
'/^https?:\/\/www\.e-periodica\.ch/',
$url
)) {
$parts = parse_url($url);

if ($parts['host'] != 'www.e-periodica.ch') {
return redirect('/')->with(
'error',
'L’adresse ' . e($url) . ' n’est pas prise en charge. ' .
Expand All @@ -49,10 +50,7 @@ public function getSuffix(Request $request)
);
}

if (preg_match(
'/^https?:\/\/www\.e-periodica\.ch\/digbib\/(doasearch|hitlist)/',
$url
)) {
if ($parts['path'] == '/digbib/doasearch' || $parts['path'] == '/digbib/hitlist') {
return redirect('/')->with(
'error',
'Malheureusement, la page des résultats de recherche ' .
Expand All @@ -62,29 +60,36 @@ public function getSuffix(Request $request)
);
}

if (preg_match(
'/^https?:\/\/www\.e-periodica\.ch\/digbib\/view\?pid=sha-002/',
$url
)) {
if (!isset($parts['query'])) {
return redirect('/')->with(
'error',
'L’adresse ' . e($url) . ' ne semble pas correspondre à une ' .
'page numérisée de la FOSC. Et si vous essayiez avec ' .
$example
);
}

parse_str($parts['query'], $parameters);

if ($parts['path'] == '/digbib/view' && preg_match('/^sha-002/', $parameters['pid'])) {
return redirect('/')->with(
'error',
'Désolé, les pages de <i>fosc.ch</i> (à partir de 2002) ne sont pas encore prises en charge.'
);
}

if (!preg_match(
'/^https?:\/\/www\.e-periodica\.ch\/digbib\/view\?pid=' .
'sha-00([12]):(\d{4}):\d+(?:::(\d+))?(?:#(\d+))?$/',
$url,
$matches
)
) {
if ($parts['path'] != '/digbib/view' ||
!preg_match(
'/^sha-00([12]):(\d{4}):\d+(?:::(\d+))?$/',
$parameters['pid'],
$matches
)) {
$url = e($url);
return redirect('/')->with('error', "L’adresse $url ne correspond à aucune page connue.");
}

if (isset($matches[3])) {
$suffix = (isset($matches[4])) ? $matches[4] : $matches[3];
$suffix = (isset($parts['fragment'])) ? $parts['fragment'] : $matches[3];
} else {
$suffix = 1;
}
Expand Down

0 comments on commit dee59b9

Please sign in to comment.