Projet

Général

Profil

Actions

Anomalie #1483

fermé

SQL error on invoices/receipt direct download

Ajouté par Johan Cwiklinski il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
Files generation
Version cible:
Début:
26/08/2020
Echéance:
% réalisé:

100%

Temps estimé:
Version utilisée:

Description

::1 - 2020-08-25 14:19:31 - ERROR - Query error: SELECT `galette_cotisations`.* FROM `galette_cotisations` WHERE id_cotis = 106 AND id_adh = 
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '' à la ligne 1 in 
B:\galettenightly\galette\vendor\laminas\laminas-db\src\Adapter\Driver\Pdo\Connection.php:378

> #0 B:\galettenightly\galette\vendor\laminas\laminas-db\src\Adapter\Driver\Pdo\Connection.php(378): PDO->query('SELECT `galette...')
> #1 B:\galettenightly\galette\vendor\laminas\laminas-db\src\Adapter\Adapter.php(204): Laminas\Db\Adapter\Driver\Pdo\Connection->execute('SELECT `galette...')
> #2 B:\galettenightly\galette\lib\Galette\Core\Db.php(800): Laminas\Db\Adapter\Adapter->query('SELECT `galette...', 'execute')
> #3 B:\galettenightly\galette\lib\Galette\Entity\Contribution.php(269): Galette\Core\Db->execute(Object(Laminas\Db\Sql\Select))
> #4 B:\galettenightly\galette\lib\Galette\Entity\Contribution.php(162): Galette\Entity\Contribution->load(106)
> #5 B:\galettenightly\galette\lib\Galette\Controllers\PdfController.php(702): Galette\Entity\Contribution->__construct(Object(Galette\Core\Db), Object(Galette\Core\Login), 106)
> #6 [internal function]: Galette\Controllers\PdfController->directlinkDocument(Object(Slim\Http\Request), Object(Slim\Http\Response), Array)

Contribution::load() method checks if the user is admin or staff member, and if not, it adds the current logged in id... But noone should be logged at this time.


Fichiers

PdfController1.php (22,9 ko) PdfController1.php fichier modifié est il correct ? Alain Paris, 26/08/2020 12:04

Mis à jour par Johan Cwiklinski il y a plus de 3 ans

A possible fix:

//wrong patch removed

Mis à jour par Johan Cwiklinski il y a plus de 3 ans

Better one:

diff --git a/galette/lib/Galette/Controllers/PdfController.php b/galette/lib/Galette/Controllers/PdfController.php
index 4efdf253..d8ddbf95 100644
--- a/galette/lib/Galette/Controllers/PdfController.php
+++ b/galette/lib/Galette/Controllers/PdfController.php
@@ -670,7 +670,22 @@ class PdfController extends AbstractController
         }

         $target = $valid[0];
