From 4301c7007aecf84d4d25aed51f79a94d31a38018 Mon Sep 17 00:00:00 2001 From: Johan Cwiklinski Date: Sat, 17 Apr 2021 11:40:07 +0200 Subject: [PATCH] Handle dynamic files on contributions and transactions closes #1548 and closes #1547 --- .../Crud/ContributionsController.php | 13 ++++++-- .../Crud/TransactionsController.php | 13 ++++++-- galette/lib/Galette/Entity/Adherent.php | 4 +-- galette/lib/Galette/Entity/Contribution.php | 31 +++++++++++++++++-- .../Galette/Entity/DynamicFieldsHandle.php | 10 +++--- galette/lib/Galette/Entity/DynamicsTrait.php | 10 +++--- galette/lib/Galette/Entity/Transaction.php | 31 +++++++++++++++++-- .../default/ajouter_contribution.tpl | 2 +- .../templates/default/ajouter_transaction.tpl | 2 +- .../templates/default/edit_dynamic_fields.tpl | 25 ++++++++++++--- 10 files changed, 111 insertions(+), 30 deletions(-) diff --git a/galette/lib/Galette/Controllers/Crud/ContributionsController.php b/galette/lib/Galette/Controllers/Crud/ContributionsController.php index 2551adbb0..974346b24 100644 --- a/galette/lib/Galette/Controllers/Crud/ContributionsController.php +++ b/galette/lib/Galette/Controllers/Crud/ContributionsController.php @@ -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 - * @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 - * @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) { diff --git a/galette/lib/Galette/Controllers/Crud/TransactionsController.php b/galette/lib/Galette/Controllers/Crud/TransactionsController.php index e5062d11c..067c71061 100644 --- a/galette/lib/Galette/Controllers/Crud/TransactionsController.php +++ b/galette/lib/Galette/Controllers/Crud/TransactionsController.php @@ -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 - * @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 - * @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 = [ diff --git a/galette/lib/Galette/Entity/Adherent.php b/galette/lib/Galette/Entity/Adherent.php index ef13857cd..548bc6651 100644 --- a/galette/lib/Galette/Entity/Adherent.php +++ b/galette/lib/Galette/Entity/Adherent.php @@ -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( diff --git a/galette/lib/Galette/Entity/Contribution.php b/galette/lib/Galette/Entity/Contribution.php index 392c5cc1d..3a86b9fe3 100644 --- a/galette/lib/Galette/Entity/Contribution.php +++ b/galette/lib/Galette/Entity/Contribution.php @@ -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 - * @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 - * @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; + } + } } diff --git a/galette/lib/Galette/Entity/DynamicFieldsHandle.php b/galette/lib/Galette/Entity/DynamicFieldsHandle.php index f468a5103..dece2243f 100644 --- a/galette/lib/Galette/Entity/DynamicFieldsHandle.php +++ b/galette/lib/Galette/Entity/DynamicFieldsHandle.php @@ -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 - * @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 - * @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; diff --git a/galette/lib/Galette/Entity/DynamicsTrait.php b/galette/lib/Galette/Entity/DynamicsTrait.php index 2a1a203a4..3439cec27 100644 --- a/galette/lib/Galette/Entity/DynamicsTrait.php +++ b/galette/lib/Galette/Entity/DynamicsTrait.php @@ -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 - * @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 - * @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))) { diff --git a/galette/lib/Galette/Entity/Transaction.php b/galette/lib/Galette/Entity/Transaction.php index 14293de69..496abf443 100644 --- a/galette/lib/Galette/Entity/Transaction.php +++ b/galette/lib/Galette/Entity/Transaction.php @@ -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 - * @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 - * @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, ':'), ' '); 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; + } + } } diff --git a/galette/templates/default/ajouter_contribution.tpl b/galette/templates/default/ajouter_contribution.tpl index d86b99a62..e009d4f01 100644 --- a/galette/templates/default/ajouter_contribution.tpl +++ b/galette/templates/default/ajouter_contribution.tpl @@ -2,7 +2,7 @@ {block name="content"} {if isset($members.list)} -
$type, "id" => $contribution->id]}{else}{path_for name="doAddContribution" data=["type" => $type]}{/if}" method="post"> + $type, "id" => $contribution->id]}{else}{path_for name="doAddContribution" data=["type" => $type]}{/if}" enctype="multipart/form-data" method="post">
{if $contribution->isTransactionPart()} {assign var="mid" value=$contribution->transaction->member} diff --git a/galette/templates/default/ajouter_transaction.tpl b/galette/templates/default/ajouter_transaction.tpl index a566e717c..c2b50c9f8 100644 --- a/galette/templates/default/ajouter_transaction.tpl +++ b/galette/templates/default/ajouter_transaction.tpl @@ -2,7 +2,7 @@ {block name="content"} {if isset($members.list)} - $transaction->id]}{else}{path_for name="addTransaction"}{/if}" method="post"> + $transaction->id]}{else}{path_for name="addTransaction"}{/if}" enctype="multipart/form-data" method="post">
{_T string="Transaction details"} diff --git a/galette/templates/default/edit_dynamic_fields.tpl b/galette/templates/default/edit_dynamic_fields.tpl index b26d178ce..c0386c794 100644 --- a/galette/templates/default/edit_dynamic_fields.tpl +++ b/galette/templates/default/edit_dynamic_fields.tpl @@ -50,16 +50,31 @@ {if $disabled} disabled="disabled"{/if} /> {elseif $field|is_a:'Galette\DynamicFields\File'} - id} + + {/if} + isRequired() and $valuedata eq ''} required="required"{/if} {if $disabled} disabled="disabled"{/if} /> - - id} + + $object->id, "fid" => $field->getId(), "pos" => $loop, "name" => $valuedata]}"> + {$valuedata} + + - + + {/if} {/if} {/function} -- 2.39.2