]> git.agnieray.net Git - galette.git/commitdiff
Some phpstan lvl 4 checks
authorJohan Cwiklinski <johan@x-tnd.be>
Tue, 7 Nov 2023 19:17:00 +0000 (20:17 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Wed, 8 Nov 2023 07:23:22 +0000 (08:23 +0100)
Use type for filter class

27 files changed:
galette/lib/Galette/Common/ClassLoader.php
galette/lib/Galette/Controllers/Crud/ContributionsController.php
galette/lib/Galette/Controllers/Crud/MailingsController.php
galette/lib/Galette/Controllers/HistoryController.php
galette/lib/Galette/Controllers/PdfController.php
galette/lib/Galette/Core/Install.php
galette/lib/Galette/Core/MailingHistory.php
galette/lib/Galette/Core/Preferences.php
galette/lib/Galette/Entity/Adherent.php
galette/lib/Galette/Entity/Contribution.php
galette/lib/Galette/Entity/PdfModel.php
galette/lib/Galette/Entity/Reminder.php
galette/lib/Galette/Entity/SavedSearch.php
galette/lib/Galette/Entity/Transaction.php
galette/lib/Galette/Filters/ContributionsList.php
galette/lib/Galette/Filters/TransactionsList.php
galette/lib/Galette/IO/Charts.php
galette/lib/Galette/IO/ContributionsCsv.php
galette/lib/Galette/IO/CsvOut.php
galette/lib/Galette/IO/ExternalScript.php
galette/lib/Galette/IO/MembersCsv.php
galette/lib/Galette/IO/Pdf.php
galette/lib/Galette/Middleware/Authenticate.php
galette/lib/Galette/Repository/Contributions.php
galette/lib/Galette/Repository/Members.php
galette/lib/Galette/Repository/SavedSearches.php
galette/lib/Galette/Repository/Transactions.php

index d4e59fe3157f47d065f12bfa4429388bf593b704..a680fe11fa651e7b6b9456762cd759e45e63809b 100644 (file)
@@ -277,7 +277,7 @@ class ClassLoader
             }
         }
 
