/** * Assign smarty variables to the template that will be used by google api to plot the contacts. * * @param array $ids * @param int $locationId * Location_id. * @param CRM_Core_Page $page * @param bool $addBreadCrumb * @param string $type */ public static function createMapXML($ids, $locationId, &$page, $addBreadCrumb, $type = 'Contact') { $config = CRM_Core_Config::singleton(); CRM_Utils_System::setTitle(ts('Map Location(s)')); $page->assign('query', 'CiviCRM Search Query'); $page->assign('mapProvider', $config->mapProvider); $page->assign('mapKey', urlencode($config->mapAPIKey)); if ($type == 'Contact') { $imageUrlOnly = FALSE; // google needs image url, CRM-6564 if ($config->mapProvider == 'Google' || $config->mapProvider == 'OpenStreetMaps') { $imageUrlOnly = TRUE; } $locations = CRM_Contact_BAO_Contact_Location::getMapInfo($ids, $locationId, $imageUrlOnly); } else { $locations = CRM_Event_BAO_Event::getMapInfo($ids); } if (empty($locations)) { CRM_Core_Error::statusBounce(ts('This address does not contain latitude/longitude information and cannot be mapped.')); } if (empty($config->mapProvider)) { CRM_Core_Error::statusBounce(ts('You need to configure a Mapping Provider before using this feature (Administer > System Settings > Mapping and Geocoding).')); } if ($addBreadCrumb) { $session = CRM_Core_Session::singleton(); $redirect = $session->readUserContext(); if ($type == 'Contact') { $bcTitle = ts('Contact'); } else { $bcTitle = ts('Event Info'); $action = CRM_Utils_Request::retrieve('action', 'String', $page, FALSE); if ($action) { $args = 'reset=1&action=preview&id='; } else { $args = 'reset=1&id='; } $session->pushUserContext(CRM_Utils_System::url('civicrm/event/info', "{$args}{$ids}")); } CRM_Utils_System::appendBreadCrumb($bcTitle, $redirect); } $page->assign_by_ref('locations', $locations); // only issue a javascript warning if we know we will not // mess the poor user with too many warnings if (count($locations) <= 3) { $page->assign('geoCodeWarn', TRUE); } else { $page->assign('geoCodeWarn', FALSE); } $sumLat = $sumLng = 0; $maxLat = $maxLng = -400; $minLat = $minLng = 400; foreach ($locations as $location) { $sumLat += $location['lat']; $sumLng += $location['lng']; if ($location['lat'] > $maxLat) { $maxLat = $location['lat']; } if ($location['lat'] < $minLat) { $minLat = $location['lat']; } if ($location['lng'] > $maxLng) { $maxLng = $location['lng']; } if ($location['lng'] < $minLng) { $minLng = $location['lng']; } } $center = array('lat' => (double) $sumLat / count($locations), 'lng' => (double) $sumLng / count($locations)); $span = array('lat' => (double) ($maxLat - $minLat), 'lng' => (double) ($maxLng - $minLng)); $page->assign_by_ref('center', $center); $page->assign_by_ref('span', $span); }
/** * assign smarty variables to the template that will be used by google api to plot the contacts * * @param array $contactIds list of contact ids that we need to plot * @param int $locationId location_id * * @return string the location of the file we have created * @access protected */ static function createMapXML($ids, $locationId, &$page, $addBreadCrumb, $type = 'Contact') { $config =& CRM_Core_Config::singleton(); CRM_Utils_System::setTitle(ts('Map Location(s)')); $page->assign('query', 'CiviCRM Search Query'); $page->assign('mapProvider', $config->mapProvider); $page->assign('mapKey', $config->mapAPIKey); if ($type == 'Contact') { require_once 'CRM/Contact/BAO/Contact/Location.php'; $locations =& CRM_Contact_BAO_Contact_Location::getMapInfo($ids, $locationId); } else { require_once 'CRM/Event/BAO/Event.php'; $locations =& CRM_Event_BAO_Event::getMapInfo($ids); } if (empty($locations)) { CRM_Core_Error::statusBounce(ts('This address does not contain latitude/longitude information and cannot be mapped.')); } if ($addBreadCrumb) { $session =& CRM_Core_Session::singleton(); $redirect = $session->readUserContext(); if ($type == 'Contact') { $bcTitle = ts('Contact'); } else { $bcTitle = ts('Event Info'); $action = CRM_Utils_Request::retrieve('action', 'String', $page, false); if ($action) { $args = 'reset=1&action=preview&id='; } else { $args = 'reset=1&id='; } $session->pushUserContext(CRM_Utils_System::url('civicrm/event/info', "{$args}{$ids}")); } CRM_Utils_System::appendBreadCrumb($bcTitle, $redirect); } $page->assign_by_ref('locations', $locations); // only issue a javascript warning if we know we will not // mess the poor user with too many warnings if (count($locations) <= 3) { $page->assign('geoCodeWarn', true); } else { $page->assign('geoCodeWarn', false); } $sumLat = $sumLng = 0; $maxLat = $maxLng = -400; $minLat = $minLng = +400; foreach ($locations as $location) { $sumLat += $location['lat']; $sumLng += $location['lng']; if ($location['lat'] > $maxLat) { $maxLat = $location['lat']; } if ($location['lat'] < $minLat) { $minLat = $location['lat']; } if ($location['lng'] > $maxLng) { $maxLng = $location['lng']; } if ($location['lng'] < $minLng) { $minLng = $location['lng']; } } $center = array('lat' => (double) $sumLat / count($locations), 'lng' => (double) $sumLng / count($locations)); $span = array('lat' => (double) ($maxLat - $minLat), 'lng' => (double) ($maxLng - $minLng)); $page->assign_by_ref('center', $center); $page->assign_by_ref('span', $span); }
/** * Run the page. * * This method is called after the page is created. It checks for the * type of action and executes that action. * Finally it calls the parent's run method. * * @return void * @access public * */ function run() { //get the event id. $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, true); $config =& CRM_Core_Config::singleton(); require_once 'CRM/Event/BAO/Event.php'; // ensure that the user has permission to see this page if (!CRM_Core_Permission::event(CRM_Core_Permission::VIEW, $this->_id)) { CRM_Core_Error::fatal(ts('You do not have permission to view this event')); } $action = CRM_Utils_Request::retrieve('action', 'String', $this, false); $context = CRM_Utils_Request::retrieve('context', 'String', $this, false, 'register'); $this->assign('context', $context); // Sometimes we want to suppress the Event Full msg $noFullMsg = CRM_Utils_Request::retrieve('noFullMsg', 'String', $this, false, 'false'); // set breadcrumb to append to 2nd layer pages $breadCrumbPath = CRM_Utils_System::url("civicrm/event/info", "id={$this->_id}&reset=1"); $additionalBreadCrumb = "<a href=\"{$breadCrumbPath}\">" . ts('Events') . '</a>'; //retrieve event information $params = array('id' => $this->_id); CRM_Event_BAO_Event::retrieve($params, $values['event']); if (!$values['event']['is_active']) { // form is inactive, die a fatal death CRM_Core_Error::fatal(ts('The page you requested is currently unavailable.')); } $this->assign('isShowLocation', CRM_Utils_Array::value('is_show_location', $values['event'])); // show event fees. require_once 'CRM/Price/BAO/Set.php'; if ($this->_id && CRM_Utils_Array::value('is_monetary', $values['event'])) { // get price set options, - CRM-5209 if ($priceSetId = CRM_Price_BAO_Set::getFor('civicrm_event', $this->_id)) { $setDetails = CRM_Price_BAO_Set::getSetDetail($priceSetId); eval("\$priceSetFields = \$setDetails[{$priceSetId}][fields];"); if (is_array($priceSetFields)) { $fieldCnt = 1; foreach ($priceSetFields as $fid => $fieldValues) { if (!is_array($fieldValues['options']) || empty($fieldValues['options'])) { continue; } foreach ($fieldValues['options'] as $optionId => $optionVal) { $values['feeBlock']['value'][$fieldCnt] = $optionVal['value']; $values['feeBlock']['label'][$fieldCnt] = $optionVal['description']; $fieldCnt++; } } } } else { //retrieve event fee block. require_once 'CRM/Core/OptionGroup.php'; require_once 'CRM/Core/BAO/Discount.php'; $discountId = CRM_Core_BAO_Discount::findSet($this->_id, 'civicrm_event'); if ($discountId) { CRM_Core_OptionGroup::getAssoc(CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Discount', $discountId, 'option_group_id'), $values['feeBlock'], false, 'id'); } else { CRM_Core_OptionGroup::getAssoc("civicrm_event.amount.{$this->_id}", $values['feeBlock']); } } } $params = array('entity_id' => $this->_id, 'entity_table' => 'civicrm_event'); require_once 'CRM/Core/BAO/Location.php'; $values['location'] = CRM_Core_BAO_Location::getValues($params, true); //retrieve custom field information require_once 'CRM/Core/BAO/CustomGroup.php'; $groupTree =& CRM_Core_BAO_CustomGroup::getTree("Event", $this, $this->_id, 0, $values['event']['event_type_id']); CRM_Core_BAO_CustomGroup::buildCustomDataView($this, $groupTree); $this->assign('action', CRM_Core_Action::VIEW); //To show the event location on maps directly on event info page $locations =& CRM_Event_BAO_Event::getMapInfo($this->_id); if (!empty($locations) && CRM_Utils_Array::value('is_map', $values['event'])) { $this->assign('locations', $locations); $this->assign('mapProvider', $config->mapProvider); $this->assign('mapKey', $config->mapAPIKey); $sumLat = $sumLng = 0; $maxLat = $maxLng = -400; $minLat = $minLng = +400; foreach ($locations as $location) { $sumLat += $location['lat']; $sumLng += $location['lng']; if ($location['lat'] > $maxLat) { $maxLat = $location['lat']; } if ($location['lat'] < $minLat) { $minLat = $location['lat']; } if ($location['lng'] > $maxLng) { $maxLng = $location['lng']; } if ($location['lng'] < $minLng) { $minLng = $location['lng']; } } $center = array('lat' => (double) $sumLat / count($locations), 'lng' => (double) $sumLng / count($locations)); $span = array('lat' => (double) ($maxLat - $minLat), 'lng' => (double) ($maxLng - $minLng)); $this->assign_by_ref('center', $center); $this->assign_by_ref('span', $span); } require_once 'CRM/Event/BAO/Participant.php'; $eventFullMessage = CRM_Event_BAO_Participant::eventFull($this->_id); if ($eventFullMessage and $noFullMsg == 'false') { if (CRM_Utils_Array::value('has_waitlist', $values['event'])) { $eventFullMessage = null; $statusMessage = CRM_Utils_Array::value('waitlist_text', $values['event'], 'Event is currently full, but you can register and be a part of waiting list.'); } else { $statusMessage = $eventFullMessage; } CRM_Core_Session::setStatus($statusMessage); } if (CRM_Utils_Array::value('is_online_registration', $values['event'])) { if (CRM_Event_BAO_Event::validRegistrationDate($values['event'], $this->_id)) { if (!$eventFullMessage) { $registerText = ts('Register Now'); if (CRM_Utils_Array::value('registration_link_text', $values['event'])) { $registerText = $values['event']['registration_link_text']; } //Fixed for CRM-4855 if (CRM_Event_BAO_Event::showHideRegistrationLink($values)) { $this->assign('allowRegistration', true); } $this->assign('registerText', $registerText); } // we always generate urls for the front end in joomla if ($action == CRM_Core_Action::PREVIEW) { $url = CRM_Utils_System::url('civicrm/event/register', "id={$this->_id}&reset=1&action=preview", true, null, true, true); } else { $url = CRM_Utils_System::url('civicrm/event/register', "id={$this->_id}&reset=1", true, null, true, true); } if (!$eventFullMessage) { $this->assign('registerURL', $url); } } if ($action == CRM_Core_Action::PREVIEW) { $mapURL = CRM_Utils_System::url('civicrm/contact/map/event', "eid={$this->_id}&reset=1&action=preview", true, null, true, true); } else { $mapURL = CRM_Utils_System::url('civicrm/contact/map/event', "eid={$this->_id}&reset=1", true, null, true, true); } $this->assign('mapURL', $mapURL); } // we do not want to display recently viewed items, so turn off $this->assign('displayRecent', false); // set page title = event title CRM_Utils_System::setTitle($values['event']['title']); $this->assign('event', $values['event']); if (isset($values['feeBlock'])) { $this->assign('feeBlock', $values['feeBlock']); } $this->assign('location', $values['location']); parent::run(); }
/** * Run the page. * * This method is called after the page is created. It checks for the * type of action and executes that action. * Finally it calls the parent's run method. * * @return void */ public function run() { //get the event id. $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); $config = CRM_Core_Config::singleton(); // ensure that the user has permission to see this page if (!CRM_Core_Permission::event(CRM_Core_Permission::VIEW, $this->_id, 'view event info')) { CRM_Utils_System::setUFMessage(ts('You do not have permission to view this event')); return CRM_Utils_System::permissionDenied(); } $action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE); $context = CRM_Utils_Request::retrieve('context', 'String', $this, FALSE, 'register'); $this->assign('context', $context); // Sometimes we want to suppress the Event Full msg $noFullMsg = CRM_Utils_Request::retrieve('noFullMsg', 'String', $this, FALSE, 'false'); // set breadcrumb to append to 2nd layer pages $breadCrumbPath = CRM_Utils_System::url('civicrm/event/info', "id={$this->_id}&reset=1"); //retrieve event information $params = array('id' => $this->_id); CRM_Event_BAO_Event::retrieve($params, $values['event']); if (!$values['event']['is_active']) { // form is inactive, die a fatal death CRM_Utils_System::setUFMessage(ts('The event you requested is currently unavailable (contact the site administrator for assistance).')); return CRM_Utils_System::permissionDenied(); } if (!empty($values['event']['is_template'])) { // form is an Event Template CRM_Core_Error::fatal(ts('The page you requested is currently unavailable.')); } // Add Event Type to $values in case folks want to display it $values['event']['event_type'] = CRM_Utils_Array::value($values['event']['event_type_id'], CRM_Event_PseudoConstant::eventType()); $this->assign('isShowLocation', CRM_Utils_Array::value('is_show_location', $values['event'])); // show event fees. if ($this->_id && !empty($values['event']['is_monetary'])) { //CRM-6907 $config = CRM_Core_Config::singleton(); $config->defaultCurrency = CRM_Utils_Array::value('currency', $values['event'], $config->defaultCurrency); //CRM-10434 $discountId = CRM_Core_BAO_Discount::findSet($this->_id, 'civicrm_event'); if ($discountId) { $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Discount', $discountId, 'price_set_id'); } else { $priceSetId = CRM_Price_BAO_PriceSet::getFor('civicrm_event', $this->_id); } // get price set options, - CRM-5209 if ($priceSetId) { $setDetails = CRM_Price_BAO_PriceSet::getSetDetail($priceSetId, TRUE, TRUE); $priceSetFields = $setDetails[$priceSetId]['fields']; if (is_array($priceSetFields)) { $fieldCnt = 1; $visibility = CRM_Core_PseudoConstant::visibility('name'); // CRM-14492 Admin price fields should show up on event registration if user has 'administer CiviCRM' permissions $adminFieldVisible = FALSE; if (CRM_Core_Permission::check('administer CiviCRM')) { $adminFieldVisible = TRUE; } foreach ($priceSetFields as $fid => $fieldValues) { if (!is_array($fieldValues['options']) || empty($fieldValues['options']) || CRM_Utils_Array::value('visibility_id', $fieldValues) != array_search('public', $visibility) && $adminFieldVisible == FALSE) { continue; } if (count($fieldValues['options']) > 1) { $values['feeBlock']['value'][$fieldCnt] = ''; $values['feeBlock']['label'][$fieldCnt] = $fieldValues['label']; $values['feeBlock']['lClass'][$fieldCnt] = 'price_set_option_group-label'; $values['feeBlock']['isDisplayAmount'][$fieldCnt] = CRM_Utils_Array::value('is_display_amounts', $fieldValues); $fieldCnt++; $labelClass = 'price_set_option-label'; } else { $labelClass = 'price_set_field-label'; } // show tax rate with amount $invoiceSettings = Civi::settings()->get('contribution_invoice_settings'); $taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings); $displayOpt = CRM_Utils_Array::value('tax_display_settings', $invoiceSettings); $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); foreach ($fieldValues['options'] as $optionId => $optionVal) { $values['feeBlock']['isDisplayAmount'][$fieldCnt] = CRM_Utils_Array::value('is_display_amounts', $fieldValues); if ($invoicing && isset($optionVal['tax_amount'])) { $values['feeBlock']['value'][$fieldCnt] = CRM_Price_BAO_PriceField::getTaxLabel($optionVal, 'amount', $displayOpt, $taxTerm); $values['feeBlock']['tax_amount'][$fieldCnt] = $optionVal['tax_amount']; } else { $values['feeBlock']['value'][$fieldCnt] = $optionVal['amount']; } $values['feeBlock']['label'][$fieldCnt] = $optionVal['label']; $values['feeBlock']['lClass'][$fieldCnt] = $labelClass; $fieldCnt++; } } } // Tell tpl we have price set fee data and whether it's a quick_config price set $this->assign('isPriceSet', 1); $this->assign('isQuickConfig', $setDetails[$priceSetId]['is_quick_config']); } } $params = array('entity_id' => $this->_id, 'entity_table' => 'civicrm_event'); $values['location'] = CRM_Core_BAO_Location::getValues($params, TRUE); // fix phone type labels if (!empty($values['location']['phone'])) { $phoneTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Phone', 'phone_type_id'); foreach ($values['location']['phone'] as &$val) { if (!empty($val['phone_type_id'])) { $val['phone_type_display'] = $phoneTypes[$val['phone_type_id']]; } } } //retrieve custom field information $groupTree = CRM_Core_BAO_CustomGroup::getTree('Event', $this, $this->_id, 0, $values['event']['event_type_id']); CRM_Core_BAO_CustomGroup::buildCustomDataView($this, $groupTree, FALSE, NULL, NULL, NULL, $this->_id); $this->assign('action', CRM_Core_Action::VIEW); //To show the event location on maps directly on event info page $locations = CRM_Event_BAO_Event::getMapInfo($this->_id); if (!empty($locations) && !empty($values['event']['is_map'])) { $this->assign('locations', $locations); $this->assign('mapProvider', $config->mapProvider); $this->assign('mapKey', $config->mapAPIKey); $sumLat = $sumLng = 0; $maxLat = $maxLng = -400; $minLat = $minLng = 400; foreach ($locations as $location) { $sumLat += $location['lat']; $sumLng += $location['lng']; if ($location['lat'] > $maxLat) { $maxLat = $location['lat']; } if ($location['lat'] < $minLat) { $minLat = $location['lat']; } if ($location['lng'] > $maxLng) { $maxLng = $location['lng']; } if ($location['lng'] < $minLng) { $minLng = $location['lng']; } } $center = array('lat' => (double) $sumLat / count($locations), 'lng' => (double) $sumLng / count($locations)); $span = array('lat' => (double) ($maxLat - $minLat), 'lng' => (double) ($maxLng - $minLng)); $this->assign_by_ref('center', $center); $this->assign_by_ref('span', $span); if ($action == CRM_Core_Action::PREVIEW) { $mapURL = CRM_Utils_System::url('civicrm/contact/map/event', "eid={$this->_id}&reset=1&action=preview", TRUE, NULL, TRUE, TRUE); } else { $mapURL = CRM_Utils_System::url('civicrm/contact/map/event', "eid={$this->_id}&reset=1", TRUE, NULL, TRUE, TRUE); } $this->assign('skipLocationType', TRUE); $this->assign('mapURL', $mapURL); } if (CRM_Core_Permission::check('view event participants') && CRM_Core_Permission::check('view all contacts')) { $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 1', 'label'); $statusTypesPending = CRM_Event_PseudoConstant::participantStatus(NULL, 'is_counted = 0', 'label'); $findParticipants['statusCounted'] = implode(', ', array_values($statusTypes)); $findParticipants['statusNotCounted'] = implode(', ', array_values($statusTypesPending)); $this->assign('findParticipants', $findParticipants); } $participantListingID = CRM_Utils_Array::value('participant_listing_id', $values['event']); if ($participantListingID) { $participantListingURL = CRM_Utils_System::url('civicrm/event/participant', "reset=1&id={$this->_id}", TRUE, NULL, TRUE, TRUE); $this->assign('participantListingURL', $participantListingURL); } $hasWaitingList = CRM_Utils_Array::value('has_waitlist', $values['event']); $eventFullMessage = CRM_Event_BAO_Participant::eventFull($this->_id, FALSE, $hasWaitingList); $allowRegistration = FALSE; if (!empty($values['event']['is_online_registration'])) { if (CRM_Event_BAO_Event::validRegistrationRequest($values['event'], $this->_id)) { // we always generate urls for the front end in joomla $action_query = $action === CRM_Core_Action::PREVIEW ? "&action={$action}" : ''; $url = CRM_Utils_System::url('civicrm/event/register', "id={$this->_id}&reset=1{$action_query}", TRUE, NULL, TRUE, TRUE); if (!$eventFullMessage || $hasWaitingList) { $registerText = ts('Register Now'); if (!empty($values['event']['registration_link_text'])) { $registerText = $values['event']['registration_link_text']; } // check if we're in shopping cart mode for events $enable_cart = Civi::settings()->get('enable_cart'); if ($enable_cart) { $link = CRM_Event_Cart_BAO_EventInCart::get_registration_link($this->_id); $registerText = $link['label']; $url = CRM_Utils_System::url($link['path'], $link['query'] . $action_query, TRUE, NULL, TRUE, TRUE); } //Fixed for CRM-4855 $allowRegistration = CRM_Event_BAO_Event::showHideRegistrationLink($values); $this->assign('registerText', $registerText); $this->assign('registerURL', $url); $this->assign('eventCartEnabled', $enable_cart); } } elseif (CRM_Core_Permission::check('register for events')) { $this->assign('registerClosed', TRUE); } } $this->assign('allowRegistration', $allowRegistration); $session = CRM_Core_Session::singleton(); $params = array('contact_id' => $session->get('userID'), 'event_id' => CRM_Utils_Array::value('id', $values['event']), 'role_id' => CRM_Utils_Array::value('default_role_id', $values['event'])); if ($eventFullMessage && $noFullMsg == 'false' || CRM_Event_BAO_Event::checkRegistration($params)) { $statusMessage = $eventFullMessage; if (CRM_Event_BAO_Event::checkRegistration($params)) { if ($noFullMsg == 'false') { if ($values['event']['allow_same_participant_emails']) { $statusMessage = ts('It looks like you are already registered for this event. You may proceed if you want to create an additional registration.'); } else { $registerUrl = CRM_Utils_System::url('civicrm/event/register', "reset=1&id={$values['event']['id']}&cid=0"); $statusMessage = ts("It looks like you are already registered for this event. If you want to change your registration, or you feel that you've gotten this message in error, please contact the site administrator.") . ' ' . ts('You can also <a href="%1">register another participant</a>.', array(1 => $registerUrl)); } } } elseif ($hasWaitingList) { $statusMessage = CRM_Utils_Array::value('waitlist_text', $values['event']); if (!$statusMessage) { $statusMessage = ts('Event is currently full, but you can register and be a part of waiting list.'); } } CRM_Core_Session::setStatus($statusMessage); } // we do not want to display recently viewed items, so turn off $this->assign('displayRecent', FALSE); // set page title = event title CRM_Utils_System::setTitle($values['event']['title']); $this->assign('event', $values['event']); if (isset($values['feeBlock'])) { $this->assign('feeBlock', $values['feeBlock']); } $this->assign('location', $values['location']); if (CRM_Core_Permission::check('access CiviEvent')) { $enableCart = Civi::settings()->get('enable_cart'); $this->assign('manageEventLinks', CRM_Event_Page_ManageEvent::tabs($enableCart)); } return parent::run(); }