diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php index d68236b682448a38e52576a94026eccebbf55090..80d3fecf88b3b33425ac08835c6c0d8e3ca33f11 100644 --- a/app/Http/Controllers/LanguageController.php +++ b/app/Http/Controllers/LanguageController.php @@ -100,7 +100,7 @@ class LanguageController extends Controller if ($exclude !== "") { try { $ex = unserialize(base64_decode($exclude)); - } catch (\ErrorException $e) { + } catch (ErrorException $e) { $ex = ['files' => [], 'new' => 0]; } } @@ -202,7 +202,7 @@ class LanguageController extends Controller $fn = ""; - #Wähle die erste Datei aus + #Wähle die erste, unbearbeitete Datei aus foreach($languageObjects as $folder => $languageObject) { foreach($languageObject->stringMap as $languageFileName => $languageFile) { $fn = $languageFileName; diff --git a/app/Http/Controllers/MailController.php b/app/Http/Controllers/MailController.php index d5272ca20611be18845c931c4be80c2e1b8cd34a..92e8aa64b2795bf72b3095fc9a6bb7c5ee63f4f3 100644 --- a/app/Http/Controllers/MailController.php +++ b/app/Http/Controllers/MailController.php @@ -121,17 +121,23 @@ class MailController extends Controller #Ueberprueft ob ein bereits vorhandener Eintrag bearbeitet worden ist private function isEdited($k, $v, $filename) { - $temp = include resource_path()."/".$filename; - foreach ($temp as $key => $value) { - if($k === $key && $v !== $value) { - return true; - } + try { + $temp = include resource_path()."/".$filename; + foreach ($temp as $key => $value) { + if($k === $key && $v !== $value) { + return true; + } + } + } catch (\ErrorException $e) { + #Datei existiert noch nicht + return true; } return false; } private function extractLanguage($key) - { + { + #Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "de" preg_match("/^(?:_new_)?([^_]*)/", $key, $matches); foreach($matches as $dir) { if(strlen($dir) == 2) @@ -142,6 +148,7 @@ class MailController extends Controller private function processKey($key) { $key = trim($key); + #Kürzt bspw. "_new_de_redirect bzw. "de_redirect" zu "redirect" preg_match("/^(?:_new_)?(?:[^_]*)_(\w*.?\w*#?.?\w*)/", $key, $matches); foreach($matches as $processedKey) { if(strpos($processedKey, "_") === FALSE) { @@ -242,8 +249,9 @@ class MailController extends Controller $filename = $request->input('filename'); + #Identifizieren des gedrückten Buttons if(isset($request['nextpage'])) { - + #Leite weiter zur nächsten Seite $ex = []; if ($exclude !== "") { @@ -266,6 +274,7 @@ class MailController extends Controller return redirect(url('synoptic', ['exclude' => $ex])); } + #Andernfalls auslesen, zippen und herunterladen der veränderten Dateien $data = []; $new = 0; $editedFiles = []; @@ -275,30 +284,42 @@ class MailController extends Controller if ($key === "filename" || $value === "") { continue; } + $key = base64_decode($key); #Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel) $langdir = $this->extractLanguage($key); - $fn = "lang/".$langdir."/".$filename; - if (strpos($key, "_new_") === 0 && $value !== "") { + $filepath = "lang/".$langdir."/".$filename; + + if (strpos($key, "_new_") === 0 && $value !== "" || $this->isEdited($this->processKey($key), $value, $filepath)) { $new++; - $editedFiles[$langdir] = $filename; - } else if ($this->isEdited($this->processKey($key), $value, $fn)) { - $new++; - $editedFiles[$langdir] = $filename; + $editedFiles[$langdir] = $filepath; + } + } + + #Erneute Iteration über Request, damit Dateien mitsamt vorherigen Einträgen abgespeichert werden + foreach($request->all() as $key => $value) { + + if ($key === "filename" || $value === "") { + continue; } + $key = base64_decode($key); + + #Pfad zur Datei anhand des Schlüsselnamens rekonstruieren (Schlüssel enthält Sprachkürzel) + $langdir = $this->extractLanguage($key); + #Überspringe Datei, falls diese nicht bearbeitet worden ist if(!isset($editedFiles[$langdir])) { continue; } - #Key verarbeiten, sodass er nur den eigentlichen Keynamen enthält - $key = $this->processKey($key); - #Aufdröseln von 2D-Arrays + #Key kuerzen, sodass er nur den eigentlichen Keynamen enthält + $key = $this->processKey($key); + if (!strpos($key, "#")) { $data[$langdir][$key] = $value; - + #Aufdröseln von 2D-Arrays } else { $ref = &$data; do { @@ -308,7 +329,7 @@ class MailController extends Controller $ref = &$ref[$key]; $ref = $value; } - } + } if(empty($data)) { return redirect(url('synoptic', ['exclude' => $exclude])); @@ -316,8 +337,9 @@ class MailController extends Controller $zip = new ZipArchive(); - if ($zip->open("langfiles.zip", ZipArchive::OVERWRITE)!==TRUE) { - exit("cannot open <$filename>\n"); + if ($zip->open("langfiles.zip", ZipArchive::OVERWRITE)!==TRUE) { + } else if ($zip->open("langfiles.zip", ZipArchive::CREATE)!==TRUE) { + exit("Cannot open".$filename); } #Erstelle Ausgabedateien diff --git a/app/Models/LanguageObject.php b/app/Models/LanguageObject.php index c6ef5b9e54a919a7bb906a158d0b9b8b2490b6d6..971e905cdd16eddf2cb5969981a5e02c1d77f220 100644 --- a/app/Models/LanguageObject.php +++ b/app/Models/LanguageObject.php @@ -12,7 +12,7 @@ class LanguageObject public $filePath = ""; #2D-Array der Form [$filename][$key] - public $stringMap; + public $stringMap = []; public function __construct($lang, $path) { diff --git a/public/langfiles.zip b/public/langfiles.zip index cf456b9bdcbad1b99d1b5a8abce07975b29787de..601229310be12f9f35e1c77f29b1b62ab90afe68 100644 Binary files a/public/langfiles.zip and b/public/langfiles.zip differ