Skip to main content

For Custom Data In Event Participant

Function Below shows Following When Participating for an event Using custom data :
1) Get the custom data contact .
2) If not Get then Create new contact .
3) Create New Participant for Event .
4) Check for Organization & create if organization not exist .
5) Check for Relationship & create if previous not available .



function eventType_customPath_civicrm_post( $op, $objectName, $objectId, &$objectRef ) {
    if ( $objectName == 'Participant' && $op == 'create' ) {
        require_once 'api/api.php';
        $config =& CRM_Core_Config::singleton( );
        $participantParams = $config->_customParams;

        $participantFirstNameId = array( 'custom_22', 'custom_60', 'custom_62' );   /* add custom first name Id */
        $participantLastNameId = array( 'custom_59', 'custom_61', 'custom_63' );    /* add custom last name Id */
        $participantEmailId = array( 'custom_64', 'custom_65', 'custom_66' );       /* add custom email Id */
        $orgFieldName = array( 'custom_73', 'custom_74', 'custom_75' );             /* add custom Organization name Id */

        $participant = array( );
        $date = date("Ymd His");
        $eventId = $objectRef->event_id;
        $participantStatusId = $objectRef->status_id;
        $primaryContactId = $objectRef->contact_id;
        $participantRoleId = $objectRef->role_id;

        foreach( $participantFirstNameId as $participantKey => $participantValue ) {
            if( !empty( $participantParams[0][ $participantValue ] ) && !empty( $participantParams[0][ $participantLastNameId[$participantKey] ] ) ) {
                $searchContact = array ( 'first_name'    => $participantParams[0][ $participantValue ],
                                         'last_name'     => $participantParams[0][ $participantLastNameId[$participantKey] ],
                                         'email'         => $participantParams[0][ $participantEmailId[$participantKey] ],
                                         'contact_type'  => 'Individual',
                                         'check_permissions' => false,
                                         'version'       => 3 );
                $contact = civicrm_api( 'Contact', 'Get', $searchContact );
                if( $contact['count'] ) {
                    foreach( $contact[ 'values' ] as $contactKey => $contactValue ){
                        $contactId[]['contact_id_a'] = $contactValue['contact_id'];
                        break;
                    }
                }else {
                    $createContact = array ( 'first_name'   => $participantParams[0][ $participantValue ],
                                             'last_name'    => $participantParams[0][ $participantLastNameId[$participantKey] ],
                                             'email'        => $participantParams[0][ $participantEmailId[$participantKey] ],
                                             'contact_type' => 'Individual',
                                             'check_permissions' => false,
                                             'version'      =>3 );
                    $contact = civicrm_api( 'Contact', 'Create', $createContact );
                    $contactId[]['contact_id_a'] = $contact['id'];
                }    
            }
            if( $contactId[ $participantKey ][ 'contact_id_a' ] ) {
                $createParticipant = array(
                                           'contact_id'        => $contactId [ $participantKey ][ 'contact_id_a' ],
                                           'event_id'          => $eventId,
                                           'status_id'         => $participantStatusId,
                                           'role_id'           => $participantRoleId,
                                           'registered_by_id'  => $objectRef->id,
                                           'register_date'     => $date,
                                           'check_permissions' => false,
                                           'version'           => 3
                                           );
                $secondaryParticipant = gstAddParticipant( $createParticipant );
            }
        }
        $participantIndex = 0;
        foreach( $orgFieldName as $orgKey => $orgValue ) {
            $params = array( 'version'            => 3,
                             'check_permissions'  => false,
                             'contact_type'       => 'Organization',
                             'organization_name'  => $participantParams[0][ $orgValue ] );
            $result = civicrm_api( 'contact', 'get', $params );
            if( !array_key_exists( 'id', $result ) ){
                foreach( $result['values'] as $resultKey => $resultValue  ){
                    $result['id'] = $resultValue['contact_id'];
                    break;
                }
            }
            if( !$result['count'] ){
                $individualParams = array( 'version'            => 3,
                                           'check_permissions'  => false,
                                           'contact_type'       => 'Organization',
                                           'organization_name'  => $participantParams[0][ $orgValue ] );
                $result = civicrm_api( 'contact', 'create', $params );
            }
            if($contactId[ $participantIndex ]['contact_id_a']){
                $contactId[ $participantIndex ]['contact_id_b'] = $result['id'];
                //CRM_Core_Error::debug( '$contactId', $contactId );
            }
            $participantIndex++;
        }
        foreach ( $contactId as $key => $value ) {
            $params = array(
                            'contact_id'   => $value['contact_id_a'],
                            'relationship_type_id' => 4,
                            'is_active'            => 1,
                            'version'       => 3,
                            'check_permissions'    => false,
                            );
            $result = civicrm_api( 'relationship','get',$params );
            $flag = 0;
            if( !empty( $result['values'] ) ) {
                foreach( $result['values'] as $resultKey => $resultValues ) {
                 
                    if( $resultValues['contact_id_b'] != $value['contact_id_b'] ){
                        $flag = 1;
                    } else {
                        $flag = 0;
                        break;
                    }
                }
                if( $flag ){
                    $result['is_error'] = 0;
                 
                }
            } else {
                $result['is_error'] = 0;
            }
            $relationDate = date("Ymd");
            if ( !$result['is_error'] ) {
                $param = array(
                               'contact_id_a'  => $value['contact_id_a'],
                               'contact_id_b'  => $value['contact_id_b'],
                               'relationship_type_id' => '4',
                               'start_date'  => $relationDate,
                               'check_permissions'    => false,
                               'end_date'      => null,
                               'is_active'      => '1',
                               'version'      => '3',
                               );
                $relationship = civicrm_api( 'relationship','create', $param );
             
            }
        }
    }
}


