]> git.agnieray.net Git - galette.git/commitdiff
Handle dynamic files on contributions and transactions
authorJohan Cwiklinski <johan@x-tnd.be>
Sat, 17 Apr 2021 09:40:07 +0000 (11:40 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Sat, 17 Apr 2021 12:51:04 +0000 (14:51 +0200)
closes #1548 and closes #1547

galette/lib/Galette/Controllers/Crud/ContributionsController.php
galette/lib/Galette/Controllers/Crud/TransactionsController.php
galette/lib/Galette/Entity/Adherent.php
galette/lib/Galette/Entity/Contribution.php
galette/lib/Galette/Entity/DynamicFieldsHandle.php
galette/lib/Galette/Entity/DynamicsTrait.php
galette/lib/Galette/Entity/Transaction.php
galette/templates/default/ajouter_contribution.tpl
galette/templates/default/ajouter_transaction.tpl
galette/templates/default/edit_dynamic_fields.tpl

index 2551adbb079f395c4f1162514cc2f527e4ad7ea7..974346b2401b611915933dc9415f736784e2b1d0 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2020 The Galette Team
+ * Copyright © 2020-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2020 The Galette Team
+ * @copyright 2020-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.9.4dev - 2020-05-08
@@ -59,7 +59,7 @@ use Analog\Analog;
  * @name      ContributionsController
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2020 The Galette Team
+ * @copyright 2020-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.9.4dev - 2020-05-02
@@ -587,6 +587,13 @@ class ContributionsController extends CrudController
             }
         }
 
+        if (count($error_detected) === 0) {
+            $files_res = $contrib->handleFiles($_FILES);
+            if (is_array($files_res)) {
+                $error_detected = array_merge($error_detected, $files_res);
+            }
+        }
+
         if (count($error_detected) == 0) {
             $this->session->contribution = null;
             if ($contrib->isTransactionPart() && $contrib->transaction->getMissingAmount() > 0) {
index e5062d11cbdc6133649d90966dd21c161c805f4e..067c71061d110adce40bcdcfea57278d0fff3fbd 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2020 The Galette Team
+ * Copyright © 2020-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2020 The Galette Team
+ * @copyright 2020-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.9.4dev - 2020-05-08
@@ -54,7 +54,7 @@ use Analog\Analog;
  * @name      TransactionsController
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2020 The Galette Team
+ * @copyright 2020-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.9.4dev - 2020-05-02
@@ -267,6 +267,13 @@ class TransactionsController extends ContributionsController
             }
         }
 
+        if (count($error_detected) === 0) {
+            $files_res = $trans->handleFiles($_FILES);
+            if (is_array($files_res)) {
+                $error_detected = array_merge($error_detected, $files_res);
+            }
+        }
+
         if (count($error_detected) == 0) {
             if ($trans->getMissingAmount() > 0) {
                 $rparams = [
index ef13857cdb4fc5405999f515151739bcf20690aa..548bc66518ba2ac6754544e35e7e03ca8eb70698 100644 (file)
@@ -1910,7 +1910,7 @@ class Adherent
     }
 
     /**
-     * Handle files (photo and dynamics files
+     * Handle files (photo and dynamics files)
      *
      * @param array $files Files sent
      *
@@ -1941,7 +1941,7 @@ class Adherent
                 );
             }
         }
-        $this->dynamicsFiles($_FILES);
+        $this->dynamicsFiles($files);
 
         if (count($this->errors) > 0) {
             Analog::log(
index 392c5cc1d7c8794578e15a91788711cec710fcdf..3a86b9fe3a8a905977a7b8965ef5998f8d8e15f2 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2010-2014 The Galette Team
+ * Copyright © 2010-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2010-2014 The Galette Team
+ * @copyright 2010-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.7dev - 2010-03-11
@@ -52,7 +52,7 @@ use Galette\Repository\PaymentTypes;
  * @name      Contribution
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2010-2014 The Galette Team
+ * @copyright 2010-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.7dev - 2010-03-11
@@ -1343,4 +1343,29 @@ class Contribution
     {
         return $this->sendmail;
     }
+
+    /**
+     * Handle files (dynamics files)
+     *
+     * @param array $files Files sent
+     *
+     * @return array|true
+     */
+    public function handleFiles($files)
+    {
+        $this->errors = [];
+
+        $this->dynamicsFiles($files);
+
+        if (count($this->errors) > 0) {
+            Analog::log(
+                'Some errors has been throwed attempting to edit/store a contribution files' . "\n" .
+                print_r($this->errors, true),
+                Analog::ERROR
+            );
+            return $this->errors;
+        } else {
+            return true;
+        }
+    }
 }
index f468a51035fd0e5d37c640efc5ec7f9e43569dc7..dece2243fb98d3c3c212cf780c6249fc41cc09b4 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2011-2014 The Galette Team
+ * Copyright © 2011-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2011-2014 The Galette Team
+ * @copyright 2011-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.7dev - 2011-06-20
@@ -62,7 +62,7 @@ use Galette\Repository\DynamicFieldsSet;
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2011-2014 The Galette Team
+ * @copyright 2011-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  */
@@ -292,8 +292,8 @@ class DynamicFieldsHandle
                             'val_index' => $value['val_index'],
                             'item_id'   => $value['item_id'],
                             'field_id'  => $value['field_id'],
-                            'field_form' => $value['field_form'], //:val_index
-                            'val_index' => $value['old_val_index'] ?? $value['val_index'] //:old_val_index
+                            'field_form' => $value['field_form'],
+                            'old_val_index' => $value['old_val_index'] ?? $value['val_index'] //:old_val_index
                         ];
                         $this->getUpdateStatement()->execute($params);
                         $this->has_changed = true;
