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