/**
  * If the REMOTE_USER is set and is in the Member table, log that member in. If
  * not, and Config::inst()->get('AuthRemoteUserExtension', 'auto_create_user') is set, add that
  * Member to the configured group, and log the new user in. Otherwise, do nothing.
  */
 public function onAfterInit()
 {
     if (isset($_SERVER['REMOTE_USER'])) {
         $unique_identifier = $_SERVER['REMOTE_USER'];
     } elseif (isset($_SERVER['REDIRECT_REMOTE_USER'])) {
         $unique_identifier = $_SERVER['REDIRECT_REMOTE_USER'];
     }
     if (isset($unique_identifier)) {
         $unique_identifier_field = Member::config()->unique_identifier_field;
         $member = Member::get()->filter($unique_identifier_field, $unique_identifier)->first();
         if ($member) {
             $member->logIn();
             $this->owner->redirectBack();
         } elseif (Config::inst()->get('AuthRemoteUserExtension', 'auto_create_user') && strlen(Config::inst()->get('AuthRemoteUserExtension', 'auto_user_group'))) {
             $group = Group::get()->filter('Title', Config::inst()->get('AuthRemoteUserExtension', 'auto_user_group'))->first();
             if ($group) {
                 $member = new Member();
                 $member->{$unique_identifier_field} = $unique_identifier;
                 $member->write();
                 $member->Groups()->add($group);
                 $member->logIn();
             }
         }
     }
 }
 /**
  * creates and logs in a temporary user.
  *
  */
 private function createAndLoginUser()
 {
     $this->username = "******";
     $this->password = rand(1000000000, 9999999999);
     //Make temporary admin member
     $adminMember = Member::get()->filter(array("Email" => $this->username))->first();
     if ($adminMember != NULL) {
         $adminMember->delete();
     }
     $this->member = new Member();
     $this->member->Email = $this->username;
     $this->member->Password = $this->password;
     $this->member->write();
     $adminGroup = Group::get()->filter(array("code" => "administrators"))->first();
     if (!$adminGroup) {
         user_error("No admin group exists");
     }
     $this->member->Groups()->add($adminGroup);
     curl_setopt($this->ch, CURLOPT_USERPWD, $this->username . ":" . $this->password);
     $loginUrl = Director::absoluteURL('/Security/LoginForm');
     curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "POST");
     curl_setopt($this->ch, CURLOPT_URL, $loginUrl);
     curl_setopt($this->ch, CURLOPT_POST, 1);
     curl_setopt($this->ch, CURLOPT_POSTFIELDS, 'Email=' . $this->username . '&Password='******'color:red'>There was an error logging in!</span><br />";
     }
 }
 function activate($data, $form, $request)
 {
     //Check if there's a temp member with a Verification Code equal to this
     //if there is, register the new member and log him in
     //if not, tell him the code is wrong
     //Check if this member already exists
     $tempMember = TempMember::codeExists($data);
     if (!$tempMember) {
         $form->sessionMessage(_t("Register.REGISTRATION ERROR", "There's no account waiting for activation with this code.\n\t\t\t\t\t\t\t\t\t If you already have an account log in here <a href=\"my-events/\">here</a>"), 'bad');
         Director::redirectBack();
         return;
     }
     // Create a new Member object
     $member = new Member();
     $member->FirstName = $tempMember->FirstName;
     $member->Surname = $tempMember->Surname;
     $member->Phone = $tempMember->Phone;
     $member->Email = $tempMember->Email;
     $member->Password = $tempMember->Password;
     $member->ReceiveMail = $tempMember->ReceiveMail;
     $member->ReceiveMail = $tempMember->ReceiveMail;
     $member->RequestListedAsPresenter = $tempMember->RequestListedAsPresenter;
     $member->LocationAddress = $tempMember->LocationAddress;
     $member->LocationLatitude = $tempMember->LocationLatitude;
     $member->LocationLongitude = $tempMember->LocationLongitude;
     $member->Description = $tempMember->Description;
     // Write to db.
     // This needs to happen before we add it to a group
     $member->write();
     if ($tempMember->RequestListedAsPresenter) {
         $presentorApproval = new PresentorApproval();
         $presentorApproval->MemberID = $member->ID;
         $presentorApproval->MemberName = $tempMember->FirstName . ' ' . $tempMember->Surname;
         $presentorApproval->Message = $tempMember->Description;
         $presentorApproval->Email = $tempMember->Email;
         $presentorApproval->Confirmation = 'Pending';
         $presentorApproval->IsDone = false;
         $presentorApproval->write();
     }
     $tempMember->delete();
     $member->logIn();
     // Add the member to User Group
     // Check if it exists first
     if ($group = DataObject::get_one('Group', 'ID = 3')) {
         $member->Groups()->add($group);
         // Redirect based on URL
         // TO EDIT
         Director::redirect('SuccessVerification');
     } else {
         $form->sessionMessage(_t("Register.REGISTRATION ERROR", "Your registration wasn't successful please try again"), 'bad');
         Director::redirectBack();
     }
 }
 /**
  * Test that orphaned pages are handled correctly
  */
 public function testOrphanedPages()
 {
     $origStage = Versioned::get_reading_mode();
     // Setup user who can view draft content, but lacks cms permission.
     // To users such as this, orphaned pages should be inaccessible. canView for these pages is only
     // necessary for admin / cms users, who require this permission to edit / rearrange these pages.
     $permission = new Permission();
     $permission->Code = 'VIEW_DRAFT_CONTENT';
     $group = new Group(array('Title' => 'Staging Users'));
     $group->write();
     $group->Permissions()->add($permission);
     $member = new Member();
     $member->Email = '*****@*****.**';
     $member->write();
     $member->Groups()->add($group);
     // both pages are viewable in stage
     Versioned::reading_stage('Stage');
     $about = $this->objFromFixture('Page', 'about');
     $staff = $this->objFromFixture('Page', 'staff');
     $this->assertFalse($about->isOrphaned());
     $this->assertFalse($staff->isOrphaned());
     $this->assertTrue($about->canView($member));
     $this->assertTrue($staff->canView($member));
     // Publishing only the child page to live should orphan the live record, but not the staging one
     $staff->publish('Stage', 'Live');
     $this->assertFalse($staff->isOrphaned());
     $this->assertTrue($staff->canView($member));
     Versioned::reading_stage('Live');
     $staff = $this->objFromFixture('Page', 'staff');
     // Live copy of page
     $this->assertTrue($staff->isOrphaned());
     // because parent isn't published
     $this->assertFalse($staff->canView($member));
     // Publishing the parent page should restore visibility
     Versioned::reading_stage('Stage');
     $about = $this->objFromFixture('Page', 'about');
     $about->publish('Stage', 'Live');
     Versioned::reading_stage('Live');
     $staff = $this->objFromFixture('Page', 'staff');
     $this->assertFalse($staff->isOrphaned());
     $this->assertTrue($staff->canView($member));
     // Removing staging page should not prevent live page being visible
     $about->deleteFromStage('Stage');
     $staff->deleteFromStage('Stage');
     $staff = $this->objFromFixture('Page', 'staff');
     $this->assertFalse($staff->isOrphaned());
     $this->assertTrue($staff->canView($member));
     // Cleanup
     Versioned::set_reading_mode($origStage);
 }
 /**
  * Gets the list of groups that can be set after the submission of a particular form
  *
  * This works around the problem with the checkboxsetfield which doesn't validate that the
  * groups that the user has selected are not validated against the list of groups the user is
  * allowed to choose from.
  *
  * @param Form   $form
  * @param Member $member
  */
 protected function getSettableGroupIdsFrom(Form $form, Member $member = null)
 {
     // first off check to see if groups were selected by the user. If so, we want
     // to remove that control from the form list (just in case someone's sent through an
     // ID for a group like, say, the admin's group...). It means we have to handle the setting
     // ourselves, but that's okay
     $groupField = $form->Fields()->dataFieldByName('Groups');
     // The list of selectable groups
     $groupIds = $allowedIds = $this->SelectableGroups()->map('ID', 'ID')->toArray();
     // we need to track the selected groups against the existing user's groups - this is
     // so that we don't accidentally remove them from the list of groups
     // a user might have been placed in via other means
     $existingIds = array();
     if ($member) {
         $existing = $member->Groups();
         if ($existing && $existing->Count() > 0) {
             $existingIds = $existing->map('ID', 'ID')->toArray();
             // remove any that are in the selectable groups map - we only want to
             // worry about those that aren't managed by this form
             foreach ($groupIds as $gid) {
                 unset($existingIds[$gid]);
             }
         }
     }
     if ($groupField) {
         $givenIds = $groupField->Value();
         $groupIds = array();
         if ($givenIds) {
             foreach ($givenIds as $givenId) {
                 if (isset($allowedIds[$givenId])) {
                     $groupIds[] = $givenId;
                 }
             }
         }
         $form->Fields()->removeByName('Groups');
     }
     foreach ($this->Groups()->column('ID') as $mustId) {
         $groupIds[] = $mustId;
     }
     foreach ($existingIds as $existingId) {
         if (!in_array($existingId, $groupIds)) {
             $groupIds[] = $existingId;
         }
     }
     return $groupIds;
 }
 /**
  * No validation errors occured, so we register the customer and send
  * mails with further instructions for the double opt-in procedure.
  *
  * @param SS_HTTPRequest $data       SS session data
  * @param Form           $form       the form object
  * @param array          $formData   CustomHTMLForms session data
  * @param bool           $doRedirect Set to true to redirect after submitSuccess
  *
  * @return void
  * 
  * @author Sebastian Diel <*****@*****.**>,
  *         Roland Lehmann <*****@*****.**>,
  *         Sascha Koehler <*****@*****.**>
  * @since 28.01.2015
  */
 protected function submitSuccess($data, $form, $formData, $doRedirect = true)
 {
     $anonymousCustomer = false;
     /*
      * Logout anonymous users and save their shoppingcart temporarily.
      */
     if (SilvercartCustomer::currentUser()) {
         $anonymousCustomer = SilvercartCustomer::currentUser();
         SilvercartCustomer::currentUser()->logOut();
     }
     // Aggregate Data and set defaults
     $formData['MemberID'] = Member::currentUserID();
     $formData['Locale'] = Translatable::get_current_locale();
     if ($this->demandBirthdayDate()) {
         $formData['Birthday'] = $formData['BirthdayYear'] . '-' . $formData['BirthdayMonth'] . '-' . $formData['BirthdayDay'];
         if ($this->UseMinimumAgeToOrder()) {
             if (!SilvercartConfig::CheckMinimumAgeToOrder($formData['Birthday'])) {
                 $this->errorMessages['BirthdayDay'] = array('message' => SilvercartConfig::MinimumAgeToOrderError(), 'fieldname' => _t('SilvercartPage.BIRTHDAY'), 'BirthdayDay' => array('message' => SilvercartConfig::MinimumAgeToOrderError()));
                 $this->errorMessages['BirthdayMonth'] = array('message' => SilvercartConfig::MinimumAgeToOrderError(), 'fieldname' => _t('SilvercartPage.BIRTHDAY'), 'BirthdayMonth' => array('message' => SilvercartConfig::MinimumAgeToOrderError()));
                 $this->errorMessages['BirthdayYear'] = array('message' => SilvercartConfig::MinimumAgeToOrderError(), 'fieldname' => _t('SilvercartPage.BIRTHDAY'), 'BirthdayYear' => array('message' => SilvercartConfig::MinimumAgeToOrderError()));
                 $this->setSubmitSuccess(false);
                 return $this->submitFailure($data, $form);
             }
         }
     }
     // Create new regular customer and perform a log in
     $customer = new Member();
     // Pass shoppingcart to registered customer and delete the anonymous
     // customer.
     if ($anonymousCustomer) {
         $newShoppingCart = $anonymousCustomer->getCart()->duplicate(true);
         foreach ($anonymousCustomer->getCart()->SilvercartShoppingCartPositions() as $shoppingCartPosition) {
             $newShoppingCartPosition = $shoppingCartPosition->duplicate(false);
             $newShoppingCartPosition->SilvercartShoppingCartID = $newShoppingCart->ID;
             $newShoppingCartPosition->write();
             $shoppingCartPosition->transferToNewPosition($newShoppingCartPosition);
         }
         $customer->SilvercartShoppingCartID = $newShoppingCart->ID;
         $anonymousCustomer->delete();
     }
     $customer->castedUpdate($formData);
     $customer->write();
     $customer->logIn();
     $customer->changePassword($formData['Password']);
     $customerGroup = $this->getTargetCustomerGroup($formData);
     if ($customerGroup) {
         $customer->Groups()->add($customerGroup);
     }
     // Create ShippingAddress for customer and populate it with registration data
     $address = new SilvercartAddress();
     $address->castedUpdate($formData);
     $country = DataObject::get_by_id('SilvercartCountry', (int) $formData['Country']);
     if ($country) {
         $address->SilvercartCountryID = $country->ID;
     }
     $address->write();
     $this->extend('updateRegisteredAddress', $address, $data, $form, $formData);
     //connect the ShippingAddress and the InvoiceAddress to the customer
     $customer->SilvercartShippingAddressID = $address->ID;
     $customer->SilvercartInvoiceAddressID = $address->ID;
     $customer->SilvercartAddresses()->add($address);
     $customer->write();
     // Remove from the anonymous newsletter recipients list
     if (SilvercartAnonymousNewsletterRecipient::doesExist($customer->Email)) {
         $recipient = SilvercartAnonymousNewsletterRecipient::getByEmailAddress($customer->Email);
         if ($recipient->NewsletterOptInStatus) {
             $customer->NewsletterOptInStatus = 1;
             $customer->NewsletterConfirmationHash = $recipient->NewsletterOptInConfirmationHash;
             $customer->write();
         }
         SilvercartAnonymousNewsletterRecipient::removeByEmailAddress($customer->Email);
     }
     if ($customer->SubscribedToNewsletter && !$customer->NewsletterOptInStatus) {
         SilvercartNewsletter::subscribeRegisteredCustomer($customer);
     }
     $this->extend('updateRegisteredCustomer', $customer, $data, $form, $formData);
     if ($doRedirect) {
         // Redirect to welcome page
         if (array_key_exists('backlink', $formData) && !empty($formData['backlink'])) {
             $this->controller->redirect($formData['backlink']);
         } else {
             $this->controller->redirect($this->controller->PageByIdentifierCode('SilvercartRegisterConfirmationPage')->Link());
         }
     }
 }
 /**
  * Create permissions, groups and member records if they don't exist.
  */
 public function requireDefaultRecords()
 {
     parent::requireDefaultRecords();
     $groups = array();
     // create or update groups, cache id by title
     foreach (self::$groups as $title => $description) {
         if (!($group = DataObject::get_one('Group', " Title = '{$title}'"))) {
             $group = new Group(array('Title' => $title));
         }
         // update description if exists, otherwise set
         $group->Description = $description;
         $group->write();
         $groups[$title] = $group->ID;
     }
     // create or update permissions and assign to associated group
     foreach (self::$permissions as $code => $groupTitle) {
         if (!($perm = DataObject::get_one('Permission', " Code = '{$code}' "))) {
             $perm = new Permission(array('Code' => $code));
         }
         $perm->GroupID = $groups[$groupTitle];
         $perm->write();
     }
     // if config option is true create or update members, then add Member to group
     if ($this->config()->get('create_members_and_assign_to_groups') === true) {
         foreach (self::$members as $memberInfo) {
             $email = $memberInfo['Email'];
             if (!($member = DataObject::get_one('Member', " Email = '{$email}' "))) {
                 $member = new Member();
             }
             // set or update data
             $member->update($memberInfo);
             $member->write();
             foreach (self::$member_groups[$email] as $groupTitle) {
                 // if not in the group already add it
                 $groupID = $groups[$groupTitle];
                 if (!$member->Groups()->filter('ID', $groupID)->first()) {
                     $member->Groups()->add($groupID);
                 }
                 $member->write();
             }
         }
     }
 }
 /**
  * Get all the workflows that this user is responsible for
  *
  * @param Member $user
  *				The user to get workflows for
  *
  * @return ArrayList
  *				The list of workflow instances this user owns
  */
 public function usersWorkflows(Member $user)
 {
     $groupIds = $user->Groups()->column('ID');
     $groupInstances = null;
     $filter = array('');
     if (is_array($groupIds)) {
         $groupInstances = DataList::create('WorkflowInstance')->filter(array('Group.ID:ExactMatchMulti' => $groupIds))->where('"WorkflowStatus" != \'Complete\'');
     }
     $userInstances = DataList::create('WorkflowInstance')->filter(array('Users.ID:ExactMatch' => $user->ID))->where('"WorkflowStatus" != \'Complete\'');
     if ($userInstances) {
         $userInstances = $userInstances->toArray();
     } else {
         $userInstances = array();
     }
     if ($groupInstances) {
         $groupInstances = $groupInstances->toArray();
     } else {
         $groupInstances = array();
     }
     $all = array_merge($groupInstances, $userInstances);
     return ArrayList::create($all);
 }
 private function createshopadmin()
 {
     $member = new Member();
     $member->FirstName = 'Shop';
     $member->Surname = 'Admin';
     $member->Email = '*****@*****.**';
     $member->SetPassword = '******';
     $member->Password = '******';
     $member->write();
     $group = EcommerceRole::get_admin_group();
     $member->Groups()->add($group);
 }
 /**
  * Returns allowed payment methods.
  * 
  * @param string                 $shippingCountry                  The SilvercartCountry to check the payment methods for.
  * @param SilvercartShoppingCart $shoppingCart                     The shopping cart object
  * @param Boolean                $forceAnonymousCustomerIfNotExist When true, an anonymous customer will be created when no customer exists
  * 
  * @return ArrayList
  * 
  * @author Sebastian Diel <*****@*****.**>,
  *         Sascha Koehler <*****@*****.**>
  * @since 15.11.2014
  */
 public static function getAllowedPaymentMethodsFor($shippingCountry, $shoppingCart, $forceAnonymousCustomerIfNotExist = false)
 {
     $allowedPaymentMethods = array();
     if (!$shippingCountry) {
         return $allowedPaymentMethods;
     }
     $paymentMethods = $shippingCountry->SilvercartPaymentMethods('isActive = 1');
     $member = SilvercartCustomer::currentUser();
     if (!$member && $forceAnonymousCustomerIfNotExist) {
         $member = new Member();
         $anonymousGroup = Group::get()->filter('Code', 'anonymous')->first();
         $memberGroups = new ArrayList();
         $memberGroups->push($anonymousGroup);
     } else {
         $memberGroups = $member->Groups();
     }
     $shippingMethodID = null;
     if (Controller::curr() instanceof SilvercartCheckoutStep_Controller) {
         $checkoutData = Controller::curr()->getCombinedStepData();
         if (array_key_exists('ShippingMethod', $checkoutData)) {
             $shippingMethodID = $checkoutData['ShippingMethod'];
         }
     }
     if ($paymentMethods) {
         foreach ($paymentMethods as $paymentMethod) {
             $assumePaymentMethod = true;
             $containedInGroup = false;
             $containedInUsers = false;
             $doAccessChecks = true;
             // ------------------------------------------------------------
             // Basic checks
             // ------------------------------------------------------------
             if ($paymentMethod->enableActivationByOrderRestrictions) {
                 $assumePaymentMethod = $paymentMethod->isActivationByOrderRestrictionsPossible($member);
                 $doAccessChecks = false;
             }
             $checkAmount = $shoppingCart->getAmountTotalWithoutFees()->getAmount();
             if (!$paymentMethod->isAvailableForAmount($checkAmount)) {
                 $assumePaymentMethod = false;
                 $doAccessChecks = false;
             }
             // ------------------------------------------------------------
             // Shipping method check
             // ------------------------------------------------------------
             if (!is_null($shippingMethodID) && $paymentMethod->SilvercartShippingMethods()->exists() && !$paymentMethod->SilvercartShippingMethods()->find('ID', $shippingMethodID)) {
                 $assumePaymentMethod = false;
                 $doAccessChecks = false;
             }
             // ------------------------------------------------------------
             // Access checks
             // ------------------------------------------------------------
             if ($doAccessChecks) {
                 // Check if access for groups or is set positively
                 if ($paymentMethod->ShowOnlyForGroups()->exists()) {
                     foreach ($paymentMethod->ShowOnlyForGroups() as $paymentGroup) {
                         if ($memberGroups->find('ID', $paymentGroup->ID)) {
                             $containedInGroup = true;
                             break;
                         }
                     }
                     if ($containedInGroup) {
                         $assumePaymentMethod = true;
                     } else {
                         $assumePaymentMethod = false;
                     }
                 }
                 // Check if access for users or is set positively
                 if ($paymentMethod->ShowOnlyForUsers()->exists()) {
                     if ($paymentMethod->ShowOnlyForUsers()->find('ID', $member->ID)) {
                         $containedInUsers = true;
                     }
                     if ($containedInUsers) {
                         $assumePaymentMethod = true;
                     } else {
                         if (!$containedInGroup) {
                             $assumePaymentMethod = false;
                         }
                     }
                 }
                 // Check if access for groups is set negatively
                 if ($paymentMethod->ShowNotForGroups()->exists()) {
                     foreach ($paymentMethod->ShowNotForGroups() as $paymentGroup) {
                         if ($memberGroups->find('ID', $paymentGroup->ID)) {
                             if (!$containedInUsers) {
                                 $assumePaymentMethod = false;
                             }
                         }
                     }
                 }
                 // Check if access for users is set negatively
                 if ($paymentMethod->ShowNotForUsers()->exists()) {
                     if ($paymentMethod->ShowNotForUsers()->find('ID', $member->ID)) {
                         if (!$containedInUsers) {
                             $assumePaymentMethod = false;
                         }
                     }
                 }
             }
             if ($assumePaymentMethod) {
                 $allowedPaymentMethods[] = $paymentMethod;
             }
         }
     }
     $allowedPaymentMethods = new ArrayList($allowedPaymentMethods);
     return $allowedPaymentMethods;
 }
