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();
 }
Example #2
0
 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;
 }
Example #3
0
 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;
 }
Example #4
0
 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());
 }
Example #5
0
 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);
 }
Example #6
0
 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;
 }
Example #7
0
 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'));
     }
 }
Example #8
0
 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);
 }
Example #9
0
 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'));
     }
 }
Example #10
0
 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');
 }
Example #11
0
 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;
 }
Example #12
0
 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);
     }
 }