/** * Identify all the households to check and do it * * If max_count is set, it will stop after that amount, * saving the last household id for the next call */ public function checkAllHouseholds($max_count = NULL) { $max_count = (int) $max_count; $activity_type_id = CRM_Householdmerge_Logic_Configuration::getCheckHouseholdActivityTypeID(); $activity_status_ids = CRM_Householdmerge_Logic_Configuration::getLiveActivityStatusIDs(); if ($max_count) { $contact_id_minimum = CRM_Core_BAO_Setting::getItem(CRM_Householdmerge_Logic_Configuration::$HHMERGE_SETTING_DOMAIN, 'hh_check_last_id'); if (!$contact_id_minimum) { $contact_id_minimum = 0; } $limit_clause = "LIMIT {$max_count}"; } else { $contact_id_minimum = 0; $limit_clause = ''; } $last_contact_id_processed = 0; $selector_sql = "SELECT civicrm_contact.id AS contact_id\n FROM civicrm_contact\n LEFT JOIN civicrm_activity_contact ON civicrm_activity_contact.contact_id = civicrm_contact.id\n LEFT JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_activity.id AND civicrm_activity.activity_type_id = {$activity_type_id} AND civicrm_activity.status_id IN ({$activity_status_ids})\n WHERE contact_type = 'Household'\n AND civicrm_activity.id IS NULL \n AND (civicrm_contact.is_deleted IS NULL or civicrm_contact.is_deleted = 0)\n AND civicrm_contact.id > {$contact_id_minimum}\n GROUP BY civicrm_contact.id\n ORDER BY civicrm_contact.id ASC\n {$limit_clause}"; $query = CRM_Core_DAO::executeQuery($selector_sql); while ($query->fetch()) { $last_contact_id_processed = $query->contact_id; $this->checkHousehold($last_contact_id_processed); $max_count--; } // done if ($max_count > 0) { // we're through the whole list, reset marker CRM_Core_BAO_Setting::setItem('0', CRM_Householdmerge_Logic_Configuration::$HHMERGE_SETTING_DOMAIN, 'hh_check_last_id'); } else { CRM_Core_BAO_Setting::setItem($last_contact_id_processed, CRM_Householdmerge_Logic_Configuration::$HHMERGE_SETTING_DOMAIN, 'hh_check_last_id'); } return; }
/** * Check if there alread is an (active) 'check' activity with this household */ protected function hasLiveActivity() { $activity_type_id = (int) CRM_Householdmerge_Logic_Configuration::getCheckHouseholdActivityTypeID(); $household_id = (int) $this->household_id; $activity_status_ids = CRM_Householdmerge_Logic_Configuration::getLiveActivityStatusIDs(); $sentinel = "[{$this->code}] %"; if (empty($this->params['member_id'])) { $member_clause = ""; } else { $member_id = (int) $this->params['member_id']; $member_clause = "AND EXISTS (SELECT id FROM civicrm_activity_contact WHERE activity_id = civicrm_activity.id AND contact_id = {$member_id} AND record_type_id = 3)"; } $selector_sql = "SELECT civicrm_activity.id AS activity_id\n FROM civicrm_activity\n LEFT JOIN civicrm_activity_contact target ON target.activity_id = civicrm_activity.id AND target.record_type_id = 3\n WHERE civicrm_activity.activity_type_id = {$activity_type_id} \n AND civicrm_activity.status_id IN ({$activity_status_ids})\n AND civicrm_activity.subject LIKE %1\n AND target.contact_id = {$household_id}\n {$member_clause} ;"; $selector_params = array(1 => array($sentinel, 'String')); $query = CRM_Core_DAO::executeQuery($selector_sql, $selector_params); return $query->fetch(); }