clean up, reorder logic for nomination process
authorAndrew Engelbrecht <andrew@fsf.org>
Mon, 24 Apr 2023 20:21:23 +0000 (16:21 -0400)
committerroot <root@login0d.fsf.org>
Mon, 24 Apr 2023 20:21:23 +0000 (16:21 -0400)
this should run faster in most cases by making later queries not run if
the user is not a member

docs/fsf-drupal-auth.md
lib/Auth/Source/FSFDrupalAuth.php

index fc0c079fb350b4aa5567663e5a63c0d698cde03f..cbd50955fd743bb0aeb7de578425459afe868d86 100644 (file)
@@ -19,18 +19,19 @@ SQL queries in `config/authsources.php` should be something like the following:
         // don't filter with 'and c.is_test = 0' because these may be useful for FSF staff
         'query_membership' => "select c.status_id from drupal.users a inner join civicrm.civicrm_uf_match b on a.uid=b.uf_id inner join civicrm.civicrm_membership c on b.contact_id=c.contact_id inner join civicrm.civicrm_contact d on c.contact_id=d.id where a.status = 1 and d.is_deleted = 0 and c.status_id is not NULL and a.name = :username and (c.status_id = 1 or c.status_id = 2 or c.status_id = 3 or c.status_id = 4) order by c.status_id limit 10;",
         'query_staff' => "select a.name as is_fsf_staff from drupal.users a inner join civicrm.civicrm_uf_match b on a.uid=b.uf_id inner join civicrm.civicrm_contact c on b.contact_id=c.id inner join civicrm.civicrm_relationship d on c.id=d.contact_id_a where a.name=:username and a.status=1 and c.is_deleted=0 and d.relationship_type_id=4 and d.contact_id_b = :fsf_org_id and d.is_active=1 and (d.end_date>NOW() or d.end_date is NULL) limit 1;",
+
         'query_nomination_process_donations' => "select d.total_amount as amount, d.receive_date as receive_date, f.membership_type_id as member_type_id from drupal.users a inner join civicrm.civicrm_uf_match b on a.uid=b.uf_id inner join civicrm.civicrm_contact c on b.contact_id=c.id inner join civicrm.civicrm_contribution d on c.id=d.contact_id left join civicrm.civicrm_membership_payment e on d.id=e.contribution_id left join civicrm.civicrm_membership f on e.membership_id=f.id where a.name = :username and d.contribution_status_id = 1 and d.receive_date > subdate(:start_date, interval 1 year) and d.receive_date < :end_date;",
         'query_nomination_process_gift_receipt' => "select count(*) as gift_memberships_count from drupal.users a inner join civicrm.civicrm_uf_match b on a.uid=b.uf_id inner join civicrm.civicrm_contact c on b.contact_id=c.id inner join civicrm.civicrm_contribution d on c.id=d.contact_id where a.name = :username and d.contribution_page_id = :gift_redeem_page_id and d.receive_date > :start_date and d.receive_date < :end_date;",
         'query_nomination_process_adhoc' => "select count(*) as is_adhoc_member from drupal.users a inner join civicrm.civicrm_uf_match b on a.uid=b.uf_id inner join civicrm.civicrm_contact c on b.contact_id=c.id inner join civicrm.civicrm_group_contact d on c.id=d.contact_id where a.name=:username and a.status=1 and c.is_deleted=0 and d.group_id = :adhoc_access_group_id and d.status = 'Added' limit 1;",
 
         'fsf_org_id' => '739106',
+        'gift_redeem_page_id' => '63',
 
         'nomination_process_contrib_start_date' => '2017-01-01',
         'nomination_process_contrib_end_date' => '2022-01-01',
-        'gift_redeem_page_id' => '63',
+        'nomination_process_adhoc_access_group_id' => '1786',
         'membership_monthly_rate' => '10',
         'student_membership_monthly_rate' => '5',
-        'adhoc_access_group_id' => '1786',
     ],
 
 ## License
index 21b1e7fb629dadeb30124bc25e791b7a361c600c..7a1f68d65c68d3a5f13d79a828657f90f710ad8d 100644 (file)
@@ -53,12 +53,13 @@ class FSFDrupalAuth extends \SimpleSAML\Module\core\Auth\UserPassBase
      * someone has
      */
     private $fsf_org_id;
+    private $gift_redeem_page_id;
+
     private $nomination_process_contrib_start_date;
     private $nomination_process_contrib_end_date;
-    private $gift_redeem_page_id;
+    private $nomination_process_adhoc_access_group_id;
     private $membership_monthly_rate;
     private $student_membership_monthly_rate;
-    private $adhoc_access_group_id;
 
     /**
      * Constructor for this authentication source.
@@ -75,15 +76,26 @@ class FSFDrupalAuth extends \SimpleSAML\Module\core\Auth\UserPassBase
         parent::__construct($info, $config);
 
         // Make sure that all required parameters are present.
-       foreach (['dsn', 'username', 'password', 'query_main',
-               'query_membership', 'query_staff',
+       foreach (['dsn',
+               'username',
+               'password',
+
+               'query_main',
+               'query_membership',
+               'query_staff',
+
                'query_nomination_process_donations',
                'query_nomination_process_gift_receipt',
-               'query_nomination_process_adhoc', 'gift_redeem_page_id',
-               'fsf_org_id', 'membership_monthly_rate',
-               'student_membership_monthly_rate',
+               'query_nomination_process_adhoc',
+
+               'fsf_org_id',
+               'gift_redeem_page_id',
+
                'nomination_process_contrib_start_date',
-               'nomination_process_contrib_end_date', 'adhoc_access_group_id']
+               'nomination_process_contrib_end_date',
+               'nomination_process_adhoc_access_group_id',
+               'membership_monthly_rate',
+               'student_membership_monthly_rate']
                as $param) {
 
             if (!array_key_exists($param, $config)) {
@@ -369,12 +381,11 @@ class FSFDrupalAuth extends \SimpleSAML\Module\core\Auth\UserPassBase
 
        $donation_params    = ['start_date' => $start_date, 'end_date' => $end_date];
        $gift_member_params = ['start_date' => $start_date, 'end_date' => $end_date, 'gift_redeem_page_id' => intval($this->gift_redeem_page_id)];
-       $adhoc_params       = ['adhoc_access_group_id' => intval($this->adhoc_access_group_id)];
+       $adhoc_params       = ['adhoc_access_group_id' => intval($this->nomination_process_adhoc_access_group_id)];
 
-       if (($analyze_history($donation_query('query_nomination_process_donations', $donation_params))
-               || $compare_res($donation_query('query_nomination_process_gift_receipt', $gift_member_params), 1)
-            ) && ($attributes['is_member'] == ['true'])
-             || $compare_res($donation_query('query_nomination_process_adhoc', $adhoc_params), 1)) {
+       if ($compare_res($donation_query('query_nomination_process_adhoc', $adhoc_params), 1) || ($attributes['is_member'] == ['true']
+           && ($analyze_history($donation_query('query_nomination_process_donations', $donation_params))
+               || $compare_res($donation_query('query_nomination_process_gift_receipt', $gift_member_params), 1)))) {
 
                $attributes['nomination_process'] = ['true'];
        } else {