From 11d525cafb1453ffdfccb8bcdfff0ee699921072 Mon Sep 17 00:00:00 2001 From: Aria <aria@suma-ev.de> Date: Mon, 19 Jun 2017 11:16:56 +0200 Subject: [PATCH] =?UTF-8?q?Funktionen=20aus=20dem=20MailController=20wiede?= =?UTF-8?q?oller=20in=20den=20LanguageController=20verschoben,=20damit=20v?= =?UTF-8?q?erbundene=20=C3=84nderungen=20vorgenommen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/LanguageController.php | 151 ++++++++++++++++++- app/Http/Controllers/MailController.php | 153 +------------------- routes/web.php | 2 +- 3 files changed, 150 insertions(+), 156 deletions(-) diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php index ba21b4025..a9eefd4f8 100644 --- a/app/Http/Controllers/LanguageController.php +++ b/app/Http/Controllers/LanguageController.php @@ -6,6 +6,7 @@ use Illuminate\Http\Request; use App\Models\LanguageObject; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; +use ZipArchive; class LanguageController extends Controller { @@ -17,8 +18,9 @@ class LanguageController extends Controller public function createOverview(Request $request) { - $languageFolders = scandir($this->languageFilePath); + $languageFolders = scandir($this->languageFilePath); $dirs = []; + foreach ($languageFolders as $folder) { if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") { $dirs[] = $folder; @@ -47,6 +49,7 @@ class LanguageController extends Controller } } + die(var_dump($sum)); $deComplete = $langTexts["de"]["textCount"] === count($sum) ? true : false; return view('languages.overview') ->with('title', trans('titles.languages')) @@ -59,7 +62,7 @@ class LanguageController extends Controller { $languageFolders = scandir($this->languageFilePath); $dirs = []; - + foreach ($languageFolders as $folder) { if (is_dir($this->languageFilePath . $folder) && $folder !== "." && $folder !== "..") { $dirs[$folder] = $folder; @@ -254,6 +257,126 @@ class LanguageController extends Controller return $t; } + public function processSynopticPageInput(Request $request, $exclude = "") { + + $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])); + } + + #Andernfalls auslesen, zippen und herunterladen der veränderten Dateien + $data = []; + $new = 0; + $editedFiles = []; + + 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); + $filepath = "lang/".$langdir."/".$filename; + + if (strpos($key, "_new_") === 0 && $value !== "" || MailController::isEdited($this->processKey($key), $value, $filepath)) { + $new++; + $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 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 { + $ref = &$ref[$langdir][substr($key, 0, strpos($key, "#"))]; + $key = substr($key, strpos($key, "#") + 1); + } while (strpos($key, "#")); + $ref = &$ref[$key]; + $ref = $value; + } + } + + if(empty($data)) { + return redirect(url('synoptic', ['exclude' => $exclude])); + } + + + if(file_exists("langfiles.zip")) + unlink("langfiles.zip"); + + $zip = new ZipArchive(); + + if ($zip->open("langfiles.zip", ZipArchive::CREATE) !== TRUE) { + exit("Cannot open ".$filename); + } + + try{ + #Erstelle Ausgabedateien + foreach($data as $lang => $entries) { + $output = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + $output = preg_replace("/\{/si", "[", $output); + $output = preg_replace("/\}/si", "]", $output); + $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output); + $output = "<?php\n\nreturn $output;\n"; + $zip->addEmptyDir($lang); + $zip->addFromString($lang."/".$filename, $output); + } + + + $zip->close(); + + return response()->download("langfiles.zip", $filename.".zip"); + } catch(ErrorException $e) { + exit("Failed to write ".$filename); + } + } private function createHints($t, $to) { foreach ($t as $key => $langTexts) { @@ -320,7 +443,6 @@ class LanguageController extends Controller if (is_array($val)) { $isArray = true; } - } } else { $tmp[$key] = $value; @@ -355,4 +477,27 @@ class LanguageController extends Controller // search forward starting from end minus needle length characters return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== 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) + return $dir; + } + } + + 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) { + return $processedKey; + } + } + return $key; + } } diff --git a/app/Http/Controllers/MailController.php b/app/Http/Controllers/MailController.php index 51961b8c0..55ca74ea6 100644 --- a/app/Http/Controllers/MailController.php +++ b/app/Http/Controllers/MailController.php @@ -9,7 +9,6 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; use LaravelLocalization; use Mail; -use ZipArchive; class MailController extends Controller { @@ -119,7 +118,7 @@ class MailController extends Controller } #Ueberprueft ob ein bereits vorhandener Eintrag bearbeitet worden ist - private function isEdited($k, $v, $filename) + public static function isEdited($k, $v, $filename) { try { $temp = include resource_path()."/".$filename; @@ -135,29 +134,6 @@ class MailController extends Controller 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) - return $dir; - } - } - - 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) { - return $processedKey; - } - } - return $key; - } - public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email ="") { $filename = $request->input('filename'); @@ -243,131 +219,4 @@ class MailController extends Controller return redirect(url('languages/edit', ['from' => $from, 'to' => $to, 'exclude' => $ex, 'email' => $emailAddress])); } - - - public function processSynopticPageInput(Request $request, $exclude = "") { - - $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])); - } - - #Andernfalls auslesen, zippen und herunterladen der veränderten Dateien - $data = []; - $new = 0; - $editedFiles = []; - - 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); - $filepath = "lang/".$langdir."/".$filename; - - if (strpos($key, "_new_") === 0 && $value !== "" || $this->isEdited($this->processKey($key), $value, $filepath)) { - $new++; - $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 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 { - $ref = &$ref[$langdir][substr($key, 0, strpos($key, "#"))]; - $key = substr($key, strpos($key, "#") + 1); - } while (strpos($key, "#")); - $ref = &$ref[$key]; - $ref = $value; - } - } - - if(empty($data)) { - return redirect(url('synoptic', ['exclude' => $exclude])); - } - - - if(file_exists("langfiles.zip")) - unlink("langfiles.zip"); - - $zip = new ZipArchive(); - - if ($zip->open("langfiles.zip", ZipArchive::CREATE) !== TRUE) { - exit("Cannot open ".$filename); - } - - try{ - #Erstelle Ausgabedateien - foreach($data as $lang => $entries) { - $output = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); - $output = preg_replace("/\{/si", "[", $output); - $output = preg_replace("/\}/si", "]", $output); - $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output); - $output = "<?php\n\nreturn $output;\n"; - $zip->addEmptyDir($lang); - $zip->addFromString($lang."/".$filename, $output); - } - - - $zip->close(); - - return response()->download("langfiles.zip", $filename.".zip"); - } catch(ErrorException $e) { - exit("Failed to write ".$filename); - } - - - } - - - } diff --git a/routes/web.php b/routes/web.php index 562d1dc01..edb0604d1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -159,7 +159,7 @@ Route::group( }); Route::get('languages', 'LanguageController@createOverview'); Route::get('synoptic/{exclude?}', 'LanguageController@createSynopticEditPage'); - Route::post('synoptic/{exclude?}', 'MailController@processSynopticPageInput'); + Route::post('synoptic/{exclude?}', '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'); -- GitLab