index 2a1a203a4cfa9f10d88f88e9f0843735913a035f..3439cec2718e0f450627778aa6bba4d37a268168 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2017-2018 The Galette Team
+ * Copyright © 2017-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2017-2018 The Galette Team
+ * @copyright 2017-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.9dev - 2017-05-26
@@ -49,7 +49,7 @@ use Galette\DynamicFields\Boolean;
  * @name      DynamicsTrait
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2017-2018 The Galette Team
+ * @copyright 2017-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.9dev - 2017-05-26
@@ -166,7 +166,9 @@ trait DynamicsTrait
                             $field_id,
                             $val_index
                         );
-                        unlink(GALETTE_FILES_PATH . $filename);
+                        if (file_exists(GALETTE_FILES_PATH . $filename)) {
+                            unlink(GALETTE_FILES_PATH . $filename);
+                        }
                         $this->dynamics->setValue($this->id, $field_id, $val_index, '');
                     } else {
                         if ($fields[$field_id] instanceof Date && !empty(trim($value))) {
index 14293de693d1b95b07ad37c3f14e3e636a4ea5c4..496abf443264f49c1d26f5271723c0daa5b08904 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2011-2014 The Galette Team
+ * Copyright © 2011-2021 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2011-2014 The Galette Team
+ * @copyright 2011-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.7dev - 2011-07-31
@@ -51,7 +51,7 @@ use Galette\Core\Login;
  * @name      Transaction
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2010-2014 The Galette Team
+ * @copyright 2010-2021 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.tuxfamily.org
  * @since     Available since 0.7dev - 2010-03-11
@@ -605,4 +605,29 @@ class Transaction
         $label = trim(trim($label, ':'), '&nbsp;');
         return $label;
     }
+
+    /**
+     * Handle files (dynamics files)
+     *
+     * @param array $files Files sent
+     *
+     * @return array|true
+     */
+    public function handleFiles($files)
+    {
+        $this->errors = [];
+
+        $this->dynamicsFiles($files);
+
+        if (count($this->errors) > 0) {
+            Analog::log(
+                'Some errors has been throwed attempting to edit/store a transaction files' . "\n" .
+                print_r($this->errors, true),
+                Analog::ERROR
+            );
+            return $this->errors;
+        } else {
+            return true;
+        }
+    }
 }
index d86b99a624f4cbe21b3279ec4d310722210b7b70..e009d4f0157d6d5202e8fee55eb22536cc3aa99b 100644 (file)
@@ -2,7 +2,7 @@
 
 {block name="content"}
 {if isset($members.list)}
-        <form action="{if $contribution->id}{path_for name="doEditContribution" data=["type" => $type, "id" => $contribution->id]}{else}{path_for name="doAddContribution" data=["type" => $type]}{/if}" method="post">
+        <form action="{if $contribution->id}{path_for name="doEditContribution" data=["type" => $type, "id" => $contribution->id]}{else}{path_for name="doAddContribution" data=["type" => $type]}{/if}" enctype="multipart/form-data" method="post">
         <div class="bigtable">
     {if $contribution->isTransactionPart()}
         {assign var="mid" value=$contribution->transaction->member}
index a566e717c21cafba9ee0d9ff58d66e7b19b67490..c2b50c9f81ae35a43922bef87f2039291f59a896 100644 (file)
@@ -2,7 +2,7 @@
 
 {block name="content"}
 {if isset($members.list)}
-        <form action="{if $transaction->id}{path_for name="editTransaction" data=["id" => $transaction->id]}{else}{path_for name="addTransaction"}{/if}" method="post">
+        <form action="{if $transaction->id}{path_for name="editTransaction" data=["id" => $transaction->id]}{else}{path_for name="addTransaction"}{/if}" enctype="multipart/form-data" method="post">
         <div class="bigtable">
             <fieldset class="cssform">
                 <legend class="ui-state-active ui-corner-top">{_T string="Transaction details"}</legend>
index b26d178ce96166137e61e7e3e0b87b0485f32f81..c0386c794df6cfaaec296d68f03390d9ba579a27 100644 (file)
             {if $disabled} disabled="disabled"{/if}
         />
     {elseif $field|is_a:'Galette\DynamicFields\File'}
-        <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_new">{_T string="new"}</label> <input type="file" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}_new"
+        {if $object->id}
+        <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_new">{_T string="new"}</label>
+        {/if}
+        <input
+            type="file"
+            name="info_field_{$field->getId()}_{$loop}"
+            id="info_field_{$field->getId()}_{$loop}_new"
             {if $field->isRequired() and $valuedata eq ''} required="required"{/if}
             {if $disabled} disabled="disabled"{/if}
         />
-        <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_current">{_T string="current"}</label> <input type="text" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}_current" disabled="disabled"
-            value="{$valuedata}"
-        />
-        <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_delete">{_T string="delete"}</label> <input type="checkbox" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}_delete"
+        {if $object->id}
+        <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_current">{_T string="current"}</label>
+        <a href="{path_for name="getDynamicFile" data=["id" => $object->id, "fid" => $field->getId(), "pos" => $loop, "name" => $valuedata]}">
+            {$valuedata}
+        </a>
+        - <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_delete">
+            {_T string="delete"}
+        </label>
+        <input
+            type="checkbox"
+            name="info_field_{$field->getId()}_{$loop}"
+            id="info_field_{$field->getId()}_{$loop}_delete"
             onclick="this.form.info_field_{$field->getId()}_{$loop}_new.disabled = this.checked;"
         />
+        {/if}
     {/if}
 {/function}