public function submitPayment() { $gateway = Omnipay::create('AuthorizeNet_AIM'); $gateway->setApiLoginId(Config::get('vividstore.authnetLoginID')); $gateway->setTransactionKey(Config::get('vividstore.authnetTransactionKey')); $gateway->setDeveloperMode(Config::get('vividstore.authnetTestmode')); $customer = new StoreCustomer(); $formData = array('firstName' => $customer->getValue("billing_first_name"), 'lastName' => $customer->getValue("billing_last_name"), 'billingPhone' => $customer->getValue("billing_phone"), 'email' => $customer->getEmail(), 'number' => $_POST['authnet-checkout-credit-card'], 'expiryMonth' => $_POST['authnet-checkout-exp-month'], 'expiryYear' => $_POST['authnet-checkout-exp-year'], 'cvv' => $_POST['authnet-checkout-ccv']); $response = $gateway->purchase(array('amount' => StoreCalculator::getGrandTotal(), 'currency' => 'USD', 'card' => $formData))->send(); if ($response->isSuccessful()) { return array('error' => 0, 'transactionReference' => $response->getTransactionReference()); } else { // payment failed: display message to customer return array('error' => 1, 'errorMessage' => $response->getMessage()); } }
public function updater() { if (isset($_POST)) { $data = $_POST; $billing = false; if ($data['adrType'] == 'billing') { $billing = true; $u = new User(); $guest = !$u->isLoggedIn(); $requiresLoginOrDifferentEmail = false; if ($guest) { $requiresLoginOrDifferentEmail = $this->validateAccountEmail($data['email']); } } $e = $this->validateAddress($data, $billing); if ($requiresLoginOrDifferentEmail) { $e->add(t('The email address you have entered has already been used to create an account. Please login first or enter a different email address.')); } if ($e->has()) { echo $e->outputJSON(); } else { $customer = new StoreCustomer(); $address = new AttributeValue(); if ($data['adrType'] == 'billing') { $this->updateBilling($data); $addressraw = $customer->getValue('billing_address'); $phone = $customer->getValue('billing_phone'); $first_name = $customer->getValue('billing_first_name'); $last_name = $customer->getValue('billing_last_name'); $email = $customer->getEmail(); } if ($data['adrType'] == 'shipping') { $this->updateShipping($data); $addressraw = $customer->getValue('shipping_address'); $phone = ''; $email = ''; $first_name = $customer->getValue('shipping_first_name'); $last_name = $customer->getValue('shipping_last_name'); } // use concrete5's built in address class for formatting $address->address1 = $addressraw->address1; $address->address2 = $addressraw->address2; $address->city = $addressraw->city; $address->state_province = $addressraw->state_province; $address->postal_code = $addressraw->postal_code; $address->city = $addressraw->city; $address->country = $addressraw->country; $address = nl2br($address . ''); // force to string echo json_encode(array('first_name' => $first_name, 'last_name' => $last_name, 'phone' => $phone, 'email' => $email, 'address' => $address, "error" => false)); } } else { echo "An error occured"; } }
public function isWithinSelectedCountries() { $customer = new StoreCustomer(); $custCountry = $customer->getValue('shipping_address')->country; if ($this->getCountries() != 'all') { $selectedCountries = explode(',', $this->getCountriesSelected()); if (in_array($custCountry, $selectedCountries)) { return true; } else { return false; } } else { return true; } }
public function isTaxable() { $taxAddress = $this->getTaxAddress(); $taxCountry = strtolower($this->getTaxCountry()); $taxState = strtolower(trim($this->getTaxState())); $taxCity = strtolower(trim($this->getTaxCity())); $customer = new StoreCustomer(); $customerIsTaxable = false; switch ($taxAddress) { case "billing": $userCity = strtolower(trim($customer->getValue("billing_address")->city)); $userState = strtolower(trim($customer->getValue("billing_address")->state_province)); $userCountry = strtolower(trim($customer->getValue("billing_address")->country)); break; case "shipping": $userCity = strtolower(trim($customer->getValue("shipping_address")->city)); $userState = strtolower(trim($customer->getValue("shipping_address")->state_province)); $userCountry = strtolower(trim($customer->getValue("shipping_address")->country)); break; } if ($userCountry == $taxCountry) { $customerIsTaxable = true; if (!empty($taxState)) { if ($userState != $taxState) { $customerIsTaxable = false; } } if (!empty($taxCity)) { if ($userCity != $taxCity) { $customerIsTaxable = false; } } } return $customerIsTaxable; }
public function add($data, $pm, $status = null) { $taxBased = Config::get('vividstore.taxBased'); $taxlabel = Config::get('vividstore.taxName'); $this->set('taxlabel', $taxlabel); $taxCalc = Config::get('vividstore.calculation'); $db = Database::get(); //get who ordered it $customer = new Customer(); //what time is it? $dt = Core::make('helper/date'); $now = $dt->getLocalDateTime(); //get the price details $shipping = VividCart::getShippingTotal(); $shipping = Price::formatFloat($shipping); $taxvalue = VividCart::getTaxTotal(); $taxName = Config::get('vividstore.taxName'); $total = VividCart::getTotal(); $total = Price::formatFloat($total); $tax = 0; $taxIncluded = 0; if ($taxCalc == 'extract') { $taxIncluded = $taxvalue; } else { $tax = $taxvalue; } $tax = Price::formatFloat($tax); //get payment method $pmID = $pm->getPaymentMethodID(); //add the order $vals = array($customer->getUserID(), $now, $pmID, $shipping, $tax, $taxIncluded, $taxName, $total); $db->Execute("INSERT INTO VividStoreOrders(cID,oDate,pmID,oShippingTotal,oTax,oTaxIncluded,oTaxName,oTotal) VALUES (?,?,?,?,?,?,?,?)", $vals); $oID = $db->lastInsertId(); $order = Order::getByID($oID); if ($status) { $order->updateStatus($status); } else { $order->updateStatus(OrderStatus::getStartingStatus()->getHandle()); } $order->setAttribute("email", $customer->getEmail()); $order->setAttribute("billing_first_name", $customer->getValue("billing_first_name")); $order->setAttribute("billing_last_name", $customer->getValue("billing_last_name")); $order->setAttribute("billing_address", $customer->getValueArray("billing_address")); $order->setAttribute("billing_phone", $customer->getValue("billing_phone")); $order->setAttribute("shipping_first_name", $customer->getValue("shipping_first_name")); $order->setAttribute("shipping_last_name", $customer->getValue("shipping_last_name")); $order->setAttribute("shipping_address", $customer->getValueArray("shipping_address")); $customer->setLastOrderID($oID); //add the order items $cart = VividCart::getCart(); foreach ($cart as $cartItem) { $taxvalue = VividCart::getTaxProduct($cartItem['product']['pID']); $tax = 0; $taxIncluded = 0; if ($taxCalc == 'extract') { $taxIncluded = $taxvalue; } else { $tax = $taxvalue; } $productTaxName = $taxName; if ($taxvalue == 0) { $productTaxName = ''; } OrderItem::add($cartItem, $oID, $tax, $taxIncluded, $productTaxName); $product = VividProduct::getByID($cartItem['product']['pID']); if ($product && $product->hasUserGroups()) { $usergroupstoadd = $product->getProductUserGroups(); foreach ($usergroupstoadd as $id) { $g = Group::getByID($id); if ($g) { $customer->getUserInfo()->enterGroup($g); } } } } if (!$customer->isGuest()) { //add user to Store Customers group $group = \Group::getByName('Store Customer'); if (is_object($group) || $group->getGroupID() < 1) { $customer->getUserInfo()->enterGroup($group); } } // create order event and dispatch $event = new OrderEvent($order); Events::dispatch('on_vividstore_order', $event); //send out the alerts $mh = new MailService(); $pkg = Package::getByHandle('vivid_store'); $fromEmail = Config::get('vividstore.emailalerts'); if (!$fromEmail) { $fromEmail = "store@" . $_SERVER['SERVER_NAME']; } $alertEmails = explode(",", Config::get('vividstore.notificationemails')); $alertEmails = array_map('trim', $alertEmails); //receipt $mh->from($fromEmail); $mh->to($customer->getEmail()); $mh->addParameter("order", $order); $mh->addParameter("taxbased", $taxBased); $mh->addParameter("taxlabel", $taxlabel); $mh->load("order_receipt", "vivid_store"); $mh->sendMail(); //order notification $mh->from($fromEmail); foreach ($alertEmails as $alertEmail) { $mh->to($alertEmail); } $mh->addParameter("order", $order); $mh->addParameter("taxbased", $taxBased); $mh->addParameter("taxlabel", $taxlabel); $mh->load("new_order_notification", "vivid_store"); $mh->sendMail(); VividCart::clear(); return $order; }
public function isCustomerTaxable() { $taxAddress = Config::get('vividstore.taxAddress'); $taxCountry = strtolower(Config::get('vividstore.taxcountry')); $taxState = strtolower(trim(Config::get('vividstore.taxstate'))); $taxCity = strtolower(trim(Config::get('vividstore.taxcity'))); $customer = new Customer(); $customerIsTaxable = false; switch ($taxAddress) { case "billing": $userCity = strtolower(trim($customer->getValue("billing_address")->city)); $userState = strtolower(trim($customer->getValue("billing_address")->state_province)); $userCountry = strtolower(trim($customer->getValue("billing_address")->country)); break; case "shipping": $userCity = strtolower(trim($customer->getValue("shipping_address")->city)); $userState = strtolower(trim($customer->getValue("shipping_address")->state_province)); $userCountry = strtolower(trim($customer->getValue("shipping_address")->country)); break; } if ($userCountry == $taxCountry) { $customerIsTaxable = true; if ($taxState && $userState != $taxState) { $customerIsTaxable = false; } elseif ($taxCity && $userCity != $taxCity) { $customerIsTaxable = false; } } return $customerIsTaxable; }
/** * @param StoreCustomer $customer * @param bool $includeShipping */ public function addCustomerAddress($customer = null, $includeShipping = true) { if (!$customer instanceof StoreCustomer) { $customer = new StoreCustomer(); } $email = $customer->getEmail(); $billing_first_name = $customer->getValue("billing_first_name"); $billing_last_name = $customer->getValue("billing_last_name"); $billing_address = $customer->getValueArray("billing_address"); $billing_phone = $customer->getValue("billing_phone"); $shipping_first_name = $customer->getValue("shipping_first_name"); $shipping_last_name = $customer->getValue("shipping_last_name"); $shipping_address = $customer->getValueArray("shipping_address"); $this->setAttribute("email", $email); $this->setAttribute("billing_first_name", $billing_first_name); $this->setAttribute("billing_last_name", $billing_last_name); $this->setAttribute("billing_address", $billing_address); $this->setAttribute("billing_phone", $billing_phone); if ($includeShipping) { $this->setAttribute("shipping_first_name", $shipping_first_name); $this->setAttribute("shipping_last_name", $shipping_last_name); $this->setAttribute("shipping_address", $shipping_address); } }
public function completeOrder() { $smID = \Session::get('smID'); $groupstoadd = array(); $createlogin = false; $orderItems = $this->getOrderItems(); $customer = new Customer(); foreach ($orderItems as $orderItem) { $product = $orderItem->getProductObject(); if ($product && $product->hasUserGroups()) { $groupstoadd = array_merge($groupstoadd, $product->getProductUserGroups()); } if ($product && $product->pCreateUserAccount) { $createlogin = true; } } if ($createlogin && $customer->isGuest()) { $email = $customer->getEmail(); $user = UserInfo::getByEmail($email); if (!$user) { $password = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 10); $mh = Loader::helper('mail'); $mh->addParameter('siteName', Config::get('concrete.site')); $navhelper = Core::make('helper/navigation'); $target = Page::getByPath('/login'); if ($target) { $link = $navhelper->getLinkToCollection($target, true); if ($link) { $mh->addParameter('link', $link); } } else { $mh->addParameter('link', ''); } $valc = Loader::helper('concrete/validation'); $min = Config::get('concrete.user.username.minimum'); $max = Config::get('concrete.user.username.maximum'); $newusername = preg_replace("/[^A-Za-z0-9_]/", '', strstr($email, '@', true)); while (!$valc->isUniqueUsername($newusername) || strlen($newusername) < $min) { if (strlen($newusername) >= $max) { $newusername = substr($newusername, 0, $max - 5); } $newusername .= rand(0, 9); } $user = UserInfo::add(array('uName' => $newusername, 'uEmail' => trim($email), 'uPassword' => $password)); if (Config::get('concrete.user.registration.email_registration')) { $mh->addParameter('username', trim($email)); } else { $mh->addParameter('username', $newusername); } $mh->addParameter('password', $password); $email = trim($email); $mh->load('new_user', 'vivid_store'); // login the newly created user User::loginByUserID($user->getUserID()); } else { // we're attempting to create a new user with an email that has already been used // earlier validation must have failed at this point, don't fetch the user $user = null; } $mh->to($email); $mh->sendMail(); } elseif ($createlogin) { // or if we found a user (because they are logged in) and need to use it to create logins $user = $customer->getUserInfo(); } if ($user) { // $user is going to either be the new one, or the user of the currently logged in customer // update the order created with the user from the newly created user $this->associateUser($user->getUserID()); $billing_first_name = $customer->getValue("billing_first_name"); $billing_last_name = $customer->getValue("billing_last_name"); $billing_address = $customer->getValueArray("billing_address"); $billing_phone = $customer->getValue("billing_phone"); $shipping_first_name = $customer->getValue("shipping_first_name"); $shipping_last_name = $customer->getValue("shipping_last_name"); $shipping_address = $customer->getValueArray("shipping_address"); // update the user's attributes $customer = new Customer($user->getUserID()); $customer->setValue('billing_first_name', $billing_first_name); $customer->setValue('billing_last_name', $billing_last_name); $customer->setValue('billing_address', $billing_address); $customer->setValue('billing_phone', $billing_phone); if ($smID) { $customer->setValue('shipping_first_name', $shipping_first_name); $customer->setValue('shipping_last_name', $shipping_last_name); $customer->setValue('shipping_address', $shipping_address); } //add user to Store Customers group $group = \Group::getByName('Store Customer'); if (is_object($group) || $group->getGroupID() < 1) { $user->enterGroup($group); } foreach ($groupstoadd as $id) { $g = Group::getByID($id); if ($g) { $user->getUserObject()->enterGroup($g); } } $user->refreshUserGroups(); } VividCart::clearCode(); // create order event and dispatch $event = new OrderEvent($this); Events::dispatch('on_vividstore_order', $event); //send out the alerts $mh = new MailService(); $pkg = Package::getByHandle('vivid_store'); $fromEmail = Config::get('vividstore.emailalerts'); if (!$fromEmail) { $fromEmail = "store@" . $_SERVER['SERVER_NAME']; } $alertEmails = explode(",", Config::get('vividstore.notificationemails')); $alertEmails = array_map('trim', $alertEmails); //receipt $mh->from($fromEmail); $mh->to($customer->getEmail()); $mh->addParameter("order", $this); $mh->load("order_receipt", "vivid_store"); $mh->sendMail(); $validNotification = false; //order notification $mh->from($fromEmail); foreach ($alertEmails as $alertEmail) { if ($alertEmail) { $mh->to($alertEmail); $validNotification = true; } } if ($validNotification) { $mh->addParameter("order", $this); $mh->load("new_order_notification", "vivid_store"); $mh->sendMail(); } // unset the shipping type, as next order might be unshippable \Session::set('smID', ''); VividCart::clear(); return $this; }