Exemplo n.º 11
0
 /**
  * Get all the workflows that this user is responsible for
  * 
  * @param Member $user 
  *				The user to get workflows for
  * 
  * @return DataObjectSet
  *				The list of workflow instances this user owns
  */
 public function usersWorkflows(Member $user)
 {
     $all = new DataObjectSet();
     $groupIds = $user->Groups()->column('ID');
     $groupJoin = ' INNER JOIN "WorkflowInstance_Groups" "wig" ON "wig"."WorkflowInstanceID" = "WorkflowInstance"."ID"';
     if (is_array($groupIds)) {
         $filter = '("WorkflowStatus" = \'Active\' OR "WorkflowStatus"=\'Paused\') AND "wig"."GroupID" IN (' . implode(',', $groupIds) . ')';
         $groupAssigned = DataObject::get('WorkflowInstance', $filter, '"Created" DESC', $groupJoin);
         if ($groupAssigned) {
             $all->merge($groupAssigned);
         }
     }
     $userJoin = ' INNER JOIN "WorkflowInstance_Users" "wiu" ON "wiu"."WorkflowInstanceID" = "WorkflowInstance"."ID"';
     $filter = '("WorkflowStatus" = \'Active\' OR "WorkflowStatus"=\'Paused\') AND "wiu"."MemberID" = ' . $user->ID;
     $userAssigned = DataObject::get('WorkflowInstance', $filter, '"Created" DESC', $userJoin);
     if ($userAssigned) {
         $all->merge($userAssigned);
     }
     return $all;
 }
