public static function handleRegistrationRequest($overrideFields = array()) { if (!empty($_SESSION['User'])) { return static::throwError('You are already logged in. Please log out if you need to register a new account.'); } if (!static::$enableRegistration) { return static::throwError('Sorry, self-registration is not currently available. Please contact an administrator.'); } $filteredRequestFields = array_intersect_key($_REQUEST, array_flip(static::$registrationFields)); $additionalErrors = array(); if (is_callable(static::$createUser)) { $User = call_user_func_array(static::$createUser, array(&$filteredRequestFields, &$additionalErrors)); } else { $className = User::getStaticDefaultClass(); $User = new $className(); } if ($_SERVER['REQUEST_METHOD'] == 'POST') { // save person fields $User->setFields(array_merge($filteredRequestFields, $overrideFields)); if (!empty($_REQUEST['Password'])) { $User->setClearPassword($_REQUEST['Password']); } // additional checks if (empty($_REQUEST['Password']) || strlen($_REQUEST['Password']) < $User::$minPasswordLength) { $additionalErrors['Password'] = '******' . $User::$minPasswordLength . ' characters long.'; } elseif (empty($_REQUEST['PasswordConfirm']) || $_REQUEST['Password'] != $_REQUEST['PasswordConfirm']) { $additionalErrors['PasswordConfirm'] = 'Please enter your password a second time for confirmation.'; } // configurable hook if (is_callable(static::$applyRegistrationData)) { call_user_func_array(static::$applyRegistrationData, array($User, $_REQUEST, &$additionalErrors)); } EventBus::fireEvent('beforeRegister', self::class, array('User' => $User, 'requestData' => $_REQUEST, 'additionalErrors' => &$additionalErrors)); // validate if ($User->validate() && empty($additionalErrors)) { // save store $User->save(); // upgrade session $GLOBALS['Session'] = $GLOBALS['Session']->changeClass('UserSession', array('PersonID' => $User->ID)); // send welcome email Mailer::sendFromTemplate($User->EmailRecipient, 'registerComplete', array('User' => $User)); if (is_callable(static::$onRegisterComplete)) { call_user_func(static::$onRegisterComplete, $User, $_REQUEST); } EventBus::fireEvent('registerComplete', self::class, array('User' => $User, 'requestData' => $_REQUEST)); return static::respond('registerComplete', array('success' => true, 'data' => $User)); } if (count($additionalErrors)) { $User->addValidationErrors($additionalErrors); } // fall through back to form if validation failed } else { // apply overrides to phantom $User->setFields($overrideFields); } return static::respond('register', array('success' => false, 'data' => $User)); }
public static function handleSynchronizeRequest() { // read request/response configuration $pretend = !empty($_REQUEST['pretend']); if (static::peekPath() == 'json' || static::peekPath() == 'text') { static::$responseMode = static::shiftPath(); } if ($jobHandle = static::shiftPath()) { if (!($Job = Job::getByHandle($jobHandle))) { return static::throwNotFoundError('Job not found'); } if (static::$synchronizeRequiredAccountLevel) { $GLOBALS['Session']->requireAccountLevel(static::$synchronizeRequiredAccountLevel); } if (static::peekPath() == 'log') { $logPath = $Job->getLogPath() . '.bz2'; if (file_exists($logPath)) { header('Content-Type: application/json'); header(sprintf('Content-Disposition: attachment; filename="%s-%u.json"', $Job->Connector, $Job->ID)); passthru("bzcat {$logPath}"); exit; } else { return static::throwNotFoundError('Log not available'); } } return static::respond('jobStatus', array('data' => $Job)); } // authenticate and create job or copy template if (!empty($_REQUEST['template'])) { $TemplateJob = Job::getByHandle($_REQUEST['template']); if (!$TemplateJob || $TemplateJob->Status != 'Template' || $TemplateJob->Connector != get_called_class()) { return static::throwNotFoundError('Template job not found'); } $Job = Job::create(array('Connector' => $TemplateJob->Connector, 'Template' => $TemplateJob, 'Config' => $TemplateJob->Config)); } else { if (static::$synchronizeRequiredAccountLevel) { $GLOBALS['Session']->requireAccountLevel(static::$synchronizeRequiredAccountLevel); } $Job = Job::create(array('Connector' => get_called_class(), 'Config' => static::_getJobConfig($_REQUEST))); if (!empty($_REQUEST['createTemplate'])) { if ($pretend) { return static::throwInvalidRequestError('Cannot combine pretend and createTemplate'); } $Job->Status = 'Template'; $Job->save(); return static::respond('templateCreated', array('data' => $Job)); } } // show template if not a post if ($_SERVER['REQUEST_METHOD'] != 'POST') { return static::respond('createJob', array('data' => $Job, 'templates' => Job::getAllByWhere(array('Status' => 'Template', 'Connector' => get_called_class())))); } // save job in pending state before starting if (!$pretend) { $Job->save(); } // close connection to client if (!empty($_REQUEST['fork'])) { header('Location: ' . static::_getConnectorBaseUrl(true) . '/' . $Job->Handle, true, 201); print json_encode(array('data' => $Job->getData())); fastcgi_finish_request(); } // update execution time limit set_time_limit(static::$synchronizeTimeLimit); // execute synchronization try { $success = static::synchronize($Job, $pretend); } catch (Exception $e) { $Job->logException($e); $success = false; } if (!$success) { $Job->Status = 'Failed'; } // save job if not pretend if (!$pretend) { $Job->save(); $Job->writeLog(); // email report if (!empty($Job->Config['reportTo'])) { \Emergence\Mailer\Mailer::sendFromTemplate($Job->Config['reportTo'], 'syncronizeComplete', array('Job' => $Job, 'connectorBaseUrl' => static::_getConnectorBaseUrl(true))); } } // all done, respond return static::respond('syncronizeComplete', array('data' => $Job, 'success' => $success, 'pretend' => $pretend)); }
<?php $Alert = $_EVENT['Record']; if ($Alert->isFieldDirty('Status') && $Alert->Endpoint && ($emailTo = $Alert->Endpoint->getNotificationEmailRecipient())) { \Emergence\Mailer\Mailer::sendFromTemplate($emailTo, 'alerts/notifications/' . $Alert::$notificationTemplate, ['Alert' => $Alert]); }