From 9d44da27509f4e285a4aea8b2f64edf1e63009b4 Mon Sep 17 00:00:00 2001 From: Aria <aria@suma-ev.de> Date: Mon, 29 May 2017 09:50:08 +0200 Subject: [PATCH] =?UTF-8?q?Bugs=20behoben,=20Dateien=20werden=20nun=20voll?= =?UTF-8?q?st=C3=A4ndig=20zum=20Zip-Archiv=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/LanguageController.php | 4 +- app/Http/Controllers/MailController.php | 62 +++++++++++++------- app/Models/LanguageObject.php | 2 +- public/langfiles.zip | Bin 1368 -> 1283 bytes 4 files changed, 45 insertions(+), 23 deletions(-) diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php index d68236b68..80d3fecf8 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 d5272ca20..92e8aa64b 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 c6ef5b9e5..971e905cd 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 GIT binary patch literal 1283 zcmWIWW@Zs#0D<$qd%eI6D8US*Q&RN<pb9v^3d{|Sbeez?^MF_kqM#_XI5n{-IU_MI zr6e(_Sg#<XAhdTk-ys7YhUd?;*PIa*>e*wZ#I}sjLxJsbgs)4s(rv~4{;FzuJKyHr ze>!8X@Fpdma&~Sz|5TqnQNN!R<owyXLdx(<XB5W@uICyXYESLf;*2@*VT*)%>%9rg zUKfmxNS1bVa@wg(wa{r5H!9!vcXm$QWa*`X&r|}08z;^x@1Ogd3Fd0--b&3w^On*7 z`Pb@!-kA;c7El3BZwaux{-GVVPFY2xa;f8@MT=ZS+>0J`95H*oS?8aevevdpU*pYh z7j+-w$QJAGcAVQAT-Q^#am(4f`!^0-Jdib-XE#OcmB)UKi2Ev2jx^1)DN33X@iJnj zkejc>55LMF6}6YLH^SA+D@3=wjZgpjdQPmy49Tx+cIKU7C*Y@IG(R1k*C$g4^v@)i zpNg^ismB@^RRXN9e~9?66BL^ACn#v?A{R}wkDn%bTwAmE)Jh9xp%@-zEw}Zv)Xy&K zoBm=>k(q2^iN=qL&7Vu>=+|t$8~X37O~Cg$0i9I79n#8@8(xJhJJOXQvt!PZ42#SE zR=WuPI8r<9*7<*nPRDPVIAv-{!WSbBjaH-gx3>Of!0)BBA~Y}gzhf?Q19~SE>Ls88 zEYY-iqy7nv2amM8bTxHP1$R6PVqjX@H0RQnGd8x)s(#VdeoH4^Ir2zIRaQh(xnoLx zU7Tm&s=U0qWllwPd3jlJokHPjOvQmtV`LIx#+@~QP5^`djvxx0QD7RdXBCKY28L~o ziVzK0oKC!@*MVk$lQF8L=m{BN=?{noiY#5t2(%QG&QL8yPiY8C&p<R#WN94}0|PiE gpjwKa77&)shiJfRDJvUD9S0Cz0Xj_*RK_s?0JG+ERsaA1 literal 1368 zcmWIWW@Zs#00Exp?OtF8lwbzZsd@SVPz4-d1<PfPbPq5wFf3yQYJez6Ov*1U(JRO( z=ne7B7d8~IHQ%3fV&`4m)+UilAq^o%7A|V{;s^}!Elb}Vw&&Y5IrWzK^TlSGOE^~U zbcw6Bd7o{w_s#7(6Rt&?7QgJ2{v2Cd5W7c4KK4xCvG>pIG?%UrDy{i*{ol<E|F@>9 z@;Tk&D%_j2e9r`reU1|gxp#>@^%v6ne)O8l-S|4;GhM5BXL|6TTrnZ}L4tQLzsCFv z?)Sfjg}iBdb}~ZsaYwB0oGayPmL+xTzN^k&qV`oqn^U^$(84V4Sw>qOXLau`)LgeF z^61f3zQ0!Qkv_l9HsJHLIQs`0T}e@&-Y~qJw=Cf8$;zc$`MpJc9DC8p?>5J))+hUB z*8%^iV{tLMJEN}_8JsHab~gNVieYd0&bux9mN;<p-@2f<{e(@7L8!M~t40~C?RB^4 zTM52XO|J?uwfkJ-z3<T5&3tD)+nxFcTUOQ1nc@(-=Io^}LDG6P5mPEd-^J{bo?H~s zvFJfv-c8+)svSo!Rq`ACJdsmw(R_Zw!Z`M#n;gHk$Ls!oEgpQejK{fW@^jO70b7m5 zxpV`}IXKGYg3Ro`M(+81`LOfG1-H$P<^&z(yO^W$pon81Q{F}2zR(FX)*N#djpx^j zb9|%o`Q4do?_y=DHcUM(Tea?9ILGFe-<7kJ1<xz5|Lu93jiK;;QA2HW0Ke9qZ3fM` zU$z)n8hIR>_rOphsb%N6;+utW4fW+7-)a<g7n@tZp4(c}V!7_y;-WGy=?v-iE2qxK zed0;DeMGUVKc8W4%FJo!)@ROLm~U$R=Et+b9Tzy?xh`}SXo*@A(#2`;VcE@2dDVm+ z^CiBN?Re;X=`Tl~@5Boan0%!6MOiOAe>RMl;VUO|_i39=SDt;()K$A8yldm3jCzZG z-u!Cby7SWmruv8f+<2yL&xw^TTX{Au5P!tTcWilvx$rD6^WV=dZ#nW`tm3)yz3uD1 zJ1RbS$EkB{vHW|t{fw}bjy)@+6`^GXFEgpvX22{E1;n7N08{|a3Y$0TpU`;lNXtuC zQ}<MG$Fm>?rlmbsj)>SgtNKM-`z@Vx<&lu8Y)6G(S|O)jVX{i$x`=E&2K)}lOMyE8 z;=(`E8(Ou17K1Rz0YC+C2iVvHGb9&RQEEwPQJz9HmjVzd<zyC@=ou<;+S+j{m82Gz zC~?JFa|L)aGKnzbE&_lCgTa4C5Ctv}U>dL&2@vHB4BHwNAsXP0BHk))VBrG}a8#?% tgB)R%4nzYPR`mdNf`b-j752bIShW_S0m&*>HjpeE5IQn4Ffg)!cmT2B(kuV~ -- GitLab