diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php index 850e81938770d9c042c71c9a96069d28010364ae..380b4cf745a61a18d21d669602887a05fec1957d 100644 --- a/app/Http/Controllers/LanguageController.php +++ b/app/Http/Controllers/LanguageController.php @@ -143,12 +143,15 @@ class LanguageController extends Controller ->with('email', $email); //Email-Adresse des Benutzers } - public function createSynopticEditPage(Request $request, $exclude = "") + public function createSynopticEditPage(Request $request, $exclude = '', $chosenFile = '') { $languageFolders = scandir($this->languageFilePath); + # Enthält zu jeder Sprache ein Objekt mit allen Daten $languageObjects = []; - $to = []; # Alle vorhandenen Sprachen + + # Alle vorhandenen Sprachen + $to = []; # Dekodieren ausgeschlossener Dateien anhand des URL-Parameters $ex = $this->decodeExcludedFiles($exclude); @@ -159,16 +162,14 @@ class LanguageController extends Controller $languageObjects[$folder] = new LanguageObject($folder, $this->languageFilePath.$folder); } } - + $fileNames = []; # Speichere Daten in LanguageObject, überspringe ausgeschlossene Dateien foreach ($languageObjects as $folder => $languageObject) { $to[] = $folder; $di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($languageObject->filePath)); foreach($di as $filename => $file) { - foreach($ex['files'] as $file) { - if($file === basename($filename)) { - continue 2; - } + if(!$this->endsWith($filename, ".") && !in_array(basename($filename), $fileNames)) { + $fileNames[] = basename($filename); } if(!$this->endsWith($filename, ".")) { $tmp = include $filename; @@ -181,20 +182,37 @@ class LanguageController extends Controller $fn = ""; - # Wähle die erste, unbearbeitete Datei aus - foreach($languageObjects as $folder => $languageObject) { - foreach($languageObject->stringMap as $languageFileName => $languageFile) { - $fn = $languageFileName; - break 2; + # Wähle die erste, unbearbeitete Datei aus, überspringe bereits bearbeitete Dateien + if($chosenFile !== "") { + $fn = $chosenFile; + } else { + foreach($languageObjects as $folder => $languageObject) { + foreach($languageObject->stringMap as $languageFileName => $languageFile) { + foreach($ex['files'] as $file) { + if($file === basename($languageFileName)) { + continue 2; + } + } + $fn = $languageFileName; + break 2; + } } } - $snippets = []; + $changeTime = 0; + $recentlyChangedFiles = []; # Speichere den Inhalt der ausgewählten Datei in allen Sprachen in $snippets ab foreach($languageObjects as $folder => $languageObject) { foreach($languageObject->stringMap as $languageFileName => $languageFile) { if($languageFileName === $fn) { + if($changeTime < filemtime($languageObject->filePath."/".$languageFileName)) { + unset($recentlyChangedFiles); + $changeTime = filemtime($languageObject->filePath."/".$languageFileName); + $recentlyChangedFiles[] = $languageObject->language; + } else if($changeTime === filemtime($languageObject->filePath."/".$languageFileName)) { + $recentlyChangedFiles[] = $languageObject->language; + } foreach($languageFile as $key => $value) { $snippets[$key][$languageObject->language] = $value; } @@ -203,7 +221,7 @@ class LanguageController extends Controller } } - # Fülle $snippets auf mit leeren Einträgen für übrige Sprachen + # Fülle $snippets auf mit leeren Einträgen für die restlichen Sprachen foreach($to as $t) { foreach($snippets as $key => $langArray) { if(!isset($langArray[$t])) { @@ -216,6 +234,8 @@ class LanguageController extends Controller ->with('to', $to) # Alle vorhandenen Sprachen ->with('texts', $snippets) # Array mit Sprachsnippets ->with('filename', $fn) # Name der Datei + ->with('recentlyChangedFiles', $recentlyChangedFiles) + ->with('otherFiles', $fileNames) # Namen der restlichen Sprachdateien ->with('title', trans('titles.languages.edit')); } @@ -233,37 +253,13 @@ class LanguageController extends Controller return $t; } - public function processSynopticPageInput(Request $request, $exclude = "") { + public function processSynopticPageInput(Request $request, $exclude = '', $chosenFile = '') { $filename = $request->input('filename'); # Identifizieren des gedrückten Buttons - if(isset($request['nextpage'])) { - - # Leite weiter zur nächsten Seite - $ex = []; - - if ($exclude !== "") { - try { - $ex = unserialize(base64_decode($exclude)); - } catch (\ErrorException $e) { - $ex = []; - } - - if (!isset($ex["files"])) { - $ex["files"] = []; - } - } - if (!isset($ex["new"])) { - $ex["new"] = 0; - } - $ex['files'][] = basename($filename); - $ex = base64_encode(serialize($ex)); - - return redirect(url('synoptic', ['exclude' => $ex])); - - } elseif(isset($request['download'])) { - # Andernfalls auslesen, zippen und herunterladen der veränderten Dateien + if(isset($request['download'])) { + # Auslesen, zippen und herunterladen der veränderten Dateien $data = []; $new = 0; @@ -348,6 +344,33 @@ class LanguageController extends Controller } catch(ErrorException $e) { echo("Failed to write ".$filename); } + # Andernfalls weiterleiten zur nächsten Seite + } else { + + $ex = []; + + if ($exclude !== "") { + try { + $ex = unserialize(base64_decode($exclude)); + } catch (\ErrorException $e) { + $ex = []; + } + + if (!isset($ex["files"])) { + $ex["files"] = []; + } + } + if (!isset($ex["new"])) { + $ex["new"] = 0; + } + $ex['files'][] = basename($filename); + $ex = base64_encode(serialize($ex)); + + if(isset($request['nextpage'])) { + return redirect(url('synoptic', ['exclude' => $ex])); + } elseif(isset($request['chosenFile'])) { + return redirect(url('synoptic', ['exclude' => $ex, 'chosenFile' => $request['chosenFile']])); + } } } diff --git a/app/MetaGer.php b/app/MetaGer.php index dfe14975f907c4665d1f00ce23b0397b2b877593..0eb5ef9d8a62baeb52beb24bf8779a0e39c90384 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -459,9 +459,9 @@ class MetaGer }else{ $newurl .= "?tag=metager04-21"; } + $result->link = $newurl; + $result->partnershop = true; } - $result->link = $newurl; - $result->partnershop = true; } } return $results; diff --git a/app/Models/LanguageObject.php b/app/Models/LanguageObject.php index bd8c6e49a76bb8764e920eed16e50dfde21c4dfb..0902270a937e3514b1fc488080d0b890db0b0b6c 100644 --- a/app/Models/LanguageObject.php +++ b/app/Models/LanguageObject.php @@ -9,9 +9,10 @@ class LanguageObject { public $language = ""; + # bspw. /home/MetaGer/resources/lang/de public $filePath = ""; - #2D-Array der Form [$filename][$key] + # 2D-Array der Form [$filename][$key] public $stringMap = []; public function __construct($lang, $path) diff --git a/public/js/scriptSubPages.js b/public/js/scriptSubPages.js index c95bece6c2a76e7729867b59605cdb13e5498df7..2c1faffb7500b6189f8763a9104809ebda6b9318 100644 --- a/public/js/scriptSubPages.js +++ b/public/js/scriptSubPages.js @@ -1,4 +1,4 @@ -$(document).ready(function () { + if (localStorage) { var theme = localStorage.getItem('theme'); if (theme != null) { @@ -6,8 +6,7 @@ $(document).ready(function () { localStorage.removeItem('theme'); } else { theme = theme.split(','); - $('#theme').attr('href', '/css/theme.css.php?r=' + theme[0] + '&g=' + theme[1] + '&b=' + theme[2] + '&a=' + theme[3]); + document.getElementById('theme').setAttribute('href', '/css/theme.css.php?r=' + theme[0] + '&g=' + theme[1] + '&b=' + theme[2] + '&a=' + theme[3]); } } } -}); \ No newline at end of file diff --git a/resources/assets/js/scriptStartPage.js b/resources/assets/js/scriptStartPage.js index a641ae60c53cb077ff5e841474b3a95cf5b61cfd..717949461f5cc600ac842efd8585a638d0fda2ae 100644 --- a/resources/assets/js/scriptStartPage.js +++ b/resources/assets/js/scriptStartPage.js @@ -103,6 +103,11 @@ function setSettings () { if (autocomplete !== null) { $('input[name=eingabe]').attr('autocomplete', autocomplete); } + // Change the request method to the given parameter + var requestMethod = localStorage.getItem('request'); + if (requestMethod !== null && (requestMethod === 'GET' || requestMethod === 'POST')) { + $('#searchForm').attr('method', requestMethod); + } if ($('fieldset#foki.mobile').length) { $('fieldset.mobile input#bilder').val('angepasst'); $('fieldset.mobile input#bilder').prop('checked', true); diff --git a/resources/lang/de/faq.php b/resources/lang/de/faq.php index c2c4249cd2e77685f26b66cf5dc75d62aa93655c..a27c8b5d640d5cd0da5cd0efddffbae895dd7617 100644 --- a/resources/lang/de/faq.php +++ b/resources/lang/de/faq.php @@ -1,8 +1,7 @@ <?php return [ - 'achtung' => 'Achtung, da sich unsere Website in der aktiven Entwicklung befindet, kann es dazu kommen, dass sich immer wieder Änderungen an Aufbau und Funktion der Website ergeben. Wir versuchen stets das FAQ schnellstmöglich den Änderungen entsprechend anzupassen, können jedoch nicht verhindern, dass es zu temporären Unstimmigkeiten in Teilen der Erklärungen kommt.', - + 'achtung' => 'Achtung, da unsere Suchmaschine ständig weiterentwickelt und verbessert wird, kann es dazu kommen, dass sich immer wieder Änderungen an Aufbau und Funktion ergeben. Wir versuchen zwar die Hilfe schnellstmöglich den Änderungen entsprechend anzupassen, können jedoch nicht ausschließen, dass es zu temporären Unstimmigkeiten in Teilen der Erklärungen kommt.', 'title' => 'MetaGer - FAQ', 'faq.1.h' => 'Was ist MetaGer?', diff --git a/resources/lang/de/languages.php b/resources/lang/de/languages.php index c298807f60cedb226347148ea1769ee0ecd9c7cc..05325d1588cf1c5cd4c60396675bc06a8af6d1e8 100644 --- a/resources/lang/de/languages.php +++ b/resources/lang/de/languages.php @@ -8,5 +8,6 @@ return [ 'hinweis.1' => 'Sobald du mit deinen Texten zufrieden bist, kannst du uns diese mit einem Klick auf folgenden Knopf automatisch zusenden. Wenn es mehr fehlende Texte in der angegebenen Sprache gibt, wird dein Browser dich danach direkt zu diesen leiten.', 'hinweis.2' => '<b>Hinweis</b>: Die übermittelten Texte werden von diesem Tool erst erkannt, sobald diese von uns gesichtet und eingefügt wurden. Wenn du deine Arbeit sichern möchtest um diese zu einem späteren Zeitpunkt fortzusetzen (auch wenn wir deine bisherige Arbeit noch nicht übernehmen konnten), so reicht es vollkommen, den aktuellen Link aus deiner Browserleiste zu kopieren und zu einem späteren Zeitpunkt wieder aufzurufen.', 'hinweis.3' => '<b>Achtung</b>: Mit der Einsendung stimmst du einer <a href="https://gitlab.metager3.de/open-source/MetaGer" target="_blank" rel="noopener">Veröffentlichung</a> deiner Texte unter AGPL-v3-Lizenz durch uns zu. Falls du namentlich genannt werden möchtest, teile uns dies bitte in einer email an <a href="mailto:office@suma-ev.de">office@suma-ev.de</a> mit.', - 'email' => '<b>E-Mail-Adresse für Rückfragen</b> (optional):' + 'email' => '<b>E-Mail-Adresse für Rückfragen</b> (optional):', + 'synoptic' => ['hinweis' => 'Datei wurde zuletzt bearbeitet.'], ]; diff --git a/resources/views/languages/synoptic.blade.php b/resources/views/languages/synoptic.blade.php index 70b2bedefe710e4fc2f058b7fb1a4ea190aee4b7..5eff8719be415fa9972080af05a8e2184563e37b 100644 --- a/resources/views/languages/synoptic.blade.php +++ b/resources/views/languages/synoptic.blade.php @@ -13,16 +13,27 @@ </div> --> */?> - <h2>{{$filename}}</h2> + <h2>Aktuelle Datei: {{$filename}}</h2> <form id="submit" method="POST"> <input type="hidden" name="filename" value="{{$filename}}" /> </form> + <p style="display: inline;"> Andere Datei auswählen: </p> + <select name="chosenFile" form="submit" onchange="this.form.submit()" type="submit"> + @foreach($otherFiles as $otherFile) + <option value={{$otherFile}}>{{ $otherFile }}</option> + @endforeach + </select> <table class="table"> <thead> <tr> <th>#ID</th> @foreach($to as $t) - <th>{{$t}}</th> + <th> + {{$t}} + @if(in_array($t, $recentlyChangedFiles)) + <span style="background-color: Khaki;font-weight: normal;"><u><br>{{ trans('languages.synoptic.hinweis') }}</u><br></span> + @endif + </th> @endforeach </tr> </thead> diff --git a/resources/views/layouts/staticPages.blade.php b/resources/views/layouts/staticPages.blade.php index 6b0ef09e5cbd0e8f9052ccef90489e7729287ba3..cdbf6492d440db5e7ca34c143b6876abfd9b91f7 100644 --- a/resources/views/layouts/staticPages.blade.php +++ b/resources/views/layouts/staticPages.blade.php @@ -1,7 +1,6 @@ <!DOCTYPE html> <html lang="{!! trans('staticPages.meta.language') !!}"> <head> - <script src="{{ elixir('js/lib.js') }}"></script> <meta charset="utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>@yield('title')</title> @@ -18,6 +17,8 @@ <link type="text/css" rel="stylesheet" href="/font-awesome/css/font-awesome.min.css" /> <link type="text/css" rel="stylesheet" href="{{ elixir('css/themes/default.css') }}" /> <link id="theme" type="text/css" rel="stylesheet" href="/css/theme.css.php" /> + <script src="{{ elixir('js/scriptSubPages.js') }}"></script> + <script src="{{ elixir('js/lib.js') }}"></script> @if (isset($css)) @if(is_array($css)) @foreach($css as $el) @@ -220,5 +221,4 @@ <img src="{{ action('ImageController@generateImage')}}?site={{ urlencode(url()->current()) }}" class="hidden" /> </div> </body> - <script src="{{ elixir('js/scriptSubPages.js') }}"></script> </html> diff --git a/routes/web.php b/routes/web.php index a351d702ddba8167116926b5b757fcd7eec8e912..545466a9c12dfeec42266f0f42f3430039febded 100644 --- a/routes/web.php +++ b/routes/web.php @@ -164,8 +164,8 @@ Route::group( return redirect('https://metager.de/klassik/databund'); }); Route::get('languages', 'LanguageController@createOverview'); - Route::get('synoptic/{exclude?}', 'LanguageController@createSynopticEditPage'); - Route::post('synoptic/{exclude?}', 'LanguageController@processSynopticPageInput'); + Route::get('synoptic/{exclude?}/{chosenFile?}', 'LanguageController@createSynopticEditPage'); + Route::post('synoptic/{exclude?}/{chosenFile?}', 'LanguageController@processSynopticPageInput'); Route::get('languages/edit/{from}/{to}/{exclude?}/{email?}', 'LanguageController@createEditPage'); Route::post('languages/edit/{from}/{to}/{exclude?}/{email?}', 'MailController@sendLanguageFile'); Route::get('berlin', 'StartpageController@berlin');