/** * Generate and calculate a formatted price for a product. This function will * take in a product and a price, apply tax where necessary, convert it to * the displayed currency, format it, and if there's a retail price for the * product, show it struck out. * * Options passed as $options include: * - currencyConvert (true) - Convert the price in to the active currency * - strikeRetail (true) - If there is an RRP, strike it out & show before the product * - displayInclusive (false) - Set to true if the returned price should include tax * - includesTax (null) - Set to true if $price already includes tax * - localeFormat (true) - Perform any locale formatting (formatPrice) * * @param array $product Array containing the product to format the price for. * @param double $price Price of the product to be formatted. * @param array $options Array of options for formatting the price. */ function formatProductPrice($product, $price, array $options = array()) { $defaultOptions = array( 'currencyConvert' => true, 'strikeRetail' => true, 'displayInclusive' => false, 'includesTax' => null, 'localeFormat' => true ); $options = array_merge($defaultOptions, $options); $actualPrice = calculateFinalProductPrice($product, $price, $options); // Apply taxes to the price $actualPrice = getClass('ISC_TAX')->getPrice( $actualPrice, $product['tax_class_id'], $options['displayInclusive'] ); // Convert to the current currency if($options['currencyConvert']) { $actualPrice = convertPriceToCurrency($actualPrice); } $output = ''; if(!$options['localeFormat']) { return $actualPrice; } if($product['prodretailprice'] > 0 && $options['strikeRetail'] && $product['prodretailprice'] > $actualPrice ) { $rrp = calculateFinalProductPrice($product, $product['prodretailprice']); $rrp = getClass('ISC_TAX')->getPrice( $rrp, $product['tax_class_id'], $options['displayInclusive'] ); $rrp = convertPriceToCurrency($rrp); $output .= '<strike class="RetailPriceValue">'.formatPrice($rrp).'</strike> '; } if($product['prodsaleprice'] > 0 && $product['prodsaleprice'] < $product['prodprice']) { $output .= '<span class="SalePrice">'.formatPrice($actualPrice).'</span>'; } else { $output .= formatPrice($actualPrice); } return $output; }
private function PurchaseGiftCertificate($errors = array()) { // Coming back to this page with one or more errors? $GLOBALS['HideErrorMessage'] = 'none'; if(is_array($errors)) { $errors = implode("<br />", $errors); } if($errors != "") { $GLOBALS['HideErrorMessage'] = ''; $GLOBALS['ErrorMessage'] = $errors; } $editing = false; $GLOBALS['CartItemId'] = -1; $quote = getCustomerQuote(); if(!$errors) { // Editing an existing cart item if(isset($_REQUEST['itemid'])) { $itemid = $_REQUEST['itemid']; if($quote->hasItem($itemid) && $quote->getItemById($itemid)->getType() == PT_GIFTCERTIFICATE) { $item = $quote->getItemById($itemid); $_POST = array( 'selected_amount' => $item->getPrice(), 'certificate_amount' => convertPriceToCurrency($item->getPrice()), 'to_name' => $item->getRecipientName(), 'to_email' => $item->getRecipientEmail(), 'from_name' => $item->getSenderName(), 'from_email' => $item->getSenderEmail(), 'message' => $item->getMessage(), 'certificate_theme' => $item->getTheme() ); $editing = true; $GLOBALS['CartItemId'] = $item->getId(); } } } else { if(isset($_REQUEST['cartitemid'])) { $editing = true; $GLOBALS['CartItemId'] = isc_html_escape($_REQUEST['cartitemid']); } } if($editing == true) { $GLOBALS['SaveGiftCertificateButton'] = GetLang('UpdateCertificateCart'); $GLOBALS['CertificateTitle'] = GetLang('UpdateGiftCertificate'); } else { $GLOBALS['SaveGiftCertificateButton'] = GetLang('AddCertificateCart'); $GLOBALS['CertificateTitle'] = GetLang('PurchaseAGiftCertificate'); } if($editing == true || $errors) { $GLOBALS['AgreeChecked'] = "checked=\"checked\""; } // Can the user select from one or more predefined amounts? $GLOBALS['GiftCertificateAmountSelect'] = ''; if(GetConfig('GiftCertificateCustomAmounts') == 0) { foreach(GetConfig('GiftCertificateAmounts') as $amount) { $displayAmount = CurrencyConvertFormatPrice($amount); $sel = ''; if(isset($_POST['selected_amount']) && $_POST['selected_amount'] == $amount) { $sel = 'selected=\"selected\"'; } $GLOBALS['GiftCertificateAmountSelect'] .= sprintf("<option value='%s' %s>%s</option>", $amount, $sel, $displayAmount); } $GLOBALS['HideGiftCertificateCustomAmount'] = "none"; } // Can the user enter their own amount? else { if(isset($_POST['certificate_amount'])) { $GLOBALS['CustomCertificateAmount'] = isc_html_escape($_POST['certificate_amount']); $GLOBALS['CustomAmountChecked'] = 'checked="checked"'; } $GLOBALS['HideGiftCertificateAmountSelect'] = "none"; // Is there a minimum and maximum limit? Firstly convert them to our selected currency $GLOBALS['GiftCertificateMinimum'] = ConvertPriceToCurrency(GetConfig('GiftCertificateMinimum')); $GLOBALS['GiftCertificateMaximum'] = ConvertPriceToCurrency(GetConfig('GiftCertificateMaximum')); if(GetConfig('GiftCertificateMinimum') > 0 && GetConfig('GiftCertificateMaximum') > 0) { $GLOBALS['GiftCertificateRange'] = sprintf(GetLang('GiftCertificateValueBetween'), CurrencyConvertFormatPrice(GetConfig('GiftCertificateMinimum')), CurrencyConvertFormatPrice(GetConfig('GiftCertificateMaximum'))); } else if(GetConfig('GiftCertificateMinimum')) { $GLOBALS['GiftCertificateRange'] = sprintf(GetLang('GiftCertificateValueGreaterThan'), CurrencyConvertFormatPrice(GetConfig('GiftCertificateMinimum'))); } else if(GetConfig('GiftCertificateMaximum')) { $GLOBALS['GiftCertificateRange'] = sprintf(GetLang('GetCertificateValueLessThan'), CurrencyConvertFormatPrice(GetConfig('GiftCertificateMaximum'))); } } // If there is an expiry date for gift certificates, we need to show it just so the user is aware if(GetConfig('GiftCertificateExpiry') > 0) { $days = GetConfig('GiftCertificateExpiry')/86400; if(($days % 365) == 0) { if(($days/365) == 1) { $GLOBALS['ExpiresAfter'] = "1 ".GetLang('YearLower'); } else { $GLOBALS['ExpiresAfter'] = number_format($days/365)." ".GetLang('YearsLower'); } } else if(($days % 30) == 0) { if($days/30 == 1) { $GLOBALS['ExpiresAfter'] = "1 ".GetLang('MonthLower'); } else { $GLOBALS['ExpiresAfter'] = number_format($days/30)." ".GetLang('MonthsLower'); } } else if(($days % 7) == 0) { if(($days/7) == 1) { $GLOBALS['ExpiresAfter'] = "1 ".GetLang('WeeksLower'); } else { $GLOBALS['ExpiresAfter'] = number_format($days/7)." ".GetLang('WeeksLower'); } } else { if($days == 1) { $GLOBALS['ExpiresAfter'] = "1 ".GetLang('DayLower'); } else { $GLOBALS['ExpiresAfter'] = number_format($days)." ".GetLang('DaysLower'); } } } if(isset($GLOBALS['ExpiresAfter'])) { $GLOBALS['GiftCertificateTerms'] = sprintf(GetLang('GiftCertificateTermsExpires'), $GLOBALS['ExpiresAfter']); } else { $GLOBALS['HideExpiryInfo'] = "none"; } // Get a list of the gift certificate themes $themes = @scandir(APP_ROOT."/templates/__master/__gift_themes/"); $enabledThemes = explode(",", GetConfig('GiftCertificateThemes')); $GLOBALS['GiftCertificateThemes'] = ''; if(count($enabledThemes) == 1) { $GLOBALS['HideThemeSelect'] = "none"; } foreach($enabledThemes as $theme) { // Just double check this theme still actually exists if(in_array($theme, $themes)) { $themeName = preg_replace('#\.html$#i', "", $theme); $sel = ''; if((isset($_POST['certificate_theme']) && $_POST['certificate_theme'] == $theme) || count($enabledThemes) == 1) { $sel = 'checked="checked"'; $GLOBALS['SelectedCertificateTheme'] = $theme; } $GLOBALS['GiftCertificateThemes'] .= sprintf('<label><input type="radio" class="themeCheck" name="certificate_theme" value="%s" %s /> %s</label><br />', $theme, $sel, $themeName); } } if(!GetConfig('GiftCertificateThemes')) { $GLOBALS['HideErrorMessage'] = ''; $GLOBALS['ErrorMessage'] = GetLang('NoGiftCertificateThemes'); $GLOBALS['HideGiftCertificateForm'] = "none"; } // Do we need to pre-fill the to details with anything? if(isset($_POST['to_name'])) { $GLOBALS['CertificateTo'] = isc_html_escape($_POST['to_name']); } else { $GLOBALS['CertificateTo'] = ''; } if(isset($_POST['to_email'])) { $GLOBALS['CertificateToEmail'] = isc_html_escape($_POST['to_email']); } else { $GLOBALS['CertifcateToEmail'] = ''; } $customer = null; $GLOBALS['ISC_CLASS_CUSTOMER'] = GetClass('ISC_CUSTOMER'); // From details if(isset($_POST['from_name'])) { $GLOBALS['CertificateFrom'] = isc_html_escape($_POST['from_name']); } else { $customer = $GLOBALS['ISC_CLASS_CUSTOMER']->GetCustomerInfo(); if(is_array($customer)) { $GLOBALS['CertificateFrom'] = isc_html_escape($customer['custconfirstname'] . ' ' . $customer['custconlastname']); } } if(isset($_POST['from_email'])) { $GLOBALS['CertificateFromEmail'] = isc_html_escape($_POST['from_email']); } else { if($customer === null) { $customer = $GLOBALS['ISC_CLASS_CUSTOMER']->GetCustomerInfo(); } if(is_array($customer)) { $GLOBALS['CertificateFromEmail'] = isc_html_escape($customer['custconemail']); } } if(isset($_POST['message'])) { $GLOBALS['CertificateMessage'] = isc_html_escape($_POST['message']); } $GLOBALS['GiftCertificatePreviewModalTitle'] = GetLang('GiftCertificatePreviewModalTitle'); // Show the gift certificates main page $GLOBALS['ISC_CLASS_TEMPLATE']->SetPageTitle(sprintf("%s - %s", GetConfig('StoreName'), GetLang('GiftCertificates'))); $GLOBALS['ISC_CLASS_TEMPLATE']->SetTemplate("giftcertificates"); $GLOBALS['ISC_CLASS_TEMPLATE']->ParseTemplate(); }