* someone has
*/
private $fsf_org_id;
+ private $gift_redeem_page_id;
+
+ private $nomination_process_active;
private $nomination_process_contrib_start_date;
private $nomination_process_contrib_end_date;
- private $gift_redeem_page_id;
- private $donation_threshold;
- private $membership_donation_threshold;
- private $adhoc_access_group_id;
+ private $nomination_process_adhoc_access_group_id;
+ private $membership_monthly_rate;
+ private $student_membership_monthly_rate;
/**
* Constructor for this authentication source.
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', 'donation_threshold',
- 'membership_donation_threshold',
+ 'query_nomination_process_adhoc',
+
+ 'fsf_org_id',
+ 'gift_redeem_page_id',
+
+ 'nomination_process_active',
'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)) {
}
//
- // query for access to board nomination process
+ // helper functions for access to board nomination / discussion process
//
- $start_date = $this->nomination_process_contrib_start_date;
- $end_date = $this->nomination_process_contrib_end_date;
-
/**
* @param string $query_name Name of query in authsources
- * @param number $amount Amount to compare result to
- * @param boolean $all_contribs Pass as 'all_contribs' param. The var may also be null to exclude it
- * @param boolean $gift_redeem_page_id Pass as 'gift_redeem_page_id' param. The var may also be null to exclude it
+ * @param array $extra_params Associative array of parameters to include in query
*/
- $meets_a_donation_criterion = function ($query_name, $extra_params, $amount)
- use ($username, $start_date, $end_date, $attributes) {
+ $donation_query = function ($query_name, $extra_params)
+ use ($username) {
$parameters = ['username' => $username];
$parameters[$key] = $value;
}
- $result = $this->query_db($query_name, $parameters);
+ return $this->query_db($query_name, $parameters);
+ };
+ $compare_res = function ($result, $amount) {
foreach ($result[0] as $key => $value) {
- if (intval($value) >= $amount) {
- return true;
- }
+ if (intval($value) >= $amount) {
+ return true;
+ }
}
return false;
};
- $donation_params = ['start_date' => $start_date, 'end_date' => $end_date, 'all_contribs' => true];
- $membership_params = ['start_date' => $start_date, 'end_date' => $end_date, 'all_contribs' => false];
+ // looks for memberships / comparable donations in time window. also
+ // looks for a membership or donation (included as a param) that
+ // occurred up to a year before, and that would have carried over into
+ // the time window with a single donation. this approximates whether
+ // the person was, or would have been, a member during the configured
+ // time window.
+ $nomination_process_analyze_history = function ($selective_donations_history)
+ use ($start_date, $end_date) {
+
+ $eligible = false;
+
+ $start_date_obj = new \DateTime($start_date);
+ $end_date_obj = new \DateTime($end_date);
+
+ foreach ($selective_donations_history as $row) {
+
+ $amount = intval($row['amount']);
+ $member_type_id = $row['member_type_id'];
+ $receive_date_obj = new \DateTime($row['receive_date']);
+
+ if ($amount < 5) {
+ continue;
+
+ } elseif ($receive_date_obj >= $start_date_obj and $receive_date_obj <= $end_date_obj) {
+ return true;
+
+ } elseif ($receive_date_obj < $start_date_obj) {
+ switch ($member_type_id) {
+ case '1':
+ case '2':
+ $rate = intval($this->student_membership_monthly_rate);
+ break;
+ case '8':
+ case '9':
+ case null:
+ default:
+ $rate = intval($this->membership_monthly_rate);
+ break;
+ }
+ $membership_end_date_obj = new \DateTime($row['receive_date']);
+ $membership_end_date_obj->add(new \DateInterval("P" . ceil($amount / $rate) . "M"));
+
+ if ($membership_end_date_obj >= $start_date_obj) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ //
+ // nomination form participation specific checks
+ //
+
+ $start_date = $this->nomination_process_contrib_start_date;
+ $end_date = $this->nomination_process_contrib_end_date;
+
+ $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 (($meets_a_donation_criterion('query_nomination_process_donations', $donation_params, intval($this->donation_threshold))
- || $meets_a_donation_criterion('query_nomination_process_donations', $membership_params, intval($this->membership_donation_threshold))
- || $meets_a_donation_criterion('query_nomination_process_gift_receipt', $gift_member_params, 1)
- || $meets_a_donation_criterion('query_nomination_process_adhoc', $adhoc_params, 1)
- )
- && ($attributes['is_member'] == ['true'])) {
+ if ($this->nomination_process_active == 'true' ) {
+ if ($compare_res($donation_query('query_nomination_process_adhoc', $adhoc_params), 1)) {
+ $attributes['nomination_process'] = ['true'];
- $attributes['nomination_process'] = ['true'];
+ } elseif ($attributes['is_member'] == ['true']
+ && ($nomination_process_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 {
+ Logger::debug('fsfdrupalauth:'.$this->authId.
+ ': Not a member / comparable donor during window for board process.');
+ $attributes['nomination_process'] = ['false'];
+ }
} else {
$attributes['nomination_process'] = ['false'];
}
}
$value = (string) $value;
- if ($value === $username) {
+ if (strtolower($value) === strtolower($username)) {
// they are staff
- $attributes[$key] = ['true'];
+ $attributes['is_fsf_staff'] = ['true'];
break;
}
}