public function getDupes(ICommunityMember $member)
 {
     list($res, $count) = $this->member_repository->getAllByName($member->getFirstName(), $member->getLastName());
     $unset = array();
     for ($i = 0; $i < count($res); $i++) {
         if ($res[$i]->getIdentifier() == $member->getIdentifier()) {
             array_push($unset, $i);
             continue;
         }
         //check merge request
         $merge_request = $this->merge_request_repository->findByDupeAccount($res[$i]->getEmail());
         if (!is_null($merge_request)) {
             array_push($unset, $i);
         }
         // check delete request
         $delete_request = $this->delete_request_repository->findByDupeAccount($res[$i]->getEmail());
         if (!is_null($delete_request)) {
             array_push($unset, $i);
         }
         // check not my account action
         $query = new QueryObject();
         $query->addAndCondition(QueryCriteria::equal('PrimaryAccountID', $member->getIdentifier()));
         $query->addAndCondition(QueryCriteria::equal('ForeignAccountID', $res[$i]->getIdentifier()));
         $action = $this->not_my_account_repository->getBy($query);
         if (!is_null($action)) {
             array_push($unset, $i);
         }
     }
     for ($j = 0; $j < count($unset); $j++) {
         $index = $unset[$j];
         unset($res[$index]);
     }
     return $res;
 }
 function process()
 {
     set_time_limit(0);
     $csv_file = isset($_GET['csv_file']) ? trim($_GET['csv_file']) : null;
     if (is_null($csv_file)) {
         echo 'ERROR - csv_file param missing!';
         exit;
     }
     $ds = new CvsDataSourceReader(",");
     $cur_path = Director::baseFolder();
     $ds->Open($cur_path . "/assets/" . $csv_file);
     $headers = $ds->getFieldsInfo();
     try {
         $exams = 0;
         while (($row = $ds->getNextRow()) !== FALSE) {
             $code = trim($row[$headers["exam_code"]]);
             if ($code != 'COA-EVENT') {
                 continue;
             }
             $email = trim($row[$headers['open_stack_id']]);
             $exam_ext_id = trim($row[$headers['candidate_exam_id']]);
             $status = trim($row[$headers['exam_status']]);
             $pass_date = trim($row[$headers['pass_fail_date_c']]);
             $cert_nbr = trim($row[$headers['certification_number']]);
             $modified_date = trim($row[$headers['candidate_exam_date_modified']]);
             $exam_expiration_date = trim($row[$headers['exam_expiration_date']]);
             $cert_exam_expiration_date = trim($row[$headers['certificate_expiration_date']]);
             $cert_status = trim($row[$headers['certification_status']]);
             $member = $this->member_repository->findByEmail($email);
             if (is_null($member)) {
                 continue;
             }
             $exam = $member->getExamByExternalId($exam_ext_id);
             if (is_null($exam)) {
                 //create exam
                 $exam = CertifiedOpenStackAdministratorExam::create();
                 $exam->OwnerID = $member->ID;
                 $exam->ExternalID = $exam_ext_id;
             }
             $exam->setState($status, $modified_date, $exam_expiration_date, $pass_date, $code, $cert_nbr, $cert_exam_expiration_date, $cert_status);
             $exam->write();
             $exams++;
         }
     } catch (Exception $e) {
         $status = 0;
     }
     echo sprintf("created %s exams", $exams);
 }
 /**
  * @param $term
  * @param bool $obscure_email
  * @return array
  */
 public function getSpeakerByTerm($term, $obscure_email = true)
 {
     $data = $this->speaker_repository->searchByTermActive($term);
     $res = array();
     foreach ($data as $row) {
         $entry = array();
         $speaker_id = intval($row['speaker_id']);
         $member_id = intval($row['member_id']);
         $entry['name'] = sprintf("%s %s", $row['firstname'], $row['surname']);
         if (empty($entry['name'])) {
             continue;
         }
         $entry['title'] = '';
         $entry['company'] = '';
         $entry['speaker_id'] = $speaker_id;
         $entry['member_id'] = $member_id;
         if ($member_id > 0) {
             $member = $this->member_repository->getById($member_id);
             $entry['pic'] = $member->ProfilePhotoUrl();
             $company = $member->getCurrentCompany();
             if (!empty($company)) {
                 $entry['company'] = $company;
             }
         }
         if ($speaker_id > 0) {
             $speaker = $this->speaker_repository->getById($speaker_id);
             $entry['pic'] = $speaker->ProfilePhoto();
             if (!empty($speaker->Title)) {
                 $entry['title'] = $speaker->Title;
             }
         }
         if ($obscure_email) {
             $entry['email'] = preg_replace('/(?<=.).(?=.*.@)/u', '*', $row['email']);
         }
         array_push($res, $entry);
     }
     return $res;
 }
 function index()
 {
     try {
         $member = Member::currentUser();
         if ($member) {
             // user is already logged in
             return $this->redirect(OpenStackIdCommon::getRedirectBackUrl());
         }
         $consumer = Injector::inst()->get('MyOpenIDConsumer');
         $query = Auth_OpenID::getQuery();
         $message = Auth_OpenID_Message::fromPostArgs($query);
         $nonce = $message->getArg(Auth_OpenID_OPENID2_NS, 'response_nonce');
         list($timestamp, $salt) = Auth_OpenID_splitNonce($nonce);
         $claimed_id = $message->getArg(Auth_OpenID_OPENID2_NS, 'claimed_id');
         error_log(sprintf('OpenStackIdAuthenticator : id %s - salt %s - timestamp %s', $claimed_id, $salt, $timestamp));
         // Complete the authentication process using the server's response.
         $response = $consumer->complete(OpenStackIdCommon::getReturnTo());
         if ($response->status == Auth_OpenID_CANCEL) {
             error_log('OpenStackIdAuthenticator : Auth_OpenID_CANCEL');
             SS_Log::log('OpenStackIdAuthenticator : Auth_OpenID_CANCEL', SS_Log::WARN);
             throw new Exception('The verification was cancelled. Please try again.');
         } else {
             if ($response->status == Auth_OpenID_FAILURE) {
                 error_log('OpenStackIdAuthenticator : Auth_OpenID_FAILURE');
                 SS_Log::log('OpenStackIdAuthenticator : Auth_OpenID_FAILURE', SS_Log::WARN);
                 throw new Exception("The OpenID authentication failed.");
             } else {
                 if ($response->status == Auth_OpenID_SUCCESS) {
                     error_log('OpenStackIdAuthenticator : Auth_OpenID_SUCCESS');
                     $openid = $response->getDisplayIdentifier();
                     $openid = OpenStackIdCommon::escape($openid);
                     if ($response->endpoint->canonicalID) {
                         $openid = escape($response->endpoint->canonicalID);
                     }
                     //get user info from openid response
                     $member = null;
                     list($email, $full_name) = $this->getUserProfileInfo($response);
                     if (!is_null($email)) {
                         //try to get user by email
                         $member = $this->member_repository->findByEmail($email);
                     }
                     if (!$member) {
                         // or by openid
                         $member = Member::get()->filter('IdentityURL', $openid)->first();
                     }
                     if ($member) {
                         $result = $member->canLogIn();
                         if ($result->valid()) {
                             $member->setIdentityUrl($openid);
                             $member->write();
                             $member->LogIn(true);
                             return $this->redirect(OpenStackIdCommon::getRedirectBackUrl());
                         }
                         throw new Exception("Inactive User!");
                     }
                     throw new Exception("The OpenID authentication failed: can not find user " . $openid);
                 }
             }
         }
     } catch (Exception $ex) {
         Session::set("Security.Message.message", $ex->getMessage());
         Session::set("Security.Message.type", "bad");
         SS_Log::log($ex, SS_Log::WARN);
         return $this->redirect("Security/badlogin");
     }
 }