/**
  * Function to return singleton object
  * 
  * @return object $_singleton
  * @access public
  * @static
  */
 public static function &singleton()
 {
     if (self::$_singleton === NULL) {
         self::$_singleton = new CRM_Lidmaatschaphistorie_Config();
     }
     return self::$_singleton;
 }
function lidmaatschap_historie($op, $id, $params)
{
    $lidmaatschap_config = CRM_Lidmaatschaphistorie_Config::singleton();
    if ('create' == $op) {
        $newvalues = lidmaatschap_historie_new_values($params);
        $activity_params = lidmaatschap_historie_create($lidmaatschap_config, $newvalues);
    }
    if ('edit' == $op) {
        $newvalues = lidmaatschap_historie_new_values($params);
        $oldvalues = lidmaatschap_historie_old_values($id);
        $activity_params = lidmaatschap_historie_edit($lidmaatschap_config, $newvalues, $oldvalues);
    }
    if ('create' == $op or 'edit' == $op) {
        if ($activity_params) {
            // if there are no activity params (nothing has changed) don not create a lidmaatschap historie activity
            lidmaatschap_historie_activity($lidmaatschap_config, $params, $activity_params);
        }
    }
    if ('delete' == $op) {
        foreach ($params as $membership_id => $membership) {
            $activity_params = lidmaatschap_historie_delete();
            lidmaatschap_historie_activity($lidmaatschap_config, $membership, $activity_params);
        }
    }
}
 function __construct()
 {
     // There could be multiple contacts. We not clear on which contact id to display.
     // Lets hide it for now.
     $this->_exposeContactID = FALSE;
     $config = CRM_Core_Config::singleton();
     $campaignEnabled = in_array("CiviCampaign", $config->enableComponents);
     if ($campaignEnabled) {
         $getCampaigns = CRM_Campaign_BAO_Campaign::getPermissionedCampaigns(NULL, NULL, TRUE, FALSE, TRUE);
         $this->activeCampaigns = $getCampaigns['campaigns'];
         asort($this->activeCampaigns);
         $this->engagementLevels = CRM_Campaign_PseudoConstant::engagementLevel();
     }
     $this->activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'label', TRUE);
     asort($this->activityTypes);
     /*
      * BOS1502448 vnv.nl - lidmaatschap historie
      */
     $lidmaatschap_config = CRM_Lidmaatschaphistorie_Config::singleton();
     $this->_columns = array('civicrm_contact' => array('dao' => 'CRM_Contact_DAO_Contact', 'fields' => array('contact_source' => array('name' => 'sort_name', 'title' => ts('Source Contact Name'), 'alias' => 'civicrm_contact_source', 'no_repeat' => TRUE, 'default' => FALSE, 'no_display' => TRUE), 'contact_assignee' => array('name' => 'sort_name', 'title' => ts('Assignee Contact Name'), 'alias' => 'civicrm_contact_assignee', 'dbAlias' => "civicrm_contact_assignee.sort_name", 'default' => FALSE, 'no_display' => TRUE), 'contact_target' => array('name' => 'sort_name', 'title' => ts('Target Contact Name'), 'alias' => 'civicrm_contact_target', 'dbAlias' => "civicrm_contact_target.sort_name", 'default' => TRUE), 'contact_source_id' => array('name' => 'id', 'alias' => 'civicrm_contact_source', 'dbAlias' => "civicrm_contact_source.id", 'no_display' => TRUE, 'default' => TRUE, 'required' => TRUE), 'contact_assignee_id' => array('name' => 'id', 'alias' => 'civicrm_contact_assignee', 'dbAlias' => "civicrm_contact_assignee.id", 'no_display' => TRUE, 'default' => TRUE, 'required' => TRUE), 'contact_target_id' => array('name' => 'id', 'alias' => 'civicrm_contact_target', 'dbAlias' => "civicrm_contact_target.id", 'no_display' => TRUE, 'default' => TRUE, 'required' => TRUE)), 'filters' => array('contact_source' => array('name' => 'sort_name', 'alias' => 'civicrm_contact_source', 'title' => ts('Source Contact Name'), 'operator' => 'like', 'type' => CRM_Report_Form::OP_STRING), 'contact_assignee' => array('name' => 'sort_name', 'alias' => 'civicrm_contact_assignee', 'title' => ts('Assignee Contact Name'), 'operator' => 'like', 'type' => CRM_Report_Form::OP_STRING), 'contact_target' => array('name' => 'sort_name', 'alias' => 'civicrm_contact_target', 'title' => ts('Target Contact Name'), 'operator' => 'like', 'type' => CRM_Report_Form::OP_STRING), 'current_user' => array('name' => 'current_user', 'title' => ts('Limit To Current User'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_SELECT, 'options' => array('0' => ts('No'), '1' => ts('Yes')))), 'grouping' => 'contact-fields'), 'civicrm_email' => array('dao' => 'CRM_Core_DAO_Email', 'fields' => array('contact_source_email' => array('name' => 'email', 'title' => ts('Source Contact Email'), 'alias' => 'civicrm_email_source'), 'contact_assignee_email' => array('name' => 'email', 'title' => ts('Assignee Contact Email'), 'alias' => 'civicrm_email_assignee'), 'contact_target_email' => array('name' => 'email', 'title' => ts('Target Contact Email'), 'alias' => 'civicrm_email_target')), 'order_bys' => array('source_contact_email' => array('name' => 'email', 'title' => ts('Source Contact Email'), 'dbAlias' => 'civicrm_email_contact_source_email'))), 'civicrm_activity' => array('dao' => 'CRM_Activity_DAO_Activity', 'fields' => array('id' => array('title' => ts('Activity ID'), 'required' => TRUE), 'source_record_id' => array('no_display' => TRUE, 'title' => ts('Activity Contact Id'), 'required' => TRUE), 'activity_type_id' => array('title' => ts('Activity Type'), 'no_display' => TRUE, 'required' => TRUE, 'type' => CRM_Utils_Type::T_STRING), 'activity_subject' => array('title' => ts('Subject')), 'activity_date_time' => array('title' => ts('Activity Date'), 'no_display' => TRUE, 'required' => TRUE), 'status_id' => array('title' => ts('Activity Status'), 'type' => CRM_Utils_Type::T_STRING), 'duration' => array('title' => ts('Duration'), 'type' => CRM_Utils_Type::T_INT), 'details' => array('title' => ts('Activity Details'))), 'filters' => array('activity_date_time' => array('default' => '0', 'operatorType' => CRM_Report_Form::OP_DATE), 'activity_subject' => array('title' => ts('Activity Subject')), 'activity_type_id' => array('title' => ts('Activity Type'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => $this->activityTypes, 'default' => $lidmaatschap_config->get_lidmaatschap_historie_activity_id()), 'status_id' => array('title' => ts('Activity Status'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => CRM_Core_PseudoConstant::activityStatus()), 'details' => array('title' => ts('Activity Details'), 'type' => CRM_Utils_Type::T_TEXT)), 'order_bys' => array('activity_date_time' => array('title' => ts('Activity Date'), 'default_weight' => '1', 'dbAlias' => 'civicrm_activity_activity_date_time'), 'activity_type_id' => array('title' => ts('Activity Type'), 'default_weight' => '2', 'dbAlias' => 'civicrm_activity_activity_type_id')), 'grouping' => 'activity-fields', 'alias' => 'activity'), 'civicrm_activity_contact' => array('dao' => 'CRM_Activity_DAO_ActivityContact', 'fields' => array('id' => array('no_display' => TRUE, 'title' => ts('Activity Contact ID'), 'required' => TRUE), 'contact_id' => array('title' => ts('Contact ID'), 'required' => TRUE)))) + $this->addAddressFields(FALSE, TRUE);
     if ($campaignEnabled) {
         // Add display column and filter for Survey Results, Campaign and Engagement Index if CiviCampaign is enabled
         $this->_columns['civicrm_activity']['fields']['result'] = array('title' => 'Survey Result', 'default' => 'false');
         $this->_columns['civicrm_activity']['filters']['result'] = array('title' => ts('Survey Result'), 'operator' => 'like', 'type' => CRM_Utils_Type::T_STRING);
         if (!empty($this->activeCampaigns)) {
             $this->_columns['civicrm_activity']['fields']['campaign_id'] = array('title' => 'Campaign', 'default' => 'false');
             $this->_columns['civicrm_activity']['filters']['campaign_id'] = array('title' => ts('Campaign'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => $this->activeCampaigns);
         }
         if (!empty($this->engagementLevels)) {
             $this->_columns['civicrm_activity']['fields']['engagement_level'] = array('title' => 'Engagement Index', 'default' => 'false');
             $this->_columns['civicrm_activity']['filters']['engagement_level'] = array('title' => ts('Engagement Index'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => $this->engagementLevels);
         }
     }
     /*
      * Hack uncheck land field
      */
     $this->_columns['civicrm_address']['fields']['country_id']['default'] = false;
     $this->_groupFilter = TRUE;
     $this->_tagFilter = TRUE;
     parent::__construct();
     /*
      * $this->_lidmaatschap_historie_custom_group_id
      * Set custom fields default values and if check or not
      */
     $lidmaatschap_historie_custom_group = $lidmaatschap_config->get_lidmaatschap_historie_custom_group();
     $lidmaatschap_custom_group = $lidmaatschap_config->get_lidmaatschap_custom_group();
     if (isset($this->_columns[$lidmaatschap_historie_custom_group['table_name']]) and !empty($this->_columns[$lidmaatschap_historie_custom_group['table_name']])) {
         // add membership for lidmaatschap
         $this->_columns['civicrm_membership'] = array('dao' => 'CRM_Member_DAO_Membership', 'fields' => array('id' => array('no_display' => TRUE, 'title' => ts('Membership Id'), 'required' => TRUE, 'no_repeat' => TRUE)));
         // add the lidmaatschap
         $this->_columns[$lidmaatschap_custom_group['table_name']] = array('dao' => 'CRM_Contact_DAO_Contact', 'extends' => 'Membership', 'grouping' => $lidmaatschap_custom_group['table_name'], 'group_title' => $lidmaatschap_custom_group['title'], 'fields' => array());
         // add the lidmaatschap fields
         foreach ($lidmaatschap_config->get_lidmaatschap_custom_fields() as $custom_field_id => $custom_field) {
             $this->_columns[$lidmaatschap_custom_group['table_name']]['fields']['custom_' . $custom_field_id] = array('name' => strtolower($custom_field['name']) . '_' . $custom_field_id, 'title' => $custom_field['label']);
         }
         // check every custom field of lidmaatschap historie
         if (isset($this->_columns[$lidmaatschap_historie_custom_group['table_name']]['fields']) and !empty($this->_columns[$lidmaatschap_historie_custom_group['table_name']]['fields'])) {
             foreach ($lidmaatschap_config->get_lidmaatschap_historie_custom_fields() as $custom_field_id => $custom_field) {
                 if (isset($this->_columns[$lidmaatschap_historie_custom_group['table_name']]['fields']['custom_' . $custom_field_id]) and !empty($this->_columns[$lidmaatschap_historie_custom_group['table_name']]['fields']['custom_' . $custom_field_id])) {
                     $this->_columns[$lidmaatschap_historie_custom_group['table_name']]['fields']['custom_' . $custom_field_id]['default'] = TRUE;
                 }
             }
         }
     }
 }