function buildQuickForm()
 {
     $this->addElement('select', 'membership_record', ts('Select Membership'), array('' => ts('Loading...')));
     $this->addElement('select', 'contribution_recur_record', ts('Select Recur Record'), array('' => ts('Loading...')));
     //$this->addElement('text', 'contact_name', 'Contact', array('size' => 50, 'maxlength' => 255));
     $this->addEntityRef('contact_name', ts('Contact'), array('create' => FALSE, 'api' => array('extra' => array('email'))));
     $this->addElement('hidden', 'cid', 'cid');
     $this->addElement('text', 'reference_number', 'Smart Debit Reference', array('size' => 50, 'maxlength' => 255));
     $this->addButtons(array(array('type' => 'upload', 'name' => ts('Next'))));
     // Get the smart Debit mandate details
     require_once 'CRM/SmartdebitReconciliation/Form/SmartdebitReconciliationList.php';
     $smartDebitResponse = CRM_SmartdebitReconciliation_Form_SmartdebitReconciliationList::getSmartDebitPayments(CRM_Utils_Array::value('reference_number', $_GET));
     $smartDebitMandate = $smartDebitResponse[0];
     // Display the smart debit payments details
     $el = $this->addElement('text', 'first_name', 'First Name', array('size' => 50, 'maxlength' => 255));
     $el->freeze();
     $el = $this->addElement('text', 'last_name', 'Last Name', array('size' => 50, 'maxlength' => 255));
     $el->freeze();
     $el = $this->addElement('text', 'email_address', 'Email Address', array('size' => 50, 'maxlength' => 255));
     $el->freeze();
     $el = $this->addElement('text', 'regular_amount', 'Amount', array('size' => 50, 'maxlength' => 255));
     $el->freeze();
     $el = $this->addElement('text', 'start_date', 'Start Date', array('size' => 50, 'maxlength' => 255));
     $el->freeze();
     $this->assign('SDMandateArray', $smartDebitMandate);
     $this->assign('memStatusCurrent', self::c_current_membership_status);
     //MV, to set the current membership as default, when ajax loading
     $cid = CRM_Utils_Array::value('cid', $_GET);
     $this->assign('cid', $cid);
     $this->addFormRule(array('CRM_SmartdebitReconciliation_Form_MembershipRecurDetails', 'formRule'), $this);
     parent::buildQuickForm();
 }
function smartdebit_civicrm_pageRun(&$page)
{
    $pageName = $page->getVar('_name');
    // To avoid standalone new contribution fail
    if ($pageName == 'CRM_Contribute_Page_Tab' && $page->getVar('_contactId')) {
        $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(false, null, 'name');
        if (!CRM_Utils_Array::key('Smart Debit', $paymentProcessorType)) {
            return;
        }
        $query = "\n      SELECT cr.id, cr.trxn_id FROM civicrm_contribution_recur cr\n      INNER JOIN civicrm_payment_processor cpp ON cpp.id = cr.payment_processor_id\n      INNER JOIN civicrm_payment_processor_type cppt ON cppt.id = cpp.payment_processor_type_id\n      LEFT JOIN civicrm_option_value opva ON (cr.payment_instrument_id = opva.value)\n      LEFT JOIN civicrm_option_group opgr ON (opgr.id = opva.option_group_id) \n      WHERE cppt.name = %1 AND cr.contact_id = %2 AND opgr.name = %3 AND opva.label = %4";
        $queryParams = array(1 => array('Smart Debit', 'String'), 2 => array($page->getVar('_contactId'), 'Int'), 3 => array('payment_instrument', 'String'), 4 => array('Direct Debit', 'String'));
        $dao = CRM_Core_DAO::executeQuery($query, $queryParams);
        $contributionRecurDetails = array();
        while ($dao->fetch()) {
            $smartDebitResponse = CRM_SmartdebitReconciliation_Form_SmartdebitReconciliationList::getSmartDebitPayments($dao->trxn_id);
            foreach ($smartDebitResponse[0] as $key => $value) {
                $contributionRecurDetails[$dao->id][$key] = $value;
            }
        }
        $contributionRecurDetails = json_encode($contributionRecurDetails);
        $page->assign('contributionRecurDetails', $contributionRecurDetails);
        $page->assign('smartdebit', TRUE);
    }
}