/**
  * Function to return singleton object
  * 
  * @return object $_singleton
  * @access public
  * @static
  */
 public static function &singleton($contact_id)
 {
     if (self::$_singleton === NULL) {
         self::$_singleton = new CRM_Lidmaatschapwijziging_ConfigMembership($contact_id);
     }
     return self::$_singleton;
 }
 function postProcess()
 {
     $values = $this->exportValues();
     $this->_configMembership = CRM_Lidmaatschapwijziging_ConfigMembership::singleton($this->_contactId);
     // empty
     if ('empty' == $this->_request) {
         // set message
         $session = CRM_Core_Session::singleton();
         $session->setStatus(ts('Voor %1 bestaat geen lidmaatschap !', $this->_display_name), ts('Lidmaatschap Wijziging - Lidmaatschap'), 'warning');
         // redirect user
         $url = CRM_Utils_System::url('civicrm/lidmaatschapwijziging/relationship', 'reset=1&request=choose&cid=' . $this->_contactId);
         CRM_Utils_System::redirect($url);
     }
     // choose
     if ('choose' == $this->_request) {
         // set message
         $session = CRM_Core_Session::singleton();
         // redirect user
         $url = CRM_Utils_System::url('civicrm/lidmaatschapwijziging/membership', 'reset=1&request=update&cid=' . $this->_contactId . '&membership_id=' . $values['membership_id']);
         CRM_Utils_System::redirect($url);
     }
     if ('update' == $this->_request) {
         // api create membership
         try {
             $params = array('version' => 3, 'sequential' => 1, 'contact_id' => $this->_contactId, 'membership_id' => $this->_membershipId, 'membership_type_id' => $values['membership_type_id'], 'source' => $values['source'], 'start_date' => $values['start_date'], 'end_date' => $values['end_date'], 'is_override' => $values['is_override'], 'status_id' => $values['status_id']);
             // for the custom values in membership, the need to be custom_35 and not huppeldepup
             foreach ($this->_configMembership->getMembershipCustomFields() as $key => $field) {
                 if (isset($values[$field['name']])) {
                     $params['custom_' . $field['id']] = $values[$field['name']];
                 }
             }
             $result = civicrm_api('Membership', 'create', $params);
             // check no error
             if (isset($result['is_error']) and !$result['is_error']) {
                 // if there is no error
                 // set message
                 $session = CRM_Core_Session::singleton();
                 $session->setStatus(ts('%1 is opgeslagen !', $this->_display_name), ts('Lidmaatschap Wijziging - Lidmaatschap'), 'success');
                 // redirect user
                 $url = CRM_Utils_System::url('civicrm/lidmaatschapwijziging/relationship', 'reset=1&request=choose&cid=' . $this->_contactId);
                 CRM_Utils_System::redirect($url);
             } else {
                 // if there is a error
                 // set message
                 $session = CRM_Core_Session::singleton();
                 $session->setStatus(ts('Er is een error: %1, %2 is niet opgeslagen !', array($result['error_message'], $this->_display_name)), ts('Lidmaatschap Wijziging - Lidmaatschap'), 'error');
                 // redirect user
                 $url = CRM_Utils_System::url('civicrm/lidmaatschapwijziging/membership', 'reset=1&cid=' . $this->_contactId);
                 CRM_Utils_System::redirect($url);
             }
         } catch (CiviCRM_API3_Exception $ex) {
             throw new Exception('Could not create contact, ' . 'error from Api Contact create: ' . $ex->getMessage());
         }
     }
     //parent::postProcess();
 }