]> git.agnieray.net Git - galette.git/commitdiff
Fix members with groups removal; closes #1251
authorJohan Cwiklinski <johan@x-tnd.be>
Sun, 24 Feb 2019 07:26:02 +0000 (08:26 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Sun, 24 Feb 2019 07:26:02 +0000 (08:26 +0100)
Improve translactions removal

galette/lib/Galette/Repository/Groups.php
galette/lib/Galette/Repository/Members.php

index bfb00abab61784d252ae61e124770b222a80924e..9aeb8da616710b58c914ef758895494cbddb3ab1 100644 (file)
@@ -362,28 +362,23 @@ class Groups
     }
 
     /**
-     * Remove member from all his groups
+     * Remove members from all their groups
      *
-     * @param int $id Member's id
+     * @param array $ids Members ids
      *
      * @return void
      */
-    public static function removeMemberFromGroups($id)
+    public static function removeMembersFromGroups(array $ids)
     {
         global $zdb;
+
         try {
-            //first, remove current groups members
             $del_qry = $zdb->delete(Group::GROUPSUSERS_TABLE);
-            $del_qry->where(
-                Adherent::PK . ' = ' . $id
-            );
+            $del_qry->where->in(Adherent::PK, $ids);
             $zdb->execute($del_qry);
 
-            //first, remove current groups members
             $del_qry = $zdb->delete(Group::GROUPSMANAGERS_TABLE);
-            $del_qry->where(
-                Adherent::PK . ' = ' . $id
-            );
+            $del_qry->where->in(Adherent::PK, $ids);
             $zdb->execute($del_qry);
         } catch (\Exception $e) {
             Analog::log(
@@ -395,6 +390,18 @@ class Groups
         }
     }
 
+    /**
+     * Remove member from all his groups
+     *
+     * @param int $id Member's id
+     *
+     * @return void
+     */
+    public static function removeMemberFromGroups($id)
+    {
+        self::removeMembersFromGroups([$id]);
+    }
+
     /**
      * Check if groupname is unique
      *
index 269e678646e040e87ef4f910ca480aebc3a6544b..f480c7ce095552dd666509a882455775a1f9b197 100644 (file)
@@ -335,7 +335,7 @@ class Members
                     self::PK,
                     $list
                 );
-                $del = $zdb->execute($del_qry);
+                $zdb->execute($del_qry);
 
                 //get transactions
                 $select = $zdb->select(Transaction::TABLE);
@@ -346,24 +346,28 @@ class Members
                 //reset link with other contributions
                 //and remove them
                 if ($results->count() > 0) {
+                    $transactions = [];
                     foreach ($results as $transaction) {
-                        $update = $zdb->update(Contribution::TABLE);
-                        $update->set([
-                            Transaction::PK => new Expression('NULL')
-                        ])->where([
-                            Transaction::PK => $transaction[Transaction::PK]
-                        ]);
-                        $zdb->execute($update);
+                        $transactions[] = $transaction[Transaction::PK];
                     }
 
-                    //delete transactions
-                    $del_qry = $zdb->delete(Transaction::TABLE);
-                    $del_qry->where->in(self::PK, $list);
-                    $del = $zdb->execute($del_qry);
+                    $update = $zdb->update(Contribution::TABLE);
+                    $update->set([
+                        Transaction::PK => new Expression('NULL')
+                    ])->where->in(
+                        Transaction::PK,
+                        $transactions
+                    );
+                    $zdb->execute($update);
                 }
 
+                //delete transactions
+                $del_qry = $zdb->delete(Transaction::TABLE);
+                $del_qry->where->in(self::PK, $list);
+                $zdb->execute($del_qry);
+
                 //delete groups membership/mamagmentship
-                $del = Groups::removeMemberFromGroups((int)$member->id_adh);
+                Groups::removeMembersFromGroups($list);
 
                 //delete reminders
                 $del_qry = $zdb->delete(Reminder::TABLE);
@@ -371,13 +375,13 @@ class Members
                     'reminder_dest',
                     $list
                 );
-                $del = $zdb->execute($del_qry);
+                $zdb->execute($del_qry);
 
                 //delete dynamic fields values
                 $del_qry = $zdb->delete(DynamicFieldsHandle::TABLE);
                 $del_qry->where(['field_form' => 'adh']);
                 $del_qry->where->in('item_id', $list);
-                $del = $zdb->execute($del_qry);
+                $zdb->execute($del_qry);
 
                 //delete members
                 $del_qry = $zdb->delete(self::TABLE);
@@ -385,7 +389,7 @@ class Members
                     self::PK,
                     $list
                 );
-                $del = $zdb->execute($del_qry);
+                $zdb->execute($del_qry);
 
                 //commit all changes
                 $zdb->connection->commit();