public function getRenderUITopExtensions(&$html)
 {
     $current_user = Member::currentUser();
     if (!$current_user->shouldShowDupesOnProfile()) {
         return;
     }
     $dupe_members = $this->manager->getDupes($current_user);
     $qty = count($dupe_members);
     if ($qty > 0) {
         Requirements::css('dupe_members/css/edit.profile.dupes.member.extension.css');
         Requirements::css('themes/openstack/bower_assets/sweetalert2/dist/sweetalert2.min.css');
         Requirements::javascript('themes/openstack/bower_assets/sweetalert2/dist/sweetalert2.min.js');
         Requirements::javascript('marketplace/code/ui/admin/js/utils.js');
         Requirements::javascript('dupe_members/javascript/edit.profile.dupes.member.extension.js');
         $members_emails_warning = "<div id=\"dupes-email-warning-container\" class=\"alert alert-danger alert-dismissible\" role=\"alert\">";
         $members_emails_warning .= "<button id='dupes-dismiss' type=\"button\" class=\"close\" data-dismiss=\"alert\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Close</span></button>";
         $members_emails_warning .= "<p>We currently show there are <span class='span-qty'>{$qty}</span> additional accounts with your First & Last Name:</p>";
         $members_emails_warning .= '<ul id="dupes-emails-list">';
         foreach ($dupe_members as $dupe_mem) {
             $id = $dupe_mem->getIdentifier();
             $delete_btn_html = '<a class="roundedButton dupes-member-delete-account" data-id="' . $id . '" href="#" title="Delete account">Delete</a>';
             $merge_btn_html = '<a class="roundedButton dupes-member-merge-account"  data-id="' . $id . '" href="#" title="Merge account">Merge</a>';
             $not_my_btn_html = '<a class="roundedButton dupes-member-not-my-account"  data-id="' . $id . '" href="#" title="This is not my account">This is not my account</a>';
             $members_emails_warning .= '<li><span class="dupes-email">' . preg_replace('/(?<=.).(?=.*.@)/u', '*', $dupe_mem->getEmail()) . '</span>' . $merge_btn_html . '&nbsp;' . $delete_btn_html . '&nbsp;' . $not_my_btn_html . '</li>';
         }
         $members_emails_warning .= '</ul></div>';
         $html .= $members_emails_warning;
     }
 }
 /**
  * @return void
  */
 public function run()
 {
     try {
         $batch_size = 15;
         if (isset($_GET['batch_size'])) {
             $batch_size = intval(trim(Convert::raw2sql($_GET['batch_size'])));
         }
         $manager = new DupesMembersManager(new SapphireDupesMemberRepository(), new DupeMemberMergeRequestFactory(), new DupeMemberDeleteRequestFactory(), new SapphireDupeMemberMergeRequestRepository(), new SapphireDupeMemberDeleteRequestRepository(), new SapphireDeletedDupeMemberRepository(), new DeletedDupeMemberFactory(), new SapphireCandidateNominationRepository(), new SapphireNotMyAccountActionRepository(), new NotMyAccountActionFactory(), SapphireTransactionManager::getInstance(), SapphireBulkQueryRegistry::getInstance());
         $manager->purgeActionRequests($batch_size);
         return 'OK';
     } catch (Exception $ex) {
         SS_Log::log($ex, SS_Log::ERR);
         echo $ex->getMessage();
     }
 }
 public function markForeignAccount()
 {
     try {
         $foreign_id = intval(convert::raw2sql($this->request->param('FOREIGN_MEMBER_ID')));
         $current_member = Member::currentUser();
         $this->manager->markAsNotMyAccount($current_member->ID, $foreign_id);
         return $this->ok();
     } catch (NotFoundEntityException $ex1) {
         SS_Log::log($ex1, SS_Log::WARN);
         return $this->notFound($ex1->getMessage());
     } catch (EntityValidationException $ex2) {
         SS_Log::log($ex2, SS_Log::WARN);
         return $this->validationError($ex2->getMessages());
     } catch (Exception $ex) {
         SS_Log::log($ex, SS_Log::ERR);
         return $this->serverError();
     }
 }