Exemplo n.º 12
0
 /**
  * Creates an anonymous customer if there's no currentMember object.
  *
  * @return Member
  *
  * @author Sebastian Diel <*****@*****.**>,
  *         Sascha Koehler <*****@*****.**>
  * @since 15.11.2014
  */
 public static function createAnonymousCustomer()
 {
     $member = self::currentUser();
     if (!$member) {
         $member = new Member();
         $member->write();
         // Add customer to intermediate group
         $customerGroup = Group::get()->filter('Code', 'anonymous')->first();
         if ($customerGroup) {
             $member->Groups()->add($customerGroup);
         }
         $member->logIn(true);
     }
     return $member;
 }
 /**
  * Adds new member
  * 
  * @param	array	member data. 
  * @return	boolean	true/false
  */
 public function addMember($data)
 {
     if (is_array($data)) {
         $member = new Member();
         $member->Email = $data['ccustemail'];
         $member->FirstName = ucwords(strtolower($data['ccustfirstname']));
         $member->Surname = ucwords(strtolower($data['ccustlastname']));
         $member->ClickBankAccountType = 'Paid';
         $password = Member::create_new_password();
         $member->Password = "******";
         /* link to memberprofilepage module */
         $profilePage = DataObject::get_one('MemberProfilePage');
         $member->ProfilePageID = $profilePage->ID;
         if ($profilePage->EmailType == 'Validation') {
             $email = new MemberConfirmationEmail($member->ProfilePage(), $member);
             $email->send();
             $member->NeedsValidation = true;
         } elseif ($profilePage->EmailType == 'Confirmation') {
             $email = new MemberConfirmationEmail($member->ProfilePage(), $member);
             $email->send();
         }
         /* populate new member profile */
         $clickBankProfile = new ClickBankMemberProfile();
         if ($clickBankProfile) {
             self::populateFields($clickBankProfile, $data);
         }
         $clickBankProfile->write();
         $member->ClickBankProfileID = $clickBankProfile->ID;
         // save new member
         $member->write();
         // assign & update new member to a ClickBank user group
         $clickBankGroupIds = $profilePage->getClickBankMemberGroups();
         if ($clickBankGroupIds) {
             $member->Groups()->setByIDList($clickBankGroupIds);
             $member->write();
         }
         // assign & update new member to a regular memberprofile user group
         $memberGroupIds = $profilePage->getMemberProfileGroups();
         if ($memberGroupIds) {
             $member->Groups()->setByIDList($memberGroupIds);
             $member->write();
         }
         /* Populate log */
         $clickBankIpnLog = new ClickBankIpnLog();
         $clickBankIpnLog->MemberID = $member->ID;
         foreach ($data as $key => $val) {
             if (isset($clickBankIpnLog->{$key})) {
                 $clickBankIpnLog->{$key} = $val;
             }
         }
         $clickBankIpnLog->write();
         return true;
     }
     return false;
 }