/** * populate the geosearch markers table * * @param object $job \Components\Cron\Models\Job * @return boolean */ public function getLocationData(\Components\Cron\Models\Job $job) { //setup database object $this->database = App::get('db'); //get the relevant tables require_once PATH_CORE . DS . 'components' . DS . 'com_members' . DS . 'tables' . DS . 'profile.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_geosearch' . DS . 'tables' . DS . 'geosearchmarkers.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_jobs' . DS . 'tables' . DS . 'job.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_events' . DS . 'tables' . DS . 'event.php'; require_once PATH_CORE . DS . 'components' . DS . 'com_members' . DS . 'tables' . DS . 'organization.php'; // get current markers $markers = new \Components\Geosearch\Tables\GeosearchMarkers($this->database); $markers = $markers->getMarkers(array(), 'array'); // user profiles $objProfile = new \Components\Members\Tables\Profile($this->database); $profiles = $objProfile->selectWhere('uidNumber', 'public=1'); // jobs $objJob = new \Components\Jobs\Tables\Job($this->database); $jobs = $objJob->get_openings(); // events $objEvents = new \Components\Events\Tables\Event($this->database); $events = $objEvents->getEvents('year', array('year' => date('Y'), 'category' => 0)); // organizations $objOrganizations = new \Components\Members\Tables\Organization($this->database); $organizations = $objOrganizations->find('all'); if (count($markers) > 0) { //separate by scope $existingMarkers = $this->_separatebyScope($markers); //unique entries foreach ($existingMarkers as $class => &$existing) { switch ($class) { case 'markerJobIDs': $identifier = 'code'; $all = $jobs; break; case 'markerMemberIDs': $identifier = 'uidNumber'; $all = $profiles; break; case 'markerEventIDs': $identifier = 'id'; $all = $events; break; case 'markerOrganizationIDs': $identifier = 'id'; $all = $organizations; break; default: $identifier = ''; $all = array(); break; } //end switch if ($identifier != '' && count($all) > 0) { //var_dump($all); $existing = $this->_distill($existing, $all, $identifier); } } $markerMemberIDs = $this->_scopify($existingMarkers['markerMemberIDs'], 'member'); $markerJobIDs = $this->_scopify($existingMarkers['markerJobIDs'], 'job'); $markerEventIDs = $this->_scopify($existingMarkers['markerEventIDs'], 'event'); $markerOrganizationIDs = $this->_scopify($existingMarkers['markerOrganizationIDs'], 'organization'); } elseif (count($markers) == 0) { $markerMemberIDs = array(); $markerJobIDs = array(); $markerEventIDs = array(); $markerOrganizationIDs = array(); foreach ($profiles as $profile) { $obj = array(); $obj['scope'] = 'member'; $obj['scope_id'] = $profile->uidNumber; array_push($markerMemberIDs, $obj); } foreach ($jobs as $job) { $obj = array(); $obj['scope'] = 'job'; $obj['scope_id'] = $job->code; array_push($markerJobIDs, $obj); } foreach ($events as $event) { $obj = array(); $obj['scope'] = 'event'; $obj['scope_id'] = $event->id; array_push($markerEventIDs, $obj); } foreach ($organizations as $organization) { $obj = array(); $obj['scope'] = 'organization'; $obj['scope_id'] = $organization->id; array_push($markerEventIDs, $obj); } } //merge into one array $newMarkers = $this->_merger($markerMemberIDs, $markerJobIDs, $markerEventIDs, $markerOrganizationIDs); $creations = $this->_doGeocode($newMarkers, $objProfile, $objJob, $objEvents, $objOrganizations); foreach ($creations as $creation) { $m = new \Components\Geosearch\Tables\GeosearchMarkers($this->database); $m->addressLatitude = $creation->location->getLatitude(); $m->addressLongitude = $creation->location->getLongitude(); $m->scope_id = $creation->scope_id; $m->scope = $creation->scope; $m->store(true); } return true; }
/** * Process Registration * * @return string */ private function doRegister() { //get request vars $register = Request::getVar('register', NULL, 'post'); $arrival = Request::getVar('arrival', NULL, 'post'); $departure = Request::getVar('departure', NULL, 'post'); $dietary = Request::getVar('dietary', NULL, 'post'); $dinner = Request::getVar('dinner', NULL, 'post'); $disability = Request::getVar('disability', NULL, 'post'); $race = Request::getVar('race', NULL, 'post'); $event_id = Request::getInt('event_id', NULL, 'post'); //load event data $event = new \Components\Events\Models\Event($event_id); // get event params $params = new \Hubzero\Config\Registry($event->get('params')); //array to hold any errors $errors = array(); //check for first name if (!isset($register['first_name']) || $register['first_name'] == '') { $errors[] = Lang::txt('Missing first name.'); } //check for last name if (!isset($register['last_name']) || $register['last_name'] == '') { $errors[] = Lang::txt('Missing last name.'); } //check for affiliation if (isset($register['affiliation']) && $register['affiliation'] == '') { $errors[] = Lang::txt('Missing affiliation.'); } //check for email if email is supposed to be on if ($params->get('show_email', 1) == 1) { if (!isset($register['email']) || $register['email'] == '' || !filter_var($register['email'], FILTER_VALIDATE_EMAIL)) { $errors[] = Lang::txt('Missing email address or email is not valid.'); } // check to make sure this is the only time registering if (\Components\Events\Tables\Respondent::checkUniqueEmailForEvent($register['email'], $event_id) > 0) { $errors[] = Lang::txt('You have previously registered for this event.'); } } //if we have any errors we must return if (count($errors) > 0) { $this->register = $register; $this->arrival = $arrival; $this->departure = $departure; $this->dietary = $dietary; $this->dinner = $dinner; $this->disability = $disability; $this->race = $race; $this->setError(implode('<br />', $errors)); return $this->register(); } //set data for saving $eventsRespondent = new \Components\Events\Tables\Respondent(array()); $eventsRespondent->event_id = $event_id; $eventsRespondent->registered = Date::toSql(); $eventsRespondent->arrival = $arrival['day'] . ' ' . $arrival['time']; $eventsRespondent->departure = $departure['day'] . ' ' . $departure['time']; $eventsRespondent->position_description = ''; if (isset($register['position_other']) && $register['position_other'] != '') { $eventsRespondent->position_description = $register['position_other']; } else { if (isset($register['position'])) { $eventsRespondent->position_description = $register['position']; } } $eventsRespondent->highest_degree = isset($register['degree']) ? $register['degree'] : ''; $eventsRespondent->gender = isset($register['sex']) ? $register['sex'] : ''; $eventsRespondent->disability_needs = isset($disability) && strtolower($disability) == 'yes' ? 1 : null; $eventsRespondent->dietary_needs = isset($dietary['needs']) && strtolower($dietary['needs']) == 'yes' ? $dietary['specific'] : null; $eventsRespondent->attending_dinner = isset($dinner) && $dinner == 'yes' ? 1 : 0; $eventsRespondent->bind($register); //did we save properly if (!$eventsRespondent->save($eventsRespondent)) { $this->setError($eventsRespondent->getError()); return $this->register(); } $r = $race; unset($r['nativetribe']); $r = empty($r) ? array() : $r; $sql = "INSERT INTO `#__events_respondent_race_rel` (respondent_id, race, tribal_affiliation)\n\t\t VALUES (" . $this->database->quote($eventsRespondent->id) . ", " . $this->database->quote(implode(',', $r)) . ", " . $this->database->quote($race['nativetribe']) . ")"; $this->database->setQuery($sql); $this->database->query(); //load event we are registering for $eventsEvent = new \Components\Events\Tables\Event($this->database); $eventsEvent->load($event_id); // send a copy to event admin if ($eventsEvent->email != '') { //build message to send to event admin $email = new \Hubzero\Plugin\View(array('folder' => 'groups', 'element' => 'calendar', 'name' => 'calendar', 'layout' => 'register_email_admin')); $email->option = $this->option; $email->group = $this->group; $email->params = $params; $email->event = $eventsEvent; $email->sitename = Config::get('sitename'); $email->register = $register; $email->race = $race; $email->dietary = $dietary; $email->disability = $disability; $email->arrival = $arrival; $email->departure = $departure; $email->dinner = $dinner; $message = str_replace("\n", "\r\n", $email->loadTemplate()); //declare subject $subject = Lang::txt("[" . $email->sitename . "] Group \"{$this->group->get('description')}\" Event Registration: " . $eventsEvent->title); //make from array $from = array('email' => 'group-event-registration@' . $_SERVER['HTTP_HOST'], 'name' => $register['first_name'] . ' ' . $register['last_name']); // email from person if ($params->get('show_email', 1) == 1) { $from['email'] = $register['email']; } //send email $this->_sendEmail($eventsEvent->email, $from, $subject, $message); } // build message to send to event registerer // only send if show email is on if ($params->get('show_email', 1) == 1) { $email = $this->view('register_email_user', 'calendar'); $email->option = $this->option; $email->group = $this->group; $email->params = $params; $email->event = $eventsEvent; $email->sitename = Config::get('sitename'); $email->siteurl = Config::get('live_site'); $email->register = $register; $email->race = $race; $email->dietary = $dietary; $email->disability = $disability; $email->arrival = $arrival; $email->departure = $departure; $email->dinner = $dinner; $message = str_replace("\n", "\r\n", $email->loadTemplate()); // build to, from, & subject $to = User::get('email'); $from = array('email' => 'groups@' . $_SERVER['HTTP_HOST'], 'name' => $email->sitename . ' Group Calendar: ' . $this->group->get('description')); $subject = Lang::txt('Thank you for Registering for the "%s" event', $eventsEvent->title); // send mail to user registering $this->_sendEmail($to, $from, $subject, $message); } // redirect back to the event App::redirect(Route::url('index.php?option=' . $this->option . '&cn=' . $this->group->get('cn') . '&active=calendar&action=details&event_id=' . $event_id), Lang::txt('You have successfully registered for the event.'), 'passed'); }