/**
  * @param ICommunityMember $primary_account
  * @param ICommunityMember $foreign_account
  * @return INotMyAccountAction
  */
 public function build(ICommunityMember $primary_account, ICommunityMember $foreign_account)
 {
     $action = new NotMyAccountAction();
     $action->PrimaryAccountID = $primary_account->getIdentifier();
     $action->ForeignAccountID = $foreign_account->getIdentifier();
     return $action;
 }
 public function mergeAccount(ICommunityMember $current_member, $token, array $merge_data, IMergeAccountBulkQueryFactory $query_factory)
 {
     $member_repository = $this->member_repository;
     $merge_request_repository = $this->merge_request_repository;
     $delete_dupe_member_factory = $this->delete_dupe_member_factory;
     $delete_dupe_member_repository = $this->delete_dupe_member_repository;
     $nominations_repository = $this->nominations_repository;
     $query_registry = $this->query_registry;
     return $this->tx_manager->transaction(function () use($current_member, $token, $merge_data, $member_repository, $merge_request_repository, $delete_dupe_member_factory, $delete_dupe_member_repository, $nominations_repository, $query_factory, $query_registry) {
         $request = $merge_request_repository->findByConfirmationToken($token);
         if (is_null($request)) {
             throw new NotFoundEntityException('DupeMemberMergeRequest', sprintf("token %s", $token));
         }
         if ($request->isVoid()) {
             throw new DuperMemberActionRequestVoid();
         }
         $dupe_account = $request->getDupeAccount();
         $current_account = $member_repository->getById($request->getPrimaryAccount()->getIdentifier());
         if ($dupe_account->getEmail() != $current_member->getEmail()) {
             throw new AccountActionBelongsToAnotherMemberException();
         }
         $request->doConfirmation($token);
         //merge data
         //we cant change email at this stage, we need to delete the dup account first...
         // merge gerrit users
         foreach ($dupe_account->GerritUsers() as $gerrit_user) {
             $current_account->addGerritUser($gerrit_user->AccountID, $gerrit_user->Email);
         }
         if (isset($merge_data['first_name']) && isset($merge_data['surname'])) {
             $current_account->updateCompleteName($merge_data['first_name'], $merge_data['surname']);
         }
         if (isset($merge_data['second_email'])) {
             $current_account->updateSecondEmail($merge_data['second_email']);
         }
         if (isset($merge_data['third_email'])) {
             $current_account->updateThirdEmail($merge_data['third_email']);
         }
         $current_account->updatePersonalInfo($merge_data['shirt_size'], $merge_data['statement_interest'], $merge_data['bio'], $merge_data['gender'], $merge_data['food_preference'], $merge_data['other_food']);
         $current_account->updateProjects($merge_data['projects'], $merge_data['other_project']);
         $current_account->updateSocialInfo($merge_data['irc_handle'], $merge_data['twitter_name'], $merge_data['linkedin_profile']);
         $current_account->updateAddress($merge_data['address'], $merge_data['suburb'], $merge_data['state'], $merge_data['postcode'], $merge_data['city'], $merge_data['country']);
         $current_account->updateProfilePhoto($merge_data['photo']);
         $query = $query_factory->buildMergeProfileBulkQuery($current_account, $dupe_account);
         $query_registry->addBulkQuery($query);
         // candidate
         if ($dupe_account->isCandidate()) {
             $current_candidate = $dupe_account->getCurrentCandidate();
             $current_candidate->updateMember($current_account);
             //update candidate nominations
             $query = $query_factory->buildMergeCandidateBulkQuery($current_account, $dupe_account);
             $query_registry->addBulkQuery($query);
         }
         //speaker
         if ($dupe_account->isSpeaker()) {
             $query = $query_factory->buildMergeSpeakerBulkQuery($current_account, $dupe_account);
             $query_registry->addBulkQuery($query);
         }
         if ($dupe_account->isMarketPlaceAdmin()) {
             $query = $query_factory->buildMergeMarketPlaceAdminBulkQuery($current_account, $dupe_account);
             $query_registry->addBulkQuery($query);
         }
         if ($dupe_account->isCompanyAdmin()) {
             $query = $query_factory->buildMergeCompanyAdminBulkQuery($current_account, $dupe_account);
             $query_registry->addBulkQuery($query);
         }
         if ($dupe_account->isAttendee()) {
             $query = $query_factory->buildMergeAttendeeBulkQuery($current_account, $dupe_account);
             $query_registry->addBulkQuery($query);
         }
         if ($dupe_account->hasSurveys()) {
             $query = $query_factory->buildMergeSurveysBulkQuery($current_account, $dupe_account);
             $query_registry->addBulkQuery($query);
         }
         $current_member->logOut();
         $deleted = $delete_dupe_member_factory->build($current_member);
         $member_repository->delete($current_member);
         $delete_dupe_member_repository->add($deleted);
         if (isset($merge_data['email'])) {
             $query = $query_factory->buildMergeEmail($current_account, $merge_data['email']);
             $query_registry->addBulkQuery($query, 'post');
         }
         return $request;
     });
 }
 /**
  * @param ICommunityMember $member
  * @return void
  */
 public function associateMember(ICommunityMember $member)
 {
     $this->MemberID = $member->getIdentifier();
     //$this->RegistrationRequestID = 0;
 }
 /**
  * @param ICommunityMember $primary_account Primary Account
  * @param ICommunityMember $dupe_account Account to merge with
  * @return IBulkQuery
  */
 public function buildMergeAttendeeBulkQuery(ICommunityMember $primary_account, ICommunityMember $dupe_account)
 {
     $query = new AttendeeBulkQuery();
     $params = array('primary_id' => $primary_account->getIdentifier(), 'dupe_id' => $dupe_account->getIdentifier());
     $query->addParams($params);
     return $query;
 }
 /**
  * @param ICommunityMember $member
  * @return void
  */
 public function associateMember(ICommunityMember $member)
 {
     $this->MemberID = $member->getIdentifier();
 }
 /**
  * @param ICommunityMember $member
  * @return $this
  */
 public function assignOwner(ICommunityMember $member)
 {
     $this->OwnerID = $member->getIdentifier();
     AssociationFactory::getInstance()->getMany2OneAssociation($this, 'Owner')->setTarget($member);
 }
 /**
  * @param ICommunityMember $primary_account
  * @param  string          $newEmail
  * @return IBulkQuery
  */
 public function buildMergeEmail(ICommunityMember $primary_account, $newEmail)
 {
     $query = new MergeEmailBulkQuery();
     $query->addParams(array('primary_id' => $primary_account->getIdentifier(), 'email' => $newEmail));
     return $query;
 }