function gstAddParticipant( $params ) {

    if ( CRM_Utils_Array::value( 'register_date', $params ) ) {
        $params['register_date']  = CRM_Utils_Date::isoToMysql($params['register_date']);
    }
   
    if ( CRM_Utils_Array::value( 'participant_fee_amount', $params ) ) {
        $params['participant_fee_amount'] = CRM_Utils_Rule::cleanMoney( $params['participant_fee_amount'] );
    }
   
    if ( CRM_Utils_Array::value( 'participant_fee_amount', $params ) ) {
        $params['fee_amount'] = CRM_Utils_Rule::cleanMoney( $params['fee_amount'] );
    }
   
    $participantBAO = new CRM_Event_BAO_Participant;
    if (CRM_Utils_Array::value('id', $params)) {
        $participantBAO->id = CRM_Utils_Array::value('id', $params);
        $participantBAO->find(true);
        $participantBAO->register_date = CRM_Utils_Date::isoToMysql($participantBAO->register_date);
    }

    $participantBAO->copyValues($params);
       
    //CRM-6910
    //1. If currency present, it should be valid one.
    //2. We should have currency when amount is not null.
    require_once 'CRM/Utils/Rule.php';
    $currency = $participantBAO->fee_currency;
    if ( $currency ||
         !CRM_Utils_System::isNull( $participantBAO->fee_amount ) ) {
        if ( !CRM_Utils_Rule::currencyCode( $currency ) ) {
            $config = CRM_Core_Config::singleton();
            $currency = $config->defaultCurrency;
        }
    }
    $participantBAO->fee_currency = $currency;
       
    $participantBAO->save();
    $participantBAO->free();
}

Comments

Popular posts from this blog

Set Multisite in drupal

For Linux 9.10 Please Follow the steps : 1) Extract the drupal in public html folder or any other folder.(say exampleDrupal). 2) Add below lines to exampleDrupal/sites/sites.php     $sites['site1.test'] = 'site1.test';     $sites['site2.test'] = 'site2.test'; 3)  Create two folders in exampleDrupal/sites/ folder.       as site1.test & site2.test.      OR      Using terminal run following commands :      i)  cd example.com/sites      ii) mkdir site1.test/ site2.test/ 4) Copy the default.settings.php file from  exampleDrupal/sites/default to site1.test &  site2.test folder.     OR      Using terminal run following commands :       i) cp default/default.settings.php site1.test/settings.php       ii) cp default/default.settings.php si...

To get pager on page

Use of pager query :   Drupal 4.6 - 6 :  pager_query($query, $limit = 10, $element = 0, $count_query = NULL) Perform a paged database query. Use this function when doing select queries you wish to be able to page. The pager uses LIMIT-based queries to fetch only the records required to render a certain page. However, it has to learn the total number of records returned by the query to compute the number of pages (the number of records / records per page). This is done by inserting "COUNT(*)" in the original query. For example, the query "SELECT nid, type FROM node WHERE status = '1' ORDER BY sticky DESC, created DESC" would be rewritten to read "SELECT COUNT(*) FROM node WHERE status = '1' ORDER BY sticky DESC, created DESC". Rewriting the query is accomplished using a regular expression.  $output1 .= theme('pager',null, $count, 0); This is used to get the number. We can use this pager query in "Custom Search...