Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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');
 }