-        $id = $valid[1];
+        $id = (int)$valid[1];
+
+        //get user information (like id...) from DB since its missing
+        $select = $this->zdb->select(Adherent::TABLE, 'a');
+        $select->where(['email_adh' => $post['email']]);
+        $results = $this->zdb->execute($select);
+        $row = $results->current();
+
+        //create a new login instance, to not break current session if any
+        //this will be passed directly to Contribution constructor
+        $login = new Galette\Core\Login(
+            $this->zdb,
+            $this->i18n,
+            $this->session
+        );
+        $login->id = (int)$row['id_adh'];

         if ($target === Links::TARGET_MEMBERCARD) {
             $m = new Members();
@@ -699,7 +714,7 @@ class PdfController extends AbstractController
             $pdf = new PdfMembersCards($this->preferences);
             $pdf->drawCards($members);
         } else {
-            $contribution = new Contribution($this->zdb, $this->login, $id);
+            $contribution = new Contribution($this->zdb, $login, $id);
             if ($contribution->id == '') {
                 //not possible to load contribution, exit
                 $this->flash->addMessage(

[edit]: fix double `$` in patch

Mis à jour par Alain Paris il y a plus de 3 ans

Bonjour,

Avec le fichier original ,Je n'avais le problème que sur la récupération de la facture ,je pouvais télécharger sans problème la carte de membre.

En modifiant comme ci dessus le fichier PdfController.php :
J'ai une nouvelle erreur, et Je ne peux plus telecharger la carte de membre.

Message: Class 'Galette\Controllers\Galette\Core\Login' not found
File: B:\galettenightly\galette\lib\Galette\Controllers\PdfController.php
Line: 683
Trace: #0 [internal function]: Galette\Controllers\PdfController->directlinkDocument(Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#1 B:\galettenightly\galette\vendor\slim\slim\Slim\Handlers\Strategies\RequestResponse.php(40): call_user_func(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#2 B:\galettenightly\galette\vendor\slim\slim\Slim\Route.php(281): Slim\Handlers\Strategies\RequestResponse->_invoke(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#3 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(117): Slim\Route->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 B:\galettenightly\galette\vendor\slim\slim\Slim\Route.php(268): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 B:\galettenightly\galette\vendor\slim\slim\Slim\App.php(503): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 B:\galettenightly\galette\vendor\akrabat\rka-slim-session-middleware\RKA\SessionMiddleware.php(47): Slim\App->_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 [internal function]: RKA\SessionMiddleware->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#8 B:\galettenightly\galette\vendor\slim\slim\Slim\DeferredCallable.php(57): call_user_func_array(Object(RKA\SessionMiddleware), Array)
#9 [internal function]: Slim\DeferredCallable->_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#10 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#11 B:\galettenightly\galette\lib\Galette\Middleware\TrailingSlash.php(81): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#12 [internal function]: Galette\Middleware\TrailingSlash->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#13 B:\galettenightly\galette\vendor\slim\slim\Slim\DeferredCallable.php(57): call_user_func_array(Array, Array)
#14 [internal function]: Slim\DeferredCallable->_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#15 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#16 B:\galettenightly\galette\lib\Galette\Middleware\Language.php(103): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#17 [internal function]: Galette\Middleware\Language->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#18 B:\galettenightly\galette\vendor\slim\slim\Slim\DeferredCallable.php(57): call_user_func_array(Array, Array)
#19 [internal function]: Slim\DeferredCallable->_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#20 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#21 B:\galettenightly\galette\lib\Galette\Middleware\Telemetry.php(144): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#22 [internal function]: Galette\Middleware\Telemetry->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#23 B:\galettenightly\galette\vendor\slim\slim\Slim\DeferredCallable.php(57): call_user_func_array(Array, Array)
#24 [internal function]: Slim\DeferredCallable->_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#25 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#26 B:\galettenightly\galette\lib\Galette\Middleware\CheckAcls.php(143): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#27 [internal function]: Galette\Middleware\CheckAcls->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#28 B:\galettenightly\galette\vendor\slim\slim\Slim\DeferredCallable.php(57): call_user_func_array(Array, Array)
#29 [internal function]: Slim\DeferredCallable->_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#30 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#31 B:\galettenightly\galette\plugins\plugin-maps-develop\_routes.php(54): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#32 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#33 B:\galettenightly\galette\vendor\slim\slim\Slim\DeferredCallable.php(57): call_user_func_array(Object(Closure), Array)
#34 [internal function]: Slim\DeferredCallable->
_invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#35 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#36 B:\galettenightly\galette\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#37 B:\galettenightly\galette\vendor\slim\slim\Slim\App.php(392): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#38 B:\galettenightly\galette\vendor\slim\slim\Slim\App.php(297): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#39 B:\galettenightly\galette\includes\main.inc.php(187): Slim\App->run()
#40 B:\galettenightly\galette\webroot\index.php(57): require_once('B:\\galettenight...')
#41 {main}

Mis à jour par Johan Cwiklinski il y a plus de 3 ans

Alain Paris a écrit (#note-3):

Bonjour,

Avec le fichier original ,Je n'avais le problème que sur la récupération de la facture ,je pouvais télécharger sans problème la carte de membre.

En modifiant comme ci dessus le fichier PdfController.php :
J'ai une nouvelle erreur, et Je ne peux plus telecharger la carte de membre.

Message: Class 'Galette\Controllers\Galette\Core\Login' not found
File: B:\galettenightly\galette\lib\Galette\Controllers\PdfController.php
Line: 683

Une erreur de ma part en effet... À cette ligne, il faudrait $login = new \Galette\Core\Login (un \ ajouté juste avant Galette).

Mis à jour par Alain Paris il y a plus de 3 ans

Il semble que l'antislash est corrigé le soucis.
J'ai réussi a recuperer la facture et la carte de membre....

Mis à jour par Johan Cwiklinski il y a plus de 3 ans

  • Statut changé de Nouveau à In Progress

Alain Paris a écrit (#note-5):

Il semble que l'antislash est corrigé le soucis.
J'ai réussi a recuperer la facture et la carte de membre....

Super, merci d'avoir testé :)

Je vais essayer de pousser le correctif ce jour, ça devrait donc être réglé dans la prochaine nightly.

Mis à jour par Johan Cwiklinski il y a plus de 3 ans

  • Statut changé de In Progress à Résolu
  • % réalisé changé de 0 à 100

Mis à jour par Johan Cwiklinski il y a plus de 3 ans

  • Statut changé de Résolu à Fermé
Actions

Formats disponibles : Atom PDF