private function completeCallback($array) { ActiveRecordModel::beginTransaction(); $order = $this->createOrder($array); $email = null; $address = null; if (isset($array['BUYER-BILLING-ADDRESS'])) { $order->billingAddress->set($this->getUserAddress($array['BUYER-BILLING-ADDRESS'][0])); if (isset($array['BUYER-BILLING-ADDRESS'][0]['EMAIL'])) { $email = $array['BUYER-BILLING-ADDRESS'][0]['EMAIL'][0]['VALUE']; } } if (isset($array['BUYER-SHIPPING-ADDRESS'])) { $order->shippingAddress->set($this->getUserAddress($array['BUYER-SHIPPING-ADDRESS'][0])); if (isset($array['BUYER-SHIPPING-ADDRESS'][0]['EMAIL'])) { $email = $array['BUYER-SHIPPING-ADDRESS'][0]['EMAIL'][0]['VALUE']; } } if (isset($array['ORDER-ADJUSTMENT'][0]['SHIPPING'][0]['MERCHANT-CALCULATED-SHIPPING-ADJUSTMENT'][0])) { $shipping = $array['ORDER-ADJUSTMENT'][0]['SHIPPING'][0]['MERCHANT-CALCULATED-SHIPPING-ADJUSTMENT'][0]; $shippingName = $shipping['SHIPPING-NAME'][0]['VALUE']; $shipment = $order->getShipments()->get(0); foreach ($shipment->getAvailableRates() as $rate) { $rate = $rate->toArray(); if ($rate['serviceName'] == $shippingName || !empty($rate['ShippingService']) && $rate['ShippingService']['name_lang'] == $shippingName) { $shipment->setRateId($rate['serviceID']); } } } if (!$email) { $email = $array['BUYER-ID'][0]['VALUE'] . '@googlecheckout.com'; } $user = User::getInstanceByEmail($email); if (!$user) { $address = $order->billingAddress->get(); $user = User::getNewInstance($email); foreach (array('firstName', 'lastName', 'companyName') as $field) { $user->{$field}->set($address->{$field}->get()); } $user->save(); } $order->setUser($user); $order->save(); $this->order = $order; $handler = $this->application->getPaymentHandler('GoogleCheckout'); $this->registerPayment($handler->extractTransactionResult($array), $handler); ActiveRecordModel::commit(); }
protected function getInstance($record, CsvImportProfile $profile) { $fields = $profile->getSortedFields(); if (isset($fields['User']['ID'])) { $instance = User::getInstanceByID($record[$fields['User']['ID']], true); } else { if (isset($fields['User']['email'])) { $instance = User::getInstanceByEmail($record[$fields['User']['email']]); } } if (empty($instance)) { $instance = User::getNewInstance(''); $instance->isEnabled->set(true); } $this->setLastImportedRecordName($instance->email->get()); return $instance; }
protected function getInstance($record, CsvImportProfile $profile) { pp('User address import get instance'); $fields = $profile->getSortedFields(); if (isset($fields['UserAddress']['ID'])) { $instance = ActiveRecordModel::getInstanceByID('UserAddress', $record[$fields['UserAddress']['ID']], true); } else { if (isset($fields['AddressUser']['ID'])) { $owner = User::getInstanceByID($record[$fields['AddressUser']['ID']], true); } else { if (isset($fields['AddressUser']['email'])) { $owner = User::getInstanceByEmail($record[$fields['AddressUser']['email']]); } } } if (isset($owner)) { if ($profile->isColumnSet('AddressUser.isShipping')) { $type = $this->evalBool(strtolower($record[$profile->getColumnIndex('AddressUser.isShipping')])) ? 'ShippingAddress' : 'BillingAddress'; } else { $type = 'BillingAddress'; } $owner->loadAddresses(); } if (empty($instance)) { if (empty($owner)) { return; } $isDefault = $profile->isColumnSet('AddressUser.isDefault') && $this->evalBool(strtolower($record[$profile->getColumnIndex('AddressUser.isDefault')])); if ($isDefault) { $field = 'default' . $type; $addressType = $owner->{$field}->get(); $instance = $addressType->userAddress->get(); } if (empty($addressType)) { $instance = UserAddress::getNewInstance(); $addressType = call_user_func_array(array($type, 'getNewInstance'), array($owner, $instance)); if ($isDefault) { $owner->{$field}->set($addressType); } } $addressType->userAddress->set($instance); $instance->addressType = $addressType; } return $instance; }
public function subscribe() { $email = $this->request->get('email'); if (!$this->user->isAnonymous() || User::getInstanceByEmail($email)) { return new ActionRedirectResponse('newsletter', 'alreadySubscribed'); } $validator = $this->getSubscribeValidator(); if (!$validator->isValid()) { return new ActionRedirectResponse('index', 'index'); } $instance = NewsletterSubscriber::getInstanceByEmail($email); if (!$instance) { $instance = NewsletterSubscriber::getNewInstanceByEmail($email); } $instance->save(); $mail = new Email($this->application); $mail->setTo($email); $mail->setTemplate('newsletter/confirm'); $mail->set('subscriber', $instance->toArray()); $mail->set('email', $email); $mail->send(); return new ActionResponse('subscriber', $instance->toArray()); }
public function do_register() { $request = $this->application->getRequest(); $first_name = $request->get('firstName'); $last_name = $request->get('lastName'); $company = $request->get('companyName'); $email = $request->get('email'); $pass = $request->get('password'); if (!isset($first_name) || !isset($last_name) || !isset($email) || !isset($pass)) { throw new Exception("Please complete required field " . $last_name); } $user = User::getInstanceByEmail($email); if (isset($user)) { throw new Exception('User already exist'); } $user = User::getNewInstance($email, $pass); $user->firstName->set($first_name); $user->lastName->set($last_name); if (isset($company)) { $user->companyName->set($company); } $user->email->set($email); $user->isEnabled->set('1'); $user->save(); $code = rand(1, 10000000) . rand(1, 10000000); $user->setPreference('confirmation', $code); $user->save(); $_email = new Email($this->application); $_email->setUser($user); $_email->set('code', $code); $_email->setTemplate('user.confirm'); $_email->send(); $response = new LiveCartSimpleXMLElement('<response datetime="' . date('c') . '"></response>'); $response->addChild('state', '1'); return new SimpleXMLResponse($response); }
public function getNextCustomerOrder() { if (!($data = $this->loadRecord('SELECT ' . $this->getTablePrefix() . 'orders.*, ' . $this->getTablePrefix() . 'customers.email AS userEmail FROM ' . $this->getTablePrefix() . 'orders LEFT JOIN ' . $this->getTablePrefix() . 'customers ON ' . $this->getTablePrefix() . 'orders.login='******'customers.login'))) { return null; } if (!($user = User::getInstanceByEmail($data['userEmail']))) { return $this->getNextCustomerOrder(); } $order = CustomerOrder::getNewInstance($user); $order->currency->set(Currency::getInstanceById($this->getDefaultCurrency())); $order->dateCompleted->set($data['date']); // products foreach ($this->getDataBySql('SELECT * FROM ' . $this->getTablePrefix() . 'order_details WHERE orderid=' . $data['orderid']) as $prod) { try { $product = Product::getInstanceById($this->getRealId('Product', $prod['productid']), true); $order->addProduct($product, $prod['amount'], true); $item = array_shift($order->getItemsByProduct($product)); $item->price->set($prod['price']); } catch (ARNotFoundException $e) { // the product no longer exists } } // addresses $order->shippingAddress->set($this->getUserAddress($data, 's_')); $order->billingAddress->set($this->getUserAddress($data, 'b_')); // assume that all orders are paid and shipped $order->status->set(CustomerOrder::STATUS_SHIPPED); $order->isPaid->set(true); $order->rawData = $data; return $order; }
private function save(User $user = null) { $validator = self::createUserFormValidator($this, $user); if ($validator->isValid()) { $email = $this->request->get('email'); $password = $this->request->get('password'); if ($user && $email != $user->email->get() && User::getInstanceByEmail($email) || !$user && User::getInstanceByEmail($email)) { return new JSONResponse(false, 'failure', $this->translate('_err_this_email_is_already_being_used_by_other_user')); } if ($groupID = (int) $this->request->get('UserGroup')) { $group = UserGroup::getInstanceByID((int) $groupID); } else { $group = null; } if (!$user) { $user = User::getNewInstance($email, $password, $group); } $user->loadRequestData($this->request); $user->userGroup->set($group); if (!empty($password)) { $user->setPassword($password); } $user->save(); $this->saveAddresses($user); BackendToolbarItem::registerLastViewedUser($user); return new JSONResponse(array('user' => $user->toFlatArray()), 'success', $this->translate('_user_details_were_successfully_saved')); } else { return new JSONResponse(array('errors' => $validator->getErrorList()), 'failure', $this->translate('_could_not_save_user_details')); } }
public function confirm() { $success = false; $user = User::getInstanceByEmail($this->request->get('email')); if ($user && !$user->isEnabled->get() && $user->getPreference('confirmation')) { if ($this->request->get('code') == $user->getPreference('confirmation')) { $user->setPreference('confirmation', null); $user->isEnabled->set(true); $user->save(); SessionUser::setUser($user); $success = true; $this->sendWelcomeEmail($user); } } return new ActionResponse('success', $success); }
public function saveQuickEdit() { $user = User::getInstanceByID((int) $this->request->get('id'), true); $validator = UserController::createUserFormValidator($this, $user, true); if ($validator->isValid()) { $email = $this->request->get('email'); $password = $this->request->get('password'); if ($user && $email != $user->email->get() && User::getInstanceByEmail($email) || !$user && User::getInstanceByEmail($email)) { return new JSONResponse(false, 'failure', $this->translate('_err_this_email_is_already_being_used_by_other_user')); } if ($groupID = (int) $this->request->get('UserGroup')) { $group = UserGroup::getInstanceByID((int) $groupID); } else { $group = null; } if (!$user) { $user = User::getNewInstance($email, $password, $group); } $user->loadRequestData($this->request); $user->userGroup->set($group); if (!empty($password)) { $user->setPassword($password); } $user->save(); return $this->quickEditSaveResponse($user); } else { return new JSONResponse(array('errors' => $validator->getErrorList()), 'failure', $this->translate('_could_not_save_user_details')); } }
public function expressReturn() { $class = $this->request->get('id'); $this->order->setPaymentMethod($class); $handler = $this->application->getExpressPaymentHandler($class, $this->getTransaction()); $handler->setOrder($this->order); $details = $handler->getTransactionDetails($this->request->toArray()); $address = UserAddress::getNewInstanceByTransaction($details); $address->save(); $paymentData = array_diff_key($this->request->toArray(), array_flip(array('controller', 'action', 'id', 'route', 'PHPSESSID'))); // @todo - determine if the order is new or completed earlier, but unpaid // for now only new orders can be paid with express checkout methods $order = $this->getPaymentOrder(); $express = ExpressCheckout::getNewInstance($order, $handler); $express->address->set($address); $express->paymentData->set(serialize($paymentData)); $express->save(); // auto-login user if anonymous if ($this->user->isAnonymous()) { // create new user account if it doesn't exist if (!($user = User::getInstanceByEmail($details->email->get()))) { $user = User::getNewInstance($details->email->get()); $user->firstName->set($details->firstName->get()); $user->lastName->set($details->lastName->get()); $user->companyName->set($details->companyName->get()); $user->isEnabled->set(true); $user->save(); } SessionUser::setUser($user); $order->setUser($user); } $order->billingAddress->set($address); if ($order->isShippingRequired()) { $order->shippingAddress->set($address); } $order->save(); return new ActionRedirectResponse('checkout', 'shipping'); }
public function getNextNewsletterSubscriber() { if (!($data = $this->loadRecord('SELECT * FROM ' . $this->getTablePrefix() . 'subscribers LEFT JOIN ' . $this->getTablePrefix() . 'customers ON ' . $this->getTablePrefix() . 'customers.customerID=' . $this->getTablePrefix() . 'subscribers.customerID WHERE ' . $this->getTablePrefix() . 'subscribers.customerID IS NULL OR (' . $this->getTablePrefix() . 'customers.customerID IS NOT NULL)'))) { return null; } if (empty($data['Email'])) { return $this->getNextNewsletterSubscriber(); } $subscriber = NewsletterSubscriber::getNewInstanceByEmail($data['Email']); if ($data['customerID']) { if ($user = ActiveRecordModel::getInstanceByIDIfExists('User', $this->getRealId('User', $data['customerID'], false))) { if ($user->isExistingRecord()) { $subscriber->user->set($user); } } } else { if ($user = User::getInstanceByEmail($data['Email'])) { $subscriber->user->set($user); } } $subscriber->isEnabled->set(true); return $subscriber; }
private function setUniqueEmail(User $user, $suffix = '') { $newEmail = $user->email->get() . $suffix; $existing = User::getInstanceByEmail($newEmail); if ($existing) { $this->setUniqueEmail($user, $suffix ? ++$suffix : 2); } else { $user->email->set($newEmail); } }