enableComponents) && CRM_Core_Permission::check('access CiviMember'); } /** * {@inheritdoc} */ public function fillTempTable($queryText, $entityIDTableName, $toTable, $queryLimit, $detailLimit) { $queries = $this->prepareQueries($queryText, $entityIDTableName); $result = $this->runQueries($queryText, $queries, $entityIDTableName, $queryLimit); $this->moveIDs($entityIDTableName, $toTable, $detailLimit); if (!empty($result['files'])) { $this->moveFileIDs($toTable, 'membership_id', $result['files']); } return $result; } /** * get membership ids in entity tables. * * @param string $queryText * @param string $entityIDTableName * @return array list tables/queries (for runQueries) */ function prepareQueries($queryText, $entityIDTableName) { // Note: For available full-text indices, see CRM_Core_InnoDBIndexer $contactSQL = array(); $contactSQL[] = " SELECT distinct cm.id FROM civicrm_membership cm INNER JOIN civicrm_contact c ON cm.contact_id = c.id WHERE ({$this->matchText('civicrm_contact c', array('sort_name', 'display_name', 'nick_name'), $queryText)}) "; $tables = array( 'civicrm_membership' => array( 'id' => 'id', 'fields' => array('source' => NULL), ), 'file' => array( 'xparent_table' => 'civicrm_membership', ), 'sql' => $contactSQL, ); // get the custom data info $this->fillCustomInfo($tables, "( 'Membership' )"); return $tables; } public function moveIDs($fromTable, $toTable, $limit) { $sql = " INSERT INTO {$toTable} ( table_name, contact_id, sort_name, membership_id, membership_type, membership_fee, membership_start_date, membership_end_date, membership_source, membership_status ) SELECT 'Membership', c.id, c.sort_name, cm.id, cmt.name, cc.total_amount, cm.start_date, cm.end_date, cm.source, cms.name FROM {$fromTable} ct INNER JOIN civicrm_membership cm ON cm.id = ct.entity_id LEFT JOIN civicrm_contact c ON cm.contact_id = c.id LEFT JOIN civicrm_membership_type cmt ON cmt.id = cm.membership_type_id LEFT JOIN civicrm_membership_payment cmp ON cmp.membership_id = cm.id LEFT JOIN civicrm_contribution cc ON cc.id = cmp.contribution_id LEFT JOIN civicrm_membership_status cms ON cms.id = cm.status_id {$this->toLimit($limit)} "; CRM_Core_DAO::executeQuery($sql); } }