-        return class_exists($className, false) || interface_exists($className, false);
+        return false;
     }
 
     /**
index e130be8646c29377d983359d4a4208013e18fc28..44be33650c038d7d3e17f28db7614eb13ac6d51f 100644 (file)
@@ -37,8 +37,6 @@
 namespace Galette\Controllers\Crud;
 
 use Galette\Features\BatchList;
-use Galette\Filters\ContributionsList;
-use Throwable;
 use Analog\Analog;
 use Galette\Controllers\CrudController;
 use Slim\Psr7\Request;
@@ -480,7 +478,7 @@ class ContributionsController extends CrudController
                 );
                 if (
                     !$member->hasParent() ||
-                    $member->hasParent() && $member->parent->id != $this->login->id
+                    $member->parent->id != $this->login->id
                 ) {
                     $value = $this->login->id;
                     Analog::log(
@@ -636,15 +634,11 @@ class ContributionsController extends CrudController
             }
 
             if (isset($post['end_date_filter']) || isset($post['start_date_filter'])) {
-                try {
-                    if (isset($post['start_date_filter'])) {
-                        $filters->start_date_filter = $post['start_date_filter'];
-                    }
-                    if (isset($post['end_date_filter'])) {
-                        $filters->end_date_filter = $post['end_date_filter'];
-                    }
-                } catch (Throwable $e) {
-                    $error_detected[] = $e->getMessage();
+                if (isset($post['start_date_filter'])) {
+                    $filters->start_date_filter = $post['start_date_filter'];
+                }
+                if (isset($post['end_date_filter'])) {
+                    $filters->end_date_filter = $post['end_date_filter'];
                 }
             }
 
@@ -698,7 +692,8 @@ class ContributionsController extends CrudController
         $post = $request->getParsedBody();
 
         if (isset($post['entries_sel'])) {
-            $filters = $this->session->$filter_name ?? new ContributionsList();
+            $filter_class = '\\Galette\\Filters\\' . ucwords($type . 'List');
+            $filters = $this->session->$filter_name ?? new $filter_class();
             $filters->selected = $post['entries_sel'];
             $this->session->$filter_name = $filters;
 
index e7523c23fffb04ed210379b2c9075d878ae53b78..9177bd472fa4faf91aa58f15929aba7fec8fbb01 100644 (file)
@@ -537,15 +537,11 @@ class MailingsController extends CrudController
             }
 
             if (isset($post['end_date_filter']) || isset($post['start_date_filter'])) {
-                try {
-                    if (isset($post['start_date_filter'])) {
-                        $filters->start_date_filter = $post['start_date_filter'];
-                    }
-                    if (isset($post['end_date_filter'])) {
-                        $filters->end_date_filter = $post['end_date_filter'];
-                    }
-                } catch (Throwable $e) {
-                    $error_detected[] = $e->getMessage();
+                if (isset($post['start_date_filter'])) {
+                    $filters->start_date_filter = $post['start_date_filter'];
+                }
+                if (isset($post['end_date_filter'])) {
+                    $filters->end_date_filter = $post['end_date_filter'];
                 }
             }
 
index 44a504ed462b81f249637e92a210e18c0d6dd3a4..5bf8b1a3b4a03e04673a36ef591c7ee888f05a0e 100644 (file)
@@ -145,15 +145,11 @@ class HistoryController extends AbstractController
             }
 
             if (isset($post['end_date_filter']) || isset($post['start_date_filter'])) {
-                try {
-                    if (isset($post['start_date_filter'])) {
-                        $filters->start_date_filter = $post['start_date_filter'];
-                    }
-                    if (isset($post['end_date_filter'])) {
-                        $filters->end_date_filter = $post['end_date_filter'];
-                    }
-                } catch (Throwable $e) {
-                    $error_detected[] = $e->getMessage();
+                if (isset($post['start_date_filter'])) {
+                    $filters->start_date_filter = $post['start_date_filter'];
+                }
+                if (isset($post['end_date_filter'])) {
+                    $filters->end_date_filter = $post['end_date_filter'];
                 }
             }
 
index c585104a5f2b95f07c96da87f1fe82400724c695..175d86b8a886528677d09d33d46927b831ef5193 100644 (file)
@@ -84,7 +84,7 @@ class PdfController extends AbstractController
         $response = $response
             ->withHeader('Content-type', 'application/pdf')
             ->withHeader('Content-Disposition', 'attachment;filename="' . $pdf->getFileName() . '"');
-        $response->getBody()->write($pdf->download() ?? '');
+        $response->getBody()->write($pdf->download());
         return $response;
     }
 
@@ -93,7 +93,7 @@ class PdfController extends AbstractController
      *
      * @param Request  $request  PSR Request
      * @param Response $response PSR Response
-     * @param integer  $id_adh   Member id
+     * @param ?integer $id_adh   Member id
      *
      * @return Response
      */
@@ -160,7 +160,7 @@ class PdfController extends AbstractController
 
         // Fill array $selected with selected ids
         $selected = array();
