/** * Fetch object based on array of properties. * * @param array $params * (reference ) an assoc array of name/value pairs. * @param array $defaults * (reference ) an assoc array to hold the flattened values. * * @return CRM_Core_BAO_WebTracking */ public static function retrieve(&$params, &$defaults) { $webtracking = new CRM_WebTracking_BAO_WebTracking(); $webtracking->copyValues($params); if ($webtracking->find(TRUE)) { CRM_Core_DAO::storeValues($webtracking, $defaults); return $webtracking; } return NULL; }
/** * Process the form submission. * * @return void */ public function postProcess() { // TODO:: is this required? $params = $this->controller->exportValues($this->_name); $existParams['page_id'] = $this->_id; $existParams['page_category'] = "civicrm_event"; $existingEnrty = array(); CRM_WebTracking_BAO_WebTracking::retrieve($existParams, $existingEnrty); // Setting up the params array with the values obtained from the form if (!empty($existingEnrty)) { $params['id'] = $existingEnrty['id']; } $params['page_id'] = $this->_id; $params['page_category'] = "civicrm_event"; $params['enable_tracking'] = CRM_Utils_Array::value('enable_tracking', $params, FALSE); $params['tracking_id'] = CRM_Utils_Array::value('tracking_id', $params, NULL); $params['ga_event_tracking'] = CRM_Utils_Array::value('ga_event_tracking', $params, FALSE); $params['track_info'] = CRM_Utils_Array::value('track_info', $params, FALSE); $params['track_register'] = CRM_Utils_Array::value('track_register', $params, FALSE); $params['track_confirm_register'] = CRM_Utils_Array::value('track_confirm_register', $params, FALSE); $params['track_thank_you'] = CRM_Utils_Array::value('track_thank_you', $params, FALSE); $params['track_price_change'] = CRM_Utils_Array::value('track_price_change', $params, FALSE); $params['track_ecommerce'] = CRM_Utils_Array::value('track_ecommerce', $params, FALSE); $params['is_experiment'] = CRM_Utils_Array::value('is_experiment', $params, FALSE); $params['experiment_id'] = CRM_Utils_Array::value('experiment_id', $params, NULL); // Updating the database with the new entry $event = CRM_WebTracking_BAO_WebTracking::add($params); parent::endPostProcess(); }
/** * This hook is invoked when the 'confirm register' and 'thank you' form is rendered * Based on the web tracking parameters it invokes certain javascript/jquery functions which talk to google analytics */ function webtracking_civicrm_buildForm($formName, &$form) { $contribFormNames = array('CRM_Contribute_Form_Contribution_Main', 'CRM_Contribute_Form_Contribution_ThankYou', 'CRM_Contribute_Form_Contribution_Confirm'); $eventFormNames = array('CRM_Event_Form_Registration_Register', 'CRM_Event_Form_Registration_ThankYou', 'CRM_Event_Form_Registration_Confirm'); $category = 'None'; if (in_array($formName, $eventFormNames)) { $category = 'Event'; } else { if (in_array($formName, $contribFormNames)) { $category = 'Contribution'; } } if ($category == 'Event') { $trackingParams = array('page_id' => $form->_eventId, 'page_category' => "civicrm_event"); CRM_WebTracking_BAO_WebTracking::retrieve($trackingParams, $trackingValues); if ($trackingValues['enable_tracking'] == 1) { // General script for web tracking CRM_Core_Resources::singleton()->addVars('WebTracking', array('tracking_id' => $trackingValues['tracking_id'])); CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/WebTracking.js', 10, 'html-header'); // Script for event tracking CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/EventTracking.js'); } else { return; } if ($formName == 'CRM_Event_Form_Registration_Register' && $trackingValues['ga_event_tracking'] == 1) { if ($trackingValues['track_register'] == 1) { CRM_Core_Resources::singleton()->addScript('trackViewRegistration();'); } if ($form->_values['event']['is_monetary'] == 1 && $trackingValues['track_price_change'] == 1) { CRM_Core_Resources::singleton()->addScript('trackPriceChange();'); } } else { if ($formName == 'CRM_Event_Form_Registration_ThankYou') { if ($trackingValues['track_ecommerce'] == 1) { CRM_Core_Resources::singleton()->addVars('WebTracking', array('trnx_id' => $form->_trxnId, 'totalAmount' => $form->_totalAmount)); // Fetching the source from the session and adding it as a variable. $session = CRM_Core_Session::singleton(); CRM_Core_Resources::singleton()->addVars('WebTracking', array('utm_source' => $session->get('utm_source'))); if ($form->_trxnId && $trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScript('trackEcommerce();'); } } if ($trackingValues['track_thank_you'] == 1 && $trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScript("ga('send', 'event', 'Thank You Page', 'Viewed')"); } } else { if ($formName == 'CRM_Event_Form_Registration_Confirm') { if ($trackingValues['track_confirm_register'] == 1) { CRM_Core_Resources::singleton()->addScript("ga('send', 'event', 'Confirmation Page', 'Viewed')"); } } } } } else { if ($category == 'Contribution') { $trackingParams = array('page_id' => $form->_id, 'page_category' => "civicrm_contribution"); CRM_WebTracking_BAO_WebTracking::retrieve($trackingParams, $trackingValues); if ($trackingValues['enable_tracking'] == 1) { // General script for web tracking CRM_Core_Resources::singleton()->addVars('WebTracking', array('tracking_id' => $trackingValues['tracking_id'])); CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/WebTracking.js', 10, 'html-header'); $form->assign('enable_tracking', 1); if ($formName == 'CRM_Contribute_Form_Contribution_Main') { if ($trackingValues['is_experiment'] == 1) { // Script for the experiment CRM_Core_Resources::singleton()->addVars('WebTracking', array('experiment_id' => $trackingValues['experiment_id'])); CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/Experiment.js', 11, 'html-header'); CRM_Core_Resources::singleton()->addScript("utmx('url','A/B');", 12, 'html-header'); CRM_Core_Resources::singleton()->addScript("ga('send', 'pageview');", 13, 'html-header'); } else { CRM_Core_Resources::singleton()->addScript("ga('send', 'pageview');", 11, 'html-header'); // Script for event tracking CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/EventTracking.js'); if ($trackingValues['track_register'] == 1 && $trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScript('trackViewRegistration();'); } if ($form->_values['is_monetary'] == 1 && $trackingValues['track_price_change'] == 1 && $trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScript('trackPriceChange();'); } } // Saving the utm source in the session variable if track_ecommerce is enabled if ($trackingValues['track_ecommerce'] == 1) { $session = CRM_Core_Session::singleton(); if (isset($_GET['utm_source'])) { $session->set('utm_source', $_GET['utm_source']); } else { $session->set('utm_source', 'general'); } } } else { if ($formName == 'CRM_Contribute_Form_Contribution_Confirm' && $trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/EventTracking.js'); if ($trackingValues['track_confirm_register'] == 1) { CRM_Core_Resources::singleton()->addScript("ga('send', 'event', 'Confirmation Page', 'Viewed')"); } } else { if ($formName == 'CRM_Contribute_Form_Contribution_ThankYou') { CRM_Core_Resources::singleton()->addScriptFile('org.civicrm.webtracking', 'js/EventTracking.js'); if ($trackingValues['track_ecommerce'] == 1) { CRM_Core_Resources::singleton()->addVars('WebTracking', array('trnx_id' => rand(), 'totalAmount' => $form->_amount)); // Fetching the source from the session and adding it as a variable. $session = CRM_Core_Session::singleton(); CRM_Core_Resources::singleton()->addVars('WebTracking', array('utm_source' => $session->get('utm_source'))); if ($trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScript('trackEcommerce();'); } } if ($trackingValues['track_thank_you'] == 1 && $trackingValues['ga_event_tracking'] == 1) { CRM_Core_Resources::singleton()->addScript("ga('send', 'event', 'Thank You Page', 'Viewed')"); } } } } } else { $form->assign('enable_tracking', 0); } } } }