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));
 }
Esempio n. 2
0
 public function log($level, $message, array $context = array())
 {
     \Debug::log(array('level' => $level, 'message' => $message, 'context' => $context));
     if (in_array($level, static::$logLevelsWrite)) {
         file_put_contents(static::$logPath, date('Y-m-d H:i:s') . " [{$level}] {$message}\n\t" . "context: " . trim(str_replace(PHP_EOL, "\n\t", print_r($context, true))) . "\n" . "\tbacktrace:\n\t\t" . implode("\n\t\t", static::buildBacktraceLines()) . "\n\n", FILE_APPEND);
     }
     if (in_array($level, static::$logLevelsEmail)) {
         \Emergence\Mailer\Mailer::send(\Site::$webmasterEmail, "{$level} logged on {$_SERVER['HTTP_HOST']}", '<dl>' . '<dt>Timestamp</dt><dd>' . date('Y-m-d H:i:s') . '</dd>' . '<dt>Level</dt><dd>' . $level . '</dd>' . '<dt>Message</dt><dd>' . htmlspecialchars($message) . '</dd>' . '<dt>Context</dt><dd><pre>' . htmlspecialchars(print_r($context, true)) . '</pre></dd>' . '<dt>Context</dt><dd><pre>' . htmlspecialchars(implode("\n", static::buildBacktraceLines())) . '</pre></dd>');
     }
 }
 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]);
}