-        if (isset($unique) && $unique) {
+        if (isset($unique)) {
             $selected[] = $unique;
         } else {
             $selected = $filters->selected;
index 9334d2c24c73f246fb5639c6562af4f34e5e25dc..9aac05df4f0cd796c8b29327fc8b78d2b6e58f94 100644 (file)
@@ -785,7 +785,7 @@ class Install
                 $zdb->connection->rollBack();
             } catch (\PDOException $e) {
                 //to avoid php8/mysql autocommit issue
-                if ($zdb->isPostgres() || (!$zdb->isPostgres() && !str_contains($e->getMessage(), 'no active transaction'))) {
+                if ($zdb->isPostgres() || !str_contains($e->getMessage(), 'no active transaction')) {
                     throw $e;
                 }
             }
@@ -794,7 +794,7 @@ class Install
                 $zdb->connection->commit();
             } catch (\PDOException $e) {
                 //to avoid php8/mysql autocommit issue
-                if ($zdb->isPostgres() || (!$zdb->isPostgres() && !str_contains($e->getMessage(), 'no active transaction'))) {
+                if ($zdb->isPostgres() || !str_contains($e->getMessage(), 'no active transaction')) {
                     throw $e;
                 }
             }
@@ -1105,7 +1105,7 @@ class Install
         $conffile = GALETTE_CONFIG_PATH . 'config.inc.php';
         if (
             is_writable(GALETTE_CONFIG_PATH)
-            && (!file_exists($conffile) || file_exists($conffile) && is_writable($conffile))
+            && (!file_exists($conffile) || is_writable($conffile))
             && $fd = @fopen($conffile, 'w')
         ) {
                 $data = "<?php
index d31a13d473aada48e7dfefb121e67126ace32db9..3ef11adc19309a12542462bd06014afad1fdee78 100644 (file)
@@ -78,8 +78,6 @@ class MailingHistory extends History
     private $sender_address;
     private $sent = false;
 
-    private $senders;
-
     /**
      * Default constructor
      *
index e8ff0954143782a61a4880a44faa54cf7da4d6a1..b789eb8776064c5d78103952b2f82bcb4e48f4fe 100644 (file)
@@ -621,8 +621,7 @@ class Preferences
         foreach ($insert_values as $champ => $valeur) {
             if (
                 $login->isSuperAdmin()
-                || (!$login->isSuperAdmin()
-                && ($champ != 'pref_admin_pass' && $champ != 'pref_admin_login'))
+                || $champ != 'pref_admin_pass' && $champ != 'pref_admin_login'
             ) {
                 if (
                     ($champ == "pref_admin_pass" && $_POST['pref_admin_pass'] != '')
@@ -691,10 +690,6 @@ class Preferences
                 }
                 break;
             case 'pref_numrows':
-                if (!is_numeric($value) || $value < 0) {
-                    $this->errors[] = _T("- The numbers and measures have to be integers!");
-                }
-                break;
             case 'pref_etiq_marges_h':
             case 'pref_etiq_marges_v':
             case 'pref_etiq_hspace':
@@ -708,10 +703,6 @@ class Preferences
             case 'pref_card_marges_h':
             case 'pref_card_hspace':
             case 'pref_card_vspace':
-                // prevent division by zero
-                if ($fieldname == 'pref_numrows' && $value == '0') {
-                    $value = '10';
-                }
                 if (!is_numeric($value) || $value < 0) {
                     $this->errors[] = _T("- The numbers and measures have to be integers!");
                 }
index 769c517e6c9d6ce2ef67a077b9e24e4825bf2e86..cf6361db9d0a9917220799c31a554444b920a0d4 100644 (file)
@@ -70,7 +70,7 @@ use Galette\Features\Dynamics;
  * @property string $stitle Title label
  * @property string $company_name
  * @property string $name
- * @property string $surname
+ * @property ?string $surname
  * @property string $nickname
  * @property string $birthdate Localized birthdate
  * @property string $rbirthdate Raw birthdate
@@ -1558,7 +1558,6 @@ class Adherent
                 }
             }
 
-            $success = false;
             if (empty($this->_id)) {
                 //we're inserting a new member
                 unset($values[self::PK]);
@@ -1585,7 +1584,6 @@ class Adherent
                             $this->sname
                         );
                     }
-                    $success = true;
 
                     $event = 'member.add';
                 } else {
@@ -1623,21 +1621,18 @@ class Adherent
                         $this->sname
                     );
                 }
-                $success = true;
                 $event = 'member.edit';
             }
 
             //dynamic fields
-            if ($success) {
-                $success = $this->dynamicsStore();
-                $this->storeSocials($this->id);
-            }
+            $this->dynamicsStore();
+            $this->storeSocials($this->id);
 
             //send event at the end of process, once all has been stored
             if ($event !== null) {
                 $emitter->dispatch(new GaletteEvent($event, $this));
             }
-            return $success;
+            return true;
         } catch (Throwable $e) {
             Analog::log(
                 'Something went wrong :\'( | ' . $e->getMessage() . "\n" .
index f290c560c74733482ba1a8d37e3a54596f6b2209..8017296954d0b5df16bc4ab81f3b352f2fa3e0fd 100644 (file)
@@ -660,7 +660,6 @@ class Contribution
                 unset($values['date_fin_cotis']);
             }
 
-            $success = false;
             if (!isset($this->_id) || $this->_id == '') {
                 //we're inserting a new contribution
                 unset($values[self::PK]);
@@ -677,7 +676,6 @@ class Contribution
                         _T("Contribution added"),
                         Adherent::getSName($this->zdb, $this->_member)
                     );
-                    $success = true;
                     $event = 'contribution.add';
                 } else {
                     $hist->add(_T("Fail to add new contribution."));
@@ -705,7 +703,6 @@ class Contribution
                         'An error occurred updating contribution # ' . $this->_id . '!'
                     );
                 }
-                $success = true;
                 $event = 'contribution.edit';
             }
             //update deadline
@@ -714,9 +711,7 @@ class Contribution
             }
 
             //dynamic fields
-            if ($success) {
-                $success = $this->dynamicsStore(true);
-            }
+            $this->dynamicsStore(true);
 
             $this->zdb->connection->commit();
             $this->_orig_amount = $this->_amount;
index e2f0842390daa99acaef6b72f35e4d3ef8cd88ce..b61859d4c19360ac0cab3161a1fc1a2c182988ca 100644 (file)
@@ -484,11 +484,11 @@ abstract class PdfModel
             case 'footer':
             case 'body':
                 if ($value === null || trim($value) === '') {
-                    if ($name !== 'body' && get_class($this) === 'PdfMain') {
+                    if ($name !== 'body' && get_class($this) === PdfMain::class) {
                         throw new \UnexpectedValueException(
                             _T("header and footer should not be empty!")
                         );
-                    } elseif ($name === 'body' && get_class($this) !== 'PdfMain') {
+                    } elseif ($name === 'body' && get_class($this) !== PdfMain::class) {
                         throw new \UnexpectedValueException(
                             _T("body should not be empty!")
                         );
index bd6bc1608c86da8228f0d51122f43514fd9b015d..5acb5f5f079c794ade1c55c89086d28d0c5b14e9 100644 (file)
@@ -349,6 +349,8 @@ class Reminder
             case 'type':
             case 'date':
                 return $this->$name;
+            case 'comment':
+                return $this->comment;
             default:
                 Analog::log(
                     'Unable to get Reminder property ' . $name,
@@ -372,6 +374,7 @@ class Reminder
             case 'member_id':
             case 'type':
             case 'date':
+            case 'comment':
                 return true;
         }
         return false;
index 3fcdef66b05568167ac3ccaba0ca7e1ad6544f67..b5136e14a98ea8924365af107aaee70002edf6fe 100644 (file)
@@ -308,7 +308,6 @@ class SavedSearch
                     } else {
                         return $this->$name;
                     }
-                    break;
             }
         }
     }
index 534c622397f1ac646ff241298bca1578d19577df..94a5fb36fa39d8635b0dc1855ad638879e9d928e 100644 (file)
@@ -437,7 +437,6 @@ class Transaction
                 $values[$field] = $this->$prop;
             }
 
-            $success = false;
             if (!isset($this->_id) || $this->_id == '') {
                 //we're inserting a new transaction
                 unset($values[self::PK]);
@@ -452,7 +451,6 @@ class Transaction
                         _T("Transaction added"),
                         Adherent::getSName($this->zdb, $this->_member)
                     );
-                    $success = true;
                     $event = 'transaction.add';
                 } else {
                     $hist->add(_T("Fail to add new transaction."));
@@ -473,14 +471,11 @@ class Transaction
                         Adherent::getSName($this->zdb, $this->_member)
                     );
                 }
-                $success = true;
                 $event = 'transaction.edit';
             }
 
             //dynamic fields
-            if ($success) {
-                $this->dynamicsStore(true);
-            }
+            $this->dynamicsStore(true);
 
             $this->zdb->connection->commit();
 
index 4be166191bbd5d93e0d8ac476b49fcfd8125ae34..b7b0263bcb30e6fa2a8218fa9341e4afef2384a5 100644 (file)
@@ -200,7 +200,6 @@ class ContributionsList extends Pagination
                             );
                             return $this->$name;
                         }
-                        break;
                     case 'rstart_date_filter':
                     case 'rend_date_filter':
                         //same as above, but raw format
index 2c24384cc9233e2ab9452295fd5ea44092a6881d..b3b933154b3b5c88c61373a8d9f364243112ed0d 100644 (file)
@@ -160,7 +160,6 @@ class TransactionsList extends Pagination
                             );
                             return $this->$name;
                         }
-                        break;
                     case 'rstart_date_filter':
                     case 'rend_date_filter':
                         //same as above, but raw format
index fc30ee954121ea3eb8f4ddcc43e204311db5c0ae..ae6511f440c5063aae88af7e386d9173dc072f34 100644 (file)
@@ -37,6 +37,7 @@
 namespace Galette\IO;
 
 use Analog\Analog;
+use Galette\Core\Db;
 use Laminas\Db\Sql\Expression;
 use Laminas\Db\Sql\Predicate\PredicateSet;
 use Galette\Entity\Status;
@@ -358,6 +359,7 @@ class Charts
      */
     private function getChartContribsAllTime()
     {
+        /** @var Db $zdb */
         global $zdb;
 
         $select = $zdb->select(Contribution::TABLE);
@@ -368,10 +370,10 @@ class Charts
         );
         $groupby = null;
 
-        if (TYPE_DB === 'pgsql') {
+        if ($zdb->isPostgres()) {
             $cols['date'] = new Expression('date_trunc(\'month\', date_enreg)');
             $groupby = new Expression('date_trunc(\'month\', date_enreg)');
-        } elseif (TYPE_DB === 'mysql') {
+        } else {
             $cols['date'] = new Expression('date_format(date_enreg, \'%Y-%m\')');
             $groupby = new Expression('date_format(date_enreg, \'%Y-%m\')');
         }
index 3dcc806019485474bf4410181cb41f7b459c22a0..027e1a377e346feaa825d86108070b336e2219e3 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2021 The Galette Team
+ * Copyright © 2021-2023 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 2019 The Galette Team
+ * @copyright 2021-2023 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.6-dev - 2021-11-07
@@ -40,9 +40,7 @@ use ArrayObject;
 use DateTime;
 use Galette\Core\Db;
 use Galette\Core\Login;
-use Galette\Core\Authentication;
 use Galette\Entity\Adherent;
-use Galette\Entity\Contribution;
 use Galette\Entity\ContributionsTypes;
 use Galette\Repository\Contributions;
 use Galette\Filters\ContributionsList;
@@ -55,7 +53,7 @@ use Galette\Repository\PaymentTypes;
  * @name      Csv
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2021 The Galette Team
+ * @copyright 2021-2023 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.6-dev - 2021-11-07
@@ -67,9 +65,6 @@ class ContributionsCsv extends CsvOut
     private $path;
     private $zdb;
     private $login;
-    private $members_fields;
-    private $fields_config;
-    private $filters;
     private $type;
 
     /**
index 3a26074da8b1911c038c33f7e8d80ab341ae657f..9eb339bfe9e7d9d817b8ae31a23e4a5e8378ae39 100644 (file)
@@ -60,7 +60,6 @@ class CsvOut extends Csv
 {
     public const DEFAULT_DIRECTORY = GALETTE_EXPORTS_PATH;
 
-    private $rs;
     private $parameted_path;
     private $legacy_parameted_file = 'exports.xml';
     private $parameted_file = 'exports.yaml';
index 960cfd4b8b67eb97f3e5adb52775e54393168bb8..1804cd8968490b327ee16ee84a15905baeeef8ff 100644 (file)
@@ -107,7 +107,6 @@ class ExternalScript
                 break;
             default:
                 throw new \RuntimeException('Unknown protocol.');
-                break;
         }
 
         Analog::log(
index 8166205c681a20a2d3ef140998a23b53168842e0..dd57b9e914a0f918478fc5ce55372456af1c89e7 100644 (file)
@@ -69,7 +69,6 @@ class MembersCsv extends CsvOut
     private $login;
     private $members_fields;
     private $fields_config;
-    private $filters;
 
     /**
      * Default constructor
index f4d9ec96a00dba37eda528d17edf5c5f8c089bf9..1385f44e753f9276a5d35d505f4815233714f61a 100644 (file)
@@ -79,9 +79,9 @@ class Pdf extends \TCPDF
      * Main constructor, set creator and author
      *
      * @param Preferences $prefs Preferences
-     * @param PdfModel    $model Related model
+     * @param ?PdfModel   $model Related model
      */
-    public function __construct(Preferences $prefs, $model = null)
+    public function __construct(Preferences $prefs, ?PdfModel $model = null)
     {
         global $i18n;
 
@@ -108,14 +108,8 @@ class Pdf extends \TCPDF
         }
 
         if ($model !== null) {
-            if ($model instanceof PdfModel) {
-                $this->model = $model;
-                $this->SetTitle($this->model->htitle);
-            } else {
-                throw new \UnexpectedValueException(
-                    'Provided model must be an instance of PdfModel!'
-                );
-            }
+            $this->model = $model;
+            $this->SetTitle($this->model->htitle);
         }
     }
 
index 5239fffe506f87e04349395ffac8d1deff117a57..a6717a14be6d78b9fabf7f6423de42c12f3fd005 100644 (file)
@@ -127,74 +127,72 @@ class Authenticate
                     'Location',
                     $this->routeparser->urlFor('slash')
                 )->withStatus(302);
-        } else {
-            //check for ACLs
-            $routeContext = RouteContext::fromRequest($request);
-            $route = $routeContext->getRoute();
-            $cur_route = $route->getName();
-            $acl = $this->getAclFor($cur_route);
-
-            $go = false;
-            switch ($acl) {
-                case 'superadmin':
-                    if ($this->login->isSuperAdmin()) {
-                        $go = true;
-                    }
-                    break;
-                case 'admin':
-                    if (
-                        $this->login->isSuperAdmin()
-                        || $this->login->isAdmin()
-                    ) {
-                        $go = true;
-                    }
-                    break;
-                case 'staff':
-                    if (
-                        $this->login->isSuperAdmin()
-                        || $this->login->isAdmin()
-                        || $this->login->isStaff()
-                    ) {
-                        $go = true;
-                    }
-                    break;
-                case 'groupmanager':
-                    if (
-                        $this->login->isSuperAdmin()
-                        || $this->login->isAdmin()
-                        || $this->login->isStaff()
-                        || $this->login->isGroupManager()
-                    ) {
-                        $go = true;
-                    }
-                    break;
-                case 'member':
-                    if ($this->login->isLogged()) {
-                        $go = true;
-                    }
-                    break;
-                default:
-                    throw new \RuntimeException(
-                        str_replace(
-                            '%acl',
-                            $acl,
-                            _T("Unknown ACL rule '%acl'!")
-                        )
-                    );
-            }
-            if (!$go) {
-                Analog::log(
-                    'Permission denied for route ' . $cur_route . ' for user ' . $this->login->login,
-                    Analog::DEBUG
-                );
-                $this->flash->addMessage(
-                    'error_detected',
-                    _T("You do not have permission for requested URL.")
+        }
+
+        //check for ACLs
+        $routeContext = RouteContext::fromRequest($request);
+        $route = $routeContext->getRoute();
+        $cur_route = $route->getName();
+        $acl = $this->getAclFor($cur_route);
+
+        $go = false;
+        switch ($acl) {
+            case 'superadmin':
+                if ($this->login->isSuperAdmin()) {
+                    $go = true;
+                }
+                break;
+            case 'admin':
+                if (
+                    $this->login->isSuperAdmin()
+                    || $this->login->isAdmin()
+                ) {
+                    $go = true;
+                }
+                break;
+            case 'staff':
+                if (
+                    $this->login->isSuperAdmin()
+                    || $this->login->isAdmin()
+                    || $this->login->isStaff()
+                ) {
+                    $go = true;
+                }
+                break;
+            case 'groupmanager':
+                if (
+                    $this->login->isSuperAdmin()
+                    || $this->login->isAdmin()
+                    || $this->login->isStaff()
+                    || $this->login->isGroupManager()
+                ) {
+                    $go = true;
+                }
+                break;
+            case 'member':
+                $go = true;
+                break;
+            default:
+                throw new \RuntimeException(
+                    str_replace(
+                        '%acl',
+                        $acl,
+                        _T("Unknown ACL rule '%acl'!")
+                    )
                 );
-                return $response
-                    ->withHeader('Location', $this->routeparser->urlFor('slash'))
-                    ->withStatus(302);
-            }
+        }
+        if (!$go) {
+            Analog::log(
+                'Permission denied for route ' . $cur_route . ' for user ' . $this->login->login,
+                Analog::DEBUG
+            );
+            $this->flash->addMessage(
+                'error_detected',
+                _T("You do not have permission for requested URL.")
+            );
+            return $response
+                ->withHeader('Location', $this->routeparser->urlFor('slash'))
+                ->withStatus(302);
         }
 
         return $handler->handle($request);
index 47d64b06616f9c76ac316384660854cba189e5ff..f820e7f16b153292e7522606f7ae20651c169909 100644 (file)
@@ -416,7 +416,7 @@ class Contributions
                     );
                     if (
                         !$member->hasParent() ||
-                        $member->hasParent() && $member->parent->id != $this->login->id
+                        $member->parent->id != $this->login->id
                     ) {
                         Analog::log(
                             'Trying to display contributions for member #' . $member->id .
index 825f112a79ad1e29eeb06996f50094f459ded44d..5aec669a673c1016efd5dfeaa47fcd6355f3517e 100644 (file)
@@ -1005,6 +1005,10 @@ class Members
      */
     private function buildWhereClause(Select $select)
     {
+        /**
+         * @var Db $zdb
+         * @var Login $login
+         */
         global $zdb, $login;
 
         try {
@@ -1021,7 +1025,7 @@ class Members
                 );
                 switch ($this->filters->field_filter) {
                     case self::FILTER_NAME:
-                        if (TYPE_DB === 'pgsql') {
+                        if ($zdb->isPostgres()) {
                             $sep = " || ' ' || ";
                             $pre = '';
                             $post = '';
index b271ea754ea71983e1e67c47f713a391556de024..49618d47e07049ea9523b400e1ca1c59e5a9d0cc 100644 (file)
@@ -133,7 +133,7 @@ class SavedSearches
      * @param bool  $count  true if we want to count members
      *                      (not applicable from static calls), defaults to false
      *
-     * @return string SELECT statement
+     * @return Select SELECT statement
      */
     private function buildSelect($fields, $count = false)
     {
@@ -243,7 +243,7 @@ class SavedSearches
             $list = $ids;
         }
 
-        if (is_array($list)) {
+        if (count($list)) {
             try {
                 if ($transaction) {
                     $this->zdb->connection->beginTransaction();
index 4da31b5e9ab035bf09ae06dfc659647b9d227c4c..c0165f1d9027fef3caff6fe1bdaaa7ed17233610 100644 (file)
@@ -279,7 +279,7 @@ class Transactions
                     );
                     if (
                         !$member->hasParent() ||
-                        $member->hasParent() && $member->parent->id != $this->login->id
+                        $member->parent->id != $this->login->id
                     ) {
                         Analog::log(
                             'Trying to display transactions for member #' . $member->id .