From cd9405164055bafe7ff2f469f87baa21d3234928 Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Mon, 13 Jan 2014 15:50:17 -0500 Subject: [PATCH 001/158] added core15 template and updated apple touch icons for both core templates --- catalog/admin/includes/templates/core15.php | 184 + catalog/templates/core.php | 10 +- .../apple-touch-icon-114-precomposed.png | Bin 0 -> 12418 bytes .../apple-touch-icon-144-precomposed.png | Bin 0 -> 15751 bytes .../apple-touch-icon-57-precomposed.png | Bin 0 -> 6855 bytes .../apple-touch-icon-72-precomposed.png | Bin 0 -> 8157 bytes catalog/templates/core15.php | 229 + catalog/templates/core15/classes/output.php | 343 + catalog/templates/core15/classes/rpc.php | 29 + catalog/templates/core15/classes/success.php | 324 + .../core15/content/account/account.php | 45 + .../core15/content/account/account_edit.php | 72 + .../content/account/account_history.php | 68 + .../content/account/account_newsletters.php | 30 + .../content/account/account_notifications.php | 54 + .../content/account/account_password.php | 34 + .../core15/content/account/address_book.php | 75 + .../content/account/address_book_delete.php | 40 + .../content/account/address_book_process.php | 53 + .../core15/content/account/create.php | 79 + .../core15/content/account/create_success.php | 31 + .../core15/content/account/login.php | 50 + .../core15/content/account/logoff.php | 24 + .../content/account/password_forgotten.php | 33 + .../core15/content/account/receipt.php | 110 + .../checkout/checkout_confirmation.php | 217 + .../content/checkout/checkout_payment.php | 166 + .../checkout/checkout_payment_address.php | 133 + .../checkout/checkout_payment_template.php | 134 + .../content/checkout/checkout_shipping.php | 149 + .../checkout/checkout_shipping_address.php | 142 + .../content/checkout/checkout_success.php | 168 + .../core15/content/checkout/shopping_cart.php | 186 + .../core15/content/index/category_listing.php | 64 + .../content/index/category_not_found.php | 22 + .../templates/core15/content/index/index.php | 18 + .../core15/content/index/product_listing.php | 133 + .../templates/core15/content/info/cookie.php | 30 + .../templates/core15/content/info/info.php | 30 + .../core15/content/info/info_contact.php | 50 + .../core15/content/info/info_sitemap.php | 55 + .../core15/content/info/ssl_check.php | 30 + .../content/products/featured_products.php | 71 + .../core15/content/products/images.php | 47 + .../core15/content/products/info.php | 199 + .../content/products/info_not_found.php | 22 + .../templates/core15/content/products/new.php | 135 + .../content/products/product_reviews.php | 68 + .../core15/content/products/reviews.php | 22 + .../core15/content/products/reviews_info.php | 69 + .../core15/content/products/reviews_new.php | 55 + .../content/products/reviews_not_found.php | 22 + .../core15/content/products/specials.php | 72 + .../core15/content/products/tell_a_friend.php | 59 + .../templates/core15/content/search/help.php | 22 + .../core15/content/search/results.php | 84 + .../core15/content/search/search.php | 75 + .../core15/css/bootstrap-datepicker.css | 182 + catalog/templates/core15/css/bootstrap.css | 7063 +++++++++++++++++ .../templates/core15/css/bootstrap.min.css | 9 + catalog/templates/core15/css/template.css | 614 ++ catalog/templates/core15/footer.php | 85 + catalog/templates/core15/header.php | 127 + catalog/templates/core15/images/core.png | Bin 0 -> 100385 bytes .../apple-touch-icon-114-precomposed.png | Bin 0 -> 12418 bytes .../apple-touch-icon-144-precomposed.png | Bin 0 -> 15751 bytes .../apple-touch-icon-57-precomposed.png | Bin 0 -> 6855 bytes .../apple-touch-icon-72-precomposed.png | Bin 0 -> 8157 bytes .../images/favicons/apple-touch-icon-ipad.png | Bin 0 -> 3714 bytes .../favicons/apple-touch-icon-itunes.png | Bin 0 -> 261553 bytes .../favicons/apple-touch-icon-retina.png | Bin 0 -> 10927 bytes .../images/favicons/apple-touch-icon.png | Bin 0 -> 4459 bytes .../core15/images/favicons/favicon.ico | Bin 0 -> 1150 bytes .../core15/images/favicons/favicon.png | Bin 0 -> 2030 bytes .../core15/images/favicons/watermark.png | Bin 0 -> 5834 bytes .../core15/images/icons/16/cart_remove.png | Bin 0 -> 1414 bytes .../core15/images/icons/16/cross_round.png | Bin 0 -> 1004 bytes .../core15/images/icons/16/nav_back.png | Bin 0 -> 3007 bytes .../core15/images/icons/16/nav_back_grey.png | Bin 0 -> 1297 bytes .../core15/images/icons/16/nav_forward.png | Bin 0 -> 3001 bytes .../images/icons/16/nav_forward_grey.png | Bin 0 -> 1286 bytes .../core15/images/icons/16/search.png | Bin 0 -> 1023 bytes .../core15/images/icons/32/error.png | Bin 0 -> 1531 bytes .../templates/core15/images/icons/32/info.png | Bin 0 -> 2611 bytes .../templates/core15/images/icons/32/star.png | Bin 0 -> 4455 bytes .../core15/images/icons/32/success.png | Bin 0 -> 1541 bytes .../core15/images/icons/64/account.png | Bin 0 -> 8571 bytes .../core15/images/icons/64/notifications.png | Bin 0 -> 9665 bytes .../core15/images/icons/64/orders.png | Bin 0 -> 9714 bytes catalog/templates/core15/images/logo.png | Bin 0 -> 6996 bytes catalog/templates/core15/images/no-image.png | Bin 0 -> 4045 bytes .../core15/images/splash/ipad-landscape.png | Bin 0 -> 652540 bytes .../core15/images/splash/ipad-portrait.png | Bin 0 -> 641411 bytes .../templates/core15/images/splash/iphone.png | Bin 0 -> 136915 bytes catalog/templates/core15/images/stars_0.png | Bin 0 -> 1292 bytes catalog/templates/core15/images/stars_1.png | Bin 0 -> 629 bytes catalog/templates/core15/images/stars_2.png | Bin 0 -> 646 bytes catalog/templates/core15/images/stars_3.png | Bin 0 -> 645 bytes catalog/templates/core15/images/stars_4.png | Bin 0 -> 627 bytes catalog/templates/core15/images/stars_5.png | Bin 0 -> 554 bytes catalog/templates/core15/images/thumb.jpg | Bin 0 -> 6782 bytes .../account/address_book_details.js.php | 26 + .../core15/javascript/checkout/cart.js.php | 30 + .../javascript/checkout/confirmation.js.php | 27 + .../core15/javascript/checkout/payment.js.php | 49 + .../checkout/payment_address.js.php | 61 + .../javascript/checkout/shipping.js.php | 38 + .../checkout/shipping_address.js.php | 60 + .../core15/javascript/form_check.js.php | 171 + .../core15/modules/address_book_details.php | 105 + .../core15/modules/boxes/best_sellers.php | 19 + .../core15/modules/boxes/categories.php | 21 + .../core15/modules/boxes/checkout_trail.php | 19 + .../core15/modules/boxes/currencies.php | 28 + .../modules/boxes/featured_products.php | 32 + .../core15/modules/boxes/information.php | 19 + .../core15/modules/boxes/languages.php | 29 + .../modules/boxes/manufacturer_info.php | 19 + .../core15/modules/boxes/manufacturers.php | 28 + .../core15/modules/boxes/order_history.php | 19 + .../modules/boxes/product_notifications.php | 25 + .../core15/modules/boxes/reviews.php | 34 + .../templates/core15/modules/boxes/search.php | 34 + .../core15/modules/boxes/shopping_cart.php | 27 + .../core15/modules/boxes/specials.php | 36 + .../core15/modules/boxes/tell_a_friend.php | 34 + .../core15/modules/boxes/templates.php | 28 + .../core15/modules/boxes/whats_new.php | 35 + .../content/also_purchased_products.php | 68 + .../modules/content/featured_products.php | 70 + .../modules/content/mainpage_banner.php | 23 + .../modules/content/mainpage_categories.php | 54 + .../modules/content/mainpage_content.php | 18 + .../core15/modules/content/new_products.php | 74 + .../modules/content/product_on_homepage.php | 18 + .../modules/content/recently_visited.php | 58 + .../modules/content/upcoming_products.php | 63 + 137 files changed, 14240 insertions(+), 5 deletions(-) create mode 100644 catalog/admin/includes/templates/core15.php create mode 100644 catalog/templates/core/images/favicons/apple-touch-icon-114-precomposed.png create mode 100644 catalog/templates/core/images/favicons/apple-touch-icon-144-precomposed.png create mode 100644 catalog/templates/core/images/favicons/apple-touch-icon-57-precomposed.png create mode 100644 catalog/templates/core/images/favicons/apple-touch-icon-72-precomposed.png create mode 100644 catalog/templates/core15.php create mode 100644 catalog/templates/core15/classes/output.php create mode 100644 catalog/templates/core15/classes/rpc.php create mode 100644 catalog/templates/core15/classes/success.php create mode 100644 catalog/templates/core15/content/account/account.php create mode 100644 catalog/templates/core15/content/account/account_edit.php create mode 100644 catalog/templates/core15/content/account/account_history.php create mode 100644 catalog/templates/core15/content/account/account_newsletters.php create mode 100644 catalog/templates/core15/content/account/account_notifications.php create mode 100644 catalog/templates/core15/content/account/account_password.php create mode 100644 catalog/templates/core15/content/account/address_book.php create mode 100644 catalog/templates/core15/content/account/address_book_delete.php create mode 100644 catalog/templates/core15/content/account/address_book_process.php create mode 100644 catalog/templates/core15/content/account/create.php create mode 100644 catalog/templates/core15/content/account/create_success.php create mode 100644 catalog/templates/core15/content/account/login.php create mode 100644 catalog/templates/core15/content/account/logoff.php create mode 100644 catalog/templates/core15/content/account/password_forgotten.php create mode 100644 catalog/templates/core15/content/account/receipt.php create mode 100644 catalog/templates/core15/content/checkout/checkout_confirmation.php create mode 100644 catalog/templates/core15/content/checkout/checkout_payment.php create mode 100644 catalog/templates/core15/content/checkout/checkout_payment_address.php create mode 100644 catalog/templates/core15/content/checkout/checkout_payment_template.php create mode 100644 catalog/templates/core15/content/checkout/checkout_shipping.php create mode 100644 catalog/templates/core15/content/checkout/checkout_shipping_address.php create mode 100644 catalog/templates/core15/content/checkout/checkout_success.php create mode 100644 catalog/templates/core15/content/checkout/shopping_cart.php create mode 100644 catalog/templates/core15/content/index/category_listing.php create mode 100644 catalog/templates/core15/content/index/category_not_found.php create mode 100644 catalog/templates/core15/content/index/index.php create mode 100644 catalog/templates/core15/content/index/product_listing.php create mode 100644 catalog/templates/core15/content/info/cookie.php create mode 100644 catalog/templates/core15/content/info/info.php create mode 100644 catalog/templates/core15/content/info/info_contact.php create mode 100644 catalog/templates/core15/content/info/info_sitemap.php create mode 100644 catalog/templates/core15/content/info/ssl_check.php create mode 100644 catalog/templates/core15/content/products/featured_products.php create mode 100644 catalog/templates/core15/content/products/images.php create mode 100644 catalog/templates/core15/content/products/info.php create mode 100644 catalog/templates/core15/content/products/info_not_found.php create mode 100644 catalog/templates/core15/content/products/new.php create mode 100644 catalog/templates/core15/content/products/product_reviews.php create mode 100644 catalog/templates/core15/content/products/reviews.php create mode 100644 catalog/templates/core15/content/products/reviews_info.php create mode 100644 catalog/templates/core15/content/products/reviews_new.php create mode 100644 catalog/templates/core15/content/products/reviews_not_found.php create mode 100644 catalog/templates/core15/content/products/specials.php create mode 100644 catalog/templates/core15/content/products/tell_a_friend.php create mode 100644 catalog/templates/core15/content/search/help.php create mode 100644 catalog/templates/core15/content/search/results.php create mode 100644 catalog/templates/core15/content/search/search.php create mode 100644 catalog/templates/core15/css/bootstrap-datepicker.css create mode 100644 catalog/templates/core15/css/bootstrap.css create mode 100644 catalog/templates/core15/css/bootstrap.min.css create mode 100644 catalog/templates/core15/css/template.css create mode 100644 catalog/templates/core15/footer.php create mode 100644 catalog/templates/core15/header.php create mode 100644 catalog/templates/core15/images/core.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-114-precomposed.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-144-precomposed.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-57-precomposed.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-72-precomposed.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-ipad.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-itunes.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon-retina.png create mode 100644 catalog/templates/core15/images/favicons/apple-touch-icon.png create mode 100644 catalog/templates/core15/images/favicons/favicon.ico create mode 100644 catalog/templates/core15/images/favicons/favicon.png create mode 100644 catalog/templates/core15/images/favicons/watermark.png create mode 100644 catalog/templates/core15/images/icons/16/cart_remove.png create mode 100644 catalog/templates/core15/images/icons/16/cross_round.png create mode 100644 catalog/templates/core15/images/icons/16/nav_back.png create mode 100644 catalog/templates/core15/images/icons/16/nav_back_grey.png create mode 100644 catalog/templates/core15/images/icons/16/nav_forward.png create mode 100644 catalog/templates/core15/images/icons/16/nav_forward_grey.png create mode 100644 catalog/templates/core15/images/icons/16/search.png create mode 100644 catalog/templates/core15/images/icons/32/error.png create mode 100644 catalog/templates/core15/images/icons/32/info.png create mode 100644 catalog/templates/core15/images/icons/32/star.png create mode 100644 catalog/templates/core15/images/icons/32/success.png create mode 100644 catalog/templates/core15/images/icons/64/account.png create mode 100644 catalog/templates/core15/images/icons/64/notifications.png create mode 100644 catalog/templates/core15/images/icons/64/orders.png create mode 100644 catalog/templates/core15/images/logo.png create mode 100644 catalog/templates/core15/images/no-image.png create mode 100644 catalog/templates/core15/images/splash/ipad-landscape.png create mode 100644 catalog/templates/core15/images/splash/ipad-portrait.png create mode 100644 catalog/templates/core15/images/splash/iphone.png create mode 100644 catalog/templates/core15/images/stars_0.png create mode 100644 catalog/templates/core15/images/stars_1.png create mode 100644 catalog/templates/core15/images/stars_2.png create mode 100644 catalog/templates/core15/images/stars_3.png create mode 100644 catalog/templates/core15/images/stars_4.png create mode 100644 catalog/templates/core15/images/stars_5.png create mode 100644 catalog/templates/core15/images/thumb.jpg create mode 100644 catalog/templates/core15/javascript/account/address_book_details.js.php create mode 100644 catalog/templates/core15/javascript/checkout/cart.js.php create mode 100644 catalog/templates/core15/javascript/checkout/confirmation.js.php create mode 100644 catalog/templates/core15/javascript/checkout/payment.js.php create mode 100644 catalog/templates/core15/javascript/checkout/payment_address.js.php create mode 100644 catalog/templates/core15/javascript/checkout/shipping.js.php create mode 100644 catalog/templates/core15/javascript/checkout/shipping_address.js.php create mode 100644 catalog/templates/core15/javascript/form_check.js.php create mode 100644 catalog/templates/core15/modules/address_book_details.php create mode 100644 catalog/templates/core15/modules/boxes/best_sellers.php create mode 100644 catalog/templates/core15/modules/boxes/categories.php create mode 100644 catalog/templates/core15/modules/boxes/checkout_trail.php create mode 100644 catalog/templates/core15/modules/boxes/currencies.php create mode 100644 catalog/templates/core15/modules/boxes/featured_products.php create mode 100644 catalog/templates/core15/modules/boxes/information.php create mode 100644 catalog/templates/core15/modules/boxes/languages.php create mode 100644 catalog/templates/core15/modules/boxes/manufacturer_info.php create mode 100644 catalog/templates/core15/modules/boxes/manufacturers.php create mode 100644 catalog/templates/core15/modules/boxes/order_history.php create mode 100644 catalog/templates/core15/modules/boxes/product_notifications.php create mode 100644 catalog/templates/core15/modules/boxes/reviews.php create mode 100644 catalog/templates/core15/modules/boxes/search.php create mode 100644 catalog/templates/core15/modules/boxes/shopping_cart.php create mode 100644 catalog/templates/core15/modules/boxes/specials.php create mode 100644 catalog/templates/core15/modules/boxes/tell_a_friend.php create mode 100644 catalog/templates/core15/modules/boxes/templates.php create mode 100644 catalog/templates/core15/modules/boxes/whats_new.php create mode 100644 catalog/templates/core15/modules/content/also_purchased_products.php create mode 100644 catalog/templates/core15/modules/content/featured_products.php create mode 100644 catalog/templates/core15/modules/content/mainpage_banner.php create mode 100644 catalog/templates/core15/modules/content/mainpage_categories.php create mode 100644 catalog/templates/core15/modules/content/mainpage_content.php create mode 100644 catalog/templates/core15/modules/content/new_products.php create mode 100644 catalog/templates/core15/modules/content/product_on_homepage.php create mode 100644 catalog/templates/core15/modules/content/recently_visited.php create mode 100644 catalog/templates/core15/modules/content/upcoming_products.php diff --git a/catalog/admin/includes/templates/core15.php b/catalog/admin/includes/templates/core15.php new file mode 100644 index 000000000..e03cf12ca --- /dev/null +++ b/catalog/admin/includes/templates/core15.php @@ -0,0 +1,184 @@ + array('left', 'right'), + 'content' => array('before', 'after')), + $_keys; + + public function getID() { + global $lC_Database; + + if (isset($this->_id) === false) { + $Qtemplate = $lC_Database->query('select id from :table_templates where code = :code'); + $Qtemplate->bindTable(':table_templates', TABLE_TEMPLATES); + $Qtemplate->bindvalue(':code', $this->_code); + $Qtemplate->execute(); + + $this->_id = $Qtemplate->valueInt('id'); + } + + return $this->_id; + } + + public function getTitle() { + return $this->_title; + } + + public function getCode() { + return $this->_code; + } + + public function getAuthorName() { + return $this->_author_name; + } + + public function getAuthorAddress() { + return $this->_author_www; + } + + public function getMarkup() { + return $this->_markup_version; + } + + public function isCSSBased() { + return ($this->_css_based == '1'); + } + + public function getMedium() { + return $this->_medium; + } + + public function getGroups($group) { + return $this->_groups[$group]; + } + + function getScreenshot() { + return $this->_screenshot; + } + + public function getVersion() { + return $this->_version; + } + + public function getCompatibility() { + return $this->_compatibility; + } + + public function install() { + global $lC_Database; + + $Qinstall = $lC_Database->query('insert into :table_templates (title, code, author_name, author_www, markup_version, css_based, medium) values (:title, :code, :author_name, :author_www, :markup_version, :css_based, :medium)'); + $Qinstall->bindTable(':table_templates', TABLE_TEMPLATES); + $Qinstall->bindValue(':title', $this->_title); + $Qinstall->bindValue(':code', $this->_code); + $Qinstall->bindValue(':author_name', $this->_author_name); + $Qinstall->bindValue(':author_www', $this->_author_www); + $Qinstall->bindValue(':markup_version', $this->_markup_version); + $Qinstall->bindValue(':css_based', $this->_css_based); + $Qinstall->bindValue(':medium', $this->_medium); + $Qinstall->execute(); + + $id = $lC_Database->nextID(); + + $data = array('categories' => array('*', 'left', '100'), + 'manufacturers' => array('*', 'left', '200')); + + $Qboxes = $lC_Database->query('select id, code from :table_templates_boxes'); + $Qboxes->bindTable(':table_templates_boxes', TABLE_TEMPLATES_BOXES); + $Qboxes->execute(); + + while ($Qboxes->next()) { + if (isset($data[$Qboxes->value('code')])) { + $Qrelation = $lC_Database->query('insert into :table_templates_boxes_to_pages (templates_boxes_id, templates_id, content_page, boxes_group, sort_order, page_specific) values (:templates_boxes_id, :templates_id, :content_page, :boxes_group, :sort_order, :page_specific)'); + $Qrelation->bindTable(':table_templates_boxes_to_pages', TABLE_TEMPLATES_BOXES_TO_PAGES); + $Qrelation->bindInt(':templates_boxes_id', $Qboxes->valueInt('id')); + $Qrelation->bindInt(':templates_id', $id); + $Qrelation->bindValue(':content_page', $data[$Qboxes->value('code')][0]); + $Qrelation->bindValue(':boxes_group', $data[$Qboxes->value('code')][1]); + $Qrelation->bindInt(':sort_order', $data[$Qboxes->value('code')][2]); + $Qrelation->bindInt(':page_specific', 0); + $Qrelation->execute(); + } + } + } + + public function remove() { + global $lC_Database; + + $Qdel = $lC_Database->query('delete from :table_templates_boxes_to_pages where templates_id = :templates_id'); + $Qdel->bindTable(':table_templates_boxes_to_pages', TABLE_TEMPLATES_BOXES_TO_PAGES); + $Qdel->bindValue(':templates_id', $this->getID()); + $Qdel->execute(); + + $Qdel = $lC_Database->query('delete from :table_templates where id = :id'); + $Qdel->bindTable(':table_templates', TABLE_TEMPLATES); + $Qdel->bindValue(':id', $this->getID()); + $Qdel->execute(); + + if ($this->hasKeys()) { + $Qdel = $lC_Database->query('delete from :table_configuration where configuration_key in (":configuration_key")'); + $Qdel->bindTable(':table_configuration', TABLE_CONFIGURATION); + $Qdel->bindRaw(':configuration_key', implode('", "', $this->getKeys())); + $Qdel->execute(); + } + } + + public function getKeys() { + if (!isset($this->_keys)) { + $this->_keys = array(); + } + + return $this->_keys; + } + + public function hasKeys() { + static $has_keys; + + if (isset($has_keys) === false) { + $has_keys = (sizeof($this->getKeys()) > 0) ? true : false; + } + + return $has_keys; + } + + public function isInstalled() { + global $lC_Database; + + static $is_installed; + + if (isset($is_installed) === false) { + $Qcheck = $lC_Database->query('select id from :table_templates where code = :code'); + $Qcheck->bindTable(':table_templates', TABLE_TEMPLATES); + $Qcheck->bindValue(':code', $this->_code); + $Qcheck->execute(); + + $is_installed = ($Qcheck->numberOfRows()) ? true : false; + } + + return $is_installed; + } + + public function isActive() { + return true; + } +} +?> \ No newline at end of file diff --git a/catalog/templates/core.php b/catalog/templates/core.php index a1061316c..8cb1ada44 100644 --- a/catalog/templates/core.php +++ b/catalog/templates/core.php @@ -49,11 +49,11 @@ ?> - - - - - + + + + + diff --git a/catalog/templates/core/images/favicons/apple-touch-icon-114-precomposed.png b/catalog/templates/core/images/favicons/apple-touch-icon-114-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5ebab641a500dd1e7573c01b1d42d7d2398e13 GIT binary patch literal 12418 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 AG5`Po literal 0 HcmV?d00001 diff --git a/catalog/templates/core/images/favicons/apple-touch-icon-144-precomposed.png b/catalog/templates/core/images/favicons/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..908fcb3d3f0b3fd4908de1886dfa2f098635edd4 GIT binary patch literal 15751 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 literal 0 HcmV?d00001 diff --git a/catalog/templates/core/images/favicons/apple-touch-icon-72-precomposed.png b/catalog/templates/core/images/favicons/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bc456277ec4f8d5657059ea1f6c5f798bd2b0e GIT binary patch literal 8157 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 D_At|y literal 0 HcmV?d00001 diff --git a/catalog/templates/core15.php b/catalog/templates/core15.php new file mode 100644 index 000000000..f855250d0 --- /dev/null +++ b/catalog/templates/core15.php @@ -0,0 +1,229 @@ +modCheck('templates/core15/classes/output.php')); +$code = (isset($_SESSION['template']['code']) && $_SESSION['template']['code'] != NULL) ? $_SESSION['template']['code'] : 'core15'; +if (!defined('DIR_WS_TEMPLATE')) define('DIR_WS_TEMPLATE', DIR_WS_CATALOG . 'templates/' . $code . '/'); +if (!defined('DIR_FS_TEMPLATE')) define('DIR_FS_TEMPLATE', DIR_FS_CATALOG . 'templates/' . $code . '/'); +if (!defined('DIR_WS_TEMPLATE_IMAGES')) define('DIR_WS_TEMPLATE_IMAGES', DIR_WS_CATALOG . 'templates/' . $code . '/images/'); +?> + + + + + + getPageTags();?> + + + + + getPageOGPTags(); ?> + + + + + + + + + + + + + + + + + loadCSS($lC_Template->getCode(), $lC_Template->getGroup()); + if ($lC_Template->hasPageTags()) { + echo $lC_Template->getPageTags(); + } + ?> + + + + + + + + + + + + + + +
+ + hasPageHeader()) { + if (file_exists('templates/' . $lC_Template->getCode() . '/header.php')) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/header.php')); + } + } + + // set the format; 1, 2, or 3 columns + $left = $lC_Template->getBoxModules('left'); + $right = $lC_Template->getBoxModules('right'); + + if (!empty($left) && !empty($right)) { // 3 cols + $box_class = 'col-sm-3 col-lg-3'; + $content_class = 'col-sm-6 col-lg-6'; + $_SESSION['content_span'] = '6'; + } else if (!empty($left) && empty($right)) { // 2 cols left + $box_class = 'col-sm-3 col-lg-3'; + $content_class = 'col-sm-9 col-lg-9'; + $_SESSION['content_span'] = '9'; + } else if (empty($left) && !empty($right)) { // 2 cols right + $box_class = 'col-sm-3 col-lg-3'; + $content_class = 'col-sm-9 col-lg-9'; + $_SESSION['content_span'] = '9'; + } else { + $box_class = ''; + $content_class = 'col-sm-12 col-lg-12'; // 1 col + $_SESSION['content_span'] = '12'; + } + ?> +
+
+ + ' . $lC_Template->getInfoBoxHtml('left') . '
' . "\n"; ?> + + +
+ size('header') > 0) { + echo '
' . $lC_MessageStack->get('header') . '
'; + } + if ($lC_Template->hasPageContentModules()) { + foreach ($lC_Services->getCallBeforePageContent() as $service) { + $$service[0]->$service[1](); + } + foreach ($lC_Template->getContentModules('before') as $box) { + $lC_Box = new $box(); + $lC_Box->initialize(); + if ($lC_Box->hasContent()) { + if ($lC_Template->getCode() == DEFAULT_TEMPLATE) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')); + } else { + if (file_exists('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')); + } else { + include($lC_Vqmod->modCheck('templates/' . DEFAULT_TEMPLATE . '/modules/content/' . $lC_Box->getCode() . '.php')); + } + } + } + unset($lC_Box); + } + } + ?> +
+ getCode() == DEFAULT_TEMPLATE) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/content/' . $lC_Template->getGroup() . '/' . $lC_Template->getPageContentsFilename())); + } else { + if (file_exists('templates/' . $lC_Template->getCode() . '/content/' . $lC_Template->getGroup() . '/' . $lC_Template->getPageContentsFilename())) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/content/' . $lC_Template->getGroup() . '/' . $lC_Template->getPageContentsFilename())); + } else { + include($lC_Vqmod->modCheck('templates/' . DEFAULT_TEMPLATE . '/content/' . $lC_Template->getGroup() . '/' . $lC_Template->getPageContentsFilename())); + } + } + ?> +
+ hasPageContentModules()) { + foreach ($lC_Services->getCallAfterPageContent() as $service) { + $$service[0]->$service[1](); + } + foreach ($lC_Template->getContentModules('after') as $box) { + $lC_Box = new $box(); + $lC_Box->initialize(); + if ($lC_Box->hasContent()) { + if ($lC_Template->getCode() == DEFAULT_TEMPLATE) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')); + } else { + if (file_exists('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')); + } else { + include($lC_Vqmod->modCheck('templates/' . DEFAULT_TEMPLATE . '/modules/content/' . $lC_Box->getCode() . '.php')); + } + } + } + unset($lC_Box); + } + } + ?> +
+ + + ' . $lC_Template->getInfoBoxHtml('left') . '
' . "\n"; ?> + ' . $lC_Template->getInfoBoxHtml('right') . '
' . "\n"; ?> + + + + hasPageFooter()) { + if (file_exists('templates/' . $lC_Template->getCode() . '/footer.php')) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/footer.php')); + } + + if ($lC_Services->isStarted('banner') && $lC_Banner->exists('footer')) { + echo $lC_Banner->display(); + } + } + + if (isset($lC_Services) && $lC_Services->isStarted('debug')) { + if ( $lC_Template->showDebugMessages() && ($lC_MessageStack->size('debug') > 0) ) { + echo ''; + } + } + ?> + + + + + + + + + addJavascriptPhpFilename('includes/javascript/general.js.php'); + } + // template specific js + if (file_exists('templates/' . $lC_Template->getCode() . '/javascript/general.js.php')) { + $lC_Template->addJavascriptPhpFilename('includes/javascript/general.js.php'); + } + ?> + + + getCode() . '/javascript/' . $lC_Template->getGroup() . '.js')) { + $lC_Template->addJavascriptFilename('templates/' . $lC_Template->getCode() . '/javascript/' . $lC_Template->getGroup() . '.js'); + } + // add module specific (.js.php) filenames to the array for hasJavascript function + if (file_exists('templates/' . $lC_Template->getCode() . '/javascript/' . $lC_Template->getGroup() . '/' . $lC_Template->getModule() . '.js.php')) { + $lC_Template->addJavascriptPhpFilename('templates/' . $lC_Template->getCode() . '/javascript/' . $lC_Template->getGroup() . '/' . $lC_Template->getModule() . '.js.php'); + } + if ($lC_Template->hasJavascript()) { + $lC_Template->getJavascript(); + } + ?> + + + \ No newline at end of file diff --git a/catalog/templates/core15/classes/output.php b/catalog/templates/core15/classes/output.php new file mode 100644 index 000000000..cbb038f38 --- /dev/null +++ b/catalog/templates/core15/classes/output.php @@ -0,0 +1,343 @@ +query('select zone_name from :table_zones where zone_country_id = :zone_country_id order by zone_name'); + $Qzones->bindTable(':table_zones', TABLE_ZONES); + $Qzones->bindInt(':zone_country_id', $countries_id); + $Qzones->execute(); + + $result = array(); + if ($Qzones->numberOfRows() > 0) { + $zones_array = array(); + while ($Qzones->next()) { + $zones_array[] = array('id' => $Qzones->value('zone_name'), 'text' => $Qzones->value('zone_name')); + } + $zone_name = (isset($zone) && is_numeric($zone) && $zone != 0) ? lC_Address::getZoneName($zone) : NULL; + $result['zonesHtml'] = lc_draw_label('', null, 'state') . lc_draw_pull_down_menu('state', $zones_array, $zone_name); + $result['single'] = '0'; + + } else { + $result['zonesHtml'] = lc_draw_label('', null, 'state') . ' ' . lc_draw_input_field('state', (($zone != 'undefined') ? $zone : null), 'placeholder="' . $lC_Language->get('field_customer_state') ./* '" onfocus="this.placeholder = \'\'" onblur="this.placeholder = \'' . $lC_Language->get('field_customer_state') . '\'" */'"class="required" style="width:99.7%;"'); + $result['single'] = '1'; + } + + return $result; + } + /* + * Returns the new arrival listing data + * + * @access public + * @return string + */ + public static function newArrivalsListing() { + global $lC_Vqmod; + + include_once($lC_Vqmod->modCheck('includes/classes/products.php')); + + $lC_Products = new lC_Products(); + $Qlisting = $lC_Products->execute(); + $cnt = 0; + $listing = ''; + while ($Qlisting->next()) { + $lC_Product = new lC_Product($Qlisting->valueInt('products_id')); + $listing .= '
  • ' . lc_link_object(lc_href_link(FILENAME_PRODUCTS, $lC_Product->getKeyword()), substr($lC_Product->getTitle(), 0, 20)) . '
  • '; + $cnt++; + if ($cnt == 5) break; + } + + return $listing; + } + /* + * Returns the manufacturer dropdown array + * + * @access public + * @return array + */ + public static function getManufacturerDropdownArray() { + global $lC_Database, $lC_Language; + + $manufacturers_array = array(array('id' => '', 'text' => $lC_Language->get('filter_all_manufacturers'))); + $Qmanufacturers = $lC_Database->query('select manufacturers_id, manufacturers_name from :table_manufacturers order by manufacturers_name'); + $Qmanufacturers->bindTable(':table_manufacturers', TABLE_MANUFACTURERS); + $Qmanufacturers->execute(); + while ($Qmanufacturers->next()) { + $manufacturers_array[] = array('id' => $Qmanufacturers->valueInt('manufacturers_id'), + 'text' => $Qmanufacturers->value('manufacturers_name')); + } + + return $manufacturers_array; + } + /* + * Returns the categories dropdown array + * + * @access public + * @return array + */ + public static function getCategoriesDropdownArray() { + global $lC_CategoryTree, $lC_Language; + + $lC_CategoryTree->setSpacerString(' ', 2); + $categories_array = array(array('id' => '', 'text' => $lC_Language->get('filter_all_categories'))); + foreach ($lC_CategoryTree->buildBranchArray(0) as $category) { + $categories_array[] = array('id' => $category['id'], + 'text' => $category['title']); + } + + return $categories_array; + } + /* + * Returns the product listing SQL + * + * @param string $search The search string + * @access public + * @return resource + */ + public static function getProductsListingSql() { + $pArr = self::_getProductsListingData(); + + return $pArr['Qlisting']; + } + /* + * Returns the manufacturer filter Html + * + * @access public + * @return array + */ + public static function getManufacturerFilter() { + $pArr = self::_getProductsListingData(); + + return $pArr['mfgFilter']; + } + /* + * Returns the category listing Html + * + * @access public + * @return array + */ + public static function getCategoryListing() { + global $lC_Database, $lC_Language, $lC_Products, $lC_CategoryTree, $lC_Vqmod, $cPath, $cPath_array, $current_category_id; + + include_once($lC_Vqmod->modCheck('includes/classes/products.php')); + + if (isset($cPath) && strpos($cPath, '_')) { + // check to see if there are deeper categories within the current category + $category_links = array_reverse($cPath_array); + for($i=0, $n=sizeof($category_links); $i<$n; $i++) { + $Qcategories = $lC_Database->query('select count(*) as total from :table_categories c, :table_categories_description cd where c.parent_id = :parent_id and c.categories_id = cd.categories_id and cd.language_id = :language_id and c.categories_status = 1'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':parent_id', $category_links[$i]); + $Qcategories->bindInt(':language_id', $lC_Language->getID()); + $Qcategories->execute(); + + if ($Qcategories->valueInt('total') < 1) { + // do nothing, go through the loop + } else { + $Qcategories = $lC_Database->query('select c.categories_id, cd.categories_name, c.categories_image, c.parent_id from :table_categories c, :table_categories_description cd where c.parent_id = :parent_id and c.categories_id = cd.categories_id and cd.language_id = :language_id and c.categories_status = 1 order by sort_order, cd.categories_name'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':parent_id', $category_links[$i]); + $Qcategories->bindInt(':language_id', $lC_Language->getID()); + $Qcategories->execute(); + break; // we've found the deepest category the customer is in + } + } + } else { + $Qcategories = $lC_Database->query('select c.categories_id, cd.categories_name, c.categories_image, c.parent_id, c.categories_mode, c.categories_link_target, c.categories_custom_url from :table_categories c, :table_categories_description cd where c.parent_id = :parent_id and c.categories_id = cd.categories_id and cd.language_id = :language_id and c.categories_status = 1 order by sort_order, cd.categories_name'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':parent_id', $current_category_id); + $Qcategories->bindInt(':language_id', $lC_Language->getID()); + $Qcategories->execute(); + } + $number_of_categories = $Qcategories->numberOfRows(); + $rows = 0; + $output = ''; + while ($Qcategories->next()) { + + $url = ($Qcategories->value('categories_custom_url') != null) ? $Qcategories->value('categories_custom_url') : FILENAME_DEFAULT . '?cPath=' . $lC_CategoryTree->buildBreadcrumb($Qcategories->valueInt('categories_id')); + $image = ($Qcategories->value('categories_image') != null) ? $Qcategories->value('categories_image') : 'no_image.png'; + + $output .= '
    ' . "\n"; + if (file_exists(DIR_WS_IMAGES . 'categories/' . $image)) { + $output .= '
    ' . lc_link_object(lc_href_link($url), lc_image(DIR_WS_IMAGES . 'categories/' . $image, $Qcategories->value('categories_name'), null, null, 'class="content-categories-image-src padding-top"')) . '
    ' . "\n"; + } + $output .= '
    ' . lc_link_object(lc_href_link($url), $Qcategories->value('categories_name')) . '
    ' . "\n" . + '
    ' . "\n"; + } + + return $output; + } + /* + * Returns the current category information (i.e. description, blurb, meta data etc) + * + * @access public + * @return array + */ + public static function getCategoryDescription() { + global $lC_Database, $lC_Language, $current_category_id; + + $Qcategory = $lC_Database->query('select categories_description from :table_categories_description where categories_id = :categories_id and language_id = :language_id'); + $Qcategory->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategory->bindInt(':categories_id', $current_category_id); + $Qcategory->bindInt(':language_id', $lC_Language->getID()); + $Qcategory->execute(); + + $output = ''; + if ($Qcategory->value('categories_description') != '') { + $output .= $Qcategory->value('categories_description'); + } + + return $output; + } + /* + * Returns the zones dropdown field + * + * @access public + * @return string + */ + public static function getZonesField() { + global $lC_Database, $lC_Language, $lC_Template, $entry_state_has_zones; + + if ( (isset($_GET['new']) && ($_GET['new'] == 'save')) || (isset($_GET['edit']) && ($_GET['edit'] == 'save')) || (isset($_GET[$lC_Template->getModule()]) && ($_GET[$lC_Template->getModule()] == 'process')) ) { + if ($entry_state_has_zones === true) { + $Qzones = $lC_Database->query('select zone_name from :table_zones where zone_country_id = :zone_country_id order by zone_name'); + $Qzones->bindTable(':table_zones', TABLE_ZONES); + $Qzones->bindInt(':zone_country_id', $_POST['country']); + $Qzones->execute(); + + $zones_array = array(); + while ($Qzones->next()) { + $zones_array[] = array('id' => $Qzones->value('zone_name'), 'text' => $Qzones->value('zone_name')); + } + $output = lc_draw_pull_down_menu('state', $zones_array); + } else { + $output = lc_draw_input_field('state'); + } + } else { + if (isset($Qentry)) { + $zone = $Qentry->value('entry_state'); + if ($Qentry->valueInt('entry_zone_id') > 0) { + $zone = lC_Address::getZoneName($Qentry->valueInt('entry_zone_id')); + } + } + $output = lc_draw_input_field('state', (isset($Qentry) ? $zone : null)); + } + + return $output; + } + + + /* + * Returns the product listing data + * + * @access private + * @return array + */ + private static function _getProductsListingData() { + global $lC_Database, $lC_Language, $lC_Products, $lC_Vqmod; + + include_once($lC_Vqmod->modCheck('includes/classes/products.php')); + + // optional Product List Filter + $output = ''; + $result = array(); + + if (isset($_GET['manufacturers']) && !empty($_GET['manufacturers'])) { + $filterlist_sql = "select distinct c.categories_id as id, cd.categories_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd, " . TABLE_TEMPLATES_BOXES . " tb, " . TABLE_PRODUCT_ATTRIBUTES . " pa where p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id = cd.categories_id and cd.language_id = '" . (int)$lC_Language->getID() . "' and tb.code = 'manufacturers' and tb.id = pa.id and pa.products_id = p.products_id and pa.value = '" . (int)$_GET['manufacturers'] . "' order by cd.categories_name"; + } else { + $filterlist_sql = "select distinct m.manufacturers_id as id, m.manufacturers_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and p.products_id = p2c.products_id and p2c.categories_id = '" . (int)$current_category_id . "' order by m.manufacturers_name"; + } + $Qfilterlist = $lC_Database->query($filterlist_sql); + $Qfilterlist->execute(); + if ($Qfilterlist->numberOfRows() > 1) { + $output .= '

    ' . $lC_Language->get('filter_show') . ' '; + if (isset($_GET['manufacturers']) && !empty($_GET['manufacturers'])) { + $output .= lc_draw_hidden_field('manufacturers', $_GET['manufacturers']); + $options = array(array('id' => '', 'text' => $lC_Language->get('filter_all_categories'))); + } else { + $output .= lc_draw_hidden_field('cPath', $cPath); + $options = array(array('id' => '', 'text' => $lC_Language->get('filter_all_manufacturers'))); + } + if (isset($_GET['sort'])) { + $output .= lc_draw_hidden_field('sort', $_GET['sort']); + } + while ($Qfilterlist->next()) { + $options[] = array('id' => $Qfilterlist->valueInt('id'), 'text' => $Qfilterlist->value('name')); + } + $output .= lc_draw_pull_down_menu('filter', $options, (isset($_GET['filter']) ? $_GET['filter'] : null), 'onchange="this.form.submit()"'); + $output .= lc_draw_hidden_session_id_field() . '

    ' . "\n"; + } + + if (isset($_GET['manufacturers']) && !empty($_GET['manufacturers'])) { + $lC_Products->setManufacturer($_GET['manufacturers']); + } + $Qlisting = $lC_Products->execute(); + + $result['mfgFilter'] = $output; + $result['Qlisting'] = $Qlisting; + + return $result; + } + /* + * return the top cats for nav + * + * @access public + * @return array + */ + /* + public static function getTopCategories() { + global $lC_Database, $lC_Language; + + $Qcategories = $lC_Database->query('select c.categories_id, cd.categories_name, cd.categories_menu_name, c.categories_link_target, c.categories_custom_url, c.categories_mode from :table_categories c, :table_categories_description cd where c.parent_id = 0 and c.categories_id = cd.categories_id and cd.language_id = :language_id and c.categories_status = 1 and c.categories_visibility_nav = 1 order by sort_order, cd.categories_name'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':language_id', $lC_Language->getID()); + $Qcategories->execute(); + while ( $Qcategories->next() ) { + $topCategories[] = array('id' => $Qcategories->value('categories_id'), + 'name' => ($Qcategories->value('categories_menu_name') != '') ? $Qcategories->value('categories_menu_name') : $Qcategories->value('categories_name'), + 'link_target' => $Qcategories->value('categories_link_target'), + 'custom_url' => $Qcategories->value('categories_custom_url'), + 'mode' => $Qcategories->value('categories_mode')); + } + + return $topCategories; + } + */ + /* + * return the top cats for nav + * + * @access public + * @return array + */ + public static function getCategoriesStatus($id) { + global $lC_Database; + + $Qcategories = $lC_Database->query('select categories_status from :table_categories where categories_id = :categories_id'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindInt(':id', $id); + $Qcategories->execute(); + + return $result; + } +} +?> \ No newline at end of file diff --git a/catalog/templates/core15/classes/rpc.php b/catalog/templates/core15/classes/rpc.php new file mode 100644 index 000000000..0c62d513d --- /dev/null +++ b/catalog/templates/core15/classes/rpc.php @@ -0,0 +1,29 @@ +modCheck('includes/classes/address_book.php')); + +class lC_Core15_rpc { + /* + * Return the zones dropdown array + * + * @access public + * @return json + */ + public static function getZonesDropdown() { + $result = array(); + $result = lC_AddressBook::getZonesDropdownHtml($_GET['country'], $_GET['zone']); + if (is_array($result)) $result['rpcStatus'] = '1'; + + echo json_encode($result); + } +} +?> \ No newline at end of file diff --git a/catalog/templates/core15/classes/success.php b/catalog/templates/core15/classes/success.php new file mode 100644 index 000000000..b58cf6f39 --- /dev/null +++ b/catalog/templates/core15/classes/success.php @@ -0,0 +1,324 @@ +query('select orders_id from :table_orders where customers_id = :customers_id order by date_purchased desc limit 1'); + $Qorder->bindTable(':table_orders', TABLE_ORDERS); + $Qorder->bindInt(':customers_id', $_cID); + $Qorder->execute(); + + $oID = $Qorder->valueInt('orders_id'); + + $Qorder->freeResult(); + + return $oID; + } + /* + * Returns the customers first name for use in the address arrays + * + * @param int $_cID customers_id + * @access public + * @return array + */ + public static function getFirstName($_cID) { + global $lC_Database; + + $Qfirst = $lC_Database->query('select customers_firstname from :table_customers where customers_id = :customers_id'); + $Qfirst->bindTable(':table_customers', TABLE_CUSTOMERS); + $Qfirst->bindInt(':customers_id', $_cID); + $Qfirst->execute(); + + $first = $Qfirst->value('customers_firstname'); + + $Qfirst->freeResult(); + + return $first; + } + /* + * Returns the customers last name for use in the address arrays + * + * @param int $_cID customers_id + * @access public + * @return array + */ + public static function getLastName($_cID) { + global $lC_Database; + + $Qlast = $lC_Database->query('select customers_lastname from :table_customers where customers_id = :customers_id'); + $Qlast->bindTable(':table_customers', TABLE_CUSTOMERS); + $Qlast->bindInt(':customers_id', $_cID); + $Qlast->execute(); + + $last = $Qlast->value('customers_lastname'); + + $Qlast->freeResult(); + + return $last; + } + /* + * Returns result of variants check + * + * @param int $_pID products_id + * @access public + * @return array + */ + public static function isVariant($_pID) { + global $lC_Database; + + $Qvariant = $lC_Database->query('select products_id from :table_products_variants where products_id = :products_id limit 1'); + $Qvariant->bindTable(':table_products_variants', TABLE_PRODUCTS_VARIANTS); + $Qvariant->bindInt(':products_id', $_pID); + $Qvariant->execute(); + + if ($Qvariant->valueInt('products_id')) { + $vID = true; + } else { + $vID = false; + } + + $Qvariant->freeResult(); + + return $vID; + } + /* + * Returns variants data + * + * @param int $pID products_id + * @access public + * @return array + */ + public static function getVariants($_pID) { + global $lC_Database, $lC_Language; + + $Qvariant = $lC_Database->query('select pvg.id as group_id, pvg.title as group_title, pvg.module, pvv.id as value_id, pvv.title as value_title from :table_products_variants pv, :table_products_variants_values pvv, :table_products_variants_groups pvg where pv.products_id = :products_id and pv.products_variants_values_id = pvv.id and pvv.languages_id = :languages_id and pvv.products_variants_groups_id = pvg.id and pvg.languages_id = :languages_id'); + $Qvariant->bindTable(':table_products_variants', TABLE_PRODUCTS_VARIANTS); + $Qvariant->bindTable(':table_products_variants_values', TABLE_PRODUCTS_VARIANTS_VALUES); + $Qvariant->bindTable(':table_products_variants_groups', TABLE_PRODUCTS_VARIANTS_GROUPS); + $Qvariant->bindInt(':products_id', $_pID); + $Qvariant->bindInt(':languages_id', $lC_Language->getID()); + $Qvariant->bindInt(':languages_id', $lC_Language->getID()); + $Qvariant->execute(); + + if ( $Qvariant->numberOfRows() > 0 ) { + while ( $Qvariant->next() ) { + $variants_array[] = array('group_id' => $Qvariant->valueInt('group_id'), + 'value_id' => $Qvariant->valueInt('value_id'), + 'group_title' => $Qvariant->value('group_title'), + 'value_title' => $Qvariant->value('value_title')); + } + } + + $vArray = $variants_array; + + $Qvariant->freeResult(); + + return $vArray; + } + /* + * Returns the customers global notifications status + * + * @param int $_cID customers_id + * @access public + * @return array + */ + public static function globalNotifications($_cID) { + global $lC_Database; + + $Qglobal = $lC_Database->query('select global_product_notifications from :table_customers where customers_id = :customers_id'); + $Qglobal->bindTable(':table_customers', TABLE_CUSTOMERS); + $Qglobal->bindInt(':customers_id', $_cID); + $Qglobal->execute(); + + if ($Qglobal->valueInt('global_product_notifications') !== 1) { + $Qproducts = $lC_Database->query('select products_id, products_name from :table_orders_products where orders_id = :orders_id order by products_name'); + $Qproducts->bindTable(':table_orders_products', TABLE_ORDERS_PRODUCTS); + $Qproducts->bindInt(':orders_id', self::getOrderID($_cID)); + $Qproducts->execute(); + $products_array = array(); + while ($Qproducts->next()) { + $products_array[] = array('id' => $Qproducts->valueInt('products_id'), + 'text' => $Qproducts->value('products_name')); + } + } + + return $products_array; + + $Qglobal->freeResult(); + $Qproducts->freeResult(); + } + /* + * Returns the order totals array + * + * @param int $_oID orders_id + * @access public + * @return array + */ + public static function getOrderTotals($_oID) { + global $lC_Database; + + $QorderTotals = $lC_Database->query('select * from :table_orders_total where orders_id = :orders_id order by sort_order asc'); + $QorderTotals->bindTable(':table_orders_total', TABLE_ORDERS_TOTAL); + $QorderTotals->bindInt(':orders_id', $_oID); + $QorderTotals->execute(); + + $orders_total_array = array(); + while ($QorderTotals->next()) { + $orders_total_array[] = array('title' => $QorderTotals->value('title'), + 'text' => $QorderTotals->value('text'), + 'value' => $QorderTotals->value('value'), + 'class' => $QorderTotals->value('class'), + 'sort_order' => $QorderTotals->valueInt('sort_order')); + } + + return $orders_total_array; + + $QorderTotals->freeResult(); + } + /* + * Returns the order products array + * + * @param int $_oID orders_id + * @access public + * @return array + */ + public static function getOrderProducts($_oID) { + global $lC_Database; + + $QorderProducts = $lC_Database->query('select * from :table_orders_products where orders_id = :orders_id order by orders_products_id asc'); + $QorderProducts->bindTable(':table_orders_products', TABLE_ORDERS_PRODUCTS); + $QorderProducts->bindInt(':orders_id', $_oID); + $QorderProducts->execute(); + $orders_products_array = array(); + while ($QorderProducts->next()) { + $orders_products_array[] = array('id' => $QorderProducts->valueInt('products_id'), + 'quantity' => $QorderProducts->valueInt('products_quantity'), + 'name' => $QorderProducts->value('products_name'), + 'model' => $QorderProducts->value('products_model'), + 'price' => $QorderProducts->value('products_price'), + 'options' => unserialize($QorderProducts->value('products_simple_options_meta_data'))); + } + + return $orders_products_array; + + $QorderProducts->freeResult(); + } + /* + * Returns the payment method + * + * @param int $_oID orders_id + * @access public + * @return array + */ + public static function getPaymentMethod($_oID) { + global $lC_Database; + + $QorderPayment = $lC_Database->query('select payment_method from :table_orders where orders_id = :orders_id'); + $QorderPayment->bindTable(':table_orders', TABLE_ORDERS); + $QorderPayment->bindInt(':orders_id', $_oID); + $QorderPayment->execute(); + + $payment_method = $QorderPayment->value('payment_method'); + + $QorderPayment->freeResult(); + + return $payment_method; + } + /* + * Returns the shipping address + * + * @param int $_oID orders_id + * @access public + * @return array + */ + public static function getShippingAddress($_oID, $_cID) { + global $lC_Database; + + $QorderShipping = $lC_Database->query('select delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state_code, delivery_country, delivery_address_format from :table_orders where orders_id = :orders_id'); + $QorderShipping->bindTable(':table_orders', TABLE_ORDERS); + $QorderShipping->bindInt(':orders_id', $_oID); + $QorderShipping->execute(); + + $shipping_data = array('firstname' => self::getFirstName($_cID), + 'lastname' => self::getLastName($_cID), + 'company' => $QorderShipping->value('delivery_company'), + 'street_address' => $QorderShipping->value('delivery_street_address'), + 'suburb' => $QorderShipping->value('delivery_suburb'), + 'city' => $QorderShipping->value('delivery_city'), + 'postcode' => $QorderShipping->value('delivery_postcode'), + 'zone_code' => $QorderShipping->value('delivery_state_code'), + 'country_title' => $QorderShipping->value('delivery_country'), + 'format' => $QorderShipping->value('delivery_address_format')); + + $QorderShipping->freeResult(); + + return $shipping_data; + } + /* + * Returns the billing address + * + * @param int $_oID orders_id + * @access public + * @return array + */ + public static function getBillingAddress($_oID, $_cID) { + global $lC_Database; + + $QorderBilling = $lC_Database->query('select billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state_code, billing_country, billing_address_format from :table_orders where orders_id = :orders_id'); + $QorderBilling->bindTable(':table_orders', TABLE_ORDERS); + $QorderBilling->bindInt(':orders_id', $_oID); + $QorderBilling->execute(); + + $billing_data = array('firstname' => self::getFirstName($_cID), + 'lastname' => self::getLastName($_cID), + 'company' => $QorderBilling->value('billing_company'), + 'street_address' => $QorderBilling->value('billing_street_address'), + 'suburb' => $QorderBilling->value('billing_suburb'), + 'city' => $QorderBilling->value('billing_city'), + 'postcode' => $QorderBilling->value('billing_postcode'), + 'zone_code' => $QorderBilling->value('billing_state_code'), + 'country_title' => $QorderBilling->value('billing_country'), + 'format' => $QorderBilling->value('billing_address_format')); + + $QorderBilling->freeResult(); + + return $billing_data; + } + /* + * Returns the order comments + * + * @param int $_oID orders_id + * @access public + * @return array + */ + public static function getOrderComments($_oID) { + global $lC_Database; + + $QorderComments = $lC_Database->query('select comments from :table_orders_status_history where orders_id = :orders_id and comments != ""'); + $QorderComments->bindTable(':table_orders_status_history', TABLE_ORDERS_STATUS_HISTORY); + $QorderComments->bindInt(':orders_id', $_oID); + $QorderComments->execute(); + + $order_comments = $QorderComments->value('comments'); + + $QorderComments->freeResult(); + + return $order_comments; + } +} +?> \ No newline at end of file diff --git a/catalog/templates/core15/content/account/account.php b/catalog/templates/core15/content/account/account.php new file mode 100644 index 000000000..a5b8bdb88 --- /dev/null +++ b/catalog/templates/core15/content/account/account.php @@ -0,0 +1,45 @@ + + +
    +

    getPageTitle(); ?>

    + ' . preg_replace('/[^a-zA-Z0-9]\'\.\,/', '', $_GET['success']) . '
    ' . "\n"; + ?> +
    +

    get('my_details_title'); ?>

    +
    + get('my_account_title'), null, null, 'class="img-responsive pull-left large-margin-right img-responsive"'); ?> +
    +
    get('my_account_information')); ?>
    +
    get('my_account_address_book')); ?>
    +
    get('my_account_password')); ?>
    +
    +
    +

    get('my_orders_title'); ?>

    +
    + get('my_orders_title'), null, null, 'class="img-responsive pull-left large-margin-right img-responsive"'); ?> +
    +
    get('my_orders_view')); ?>
    +
    +
    +

    get('my_notifications_title'); ?>

    +
    + get('my_notifications_title'), null, null, 'class="img-responsive pull-left large-margin-right img-responsive"'); ?> +
    +
    get('my_notifications_newsletters')); ?>
    +
    get('my_notifications_products')); ?>
    +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/account_edit.php b/catalog/templates/core15/content/account/account_edit.php new file mode 100644 index 000000000..f9831db38 --- /dev/null +++ b/catalog/templates/core15/content/account/account_edit.php @@ -0,0 +1,72 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('account_edit') > 0 ) echo '
    ' . $lC_MessageStack->get('account_edit') . '
    ' . "\n"; + ?> +
    +
    +
    +
    +
    +

    get('personal_details_title'); ?>

    +
    +
    + value('customers_firstname') , 'class="form-control" placeholder="' . $lC_Language->get('field_customer_first_name') . '"'); ?> +
    +
    + value('customers_lastname'), 'class="form-control" placeholder="' . $lC_Language->get('field_customer_last_name') . '"'); ?> +
    + ' . lc_draw_input_field('dob', $Qaccount->value('customers_dob_month') . '/' . $Qaccount->value('customers_dob_date') . '/' . $Qaccount->value('customers_dob_year'),'class="datepicker form-control padding-left" data-date-format="mm/dd/yyyy" placeholder="' . $lC_Language->get('field_customer_date_of_birth') . '"') . '
    ' . "\n"; + } + if (ACCOUNT_GENDER > -1) { + ?> +
    + + +
    + +
    +
    +
    +

    get('login_details_title'); ?>

    +
    +
    + value('customers_email_address'), 'class="form-control" placeholder="' . $lC_Language->get('field_customer_email_address') . '"'); ?> +
    +
    +
    +
    + +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/account_history.php b/catalog/templates/core15/content/account/account_history.php new file mode 100644 index 000000000..80e4536f5 --- /dev/null +++ b/catalog/templates/core15/content/account/account_history.php @@ -0,0 +1,68 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    + + + + + + + + + + + + + + 0) { + + $Qhistory = lC_Order::getListing(MAX_DISPLAY_ORDER_HISTORY); + + while ($Qhistory->next()) { + if (!lc_empty($Qhistory->value('delivery_name'))) { + $order_type = $lC_Language->get('order_shipped_to'); + $order_name = $Qhistory->value('delivery_name'); + } else { + $order_type = $lC_Language->get('order_billed_to'); + $order_name = $Qhistory->value('billing_name'); + } + ?> + + + + + + + + + + get('no_orders_made_yet'); + } + ?> + +
    get('text_view'); ?>get('text_number'); ?>get('order_shipped_to'); ?>get('text_date'); ?>get('text_status'); ?>get('text_items'); ?>get('text_total'); ?>
    get('text_view')); ?>valueInt('orders_id'); ?>value('date_purchased')); ?>value('orders_status_name'); ?>valueInt('orders_id')); ?>value('order_total')); ?>
    +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/account_newsletters.php b/catalog/templates/core15/content/account/account_newsletters.php new file mode 100644 index 000000000..ae2c35adc --- /dev/null +++ b/catalog/templates/core15/content/account/account_newsletters.php @@ -0,0 +1,30 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    +
    +
    + +
    +

    get('newsletter_general_description'); ?>

    +
    +
    +
    + +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/account_notifications.php b/catalog/templates/core15/content/account/account_notifications.php new file mode 100644 index 000000000..77c0c443f --- /dev/null +++ b/catalog/templates/core15/content/account/account_notifications.php @@ -0,0 +1,54 @@ + + +
    +
    +
    +

    getPageTitle(); ?>

    +

    get('product_notifications_global'); ?>

    +
    +
    + +
    +

     get('product_notifications_global_description'); ?>

    +
    + + valueInt('global_product_notifications') != '1') { + echo '

    ' . $lC_Language->get('product_notifications_products') . '

    ' . "\n"; + if ($lC_Template->hasCustomerProductNotifications($lC_Customer->getID())) { + echo '

    ' . $lC_Language->get('product_notifications_products_description') . '

    ' . "\n"; + $Qproducts = $lC_Template->getListing(); + $counter = 0; + while ($Qproducts->next()) { + $counter++; + echo '
    ' . "\n"; + echo '
    ' . "\n"; + echo ' ' . "\n"; + echo '
    ' . "\n"; + echo '
    ' . "\n"; + } + } else { + echo '
    ' . "\n"; + echo '

     ' . $lC_Language->get('product_notifications_products_none') . '

    ' . "\n"; + echo '
    ' . "\n"; + } + } + ?> +
    +
    + +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/account_password.php b/catalog/templates/core15/content/account/account_password.php new file mode 100644 index 000000000..45fa45a38 --- /dev/null +++ b/catalog/templates/core15/content/account/account_password.php @@ -0,0 +1,34 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('account_password') > 0 ) echo '
    ' . $lC_MessageStack->get('account_password') . '
    ' . "\n"; + ?> +
    +
    +
    get('field_customer_password_current') . '" class="form-control"'); ?>
    +
    get('field_customer_password_new') . '" class="form-control"'); ?>
    +
    get('field_customer_password_confirmation') . '" class="form-control"'); ?>
    +
    +
    + +
    + +
    +
    + +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/address_book.php b/catalog/templates/core15/content/account/address_book.php new file mode 100644 index 000000000..3b14f3cdb --- /dev/null +++ b/catalog/templates/core15/content/account/address_book.php @@ -0,0 +1,75 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('address_book') > 0 ) echo '
    ' . $lC_MessageStack->get('address_book') . '
    ' . "\n"; + ?> +
    +
    +

    get('primary_address_title'); ?>

    +
    +
    getDefaultAddressID(), '
    '); ?>
    +
    +
    +
    +

     

    +
    +

    get('primary_address_description'); ?>

    +
    +
    +
    +
    +
    +

    get('address_book_title'); ?>

    + next()) { + echo '
    ' . "\n"; + echo '
    ' . "\n"; + echo $Qaddresses->valueProtected('firstname') . ' ' . $Qaddresses->valueProtected('lastname'); + if ($Qaddresses->valueInt('address_book_id') == $lC_Customer->getDefaultAddressID()) { + echo ' ' . $lC_Language->get('primary_address_marker') . ''; + } + echo '
    ' . "\n"; + echo lC_Address::format($Qaddresses->toArray(), '
    '); + echo '
    ' . "\n"; + ?> +
    +
    +
    +
    + ' . "\n"; + } + ?> +
    +
    +
    +
    +
    + numberOfRows() < MAX_ADDRESS_BOOK_ENTRIES) { + echo '
    ' . "\n"; + } else { + echo '
    ' . sprintf($lC_Language->get('address_book_maximum_entries'), MAX_ADDRESS_BOOK_ENTRIES) . '
    ' . "\n"; + } + ?> +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/address_book_delete.php b/catalog/templates/core15/content/account/address_book_delete.php new file mode 100644 index 000000000..5b2ad004c --- /dev/null +++ b/catalog/templates/core15/content/account/address_book_delete.php @@ -0,0 +1,40 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('create') > 0 ) echo '
    ' . $lC_MessageStack->get('create') . '
    ' . "\n"; + ?> +
    +
    +

    get('selected_address_title'); ?>

    +
    +
    '); ?>
    +
    +
    + +
    +

    get('address_book_delete_address_title'); ?>

    +
    +

    get('address_book_delete_address_description'); ?>

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/address_book_process.php b/catalog/templates/core15/content/account/address_book_process.php new file mode 100644 index 000000000..a535dec4a --- /dev/null +++ b/catalog/templates/core15/content/account/address_book_process.php @@ -0,0 +1,53 @@ += MAX_ADDRESS_BOOK_ENTRIES) { + $lC_MessageStack->add('address_book', $lC_Language->get('error_address_book_full')); + } +} +?> + +
    +
    +

    getPageTitle(); ?>

    + size('address_book') > 0 ) echo '
    ' . $lC_MessageStack->get('address_book') . '
    ' . "\n"; + if ( ($lC_Customer->hasDefaultAddress() === false) || (isset($_GET['new']) && (lC_AddressBook::numberOfEntries() < MAX_ADDRESS_BOOK_ENTRIES)) || (isset($Qentry) && ($Qentry->numberOfRows() === 1)) ) { + ?> +
    +
    + modCheck(DIR_FS_TEMPLATE . 'modules/address_book_details.php')); + } else { + require($lC_Vqmod->modCheck('includes/modules/address_book_details.php')); + } + ?> +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/create.php b/catalog/templates/core15/content/account/create.php new file mode 100644 index 000000000..ba12c62a1 --- /dev/null +++ b/catalog/templates/core15/content/account/create.php @@ -0,0 +1,79 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('create') > 0 ) echo '
    ' . $lC_MessageStack->get('create') . '
    ' . "\n"; + ?> +
    +
    +
    +
    +

    get('personal_details_title'); ?>

    +
    get('field_customer_first_name') . '" class="form-control"'); ?>
    +
    get('field_customer_last_name') . '" class="form-control"'); ?>
    + ' . lc_draw_input_field('dob', null,'class="datepicker form-control full-width padding-left" data-date-format="mm/dd/yyyy" placeholder="' . $lC_Language->get('field_customer_date_of_birth') . '"') . '
    ' . "\n"; + } + if (ACCOUNT_GENDER > -1) { + ?> +
    + + +
    + +
    +
    + +
    + +
    +
    +
    +
    +

    get('login_details_title'); ?>

    +
    get('field_customer_email_address') . '" class="form-control"'); ?>
    +
    get('field_customer_password') . '"'); ?>
    +
    get('field_customer_password_confirmation') . '" class="form-control"'); ?>
    + ' . lc_draw_checkbox_field('privacy_conditions', null, null, 'class="form-control no-margin-top small-margin-right" style="width:5%;"') . '
    '; + } + ?> +
    +
    + +
    +
    + +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/create_success.php b/catalog/templates/core15/content/account/create_success.php new file mode 100644 index 000000000..7423b2ecc --- /dev/null +++ b/catalog/templates/core15/content/account/create_success.php @@ -0,0 +1,31 @@ +hasSnapshot()) { + $origin_href = $lC_NavigationHistory->getSnapshotURL(); + $href_parts = explode("?", $origin_href); + $lC_NavigationHistory->resetSnapshot(); +} else { + $origin_href = lc_href_link(FILENAME_DEFAULT); +} +?> + +
    +
    +

    getPageTitle(); ?>

    +
    +

    get('success_account_created'), lc_href_link(FILENAME_INFO, 'contact')); ?>

    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/login.php b/catalog/templates/core15/content/account/login.php new file mode 100644 index 000000000..2685a34d9 --- /dev/null +++ b/catalog/templates/core15/content/account/login.php @@ -0,0 +1,50 @@ + + +
    +
    +

    getPageTitle(); ?>

    + ' . preg_replace('/[^a-zA-Z0-9]\'\.\,/', '', $_GET['success']) . '
    ' . "\n"; + if ( $lC_MessageStack->size('login') > 0 ) echo '
    ' . $lC_MessageStack->get('login') . '
    ' . "\n"; + ?> +
    +
    +
    +

    get('login_returning_customer_heading'); ?>

    +
    +
    + get('field_customer_email_address') . '"'); ?> +
    +
    + get('field_customer_password') . '"'); ?> +

    get('login_returning_customer_password_forgotten'), lc_href_link(FILENAME_ACCOUNT, 'password_forgotten', 'SSL')); ?>

    +
    +
    +
    + +
    +
    +
    +
    +
    +

    get('login_new_customer_heading'); ?>

    +

    get('login_new_customer_text'); ?>

    +
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/logoff.php b/catalog/templates/core15/content/account/logoff.php new file mode 100644 index 000000000..bcdad35ec --- /dev/null +++ b/catalog/templates/core15/content/account/logoff.php @@ -0,0 +1,24 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    +

    get('sign_out_text'); ?>

    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/password_forgotten.php b/catalog/templates/core15/content/account/password_forgotten.php new file mode 100644 index 000000000..6624b0f60 --- /dev/null +++ b/catalog/templates/core15/content/account/password_forgotten.php @@ -0,0 +1,33 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('password_forgotten') > 0 ) echo '
    ' . $lC_MessageStack->get('password_forgotten') . '
    ' . "\n"; + ?> +
    +

    get('password_forgotten'); ?>

    +
    +
    + get('field_customer_email_address') . '" class="form-control"'); ?> +
    +
    +
    +
    + +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/account/receipt.php b/catalog/templates/core15/content/account/receipt.php new file mode 100644 index 000000000..10c208f74 --- /dev/null +++ b/catalog/templates/core15/content/account/receipt.php @@ -0,0 +1,110 @@ +modCheck('includes/classes/order.php')); +$order = new lC_Order($_GET['receipt']); +?> + +
    + +
    +
    +

    <?php echo STORE_NAME; ?>

    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + get('receipt_billing_address_title'); ?>
    + billing, '
    '); ?> +
    +
    +
    +
    + get('receipt_delivery_address_title'); ?>
    + delivery, '
    '); ?> +
    +
    +
    +
    +

    get('receipt_order_number_title'); ?>

    +
    get('receipt_order_date_title'); ?> info['date_purchased']); ?>
    +
    get('receipt_order_status_title'); ?> info['orders_status']; ?>
    +
    get('receipt_payment_method_title'); ?> info['payment_method']; ?>
    +
    +
    +
    + +
    +
    + + info['tax_groups']) > 1) { + ?> + + + + + + + + + + + products as $product) { + ?> + + + + info['tax_groups']) > 1) { + echo '' . "\n"; + } + ?> + + + +
    get('order_products_title'); ?>get('order_tax_title'); ?>get('order_total_title'); ?>
    get('receipt_products_title'); ?>get('receipt_products_totals'); ?>
     x 0)) { + foreach ($product['attributes'] as $attribute) { + echo '
      - ' . $attribute['option'] . ': ' . $attribute['value'] . ''; + } + } + ?> +
    ' . lC_Tax::displayTaxRateValue($product['tax']) . 'displayPriceWithTaxRate($product['price'], $product['tax'], $product['qty'], false, $order->info['currency'], $order->info['currency_value']); ?>
    +
    + totals as $total) { + echo '
    ' . $total['title'] . '' . $total['text'] . '
    ' . "\n"; + } + ?> +
    + +
    +
    +
    + +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_confirmation.php b/catalog/templates/core15/content/checkout/checkout_confirmation.php new file mode 100644 index 000000000..835cb1bbb --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_confirmation.php @@ -0,0 +1,217 @@ + + +
    +
    +

    get('text_checkout'); ?>

    + size('checkout_confirmation') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_confirmation') . '
    ' . "\n"; + ?> +
    +
    +
    +

    get('box_ordering_steps_delivery'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_payment'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_confirmation'); ?>

    +
    +
    +
    +
    +
    +
    +

    get('ship_to_address'); ?>

    +
    + getShippingAddress(), '
    '); ?> +
    +
    + +
    +
    +
    +

    get('shipping_method_heading'); ?>

    +

    getShippingMethod('title'); ?>

    +
    + +
    +
    +
    +

    get('bill_to_address'); ?>

    +
    + getBillingAddress(), '
    '); ?> +
    +
    + +
    +
    +
    +

    get('payment_method_heading'); ?>

    +

    getBillingMethod('title'); ?>

    +
    + +
    +
    +
    +

    get('order_comment_title'); ?>

    +
    + get('text_add_comment_to_order') . '" onkeyup="sendOrderCommentsToSession(this.value);"'); ?> +
    +
    +
    +
    +
    + + numberOfTaxGroups() > 1) { + ?> + + + + + + + + + + + + + + + getProducts() as $products) { + echo '' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + if ($lC_ShoppingCart->numberOfTaxGroups() > 1) { + echo '' . "\n"; + } + echo '' . "\n" . + '' . "\n"; + } + ?> +
    get('order_products_title'); ?>get('order_tax_title'); ?>get('order_total_title'); ?>
    get('order_products_title'); ?> 
    ' . $products['quantity'] . ' x ' . $products['name'] . '' . "\n"; + if ( (STOCK_CHECK == '1') && !$lC_ShoppingCart->isInStock($products['item_id']) ) { + echo '' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '' . "\n"; + } + echo '
    ' . $lC_Language->get('listing_model_heading') . ': ' . $products['model'] . ''; + if ( $lC_ShoppingCart->isVariant($products['item_id']) ) { + foreach ( $lC_ShoppingCart->getVariant($products['item_id']) as $variant) { + echo '
    - ' . $variant['group_title'] . ': ' . $variant['value_title'] . '' . "\n"; + } + } + if ( $lC_ShoppingCart->hasSimpleOptions($products['item_id']) ) { + foreach ( $lC_ShoppingCart->getSimpleOptions($products['item_id']) as $option) { + echo '
    - ' . $option['group_title'] . ': ' . $option['value_title'] . '' . "\n"; + } + } + echo '
    ' . lC_Tax::displayTaxRateValue($products['tax']) . '' . $lC_Currencies->displayPrice($products['price'], $products['tax_class_id'], $products['quantity']) . '
    +
     
    +
    +
    +
    +
    + getOrderTotals() as $module) { + ?> +
    + + +
    + +
    +
    + hasActive()) echo $lC_Payment->process_button(); + if (DISPLAY_CONDITIONS_ON_CHECKOUT == '1') { + ?> +
    +
    + 1, 'text' => $lC_Language->get('order_conditions_acknowledge'))), false); ?> +
    +
    + + +
    + + +
    + isLoggedOn() !== false) { + if (defined('MODULE_SERVICES_INSTALLED') && in_array('coupons', explode(';', MODULE_SERVICES_INSTALLED)) && + defined('SERVICE_COUPONS_DISPLAY_ON_CART_PAGE') && SERVICE_COUPONS_DISPLAY_ON_CART_PAGE == '1') { + ?> +
    +

    get('text_coupon_code_heading'); ?>

    +

    get('text_coupon_code_instructions'); ?>

    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_payment.php b/catalog/templates/core15/content/checkout/checkout_payment.php new file mode 100644 index 000000000..1cb341761 --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_payment.php @@ -0,0 +1,166 @@ + + +
    +
    +

    get('text_checkout'); ?>

    + size('checkout_payment') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_payment') . '
    ' . "\n"; + ?> +
    +
    +
    +
    +

    get('box_ordering_steps_delivery'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_payment'); ?>

    +
    +
    +
    +
    +
    +

    get('ship_to_address'); ?>

    +
    + getShippingAddress(), '
    '); ?> +
    +
    + +
    +
    +
    +

    get('shipping_method_heading'); ?>

    +

    getShippingMethod('title'); ?>

    +
    + +
    +
    +
    + getOrderTotals() as $module) { + ?> +
    + + +
    + +
    +
    +
    +
    +

    get('bill_to_address'); ?>

    +
    + getShippingAddress(), '
    '); + } else { + echo lC_Address::format($lC_ShoppingCart->getBillingAddress(), '
    '); + } + ?> +
    +
    + +
    +
    +

    get('payment_method_title'); ?>

    + selection(); + echo (sizeof($selection) > 1) ? '
    ' . $lC_Language->get('choose_payment_method') . '
    ' : '
    ' . $lC_Language->get('only_one_payment_method_available') . '
    ' . "\n"; + $radio_buttons = 0; + for ($i=0, $n=sizeof($selection); $i<$n; $i++) { + ?> + + hasBillingMethod() && ($selection[$i]['id'] == $lC_ShoppingCart->getBillingMethod('id'))) ) { + echo '' . "\n"; + } else { + echo '' . "\n"; + } + + if ($n > 1) { + ?> + + + + + + + + + + + + + + + + +
    hasBillingMethod() ? $lC_ShoppingCart->getBillingMethod('id') : null), 'id="pm_' . $counter . '"',''); ?>
    + +
     
    +
    + + +
    + isLoggedOn() !== false) { + if (defined('MODULE_SERVICES_INSTALLED') && in_array('coupons', explode(';', MODULE_SERVICES_INSTALLED)) && + defined('SERVICE_COUPONS_DISPLAY_ON_CART_PAGE') && SERVICE_COUPONS_DISPLAY_ON_CART_PAGE == '1') { + ?> +
    +

    get('text_coupon_code_heading'); ?>

    +

    get('text_coupon_code_instructions'); ?>

    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    get('box_ordering_steps_confirmation'); ?>

    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_payment_address.php b/catalog/templates/core15/content/checkout/checkout_payment_address.php new file mode 100644 index 000000000..a2f238a16 --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_payment_address.php @@ -0,0 +1,133 @@ + + +
    +
    +

    get('text_checkout'); ?>

    + size('checkout_payment_address') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_payment_address') . '
    ' . "\n"; + ?> +
    +
    +
    +

    get('box_ordering_steps_delivery'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_payment'); ?>

    +
    +
    +
    +
    +
    +

    get('ship_to_address'); ?>

    +
    + getShippingAddress(), '
    '); ?> +
    +
    +
    + getOrderTotals() as $module) { + ?> +
    + + +
    + +
    +
    +
    +
    +
    + hasDefaultAddress()) { + ?> +

    get('billing_address_title'); ?>

    +
    + getBillingAddress(), '
    '); ?> +
    +
    +
    get('selected_billing_destination'); ?>
    +
    + 1) { + ?> +
    +

    get('address_book_entries_title'); ?>

    +
    get('select_another_billing_destination'); ?>
    + getListing(); + while ($Qaddresses->next()) { + echo ''; + if ($Qaddresses->valueInt('address_book_id') == $lC_ShoppingCart->getShippingAddress('id')) { + echo '' . "\n"; + } else { + echo '' . "\n"; + } + ?> + + + +
    valueProtected('firstname') . ' ' . $Qaddresses->valueProtected('lastname'); ?>
    valueProtected('firstname') . ' ' . $Qaddresses->valueProtected('lastname') . ', ', '', lC_Address::format($Qaddresses->toArray(), ', ')); ?>
    valueInt('address_book_id'), $lC_ShoppingCart->getBillingAddress('id'), 'id="address_' . $radio_buttons . '"', ''); ?>
    + +
    + +
    + + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +

    get('box_ordering_steps_confirmation'); ?>

    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_payment_template.php b/catalog/templates/core15/content/checkout/checkout_payment_template.php new file mode 100644 index 000000000..a72560f85 --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_payment_template.php @@ -0,0 +1,134 @@ +hasIframeParams()) { + $params = utility::nvp2arr($lC_Payment->getIframeParams()); + $fWidth = (isset($params['width']) && empty($params['width']) === false) ? $params['width'] : '550px'; + $fHeight = (isset($params['height']) && empty($params['height']) === false) ? $params['height'] : '550px'; + $fScroll = (isset($params['scroll']) && empty($params['scroll']) === false) ? $params['scroll'] : 'no'; + $fStyle = (isset($params['margin-left']) && empty($params['margin-left']) === false) ? 'style="margin-left:' . $params['margin-left'] . '"' : null; +} else { + $fWidth = '550px'; + $fHeight = '550px'; + $fScroll = 'no'; + $fStyle = null; +} +$secureUrl = ($lC_Payment->hasIframeURL()) ? substr($lC_Payment->getIframeURL(), 0, strpos($lC_Payment->getIframeURL(), '?')) : (($lC_Payment->hasRelayURL()) ? $lC_Payment->getRelayURL() : NULL); +$isIE = (isset($_SESSION['browserName']) && $_SESSION['browserName'] == 'msie') ? true : false; +if ($isIE && $lC_Payment->selected_module = 'lC_Payment_authorizenet_cc') { + $fWidth = '650px'; + $fHeight = '550px'; + $fScroll = 'yes'; + $fStyle = null; +} +?> + +
    +
    +

    get('text_checkout'); ?>

    +
    +
    +
    +

    get('box_ordering_steps_delivery'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_payment'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_secure_checkout'); ?>

    +
    +
    +
    +
    +
    + get('secure_payment_description_text'); ?> +
    + +
    + +
    +
    + get('text_amount_due'); ?> + format($lC_ShoppingCart->getTotal()); ?> +
    +
    +

    get('bill_to_address'); ?>

    +
    + getBillingAddress(), '
    '); ?> +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +

    + hasIframeURL()) { + $params = (isset($_SESSION['cartSync']['iFrameParams']) && empty($_SESSION['cartSync']['iFrameParams'] ) === false) ? $_SESSION['cartSync']['iFrameParams'] : NULL; + echo ''; + } else if ($lC_Payment->hasRelayURL()) { + echo '
    ' . lC_Checkout_Payment_template::rePost() . '
    ' . "\n"; + echo ''; + } else { + echo '[[FORM INSERT]]'; + } + ?> +
    +
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_shipping.php b/catalog/templates/core15/content/checkout/checkout_shipping.php new file mode 100644 index 000000000..cd4904778 --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_shipping.php @@ -0,0 +1,149 @@ + + +
    +
    +

    get('text_checkout'); ?>

    + size('checkout_shipping') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_shipping') . '
    ' . "\n"; + ?> +
    +
    +
    +
    +

    get('box_ordering_steps_delivery'); ?>

    +
    +
    +
    +
    +
    +

    get('ship_to_address'); ?>

    +
    + getShippingAddress(), '
    '); ?> +
    +
    + +
    +
    + +
    +
    +
    + getOrderTotals() as $module) { + ?> +
    + + +
    + +
    +
    +
    +
    + hasQuotes()) { + ?> +

    get('shipping_method_title'); ?>

    + numberOfQuotes() > 1) ? '
    ' . $lC_Language->get('choose_shipping_method') . '
    ' : '
    ' . $lC_Language->get('only_one_shipping_method_available') . '
    ' . "\n"; + + $radio_buttons = 0; + foreach ($lC_Shipping->getQuotes() as $quotes) { + ?> +

    + + + + getShippingMethod('id')) || $lC_Shipping->numberOfQuotes() == 1) { + echo '' . "\n"; + } else { + echo '' . "\n"; + } + ?> + + numberOfQuotes() > 1) || (sizeof($quotes['methods']) > 1) ) { + ?> + + + + + + + + +
    displayPrice($methods['cost'], $quotes['tax_class_id']); ?>getShippingMethod('id'), 'id="' . $quotes['id'] . '_' . $counter . '"',''); ?>displayPrice($methods['cost'], $quotes['tax_class_id']) . lc_draw_hidden_field('shipping_mod_sel', $quotes['id'] . '_' . $methods['id']); ?>
    + +
    +
    + + +
    + isLoggedOn() !== false) { + if (defined('MODULE_SERVICES_INSTALLED') && in_array('coupons', explode(';', MODULE_SERVICES_INSTALLED)) && + defined('SERVICE_COUPONS_DISPLAY_ON_CART_PAGE') && SERVICE_COUPONS_DISPLAY_ON_CART_PAGE == '1') { + ?> +
    +

    get('text_coupon_code_heading'); ?>

    +

    get('text_coupon_code_instructions'); ?>

    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    get('box_ordering_steps_payment'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_confirmation'); ?>

    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_shipping_address.php b/catalog/templates/core15/content/checkout/checkout_shipping_address.php new file mode 100644 index 000000000..becb4a956 --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_shipping_address.php @@ -0,0 +1,142 @@ + + +
    +
    +

    get('text_checkout'); ?>

    + size('checkout_shipping_address') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_shipping_address') . '
    ' . "\n"; + ?> + size('checkout_shipping_account') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_shipping_account') . '
    ' . "\n"; + ?> +
    +
    +
    +

    get('box_ordering_steps_delivery'); ?>

    +
    +
    +
    +
    +
    +

    get('ship_to_address'); ?>

    +
    + get('add_first_address'); ?> +
    +
    +
    + getOrderTotals() as $module) { + ?> +
    + + +
    + +
    +
    +
    +
    +
    + hasDefaultAddress()) { + ?> +

    get('shipping_address_title'); ?>

    +
    + getShippingAddress(), '
    '); ?> +
    +
    +
    get('selected_shipping_destination'); ?>
    +
    + 1) { + ?> +
    +

    get('address_book_entries_title'); ?>

    +
    get('select_another_shipping_destination'); ?>
    + getListing(); + while ($Qaddresses->next()) { + echo ''; + if ($Qaddresses->valueInt('address_book_id') == $lC_ShoppingCart->getShippingAddress('id') || lC_AddressBook::numberOfEntries() == 1) { + echo '' . "\n"; + } else { + echo '' . "\n"; + } + ?> + + + +
    valueProtected('firstname') . ' ' . $Qaddresses->valueProtected('lastname'); ?>
    valueProtected('firstname') . ' ' . $Qaddresses->valueProtected('lastname') . ', ', '', lC_Address::format($Qaddresses->toArray(), ', ')); ?>
    valueInt('address_book_id'), $lC_ShoppingCart->getShippingAddress('id'), 'id="address_' . $radio_buttons . '"', ''); ?>
    + +
    + +
    + +
    > +

    get('new_shipping_address_title'); ?>

    +

    get('new_shipping_address'); ?>

    +
    + modCheck(DIR_FS_TEMPLATE . 'modules/address_book_details.php')); + } else { + require($lC_Vqmod->modCheck('includes/modules/address_book_details.php')); + } + ?> +
    +
    + +
    +
    + + + + + + +
    +
    +
    +
    +
    +
    +
    +

    get('box_ordering_steps_payment'); ?>

    +
    +
    +
    +
    +

    get('box_ordering_steps_confirmation'); ?>

    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/checkout_success.php b/catalog/templates/core15/content/checkout/checkout_success.php new file mode 100644 index 000000000..caf25cf7b --- /dev/null +++ b/catalog/templates/core15/content/checkout/checkout_success.php @@ -0,0 +1,168 @@ +getID()); +?> + +
    +
    +

    get('text_checkout'); ?>

    + size('checkout_success') > 0 ) echo '
    ' . $lC_MessageStack->get('checkout_success') . '
    ' . "\n"; + ?> +
    +
    +
    +

    get('box_ordering_steps_complete'); ?>

    +
    +
    +

    <?php echo $lC_Language->get('success_heading'); ?>get('success_heading'); ?>

    +
    +
    + +
    +

    get('ship_to_address'); ?>

    +
    + getID()), '
    '); ?> +
    +
    +
    +

    get('shipping_method_heading'); ?>

    +

    + +

    +
    + +
    +

    get('bill_to_address'); ?>

    +
    + getID()), '
    '); ?> +
    +
    +
    +

    get('payment_method_heading'); ?>

    +

    +
    +
    +

    get('order_comment_title'); ?>

    +
    + get('order_comment_none'); ?> +
    +
    +
    +
    +

    + + get('checkout_order_number') . ' ' . $oID; ?> +

    +
    + + + + + ' . "\n" . + ' ' . "\n" . + ' ' . "\n"; + echo '' . "\n" . + '' . "\n"; + } + ?> +
    get('order_products_title'); ?>
    ' . $products['quantity'] . ' x ' . $products['name'] . '' . "\n"; + echo '
    ' . $lC_Language->get('listing_model_heading') . ': ' . $products['model'] . ''; + + if ( is_array($products['options']) && empty($products['options']) === false ) { + foreach ( $products['options'] as $key => $val) { + echo '
    - ' . $val['group_title'] . ': ' . $val['value_title'] . ''; + } + } + if ( lC_Success::isVariant($products['id']) === true ) { + foreach ( lC_Success::getVariants($products['id']) as $variant) { + echo '
    - ' . $val['group_title'] . ': ' . $val['value_title'] . ''; + } + } + echo '
    ' . $lC_Currencies->displayPrice($products['price'], $products['tax_class_id'], $products['quantity']) . '
    +
     
    +
    +
    + +
    + + +
    + +
    +
    +
    + getID()); + if (isset($products_array) && !empty($products_array)) { + echo $lC_Language->get('add_selection_to_product_notifications') . '
    '; + $products_displayed = array(); + for ($i=0, $n=sizeof($products_array); $i<$n; $i++) { + if (!in_array($products_array[$i]['id'], $products_displayed)) { + echo '
    ' . "\n"; + $products_displayed[] = $products_array[$i]['id']; + } + } + } else { + echo sprintf($lC_Language->get('view_order_history'), lc_href_link(FILENAME_ACCOUNT, null, 'SSL'), lc_href_link(FILENAME_ACCOUNT, 'orders', 'SSL')) . '

    ' . sprintf($lC_Language->get('contact_store_owner'), lc_href_link(FILENAME_INFO, 'contact')); + } + ?> +
    +
    +
    + +
    + +
    + + modCheck(DIR_FS_TEMPLATE . 'modules/downloads.php')); + } else { + require($lC_Vqmod->modCheck('includes/modules/downloads.php')); + } + ?> +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/checkout/shopping_cart.php b/catalog/templates/core15/content/checkout/shopping_cart.php new file mode 100644 index 000000000..d669b8b79 --- /dev/null +++ b/catalog/templates/core15/content/checkout/shopping_cart.php @@ -0,0 +1,186 @@ + + +
    +
    +

    getPageTitle(); ?>

    + size('shopping_cart') > 0 ) echo '
    ' . $lC_MessageStack->get('shopping_cart') . '
    ' . "\n"; + if ($lC_ShoppingCart->hasContents()) { + ?> +
    + + + + + + + + + + + + + getProducts() as $products) { + ?> + + + + + + + + + + + + + + + + + + +
    get('listing_products_heading'); ?>get('text_unit_price'); ?>get('text_quantity_abbr'); ?>get('text_sub_total'); ?>
    + show($products['image'], $products['name'], null, 'mini')); + ?> + + ' . lc_link_object(lc_href_link(FILENAME_PRODUCTS, $products['keyword']), strtolower($lC_Language->get('button_edit'))) . '' . "\n"; + echo '

    ' . lc_link_object(lc_href_link(FILENAME_PRODUCTS, $products['keyword']), $products['name']) . '

    ' . "\n"; + echo '
    ' . "\n"; + if (!empty($products['model'])) { + echo '' . $lC_Language->get('listing_model_heading') . ': ' . $products['model'] . '' . "\n"; + } + if ( (STOCK_CHECK == '1') && ($lC_ShoppingCart->isInStock($products['item_id']) === false) ) { + echo '' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '' . "\n"; + } + if ( $lC_ShoppingCart->isVariant($products['item_id']) ) { + foreach ( $lC_ShoppingCart->getVariant($products['item_id']) as $variant) { + echo '
    - ' . $variant['group_title'] . ': ' . $variant['value_title'] . "\n"; + } + } + if ( $lC_ShoppingCart->hasSimpleOptions($products['item_id']) ) { + foreach ( $lC_ShoppingCart->getSimpleOptions($products['item_id']) as $option) { + echo '
    - ' . $option['group_title'] . ': ' . $option['value_title'] . '' . "\n"; + } + } + echo '
    ' . "\n"; + ?> +
    displayPrice($products['price'], $products['tax_class_id']); ?>
    displayPrice($products['price'], $products['tax_class_id'], $products['quantity']); ?>
    + hasStock() === false) ) { + if (STOCK_ALLOW_CHECKOUT == '1') { + echo '

    ' . sprintf($lC_Language->get('products_out_of_stock_checkout_possible'), STOCK_MARK_PRODUCT_OUT_OF_STOCK) . '

    '; + } else { + echo '

    ' . sprintf($lC_Language->get('products_out_of_stock_checkout_not_possible'), STOCK_MARK_PRODUCT_OUT_OF_STOCK) . '

    '; + } + } + ?> +
    +
    +
    +
    + getOrderTotals() as $module) { + ?> +
    + + +
    + +
    +
    + +
    +
    +
    + -OR- +
    +
    + +
    +
    + +
    +
    + + +
    +
    + isLoggedOn() !== false) { + if (defined('MODULE_SERVICES_INSTALLED') && in_array('coupons', explode(';', MODULE_SERVICES_INSTALLED)) && + defined('SERVICE_COUPONS_DISPLAY_ON_CART_PAGE') && SERVICE_COUPONS_DISPLAY_ON_CART_PAGE == '1') { + ?> +
    +
    +
    +
    +

    get('text_coupon_code_heading'); ?>

    +

    get('text_coupon_code_instructions'); ?>

    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    get('shopping_cart_empty'); ?>

    +
    +
    +
    +
    + +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/index/category_listing.php b/catalog/templates/core15/content/index/category_listing.php new file mode 100644 index 000000000..3d063d83f --- /dev/null +++ b/catalog/templates/core15/content/index/category_listing.php @@ -0,0 +1,64 @@ + + +
    +
    +

    getPageTitle(); ?>

    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/index/category_not_found.php b/catalog/templates/core15/content/index/category_not_found.php new file mode 100644 index 000000000..a6909de42 --- /dev/null +++ b/catalog/templates/core15/content/index/category_not_found.php @@ -0,0 +1,22 @@ + + +
    +
    +

    get('text_not_found'); ?>

    +
    get('text_category_not_found'); ?>
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/index/index.php b/catalog/templates/core15/content/index/index.php new file mode 100644 index 000000000..f19ce15ea --- /dev/null +++ b/catalog/templates/core15/content/index/index.php @@ -0,0 +1,18 @@ + + +
    +
    + +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/index/product_listing.php b/catalog/templates/core15/content/index/product_listing.php new file mode 100644 index 000000000..da87c91aa --- /dev/null +++ b/catalog/templates/core15/content/index/product_listing.php @@ -0,0 +1,133 @@ + + +
    +

    getPageTitle(); ?>

    + +
    + ' . lC_Template_output::getCategoryDescription() . '
    '; + } + ?> +
    + +
    + numberOfRows() > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) { + ?> + +
    +
    getBatchTotalPages($lC_Language->get('result_set_number_of_products')); ?>
    +
    +
      + getBatchPageLinks('page', lc_get_all_get_params(array('page', 'info', 'x', 'y')), false); ?> +
    +
    +
    + + + +
    + numberOfRows() > 0) { + if (file_exists(DIR_FS_TEMPLATE . 'modules/product_listing.php')) { + require($lC_Vqmod->modCheck(DIR_FS_TEMPLATE . 'modules/product_listing.php')); + } else { + require($lC_Vqmod->modCheck('includes/modules/product_listing.php')); + } + } else { + echo '
    ' . $lC_Language->get('no_products_found') . '
    ' . "\n"; + } + ?> +
    + + numberOfRows() > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3')) ) { + ?> + +
    +
    getBatchTotalPages($lC_Language->get('result_set_number_of_products')); ?>
    +
    +
      + getBatchPageLinks('page', lc_get_all_get_params(array('page', 'info', 'x', 'y')), false); ?> +
    +
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/info/cookie.php b/catalog/templates/core15/content/info/cookie.php new file mode 100644 index 000000000..40870c955 --- /dev/null +++ b/catalog/templates/core15/content/info/cookie.php @@ -0,0 +1,30 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    +
    +
    get('cookie_usage_box_heading'); ?>
    +
    get('cookie_usage_box_contents'); ?>
    +
    +
    +
    +
    get('text_information_cookie_usage'); ?>
    +
    +
    +
    +
    +
    +
    + diff --git a/catalog/templates/core15/content/info/info.php b/catalog/templates/core15/content/info/info.php new file mode 100644 index 000000000..ea962d9f2 --- /dev/null +++ b/catalog/templates/core15/content/info/info.php @@ -0,0 +1,30 @@ + + +
    +
    +

    getPageTitle(); ?>

    + +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/info/info_contact.php b/catalog/templates/core15/content/info/info_contact.php new file mode 100644 index 000000000..07eedd5d8 --- /dev/null +++ b/catalog/templates/core15/content/info/info_contact.php @@ -0,0 +1,50 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    +
    +
    +
    +
    + +
    + getBranding('support_email') != '') { + echo '
    ' . $lC_Language->get('contact_text_support_email') . '
    ' . $lC_Template->getBranding('support_email') . ''; + } + if ($lC_Template->getBranding('support_email') != '') { + echo '
    ' . $lC_Language->get('contact_text_support_phone') . '
    ' . $lC_Template->getBranding('support_phone') . ''; + } + ?> +
    +
    +
    + size('contact') > 0 ) echo '
    ' . $lC_MessageStack->get('contact') . '
    ' . "\n"; + if (isset($_GET['success']) && $_GET['success'] != NULL) echo '
    ' . preg_replace('/[^a-zA-Z0-9]\'\.\,/', '', $_GET['success']) . '
    ' . "\n"; + ?> +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/info/info_sitemap.php b/catalog/templates/core15/content/info/info_sitemap.php new file mode 100644 index 000000000..2419e459c --- /dev/null +++ b/catalog/templates/core15/content/info/info_sitemap.php @@ -0,0 +1,55 @@ +reset(); +$lC_CategoryTree->setShowCategoryProductCount(false); +$lC_CategoryTree->setParentGroupStringTop('
      ', '
    '); +$lC_CategoryTree->setParentGroupString('
      ', '
    '); +$lC_CategoryTree->setChildStringWithChildren('
  • ', ''); +$lC_CategoryTree->setUseAria(true); +?> + +
    +
    +

    getPageTitle(); ?>

    +
    +
    + getTree(); ?> +
    +
    +
    +
    +
      +
    • get('sitemap_account')); ?> +
        +
      • get('sitemap_account_edit')); ?>
      • +
      • get('sitemap_address_book')); ?>
      • +
      • get('sitemap_account_history')); ?>
      • +
      • get('sitemap_account_notifications')); ?>
      • +
      +
    • +
    • get('sitemap_shopping_cart')); ?>
    • +
    • get('sitemap_checkout_shipping')); ?>
    • +
    • get('sitemap_advanced_search')); ?>
    • +
    • get('sitemap_products_new')); ?>
    • +
    • get('sitemap_specials')); ?>
    • +
    • get('sitemap_reviews')); ?>
    • +
    • get('breadcrumb_cookie_usage')); ?>
    • +
    • get('breadcrumb_ssl_check')); ?>
    • +
    • get('box_information_contact')); ?>
    • +
    +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/info/ssl_check.php b/catalog/templates/core15/content/info/ssl_check.php new file mode 100644 index 000000000..904d9dc51 --- /dev/null +++ b/catalog/templates/core15/content/info/ssl_check.php @@ -0,0 +1,30 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    +
    +
    get('ssl_check_box_heading'); ?>
    +
    get('ssl_check_box_contents'); ?>
    +
    +
    +
    +
    get('text_information_ssl_check'); ?>
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/featured_products.php b/catalog/templates/core15/content/products/featured_products.php new file mode 100644 index 000000000..75b0de838 --- /dev/null +++ b/catalog/templates/core15/content/products/featured_products.php @@ -0,0 +1,71 @@ + + +
    +

    getPageTitle(); ?>

    + getListingOutput(); ?> +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/images.php b/catalog/templates/core15/content/products/images.php new file mode 100644 index 000000000..dc46b3e7b --- /dev/null +++ b/catalog/templates/core15/content/products/images.php @@ -0,0 +1,47 @@ +show($lC_Product->getImage(), $lC_Product->getTitle(), 'id="productImageLarge"', 'large'); +?> + +
    +
    + numberOfImages() > 1) { + ?> +
    + getImages() as $images) { + if ( isset($_GET['image']) && ($_GET['image'] == $images['id']) ) { + $large_image = $lC_Image->show($images['image'], $lC_Product->getTitle(), 'id="productImageLarge"', 'large'); + } + echo ' + ' . lc_link_object(lc_href_link(FILENAME_PRODUCTS, 'images&' . $lC_Product->getKeyword() . '&image=' . $images['id']), $lC_Image->show($images['image'], $lC_Product->getTitle(), 'height="' . $lC_Image->getHeight($lC_Image->getCode(DEFAULT_IMAGE_GROUP_ID)) . '" class="content-products-images-src img-responsive" style="max-width: ' . $lC_Image->getWidth($lC_Image->getCode(DEFAULT_IMAGE_GROUP_ID)) . 'px;"'), 'onclick="loadImage(\'' . $lC_Image->getAddress($images['image'], 'large') . '\'); return false;"') . + ''; + } + ?> +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/info.php b/catalog/templates/core15/content/products/info.php new file mode 100644 index 000000000..ce3d42f9e --- /dev/null +++ b/catalog/templates/core15/content/products/info.php @@ -0,0 +1,199 @@ + + +
    +
    +
    + <?php echo $lC_Product->getTitle(); ?> +
    + +

    get('enlarge_image'); ?>

    + + + getImages()) > 1) { + $_product_additionalimages = $lC_Product->getAdditionalImagesHtml(); + echo '
    ' . "\n"; + echo $_product_additionalimages['model']. "\n"; + } + ?> +
    + hasSubProducts($lC_Product->getID()) === false) { + ?> +
    + +
    + isInStock($lC_Product->getID()) === false) ) ? '' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '' : $lC_Product->getAttribute('shipping_availability'); + if ($lC_Product->getAttribute('manufacturers') != null || $lC_Product->hasModel()) { + echo '
    ' . "\n" . + (($lC_Product->getAttribute('manufacturers') != null) ? '' . $lC_Product->getAttribute('manufacturers') . ':' . "\n" : null) . + ' ' . $lC_Product->getModel() . '' . "\n" . + '
    ' . "\n"; + } + ?> +

    getPageTitle(); ?>

    +
    +

    getDescription() != null) ? $lC_Product->getDescription() : $lC_Language->get('no_description_available'); ?>

    + hasSubProducts($lC_Product->getID()) ) { + ?> +
    + parseSubProducts($lC_Product->getSubProducts($lC_Product->getID())); + ?> +
    + +
    + hasSubProducts($lC_Product->getID()) === false) { + ?> +
    + getPriceFormated(true); ?> + +
    + + +
    + + getData('reviews_average_rating') . '.png', sprintf($lC_Language->get('rating_of_5_stars'), $lC_Product->getData('reviews_average_rating'))); ?> + getID()); + if ($lC_Reviews->getTotal($lC_Product->getID()) > 0) { + echo '(' . $lC_Language->get('more_information') . ')' . "\n"; + } else { + echo '(' . $lC_Language->get('text_write_review_first') . ')' . "\n"; + } + ?> +
    + hasSimpleOptions() ) { + ?> +
    + getSimpleOptions() as $group_id => $value ) { + if (is_array($value) && !empty($value)) { + foreach($value as $key => $data) { + if (isset($data['module']) && $data['module'] != '') { + $module = $data['module']; + } + } + } + echo lC_Variants::parseSimpleOptions($module, $value); + } + ?> +
    + hasVariants() ) { + ?> +
    + getVariants() as $group_id => $value ) { + echo lC_Variants::parse($value['module'], $value); + } + echo lC_Variants::defineJavascript($lC_Product->getVariants(false)); + ?> +
    + +
    +
    + hasSubProducts($lC_Product->getID()) === false) { + ?> +
    +
    +
    +
    + + +
    +
    +
    +

    +
    +
    + hasSubProducts($lC_Product->getID()) === false) { + ?> +
    + +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/info_not_found.php b/catalog/templates/core15/content/products/info_not_found.php new file mode 100644 index 000000000..eeb550d31 --- /dev/null +++ b/catalog/templates/core15/content/products/info_not_found.php @@ -0,0 +1,22 @@ + + +
    +
    +

    getPageTitle(); ?>

    +

    get('product_not_found'); ?>

    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/new.php b/catalog/templates/core15/content/products/new.php new file mode 100644 index 000000000..d37848989 --- /dev/null +++ b/catalog/templates/core15/content/products/new.php @@ -0,0 +1,135 @@ + + +
    +

    getPageTitle(); ?>

    + +
    + ' . lC_Template_output::getCategoryDescription() . '
    '; + } + ?> +
    + +
    + setSortBy('date_added', '-'); + $Qlisting = $lC_Products->execute(MODULE_CONTENT_NEW_PRODUCTS_MAX_DISPLAY); + + if (PRODUCT_LIST_FILTER == '1') echo lC_Template_output::getManufacturerFilter(); + + if ( ($Qlisting->numberOfRows() > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) { + ?> + +
    +
    getBatchTotalPages($lC_Language->get('result_set_number_of_products')); ?>
    +
    +
      + getBatchPageLinks('page', lc_get_all_get_params(array('page', 'info', 'x', 'y')), false); ?> +
    +
    +
    + + + +
    + numberOfRows() > 0) { + if (file_exists(DIR_FS_TEMPLATE . 'modules/product_listing.php')) { + require($lC_Vqmod->modCheck(DIR_FS_TEMPLATE . 'modules/product_listing.php')); + } else { + require($lC_Vqmod->modCheck('includes/modules/product_listing.php')); + } + } else { + echo '
    ' . $lC_Language->get('no_products_found') . '
    ' . "\n"; + } + ?> +
    + + numberOfRows() > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3')) ) { + ?> + +
    +
    getBatchTotalPages($lC_Language->get('result_set_number_of_products')); ?>
    +
    +
      + getBatchPageLinks('page', lc_get_all_get_params(array('page', 'info', 'x', 'y')), false); ?> +
    +
    +
    + + +
    + + + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/product_reviews.php b/catalog/templates/core15/content/products/product_reviews.php new file mode 100644 index 000000000..d63942b3d --- /dev/null +++ b/catalog/templates/core15/content/products/product_reviews.php @@ -0,0 +1,68 @@ + + +
    +
    +

    get('reviews_heading'); ?>

    +
    +
    +
    + getKeyword()), $lC_Image->show($lC_Product->getImage(), $lC_Product->getTitle(), 'class="content-product-reviews-image-src"', 'small')); ?> +
    +

    + getKeyword()), $lC_Product->getTitle()); ?> +

    +
    getDescription()) > 60 ) ? substr(lc_clean_html($lC_Product->getDescription()), 0, 57) . '...' : lc_clean_html($lC_Product->getDescription()); ?>
    +
    +
    +

    getPriceFormated(); ?>

    +
    +
    + +
    +
    +
    +
    +
    +
    + size('reviews') > 0 ) echo '
    ' . $lC_MessageStack->get('reviews') . '
    ' . "\n"; + ?> + +
    +

    getPageTitle(); ?>

    + getData('reviews_average_rating') > 0) { + ?> +
    get('average_rating') . ' ' . lc_image(DIR_WS_TEMPLATE_IMAGES . 'stars_' . $lC_Product->getData('reviews_average_rating') . '.png', sprintf($lC_Language->get('rating_of_5_stars'), $lC_Product->getData('reviews_average_rating'))); ?>
    + getID()); ?> + +
    +
    +
    +
    +
    +
    + is_enabled === true) { + ?> + + + +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/reviews.php b/catalog/templates/core15/content/products/reviews.php new file mode 100644 index 000000000..73b683451 --- /dev/null +++ b/catalog/templates/core15/content/products/reviews.php @@ -0,0 +1,22 @@ + + +
    +
    +

    getPageTitle(); ?>

    + +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/reviews_info.php b/catalog/templates/core15/content/products/reviews_info.php new file mode 100644 index 000000000..0f2e123e5 --- /dev/null +++ b/catalog/templates/core15/content/products/reviews_info.php @@ -0,0 +1,69 @@ +getModule()]); +?> + +
    +
    +

    get('reviews_heading'); ?>

    +
    +
    +
    + getKeyword()), $lC_Image->show($lC_Product->getImage(), $lC_Product->getTitle(), 'class="img-responsive content-product-reviews-image-src"', 'small')); ?> +
    +

    + getKeyword()), $lC_Product->getTitle()); ?> +

    +
    getDescription()) > 60 ) ? substr(lc_clean_html($lC_Product->getDescription()), 0, 57) . '...' : lc_clean_html($lC_Product->getDescription()); ?>
    +
    +
    +

    getPriceFormated(); ?>

    +
    +
    + +
    +
    +
    +
    +
    +
    + size('reviews') > 0 ) echo '
    ' . $lC_MessageStack->get('reviews') . '
    ' . "\n"; + ?> + +
    +

    getPageTitle(); ?>

    + getData('reviews_average_rating') > 0) { + ?> +
    valueInt('reviews_rating') . '.png', sprintf($lC_Language->get('rating_of_5_stars'), $Qreviews->valueInt('reviews_rating'))) . ' ' . sprintf($lC_Language->get('reviewed_by'), $Qreviews->valueProtected('customers_name')) . '; ' . lC_DateTime::getLong($Qreviews->value('date_added')); ?>
    +
    valueProtected('reviews_text'), 60, '­')); ?>
    + +
    +
    +
    +
    +
    +
    + is_enabled === true) { + ?> + + + +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/reviews_new.php b/catalog/templates/core15/content/products/reviews_new.php new file mode 100644 index 000000000..bc0eef2a4 --- /dev/null +++ b/catalog/templates/core15/content/products/reviews_new.php @@ -0,0 +1,55 @@ + + +
    +
    +

    get('button_write_review');?>

    +
    +
    +
    + getKeyword()), $lC_Image->show($lC_Product->getImage(), $lC_Product->getTitle(), 'class="content-reviews-new-image-src"', 'small')); ?> +
    +

    + getKeyword()), $lC_Product->getTitle()); ?> +

    +

    getDescription()) > 60 ) ? substr(lc_clean_html($lC_Product->getDescription()), 0, 57) . '...' : lc_clean_html($lC_Product->getDescription()); ?>

    +
    +
    +

    getPriceFormated(); ?>

    +
    +
    + +
    +
    +
    +
    +
    +
    + size('reviews') > 0 ) echo '
    ' . $lC_MessageStack->get('reviews') . '
    ' . "\n"; + //if (isset($_GET['contact']) && $_GET['contact'] == 'success') echo '
    ' . $lC_Language->get('contact_email_sent_successfully') . '
    ' . "\n"; + ?> +
    +
    +
    +
    +
    get('review_lowest_rating_title') . '' . lc_draw_radio_field('rating', array('1', '2', '3', '4', '5'), '3', null, null) . '' . $lC_Language->get('review_highest_rating_title'); ?>
    +
    +
    +
    +
    +
    + + +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/reviews_not_found.php b/catalog/templates/core15/content/products/reviews_not_found.php new file mode 100644 index 000000000..f2ebd164d --- /dev/null +++ b/catalog/templates/core15/content/products/reviews_not_found.php @@ -0,0 +1,22 @@ + + +
    +
    +

    getPageTitle(); ?>

    +

    get('no_reviews_available'); ?>

    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/specials.php b/catalog/templates/core15/content/products/specials.php new file mode 100644 index 000000000..617def079 --- /dev/null +++ b/catalog/templates/core15/content/products/specials.php @@ -0,0 +1,72 @@ + + +
    +
    +

    getPageTitle(); ?>

    + getListingOutput(); ?> +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/products/tell_a_friend.php b/catalog/templates/core15/content/products/tell_a_friend.php new file mode 100644 index 000000000..9a90898bc --- /dev/null +++ b/catalog/templates/core15/content/products/tell_a_friend.php @@ -0,0 +1,59 @@ + + +
    +
    +

    get('products_tell_a_friend_title');?>

    +
    +
    +
    + getKeyword()), $lC_Image->show($lC_Product->getImage(), $lC_Product->getTitle(), 'class="img-responsive content-tell-a-friend-image-src"', 'small')); ?> +
    +

    + getKeyword()), $lC_Product->getTitle()); ?> +

    +

    getDescription()) > 60 ) ? substr(lc_clean_html($lC_Product->getDescription()), 0, 57) . '...' : lc_clean_html($lC_Product->getDescription()); ?>

    +
    +
    +

    getPriceFormated(); ?>

    +
    +
    + +
    +
    +
    +
    +
    +
    + size('tell_a_friend') > 0 ) echo '
    ' . $lC_MessageStack->get('tell_a_friend') . '
    ' . "\n"; + if (isset($_GET['success']) && $_GET['success'] != NULL) echo '
    ' . preg_replace('/[^a-zA-Z0-9]\'\.\,/', '', $_GET['success']) . '
    ' . "\n"; + ?> +
    +

    get('customer_details_title'); ?>

    +
    +
    +

    get('friend_details_title'); ?>

    +
    +
    +

    get('tell_a_friend_message'); ?>

    +
    +
    +
    +
    +
    +
    + + +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/search/help.php b/catalog/templates/core15/content/search/help.php new file mode 100644 index 000000000..dbd9f0d74 --- /dev/null +++ b/catalog/templates/core15/content/search/help.php @@ -0,0 +1,22 @@ + + +
    +
    +

    getPageTitle(); ?>

    +
    get('search_help'); ?>
    +
    + +
    +
    +
    + \ No newline at end of file diff --git a/catalog/templates/core15/content/search/results.php b/catalog/templates/core15/content/search/results.php new file mode 100644 index 000000000..d67bf87e2 --- /dev/null +++ b/catalog/templates/core15/content/search/results.php @@ -0,0 +1,84 @@ + + +
    +
    +

    getPageTitle(); ?>

    + modCheck(DIR_FS_TEMPLATE . 'modules/product_listing.php')); + } else { + require($lC_Vqmod->modCheck('includes/modules/product_listing.php')); + } + ?> +
    +
    +
    + +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/content/search/search.php b/catalog/templates/core15/content/search/search.php new file mode 100644 index 000000000..8430d9128 --- /dev/null +++ b/catalog/templates/core15/content/search/search.php @@ -0,0 +1,75 @@ + + +
    + +
    +
    + + \ No newline at end of file diff --git a/catalog/templates/core15/css/bootstrap-datepicker.css b/catalog/templates/core15/css/bootstrap-datepicker.css new file mode 100644 index 000000000..b7065b7d5 --- /dev/null +++ b/catalog/templates/core15/css/bootstrap-datepicker.css @@ -0,0 +1,182 @@ +/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.datepicker { + top: 0; + left: 0; + padding: 4px; + margin-top: 1px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + /*.dow { + border-top: 1px solid #ddd !important; + }*/ + +} +.datepicker:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 6px; +} +.datepicker:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 7px; +} +.datepicker > div { + display: none; +} +.datepicker table { + width: 100%; + margin: 0; +} +.datepicker td, +.datepicker th { + text-align: center; + width: 20px; + height: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.datepicker td.day:hover { + background: #eeeeee; + cursor: pointer; +} +.datepicker td.day.disabled { + color: #eeeeee; +} +.datepicker td.old, +.datepicker td.new { + color: #999999; +} +.datepicker td.active, +.datepicker td.active:hover { + color: #ffffff; + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker td.active:hover, +.datepicker td.active:hover:hover, +.datepicker td.active:focus, +.datepicker td.active:hover:focus, +.datepicker td.active:active, +.datepicker td.active:hover:active, +.datepicker td.active.active, +.datepicker td.active:hover.active, +.datepicker td.active.disabled, +.datepicker td.active:hover.disabled, +.datepicker td.active[disabled], +.datepicker td.active:hover[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.datepicker td.active:active, +.datepicker td.active:hover:active, +.datepicker td.active.active, +.datepicker td.active:hover.active { + background-color: #003399 \9; +} +.datepicker td span { + display: block; + width: 47px; + height: 54px; + line-height: 54px; + float: left; + margin: 2px; + cursor: pointer; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.datepicker td span:hover { + background: #eeeeee; +} +.datepicker td span.active { + color: #ffffff; + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker td span.active:hover, +.datepicker td span.active:focus, +.datepicker td span.active:active, +.datepicker td span.active.active, +.datepicker td span.active.disabled, +.datepicker td span.active[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.datepicker td span.active:active, +.datepicker td span.active.active { + background-color: #003399 \9; +} +.datepicker td span.old { + color: #999999; +} +.datepicker th.switch { + width: 145px; +} +.datepicker th.next, +.datepicker th.prev { + font-size: 21px; +} +.datepicker thead tr:first-child th { + cursor: pointer; +} +.datepicker thead tr:first-child th:hover { + background: #eeeeee; +} +.input-append.date .add-on i, +.input-prepend.date .add-on i { + display: block; + cursor: pointer; + width: 16px; + height: 16px; +} \ No newline at end of file diff --git a/catalog/templates/core15/css/bootstrap.css b/catalog/templates/core15/css/bootstrap.css new file mode 100644 index 000000000..463a4b2cd --- /dev/null +++ b/catalog/templates/core15/css/bootstrap.css @@ -0,0 +1,7063 @@ +/*! + * Bootstrap v3.0.1 by @fat and @mdo + * Copyright 2013 Twitter, Inc. + * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a { + background: transparent; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +ul.pr_gallery { padding-left:5px;margin-top:10px;} +ul.pr_gallery li{ list-style:none; display: inline; margin-right:7px;} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small, +.small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #428bca; +} + +.text-primary:hover { + color: #3071a9; +} + +.text-warning { + color: #c09853; +} + +.text-warning:hover { + color: #a47e3c; +} + +.text-danger { + color: #b94a48; +} + +.text-danger:hover { + color: #953b39; +} + +.text-success { + color: #468847; +} + +.text-success:hover { + color: #356635; +} + +.text-info { + color: #3a87ad; +} + +.text-info:hover { + color: #2d6987; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h1 small, +h2 small, +h3 small, +h1 .small, +h2 .small, +h3 .small { + font-size: 65%; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h4 small, +h5 small, +h6 small, +h4 .small, +h5 .small, +h6 .small { + font-size: 75%; +} + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +.list-inline > li:first-child { + padding-left: 0; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small, +blockquote.pull-right .small { + text-align: right; +} + +blockquote.pull-right small:before, +blockquote.pull-right .small:before { + content: ''; +} + +blockquote.pull-right small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} + +blockquote:before, +blockquote:after { + content: ""; +} + +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +kbd, +pre, +samp { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11 { + float: left; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-11 { + width: 91.66666666666666%; +} + +.col-xs-10 { + width: 83.33333333333334%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-8 { + width: 66.66666666666666%; +} + +.col-xs-7 { + width: 58.333333333333336%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-5 { + width: 41.66666666666667%; +} + +.col-xs-4 { + width: 33.33333333333333%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-2 { + width: 16.666666666666664%; +} + +.col-xs-1 { + width: 8.333333333333332%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-pull-11 { + right: 91.66666666666666%; +} + +.col-xs-pull-10 { + right: 83.33333333333334%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-8 { + right: 66.66666666666666%; +} + +.col-xs-pull-7 { + right: 58.333333333333336%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-5 { + right: 41.66666666666667%; +} + +.col-xs-pull-4 { + right: 33.33333333333333%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-2 { + right: 16.666666666666664%; +} + +.col-xs-pull-1 { + right: 8.333333333333332%; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-push-11 { + left: 91.66666666666666%; +} + +.col-xs-push-10 { + left: 83.33333333333334%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-8 { + left: 66.66666666666666%; +} + +.col-xs-push-7 { + left: 58.333333333333336%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-5 { + left: 41.66666666666667%; +} + +.col-xs-push-4 { + left: 33.33333333333333%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-2 { + left: 16.666666666666664%; +} + +.col-xs-push-1 { + left: 8.333333333333332%; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +.col-xs-offset-11 { + margin-left: 91.66666666666666%; +} + +.col-xs-offset-10 { + margin-left: 83.33333333333334%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-8 { + margin-left: 66.66666666666666%; +} + +.col-xs-offset-7 { + margin-left: 58.333333333333336%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-5 { + margin-left: 41.66666666666667%; +} + +.col-xs-offset-4 { + margin-left: 33.33333333333333%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-2 { + margin-left: 16.666666666666664%; +} + +.col-xs-offset-1 { + margin-left: 8.333333333333332%; +} + +@media (min-width: 768px) { + .container { + width: 750px; + } + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666666666666%; + } + .col-sm-pull-10 { + right: 83.33333333333334%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666666666666%; + } + .col-sm-pull-7 { + right: 58.333333333333336%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666666666667%; + } + .col-sm-pull-4 { + right: 33.33333333333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.666666666666664%; + } + .col-sm-pull-1 { + right: 8.333333333333332%; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666666666666%; + } + .col-sm-push-10 { + left: 83.33333333333334%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666666666666%; + } + .col-sm-push-7 { + left: 58.333333333333336%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666666666667%; + } + .col-sm-push-4 { + left: 33.33333333333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.666666666666664%; + } + .col-sm-push-1 { + left: 8.333333333333332%; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666666666666%; + } + .col-sm-offset-10 { + margin-left: 83.33333333333334%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666666666666%; + } + .col-sm-offset-7 { + margin-left: 58.333333333333336%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666666666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.666666666666664%; + } + .col-sm-offset-1 { + margin-left: 8.333333333333332%; + } +} + +@media (min-width: 992px) { + .container { + width: 970px; + } + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666666666666%; + } + .col-md-10 { + width: 83.33333333333334%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666666666666%; + } + .col-md-7 { + width: 58.333333333333336%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666666666667%; + } + .col-md-4 { + width: 33.33333333333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.666666666666664%; + } + .col-md-1 { + width: 8.333333333333332%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666666666666%; + } + .col-md-pull-10 { + right: 83.33333333333334%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666666666666%; + } + .col-md-pull-7 { + right: 58.333333333333336%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666666666667%; + } + .col-md-pull-4 { + right: 33.33333333333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.666666666666664%; + } + .col-md-pull-1 { + right: 8.333333333333332%; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666666666666%; + } + .col-md-push-10 { + left: 83.33333333333334%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666666666666%; + } + .col-md-push-7 { + left: 58.333333333333336%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666666666667%; + } + .col-md-push-4 { + left: 33.33333333333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.666666666666664%; + } + .col-md-push-1 { + left: 8.333333333333332%; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666666666666%; + } + .col-md-offset-10 { + margin-left: 83.33333333333334%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666666666666%; + } + .col-md-offset-7 { + margin-left: 58.333333333333336%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666666666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.666666666666664%; + } + .col-md-offset-1 { + margin-left: 8.333333333333332%; + } +} + +@media (min-width: 1200px) { + .container { + width: 1170px; + } + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666666666666%; + } + .col-lg-pull-10 { + right: 83.33333333333334%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666666666666%; + } + .col-lg-pull-7 { + right: 58.333333333333336%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666666666667%; + } + .col-lg-pull-4 { + right: 33.33333333333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.666666666666664%; + } + .col-lg-pull-1 { + right: 8.333333333333332%; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666666666666%; + } + .col-lg-push-10 { + left: 83.33333333333334%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666666666666%; + } + .col-lg-push-7 { + left: 58.333333333333336%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666666666667%; + } + .col-lg-push-4 { + left: 33.33333333333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.666666666666664%; + } + .col-lg-push-1 { + left: 8.333333333333332%; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666666666666%; + } + .col-lg-offset-10 { + margin-left: 83.33333333333334%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666666666666%; + } + .col-lg-offset-7 { + margin-left: 58.333333333333336%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666666666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.666666666666664%; + } + .col-lg-offset-1 { + margin-left: 8.333333333333332%; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} + +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} + +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + display: table-column; + float: none; +} + +table td[class*="col-"], +table th[class*="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} + +@media (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + -ms-overflow-style: -ms-autohiding-scrollbar; + -webkit-overflow-scrolling: touch; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +.radio[disabled], +.radio-inline[disabled], +.checkbox[disabled], +.checkbox-inline[disabled], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"], +fieldset[disabled] .radio, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm { + height: auto; +} + +.input-lg { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 45px; + line-height: 45px; +} + +textarea.input-lg { + height: auto; +} + +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #c09853; +} + +.has-warning .form-control { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #b94a48; +} + +.has-error .form-control { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #468847; +} + +.has-success .form-control { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.form-control-static { + margin-bottom: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +.form-horizontal .control-label, +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-control-static { + padding-top: 7px; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #333333; + background-color: #ebebeb; + border-color: #adadad; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3276b1; + border-color: #285e8e; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ed9c28; + border-color: #d58512; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #d2322d; + border-color: #ac2925; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #47a447; + border-color: #398439; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #39b3d7; + border-color: #269abc; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #999999; + text-decoration: none; +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs { + padding: 1px 5px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; + -moz-osx-font-smoothing: grayscale; +} + +.glyphicon:empty { + width: 1em; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-lock:before { + content: "\e033"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-bookmark:before { + content: "\e044"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-camera:before { + content: "\e046"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-fire:before { + content: "\e104"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-calendar:before { + content: "\e109"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-bell:before { + content: "\e123"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-wrench:before { + content: "\e136"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-briefcase:before { + content: "\e139"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-paperclip:before { + content: "\e142"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-pushpin:before { + content: "\e146"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } +} + +.btn-default .caret { + border-top-color: #333333; +} + +.btn-primary .caret, +.btn-success .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret { + border-top-color: #fff; +} + +.dropup .btn-default .caret { + border-bottom-color: #333333; +} + +.dropup .btn-primary .caret, +.dropup .btn-success .caret, +.dropup .btn-warning .caret, +.dropup .btn-danger .caret, +.dropup .btn-info .caret { + border-bottom-color: #fff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: none; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, +.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 45px; + line-height: 45px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn:first-child > .btn { + margin-right: -1px; +} + +.input-group-btn:last-child > .btn { + margin-left: -1px; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} + +.nav .open > a .caret, +.nav .open > a:hover .caret, +.nav .open > a:focus .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + float: none; +} + +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} + +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} + +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 4px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} + +.nav-pills > li.active > a .caret, +.nav-pills > li.active > a:hover .caret, +.nav-pills > li.active > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + float: none; +} + +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} + +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} + +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} + +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse.in { + overflow-y: auto; +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: auto; + } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; + } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; + } +} + +.container > .navbar-header, +.container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px; + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} + +.navbar-default .navbar-brand { + color: #777777; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} + +.navbar-default .navbar-text { + color: #777777; +} + +.navbar-default .navbar-nav > li > a { + color: #777777; +} + +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-default .navbar-toggle { + border-color: #dddddd; +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #cccccc; +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, +.navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .open > a .caret, +.navbar-default .navbar-nav > .open > a:hover .caret, +.navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + +.navbar-default .navbar-link:hover { + color: #333333; +} + +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999999; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + background-color: #eeeeee; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} + +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; + border-color: #dddddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.label-default { + background-color: #999999; +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #808080; +} + +.label-primary { + background-color: #428bca; +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +.container .jumbotron { + border-radius: 6px; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + margin-bottom: 20px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert .alert-link { + font-weight: bold; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable { + padding-right: 35px; +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #faebcc; +} + +.alert-warning hr { + border-top-color: #f7e1b5; +} + +.alert-warning .alert-link { + color: #a47e3c; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #ebccd1; +} + +.alert-danger hr { + border-top-color: #e4b9c0; +} + +.alert-danger .alert-link { + color: #953b39; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; +} + +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +a.list-group-item { + color: #555555; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +a.list-group-item.active, +a.list-group-item.active:hover, +a.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +a.list-group-item.active .list-group-item-heading, +a.list-group-item.active:hover .list-group-item-heading, +a.list-group-item.active:focus .list-group-item-heading { + color: inherit; +} + +a.list-group-item.active .list-group-item-text, +a.list-group-item.active:hover .list-group-item-text, +a.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel > .list-group { + margin-bottom: 0; +} + +.panel > .list-group .list-group-item { + border-width: 1px 0; +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.panel > .table, +.panel > .table-responsive { + margin-bottom: 0; +} + +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #dddddd; +} + +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} + +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} + +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} + +.panel > .table-bordered > thead > tr:last-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:last-child > th, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-bordered > thead > tr:last-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; +} + +.panel-title > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; +} + +.panel-group .panel + .panel { + margin-top: 5px; +} + +.panel-group .panel-heading { + border-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #dddddd; +} + +.panel-group .panel-footer { + border-top: 0; +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-heading > .dropdown .caret { + border-color: #333333 transparent; +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca; +} + +.panel-primary > .panel-heading > .dropdown .caret { + border-color: #ffffff transparent; +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6; +} + +.panel-success > .panel-heading > .dropdown .caret { + border-color: #468847 transparent; +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-warning { + border-color: #faebcc; +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #faebcc; +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #faebcc; +} + +.panel-warning > .panel-heading > .dropdown .caret { + border-color: #c09853 transparent; +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #faebcc; +} + +.panel-danger { + border-color: #ebccd1; +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #ebccd1; +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #ebccd1; +} + +.panel-danger > .panel-heading > .dropdown .caret { + border-color: #b94a48 transparent; +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #ebccd1; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1; +} + +.panel-info > .panel-heading > .dropdown .caret { + border-color: #3a87ad transparent; +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; + margin-right: 17px; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + position: relative; + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + width: 600px; + padding-top: 30px; + padding-bottom: 30px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; + content: " "; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} + +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; +} + +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicons-chevron-left, + .carousel-control .glyphicons-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +.visible-xs, +tr.visible-xs, +th.visible-xs, +td.visible-xs { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; + } + tr.visible-xs.visible-sm { + display: table-row !important; + } + th.visible-xs.visible-sm, + td.visible-xs.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; + } + tr.visible-xs.visible-md { + display: table-row !important; + } + th.visible-xs.visible-md, + td.visible-xs.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; + } + tr.visible-xs.visible-lg { + display: table-row !important; + } + th.visible-xs.visible-lg, + td.visible-xs.visible-lg { + display: table-cell !important; + } +} + +.visible-sm, +tr.visible-sm, +th.visible-sm, +td.visible-sm { + display: none !important; +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; + } + tr.visible-sm.visible-xs { + display: table-row !important; + } + th.visible-sm.visible-xs, + td.visible-sm.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; + } + tr.visible-sm.visible-md { + display: table-row !important; + } + th.visible-sm.visible-md, + td.visible-sm.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; + } + tr.visible-sm.visible-lg { + display: table-row !important; + } + th.visible-sm.visible-lg, + td.visible-sm.visible-lg { + display: table-cell !important; + } +} + +.visible-md, +tr.visible-md, +th.visible-md, +td.visible-md { + display: none !important; +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; + } + tr.visible-md.visible-xs { + display: table-row !important; + } + th.visible-md.visible-xs, + td.visible-md.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; + } + tr.visible-md.visible-sm { + display: table-row !important; + } + th.visible-md.visible-sm, + td.visible-md.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; + } + tr.visible-md.visible-lg { + display: table-row !important; + } + th.visible-md.visible-lg, + td.visible-md.visible-lg { + display: table-cell !important; + } +} + +.visible-lg, +tr.visible-lg, +th.visible-lg, +td.visible-lg { + display: none !important; +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; + } + tr.visible-lg.visible-xs { + display: table-row !important; + } + th.visible-lg.visible-xs, + td.visible-lg.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; + } + tr.visible-lg.visible-sm { + display: table-row !important; + } + th.visible-lg.visible-sm, + td.visible-lg.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; + } + tr.visible-lg.visible-md { + display: table-row !important; + } + th.visible-lg.visible-md, + td.visible-lg.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +.hidden-xs { + display: block !important; +} + +tr.hidden-xs { + display: table-row !important; +} + +th.hidden-xs, +td.hidden-xs { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-xs, + tr.hidden-xs, + th.hidden-xs, + td.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm, + tr.hidden-xs.hidden-sm, + th.hidden-xs.hidden-sm, + td.hidden-xs.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md, + tr.hidden-xs.hidden-md, + th.hidden-xs.hidden-md, + td.hidden-xs.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg, + tr.hidden-xs.hidden-lg, + th.hidden-xs.hidden-lg, + td.hidden-xs.hidden-lg { + display: none !important; + } +} + +.hidden-sm { + display: block !important; +} + +tr.hidden-sm { + display: table-row !important; +} + +th.hidden-sm, +td.hidden-sm { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs, + tr.hidden-sm.hidden-xs, + th.hidden-sm.hidden-xs, + td.hidden-sm.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm, + tr.hidden-sm, + th.hidden-sm, + td.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md, + tr.hidden-sm.hidden-md, + th.hidden-sm.hidden-md, + td.hidden-sm.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg, + tr.hidden-sm.hidden-lg, + th.hidden-sm.hidden-lg, + td.hidden-sm.hidden-lg { + display: none !important; + } +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs, + tr.hidden-md.hidden-xs, + th.hidden-md.hidden-xs, + td.hidden-md.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm, + tr.hidden-md.hidden-sm, + th.hidden-md.hidden-sm, + td.hidden-md.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md, + tr.hidden-md, + th.hidden-md, + td.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg, + tr.hidden-md.hidden-lg, + th.hidden-md.hidden-lg, + td.hidden-md.hidden-lg { + display: none !important; + } +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs, + tr.hidden-lg.hidden-xs, + th.hidden-lg.hidden-xs, + td.hidden-lg.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm, + tr.hidden-lg.hidden-sm, + th.hidden-lg.hidden-sm, + td.hidden-lg.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md, + tr.hidden-lg.hidden-md, + th.hidden-lg.hidden-md, + td.hidden-lg.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg, + tr.hidden-lg, + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print, +tr.visible-print, +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print, + tr.hidden-print, + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/catalog/templates/core15/css/bootstrap.min.css b/catalog/templates/core15/css/bootstrap.min.css new file mode 100644 index 000000000..871123f95 --- /dev/null +++ b/catalog/templates/core15/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.1 by @fat and @mdo + * Copyright 2013 Twitter, Inc. + * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-primary:hover{color:#3071a9}.text-warning{color:#c09853}.text-warning:hover{color:#a47e3c}.text-danger{color:#b94a48}.text-danger:hover{color:#953b39}.text-success{color:#468847}.text-success:hover{color:#356635}.text-info{color:#3a87ad}.text-info:hover{color:#2d6987}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small,h1 .small,h2 .small,h3 .small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small,h4 .small,h5 .small,h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}.list-inline>li:first-child{padding-left:0}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small,blockquote.pull-right .small{text-align:right}blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666666666666%}.col-xs-10{width:83.33333333333334%}.col-xs-9{width:75%}.col-xs-8{width:66.66666666666666%}.col-xs-7{width:58.333333333333336%}.col-xs-6{width:50%}.col-xs-5{width:41.66666666666667%}.col-xs-4{width:33.33333333333333%}.col-xs-3{width:25%}.col-xs-2{width:16.666666666666664%}.col-xs-1{width:8.333333333333332%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666666666666%}.col-xs-pull-10{right:83.33333333333334%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666666666666%}.col-xs-pull-7{right:58.333333333333336%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666666666667%}.col-xs-pull-4{right:33.33333333333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.666666666666664%}.col-xs-pull-1{right:8.333333333333332%}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666666666666%}.col-xs-push-10{left:83.33333333333334%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666666666666%}.col-xs-push-7{left:58.333333333333336%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666666666667%}.col-xs-push-4{left:33.33333333333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.666666666666664%}.col-xs-push-1{left:8.333333333333332%}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666666666666%}.col-xs-offset-10{margin-left:83.33333333333334%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666666666666%}.col-xs-offset-7{margin-left:58.333333333333336%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666666666667%}.col-xs-offset-4{margin-left:33.33333333333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.666666666666664%}.col-xs-offset-1{margin-left:8.333333333333332%}@media(min-width:768px){.container{width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}}@media(min-width:992px){.container{width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}}@media(min-width:1200px){.container{width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}@media(max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:7px}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1;-moz-osx-font-smoothing:grayscale}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn:first-child>.btn{margin-right:-1px}.input-group-btn:last-child>.btn{margin-left:-1px}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-pills>li.active>a .caret,.nav-pills>li.active>a:hover .caret,.nav-pills>li.active>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:auto}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%;margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive{margin-bottom:0}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-heading>.dropdown .caret{border-color:#333 transparent}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-heading>.dropdown .caret{border-color:#fff transparent}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading>.dropdown .caret{border-color:#468847 transparent}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading>.dropdown .caret{border-color:#c09853 transparent}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading>.dropdown .caret{border-color:#b94a48 transparent}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading>.dropdown .caret{border-color:#3a87ad transparent}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,tr.visible-xs,th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm,tr.visible-sm,th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md,tr.visible-md,th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg,tr.visible-lg,th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs,tr.hidden-xs,th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,tr.hidden-xs.hidden-md,th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm,tr.hidden-sm,th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,tr.hidden-sm.hidden-md,th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs,tr.hidden-md.hidden-xs,th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,tr.hidden-md.hidden-sm,th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md,tr.hidden-md,th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg,tr.hidden-md.hidden-lg,th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md,tr.hidden-lg.hidden-md,th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg,tr.hidden-lg,th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print,tr.visible-print,th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print,tr.hidden-print,th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/catalog/templates/core15/css/template.css b/catalog/templates/core15/css/template.css new file mode 100644 index 000000000..15aaac0af --- /dev/null +++ b/catalog/templates/core15/css/template.css @@ -0,0 +1,614 @@ +/** + @package catalog::templates::css + @author Loaded Commerce, LLC + @copyright Copyright 2003-2013 Loaded Commerce Development Team + @copyright Portions Copyright 2003 osCommerce + @copyright Template built on DevKit http://www.bootstraptor.com under GPL license + @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt + @version $Id: template.css v1.0 2013-08-08 datazen $ + * + * Base stylesheet + * + * Content: + * 1. Global + * 2. Basic elements/styles + * 3. Typography + * 4. Lists & tags + * 5. Main layout elements + * 6. Main layout styles + * 7. Error styles + * 8. Media query styles + * 9. Utility classes + * 10. Site Maintenance masking + */ + +/********************************************************/ +/* 1. Global */ +/********************************************************/ + +#loaded7 { + font-family: 'Roboto', sans-serif; +} + +/********************************************************/ +/* 2. Basic elements/styles */ +/********************************************************/ + +#loaded7 { + padding-top: 0px; + padding-bottom: 40px; + padding-top: 0px; + padding-bottom: 0px; +} + +#loaded7 .box-header { + margin-left:-5px; + text-transform:uppercase; + font-size:.9em; +} + +#loaded7 .btn-set { + clear:both; + margin:20px; +} + +#loaded7 .well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +#loaded7 .thumbnail { + margin-bottom:20px; + padding:0px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} + +#loaded7 .carousel-inner > .item > img, #loaded7 .carousel-inner > .item > a > img { + min-width:100%; +} + +#loaded7 .strong { + font-weight:bold; +} + +#loaded7 .normal { + font-weight:200; +} + +#loaded7 .no-decoration { + text-decoration:none !important; +} + +#loaded7 .no-wrap { + white-space: nowrap !important; +} + +#loaded7 .form-input-width { + width:96% !important; +} + +#loaded7 .img-responsive { margin:auto !important; } + +/********************************************************/ +/* 3. Typography */ +/********************************************************/ + +#loaded7 h1, #loaded7 h2, #loaded7 h3, #loaded7 h4, #loaded7 h5, #loaded7 h6 { + font-weight:200; +} + +#loaded7 .highlight-color { + color:#66afe9; +} + +#loaded7 .red { + color:#ff0000; +} + +#loaded7 .lt-blue { + color:#0088cd; +} + +/********************************************************/ +/* 4. Lists & tags */ +/********************************************************/ + +#loaded7 .list-indent { + padding-left:8px; +} + +#loaded7 .list-indent-large { + padding-left:10px; +} + +/********************************************************/ +/* 5. Main layout elements */ +/********************************************************/ + +#loaded7 #login input { + width:97%; +} + +#loaded7 #page { + width: 60px; +} + +/********************************************************/ +/* 6. Main layout styles */ +/********************************************************/ + +/* header/nav */ +#loaded7 .navbar .container { + max-width: 1170px; +} + +#loaded7 .navbar-inverse .container{ + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + background:#282828; border:none; +} + +#loaded7 .nav-tabs > li > a { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} + +#loaded7 .page-header { + border:none; + padding: 10px 0px 0px; + margin: 0px 0 0px; +} + +#loaded7 .logo { + /*margin-left:10px; */ + margin-top:-5px; +} + +#loaded7 .logo a { + text-decoration: none; +} + +/* box modules */ +#loaded7 .product_notifications-image { + float:left; + margin-top:8px; +} + +#loaded7 .box-products-price { + font-size:1.4em; + font-weight:200; +} + +/* product listings */ +#loaded7 .product-special-price { + color:#FF0000; +} + +#loaded7 .product-listing-module-buy-now a { + text-decoration:none; +} + +#loaded7 .products-listing-separator { + width: 50px; +} + +#loaded7 #content-product-listing-category-description-container { + padding: 0 3px; +} + +/* product info page */ +#loaded7 .content-products-info-price { + font-size:2.4em; + font-weight:200; + margin-bottom:4px; +} + +#loaded7 .content-products-info-reviews-rating-label { + text-transform:uppercase; + display:inline; +} + +#loaded7 .content-products-info-qty-input { + width:20%; + float:right; + font-weight: bold; + text-align: center; +} + +#loaded7 .content-products-info-qty-label { + display:inline; + vertical-align:-30%; + margin-right:10px; +} + +#loaded7 .content-products-info-manuf-model { + position:absolute; + right:0; top:15px; + right:20px; +} + +/* content modules */ +#loaded7 .content-upcoming-products-image-tag { + padding-top:20px; +} + +#loaded7 .content-upcoming-products-text-expected { + font-size:.9em; +} + +#loaded7 .content-upcoming-products-text-price { + font-size:1.3em; +} + +#loaded7 .content-upcoming-products-text-name { + line-height:1.1; + font-size:1.3em; +} + +#loaded7 .content-featured-products-image-tag { + padding-top:20px; +} + +#loaded7 .content-featured-products-text-expected { + font-size:.9em; +} + +#loaded7 .content-featured-products-text-price { + font-size:1.3em; +} + +#loaded7 .content-featured-products-text-name { + line-height:1.1; + font-size:1.3em; +} + +#loaded7 .content-reviews-text { + padding-top:4px; +} + +#loaded7 .content-recently-visited-text-name { + font-size:1.2em; +} + +#loaded7 .content-recently-visited-image-src { + width:100px; height:120px; +} + +#loaded7 .content-also-purchased-products-text-name a { + font-size:.8em; +} + +/* checkout pages */ +#loaded7 .ot-total { + font-weight:bold; + font-size: 1.3em; + color:#428BCA; +} + +#loaded7 .module-row-selected { + background-color:#e6e6e6; +} + +#loaded7 .payment-selection span { + margin-left: 4px; +} + +#loaded7 .payment-selection-title { + font-weight:200; +} + +#loaded7 .content-checkout-payment-methods-table td { + height: 60px; +} + +#loaded7 .content-shopping-cart-image-td { + width:50px; +} + +#loaded7 .content-shopping-cart-qty-input-td { + width:12%; +} + +#loaded7 .content-shopping-cart-qty-input { + width:60px; +} + +#loaded7 .content-shopping-cart-remove-td { + width:16px; +} + +#loaded7 .content-checkout-confirmation-qty-td { + width:30px; +} + +#loaded7 .content-checkout-success-qty-td { + width:30px; +} + +#loaded7 .content-checkout-listing-blank { + width:1px; + background-image: url('images/pixel_trans.gif'); +} + +#loaded7 #loading-container { + position:absolute; + left:50%; + top:10%; +} + +#loaded7 #iloader { + margin:100px 0 0 0px; +} + +/* QR Code */ +#loaded7 #qr-message { + display:none; + position:fixed; + bottom:25px; + right:25px; + width: 250px; + text-align:center; + background:#f5f5f5; + padding:10px 0; + z-index: 1; +} + +#loaded7 .close-qr { + background-color: #D52607; + border-radius: 15px 15px 15px 15px; + border-style: solid; + border-width: 1px; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset, 0 1px 3px rgba(0, 0, 0, 0.75); + color: #FFFFFF; + font-family: verdana,Arial,Helvetica,sans-serif; + font-size: 11px; + font-weight: bold; + height: 16px; + right: -6px; + line-height: 13px; + min-width: 12px; + padding: 0 3px; + position: absolute; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + top: -6px; + z-index: 1; + cursor: pointer; + text-decoration: none; +} + +/********************************************************/ +/* 7. Error classes */ +/********************************************************/ + +#loaded7 .messageStack { + margin-top:4px +} + +#loaded7 .message-stack-container { + padding:5px 5px 1px 5px; +} + +#loaded7 .message-success-container { + padding:10px; +} + +#loaded7 .show-on-mobile { + display: none; +} + +/********************************************************/ +/* 8. Media query styles */ +/********************************************************/ + +@media (min-width: 1200px) { + +} + +@media (min-width: 940px) and (max-width: 1199px) { + +} + + +@media (min-width: 768px) and (max-width: 939px) { + +} + + +@media (min-width: 600px) and (max-width: 767px) { + #loaded7 .show-on-mobile { + display: block; + } + #loaded7 .hide-on-mobile { + display: none; + } +} + + +@media (min-width: 480px) and (max-width: 599px) { + #loaded7 .show-on-mobile { + display: block; + } + #loaded7 .hide-on-mobile { + display: none; + } +} + + +@media (max-width: 479px) { + #loaded7 .show-on-mobile { + display: block; + } + #loaded7 .hide-on-mobile { + display: none; + } +} + +/********************************************************/ +/* 9. Utility classes */ +/********************************************************/ +#loaded7 .clear-left { clear: left !important; } +#loaded7 .clear-right { clear: right !important; } +#loaded7 .clear-both { clear: both !important; } + +#loaded7 .margin-top { margin-top:10px !important; } +#loaded7 .small-margin-top { margin-top:4px !important; } +#loaded7 .mid-margin-top { margin-top:15px !important; } +#loaded7 .large-margin-top { margin-top:20px !important; } +#loaded7 .no-margin-top { margin-top:0 !important; } + +#loaded7 .margin-bottom { margin-bottom:10px !important; } +#loaded7 .small-margin-bottom { margin-bottom:4px !important; } +#loaded7 .mid-margin-bottom { margin-bottom:15px !important; } +#loaded7 .large-margin-bottom { margin-bottom:20px !important; } +#loaded7 .no-margin-bottom { margin-bottom:0 !important; } + +#loaded7 .margin-left { margin-left:10px !important; } +#loaded7 .small-margin-left { margin-left:4px !important; } +#loaded7 .mid-margin-left { margin-left:15px !important; } +#loaded7 .large-margin-left { margin-left:20px !important; } +#loaded7 .no-margin-left { margin-left:0 !important; } + +#loaded7 .margin-right { margin-right:10px !important; } +#loaded7 .small-margin-right { margin-right:4px !important; } +#loaded7 .mid-margin-right { margin-right:15px !important; } +#loaded7 .large-margin-right { margin-right:20px !important; } +#loaded7 .no-margin-right { margin-right:0 !important; } + +#loaded7 .float-left { float:left !important; } /* use bootstrap pull-left instead */ +#loaded7 .float-right { float:right !important; } /* use bootstrap pull-right instead */ + +#loaded7 .align-center { text-align:center !important; } /* use bootstrap text-center instead */ +#loaded7 .align-left { text-align:left !important; } /* use bootstrap text-left instead */ +#loaded7 .align-right { text-align:right !important; } /* use bootstrap text-right instead */ +#loaded7 .valign-middle { vertical-align:middle !important; } + +#loaded7 .small-margin-top-neg { margin-top:-4px !important; } +#loaded7 .small-margin-bottom-neg { margin-bottom:-4px !important; } +#loaded7 .small-margin-left-neg { margin-left:-4px !important; } +#loaded7 .small-margin-right-neg { margin-right:-4px !important; } + +#loaded7 .margin-top-neg { margin-top:-10px !important; } +#loaded7 .margin-bottom-neg { margin-bottom:-10px !important; } +#loaded7 .margin-left-neg { margin-left:-10px !important; } +#loaded7 .margin-right-neg { margin-right:-10px !important; } + +#loaded7 .large-margin-top-neg { margin-top:-20px !important; } +#loaded7 .large-margin-bottom-neg { margin-bottom:-20px !important; } +#loaded7 .large-margin-left-neg { margin-left:-20px !important; } +#loaded7 .large-margin-right-neg { margin-right:-20px !important; } + +#loaded7 .with-padding { padding:10px !important; } +#loaded7 .with-small-padding { padding:4px !important; } +#loaded7 .with-mid-padding { padding:15px !important; } +#loaded7 .with-large-padding { padding:20px !important; } + +#loaded7 .with-padding-no-top { padding:0 10px 10px 10px !important; } +#loaded7 .with-padding-no-bottom { padding:10px 10px 0 10px !important; } +#loaded7 .with-padding-no-top-bottom { padding:0 10px !important; } + +#loaded7 .small-padding-top { padding-top:4px !important; } +#loaded7 .padding-top { padding-top:10px !important; } +#loaded7 .mid-padding-top { padding-top:15px !important; } +#loaded7 .large-padding-top { padding-top:20px !important; } + +#loaded7 .small-padding-bottom { padding-bottom:4px !important; } +#loaded7 .padding-bottom { padding-bottom:10px !important; } +#loaded7 .mid-padding-bottom { padding-bottom:15px !important; } +#loaded7 .large-padding-bottom { padding-bottom:20px !important; } + +#loaded7 .small-padding-left { padding-left:4px !important; } +#loaded7 .padding-left { padding-left:10px !important; } +#loaded7 .mid-padding-bottom { padding-top:15px !important; } +#loaded7 .large-padding-left { padding-left:20px !important; } + +#loaded7 .small-padding-right { padding-right:4px !important; } +#loaded7 .padding-right { padding-right:10px !important; } +#loaded7 .mid-padding-bottom { padding-bottom:15px !important; } +#loaded7 .large-padding-right { padding-right:20px !important; } + +#loaded7 .no-padding { padding:0 !important; } +#loaded7 .no-padding-top { padding-top:0 !important; } +#loaded7 .no-padding-bottom { padding-bottom:0 !important; } +#loaded7 .no-padding-left { padding-left:0 !important; } +#loaded7 .no-padding-right { padding-right:0 !important; } + +#loaded7 .full-width { width:100% !important; } +#loaded7 .three-quarter-width { width:74% !important; } +#loaded7 .two-third-width { width:65% !important; } +#loaded7 .half-width { width:49% !important; } +#loaded7 .third-width { width:32% !important; } +#loaded7 .quarter-width { width:24% !important; } + +#loaded7 .display-inline { display:inline !important; } + +#loaded7 .relative { position:relative !important; } +#loaded7 .absolute { position:absolute !important; } +#loaded7 .absolute-top-right { position:absolute !important; top:0 !important; right:0 !important } +#loaded7 .absolute-top-right-large-padding { position:absolute !important; top:20px !important; right:20px !important } + +#loaded7 .cursor-pointer { cursor:pointer !important; } + +#loaded7 .language-menu { list-style:none; } +#loaded7 .language-menu li { display:inline-block; padding:0; margin-right:8px; } + +/********************************************************/ +/* 10. Site Maintenace masking */ +/********************************************************/ +.loadmask { + z-index: 100; + position: absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity=50); + background-color: #333; + width: 100%; + height: 100%; + zoom: 1; +} +.loadmask-msg { + z-index: 20001; + position: absolute; + top: 0; + left: 0; + border:1px solid #6593cf; + background: #c3daf9; + padding:2px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.loadmask-msg div { + padding:6px 8px 5px 8px; + /* background: #fbfbfb url('../../img/loading.gif') no-repeat 5px 5px; */ + background: #fbfbfb; + line-height: 16px; + border:1px solid #a3bad9; + color:#222; + font:normal 11px tahoma, arial, helvetica, sans-serif; + cursor:wait; + -moz-border-radius: 15px; + border-radius: 15px; +} +.masked { + /* overflow: hidden !important; */ +} +.masked-relative { + position: relative !important; +} +.masked-hidden { + visibility: hidden !important; +} \ No newline at end of file diff --git a/catalog/templates/core15/footer.php b/catalog/templates/core15/footer.php new file mode 100644 index 000000000..45eec814d --- /dev/null +++ b/catalog/templates/core15/footer.php @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/catalog/templates/core15/header.php b/catalog/templates/core15/header.php new file mode 100644 index 000000000..d91fc1848 --- /dev/null +++ b/catalog/templates/core15/header.php @@ -0,0 +1,127 @@ + + + + + + \ No newline at end of file diff --git a/catalog/templates/core15/images/core.png b/catalog/templates/core15/images/core.png new file mode 100644 index 0000000000000000000000000000000000000000..7144eca4d69303a0448ac368ad161dfbd4de1426 GIT binary patch literal 100385 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 AG5`Po literal 0 HcmV?d00001 diff --git a/catalog/templates/core15/images/favicons/apple-touch-icon-144-precomposed.png b/catalog/templates/core15/images/favicons/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..908fcb3d3f0b3fd4908de1886dfa2f098635edd4 GIT binary patch literal 15751 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 literal 0 HcmV?d00001 diff --git a/catalog/templates/core15/images/favicons/apple-touch-icon-72-precomposed.png b/catalog/templates/core15/images/favicons/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bc456277ec4f8d5657059ea1f6c5f798bd2b0e GIT binary patch literal 8157 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 D_At|y literal 0 HcmV?d00001 diff --git a/catalog/templates/core15/images/favicons/apple-touch-icon-ipad.png b/catalog/templates/core15/images/favicons/apple-touch-icon-ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..b84568b334f50a2f9e7749f3f1512abf5663cf9a GIT binary patch literal 3714 zcmaJ^c{r47+#X{W5m{4>$!-{9H;fD;>(p4v2w7$(O~%Za8CzsuvP>LD48jm)OG1lO zwnABweJe#MOY5;6)HlvKo%8+i^}WygzR&aguKT`!%k#Ug_j;2t$E`(#^=f~ocGCAK7Irzf)73{@EO4r0N@4_ zU9b!++5wKE1Zer}Vzfd7s2nx`V0tu^>VxwqFhITpKOz|c{?ybA1`+WHu&X{=8%?z& zoFm#?pb?xe9CyK8@W&bB!AH$NrlD|-KmdW^0}2fwk?HVI1o$sqIA^_UhJrzVK^XoB z@ZUjU(HM{=g+>7BYw2p@v|%uifq@oGPv5`*1_9}4!*rn9oZCPXrU%zIfa@57{<**$ zZ#4W_xD)EwKfX9S1o#|-L4`x1At51JA-Y-=njaKqY;3%%p`)Y8L1@y$$PAxQO)~w+ zPX!c#j-wH&3?hXL+Ew)Nr35h$U{0ierw~B>SC&lwr%arJK|_70P?(nXZc0CaX!QRN z4G8!bO=ma}{)_kj6sEg`Q3+5d0-X{>!*LGo?2%npRJbLL;KQKMTqqRM&njZhQ5Y2Z zISLhI>1+T}btRJVln}bwUwAYcZcC;!e8@P0EeZkVC}yO>2?~Yt;y8r z3IIT8%@&1p37uHZ56jp;e6Ta>R+FE%cZH-B(#=NUw2N$un6J34x}s$H{c@5OH%;Ia z4-Xp)z0T(BQD3qQgm!M2P5cN{bKv6z6+FzlwPiv;`dD(JXA^ndYM)P*$ zt@ICt^?q(+1vkUon-@P6ewe-Z=a$Lqr86DINlx9bOT}Zw+5e626InwdX}2}Z-oLmz z`fU`>AM8K<=HcyX!M1Vjyc{q@nlDvdjtsRVzs=EKjobs*I?4F4bQKgOSIX|jK3 zqNf&|%^f4C>*x69oNST7{_yZZjXGdt(c$g#5+paCWfCj>DCL51MjEy25k6tR;vSoj z^wnL{yRS!yjSvs}Y$Xg{HsZZ64@A3#Kee;VO5{@6^*a`W5%%sXh6C63GE{43#nW($ z8*c6C^xzO=(;0cS=FY)~X(_gO_y?>L)q?}+-6|BVYGrWkjs2hCgetd}$ zHmP}GI!9PiNt|t;`zbYx%YphyWa-%AX?SEtG%hA% zCRvXged3<)NsOz<0{JUhNl>4d*BvlV-jwNkFC1#usWf%MFLTHE&ambtL_?jotPR$Z z8Lc=;(jT9XD>^Q_*MS)mZ%30;d%D>Ot*}`XG?FdL1v<0=B0DwbwBc`#7?;V~pOY2w zg|R-5u7|w@EZ&9Yx7b*T2VEVS(XP2cIf7#x6;GbQWVo)rJMY{nnvfqTV{uSgYLwLd z{!CtRO>z|c$(A0wFdBE~#tkMHyV@$d^%bdpD515`|MZVwm|s(Xhw;>W5`G(rk!23y z zu@|>h=cuHo1rTY_-07z5dgcKH&qo=!*xrWt7GpJV+wIw*%-NElhcWJZJ>x4RD5@I~ zfy{Qwslz;oY%xMo&bmSA>sZ{KqA3$D#Wc++pN8WYnX_7_Q`Ghko|`n0o>16ul-Z6! z@{T{xInh#aYWNZ*Z{LEl*`0#*M#wy=NLHWcu_^5m;2Kda#%+J{yiS?H1cqM6{ziH= zEO4uU#8=qwIS%uBlXKxT!umDB`Lo&4B3;KRbY*Q=N?z9=_p?VT5QpzsyyDL>Jy;aE zzMLN}>FI{n=1<#rgppDUt*_#Eg|n-$M*1nuO@Jh`KIE-}T5D9G<#9zm_jN-d?}Ub>L_Y5hv}8^6RiP)t z$a>t;Ya_1WwY9Xhp2d*jyT+urm4h3mqjppAmPR4b0h2n#xZ0@Tj-7E#%=T)UWYAT{x_oQ(>zC#Ha#c( z;}o!sTO_0eLFH8M*}_GTQ-;WstKHA|mXGrHwf1$K^4>U*7VopV}RS=V(ZF`*b=Tbrz>s`-MeHa&@qKO`iN7kvOozRF^w!26_Y%gaFgwMK;@ zA6Jfe6xgq@2c3rTadvdwJ>K8VYeJLPRu;|6lU?523UZB}ozG0h#AL8wUhPQBubD;< zWW-q}Lk~v2*BB!5c4&lEcul@E?krliZRQsXeo7lkpDq&yKkp5o7E9$^+e_B;f zCd>?<&%aBW)pOYQ^-g^@(JlI*=>(VmnxS-X31qx`(eqUzf39@KXhhrc_wXuN-W}{! z9sE>ZCO9q^IgxUrp%kmPIRX$~v%MZZ*LP;E^mO*JUsF}*b#thm(6-JM?vZ{g;Ye7p zQrAtu!2U$?R)L!3o3fpoiA`V0rr!g#1<4n>>hnG5()APHsz%?kU#ZFybN9*6xx?3n zrQTy!^+Mhrnqdwvdb#zmqp`ypLUw1;_9n+Wz7WfbX!*E#RrHKmX~_+$A**VGQufGz z_~X50D)y_U-cv3}%x!*W#L18Ipj?m4#afurh+HL0Vx=ZlB`FmPwPg=CKZutU0ckk9 z#SOhnEpm%aW*?YiSa;N)F~P4 z5{Etv4=pD->+y=?sVwBg`1?6}viYT)en~1&A{&?nIvEupfFOmWKZ4A8FTX@tA*|S$%U=C;kEaX*=+OAmVWCZ%6n9Bc9Tuomtb@g>Y_26D$tzSKV2?(cDvr<}bO#l;73MTQoKkJk_H P{uSC<9Y@tzc*p(^mAh~! literal 0 HcmV?d00001 diff --git a/catalog/templates/core15/images/favicons/apple-touch-icon-itunes.png b/catalog/templates/core15/images/favicons/apple-touch-icon-itunes.png new file mode 100644 index 0000000000000000000000000000000000000000..241304d1668be5bb1f93e78cf96c1b235bcb5373 GIT binary patch literal 261553 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%0AO=BVxFH)_{kF09hCMRsl?8iNQBQLsFN}XL8Ul=+ zmcgMbj2_}fo@GMPlmIkUGxZ)MeqrTPhyI%w&$IXjaWe3Ie<+iUD-s)Z ztSPn-28cwOZ0PaE3Th!xg&1h5`tOQC(!=}}XRhnZ9r*T{75Ij~V3ocYxwKzs8TZa`^4FA$+`9z^^VJz^fnc!Oh(X3@6332Y|R_@*b{; zlx3s}4 zC67tcY67orz1TKJ*9oena2FFs| zY`KsF)yo9WE^;L-t7#|YFj30^#~1U7;CUq#SW8PQSdjJW=k|i_)_hXj}i0Z5{jK%0W#tp5H~ufKK)*ZTxu6%hcMS1$9w45us@Nh%2E z<2VddFc=Zd3>#XMqF%)nMnS?V1HWj=XWO!?A31GtvtE1xqR|;S5OML7lrUz>8G8?4 zAP@4Xc1%55f?Y`|kktWcJc_0S#M_>pPeug5W@}X!`i5~rP#-mleahRo0`V6<#z!B0 zG!y=BGB;^M1Ms%r`~LUEAu%UIn5oJr9;HZdfLs>r znYAAL`HLrD>`SFv?-p=-^8h;jEm`W94SoHlet#nYAiOtJz4_Z5_{8FtUsIp%rEp`{ z!jl^vSm|fJx@0?L`$ytS8pA`nE#^reYJx2{is4jE zuuX7B#LW1-;npTiG6^Y@R7w5$#Ge79Nrg-qu=a@va^chxos~R>nLs7rrHQ%qS+?dux;|4NYkzA^~_R6E83?{BrJyvD<6M-)UQN!YanY=`<00@cD!Fa+VC}r*_7}Mc~ z8MjpVnLvp;2hC(0?s*bf5ZFuzd(~>4$%jrt89i=pB=T6CWtK4?E2u>wv(qRKS`Y4Z z$gtjrtV5AaLO^lVQHLvI1RxIlO)Z2bC%`xvc>M9lVQDZR`CmMwmF(tVTKZR$fy0P~ zsYGsomCvy1UqA8ivHoWT#a!b1ir>*MKE4jucXN34!&~r&u|HVxbMK~9#W!v!T~+_r1$dW%dLEyS@Zu*KR4~adOHpO$KHRi14oiEbgI^YNQ(Em zJ#LH0dC^h1;G&QbTK;>SQnHhY2x{5Tl2W^LCn}n#wLxQmCJmY!T->;jh#|5--BQD6 zn=M(}1Pd1WpQM19dO(ju8Z3+uEiIFr_;LdRFlj<`7p(lhGMfJXY!Uz?RT+N0`r8Zc z2uXlB0s=6L@R!7aU;g)ND_un?*ztIqAg5C1kkwG8Lsa`}?$*$TNdmhW#4Z?ZTeX@W zkA{>{rj}*H&V`0zZuOIkC^c1APA*cI=u1< zf>rU2f@gZw1E5}QH}&%ChfI8^G?4=9{sH=R_3G7`!M|-T`mj2jh3B4ojt&Dopdsq} zPd(Q>W$tg&~15!(- zZH1M;Pcm@C@apw__{aA*;ingF!_7M*==+E2Cen(a0F_kZe4q(H1gl48LRbN_^ldc` zNTZK}3|W%p&P9UO!83l%UAuPeuqAQJBtRXWkH5!6qOGUjM)aGNoW=XL&D0Ay09K@s zGjT9wT_|6e`16RF|Nga#tglgLQYXBbgb@>D|0g7)&238^)k|3Vkw=lih^7K7mh$MQ z6|V}bp9pag2rv@ohQIx~jVwRODjRX8jM+%_8C zWav|e{r_1o{l79CfQl4kXv6~-)-Qf{;g97Z(4-&GWbH`b`^~gWOn-sNaUs&^3y5ZV zFdY$si%QB0G*8TQ84)y+K^qb90iEX$iehd`el@qEM^ERw3ydn729QlnB$VqaJMmgMRN2*{|Jv#U66utAtz1M!3EXLF#Ss@T^xuZKF+fh_ep6 ze&ZY8p!bkC6f)Nx2YDA)NimASDm85R%Nd?ObOvzx+<7>4_8dw7ei>T-4~h$LY`F{H zI==?rJhujZ;lkdC741x@Wdt%PUF8D+V&PiKjhs~`53W2}KOb56^z&}+%laTG=SRh($s$T%G)Ts?lZVCU+bXYIjUzv#- z7O7mt;w&hdf#g17t}98+h1p!>0pyd&`qwhFuYUF9_l;S!E#zk)-+25zLg#fDzaGe& zS^zP`Smy}T-N~8`u+7a)Vm>$BSA6(2!K?Me9NSvYa#%ooS{cMXyIJ`;e6{D0h6YCE~T*d-|YFdiv~m=ZcX6R%@I6#y70+I4|;<>x2tjo=008@ zj{!Ou^b+D8?Cj_8#=E!S=WpHcNyiWla3&nhhg?AuF)WTy!p&U+fB)V-T-@xy|N6oJ z&aIk5o))SIs8+Sg4d8%dn1drvLX%9qkC$G0IV8PpiGZSBO7?3K2*L~Q1y0_RLw_6Z zr6!I|(|&A95Sq-n(9v{jdnb%Os!>=;Ks&3A_PU+m=%?y^`a0>nGL8+)5HaupxF|)x zLC{AfLgN`mu)g)TouIJR!2g}ZR>SBEX?ICm06)aNU4CvP8{Oq;0vw$#oalRSU$**e z{Nvym?a!6&cs$-;pu%5-=vOEE!B>^+_mx2a^nKO?NBc<&P6zG^8x*(X=vYmcqN@udzpfACt8YsDlK$yuxq0P2S5n1Gcy8H>c;s;dO1grE~H zl$(}@sx;J{xV1Ng53laP)oTYZ@%M?3-y_DLT+F>)kdW5xrJ$ecl^c8Ti}!EBZ$8WzjN&|G_#}mjwUufn zwbg{NpBI+Sj)UP)JOLyrlxe1d2+Wn#GAg7N@_wU{8Jh)Vpu`X)7m}6@d^z0X;E0Q6}uWlSr$xw%RqF2MeQ-tU6L zohs1joVodewlBXd8zBJh0p7O@gg5-;Pj4*2lWToAKj=W;aG#aOOXYS`V}7Ko2BxI+ zlhr9p?DKNJ74T;)|LK38p+|iIgoL;E#_-N3x8Yq3%)667pmCZsBuBrf%`l$mnACjq z`5wIX!EJccCmNTw$8g{SScU{K%g>j63nZCwY=)G|XKuxWi@gQJ^hZY?r8P$5i!vr! z#$%(_NdnD&1W!Nx^j!Jtwl+Z1Wov7zvCrT1echm|Z4K1N4yQ+6fh^6zm4Tl`qk0nX z6$w&s6i)a~7{J4Hg<75`Z0^J7DC??_zY3mb zK`hO`?`XAd`8KK?$zzB{h=PU+CoIysolbATbKOES)4#6mzmTT?FMjvlS1$NJbS;38 zRe}wo6718$StABeBnIL&N1PCdiGrp96-Z|$0De*Ri8)(VUiC8TY(%=3e6(#u`Vqkt z%z9}NV}C1T{rLJaQM_U<07zELG*_IJWy?%MM3+)C zNYR5yp>^S7_5a-`*I{dW2(Mq;hV4;K)%21u|IMM(%tS2!Bljh}C!0(?0Z5@5>R&H+?%Ziaz2d)XY6HaRLQ_Is7Y2%-A5H=|5iFxh8(2RimDh@i0G@gD7_=|g zo*d=JK}?tMeaR3pb578=l-o+=jZ#t}QkJSpYRSLEunG`qr!XoYXQFHY_Gp+884=Gl zi{2)_NOGtRK=gmsVbN&?5)%@YKzzQP`3Zo9#VmXmV)`R8ZLNi`>eoYs09ff!lYwgl zV^ha6QgOq>{bz6dejXYC&@R@{)Ea30*$0_E`b=06FTtyI0ze6Ig$Vk9Lh}W~(#Xu` zHbw>GgOF@AJGY?5JUk1Fy4V=V@`8y+6x@qR(6?u}E;_Eu2_Xof`nKqbx6i~uX)Ta- zX370IM}O~V0-@eNY=i%sAkVt)c$4`^y+v^M?%mc(sEz#BL)rcx)wQ)fe946cU}0hQR>h2uK|Hl*STn;im? zuacoDj9;st`l|fHJG*fC<^k*;uv9gz@q2h(Mn+!oK8F6idjHBc{Pf)$@T-q+!JWM^ z5fHl>Ibcz+v9o629Yg(!3QoB--(>y+|rMw6tPSl1JML$sQJ`o?Y zflI-yOeIZfE0+*TdVkqNfCi`?OQqv|sav3O2UHh;3MC2jYzJ(J3{7h=0cq7ZnjFBh z`Y306OKfn92LJF!&OJ&1?)%A@iu40vd4crgv^J?mmKIC`Y^^QOc4_Jbm68Aq`ZzBS zPBi%=8&s8!^IzoJ2g-;|XpuT$xbj@Az-VbQWfhFv0FZvY-VX+R64gNVt!N3T9VZ3# zvIs9%dvCOX%3Rtf+*%+nbQ~Q-q(B(HPMq@CJ+oP8r!DB$D-}(E+Jbcbva_?(3iZ!} z`|Fnz$4`XkQ0DTwYD+p6c;R3tshueF(e?Bs0Ly3Gf6`*~8 zb{gah&6t;RJ>5=zCzin*8^?~cR@*oBYp>D7jBh$ z%?TooDs$03ZPJyARWOee=5!vJC^@7v&T+zs%zp~xSlLUPpb$;~J{Iwy@VQ~HUkrpO z`*V_nh^9#*&%;2apb9cN=tR>5&*~Ofe^%AsH0KZVAb)&5WQZlkSC3i%_lp1sAxq`i zoj~ad@tDx3E+uOOc*Q3HKl#&d&T9w6t$=!_*EZr2e($r@gjDxRUfiXxxXH;1XI-5W znO%mas0W`WB%A@%&riAcpK-5CHy1hslHazgpjHqDtx0+Fl{xprSZs(L0Tb<`p@EP% z5;`lJMv^8?LNEizfCn-F|e=j&|$vMhs|T9c5EvYhdEhyc_N zw0d82QMI#;;~SMPJWV-N8WPlfbk(7i$g0pDIIf?kpL-tqO9O&8i{TIoQCuY5e7P91 zNHrA2oNeU(EL8bp@F&GSw9~!01ON2eW%z&p@gvwc(StKjtih9KmRW_$FoJZyDujmm z*j3tma;*` zEx(%?{J9OytrHN0BKe9Y01wr(=HPF_hZ`G$XzgD*7Y+v{cD*tm32-ye0XL%;ME@r# zP6GC-O|9ZSwiF^>!3!H~7$ss83``7|h0ko-A_xVA3cFN4^SlbgV#=XE(*acSw16f< z1d)lCfRiMNMrDMPK+ao+8Q!P_7!=T4#ctL`I}5ICJJ9M?MVnYpT|+=y0Bula8+_T+ zqBws1IHNM94akv|4H+xF>0EcI2_`VVWNrNzB|*g`=V^*!%pURT6OUD(m?jma65x)G z5D?D*D|{rgO$vDX-Rtn*|LJ4+&D)>Bg^Qc;vA=BZPQ*%8ZB8E?7Xa^TZ6$+0ed;)T z=ZOti8FXN0G=_1`BY{xAM5I7@!z!{s?ZP+3q$wf2fyt6;Kt zn=VTFTk@6vYR2pG`i*^f&A(T_`ok@_cRs@HLP_%FuE1P>!kD4^9O|2xk+qaLX73(c|OGodYc zn6+2ik`BE-7cT=n2M`e?l~5V8qNG?I8kLGfTmW_b^xYG%I@+&(lKMm2>pedV>c-A}&%?It9^ zw0y8`#`UgYq3}i&C@h9*aT6p`dE?wYjj_n1A{$?w@^JPQt9a}uq6KClUfYxz`@l^k z8$5teM}So5N|E&y_Ae=tl_bVtrHW1bN0=F$#m<9cmXnbgdTgJ|(=-B#d33sxowFtY zK8HH|-_*mb_xqdXitEIqI5CLb0*AiRt{;GHL4Mx#8yg#pFh~+bh9S%{{p41Nc+t)~F3Y0vq_cT+7QUnPZqn zq`!Z7<0||&U;SUbu}gXcnaM)Z5n~ZktFUYu=STv=rt;1K(smI^6-<~8FlnW(=)&(R z;~-soM_s%1AWr@sMKQMpP!H&J-p(xUf%@t;p2_nV5(h~Bp> zBAM;SvjjzajFT!p5(2X#il)T{yLSvQc^*Clhqv) zdH!Q0RO9oLLP!OIqJ=dN0dR9-LL=1ovp3$2D*x(cCNc0;{d&lRfGUFr7nmavQ<>JG zi{OH!it>J8Vs?g``7fti0D9@d^FB1@+uOxEf-1W_Ow7tD#V&yzLz zR1#6j#DHo7BwzwT4f|bVzZrVnE)#TQ6OitI>L|eDM#AX;B=Svi4(J5ksnw>ydu;k+ zf_DL-72ql_gO(ORy}GXl_qIxZ_u%?sS29c-)uTi)yH6}Xtmm8F+o+5 zmy+d{Vh~6|qUJH{9rgZ4x8U5VWqA69Q?TI^fV7sm-VXwh zv*0^H=ci5$;DyIG;MDRp$gl;V2_WhFyP%#JCje%_rUzB`xPDM*%6|qo_r~ytPj}$y z6U*?#Ab8JD|co1RRO!_oFCxUlAybV9|iP1Y(b|`6C$B|W6R?o%E$a)TW8(5z_ z82IpZ3C|pJu-fzQM<-5h)$E47=u4XJVJ&)N6eb7ik%R0hlm$OZTpEu*+l{i;p^JX{^G)zV|KDf&|oC1alXO4_-^X!4iqZ;G)YdKTqv#Q{cpfE;hlG<;qBzQ&N?$?r~(M z6g_eB+Xi0Tr4KGSaRRvQ!7OD&0jh~KQm`P8?M~!w$CC!iLsX?M?IEj+7YAYolhJ|y z3mjJ*2V2kj0mh?rRc9!T~xmgEJ=w z^uCXA46*i^<7c-tU{dX^oiV)ihr93(Z(WDqU)zJbn6M_CjIlnE4TwQ=65tx2^yYzs z|M6h~&z%7Hi)RcRPa-~zi~t%VEds1)mCdg22}1%T7=%F!lh39#IgiLUYi(a^jz@2xY~S2IxP62pHw6Wbccw8UHq;a|EIPF0~uE#i>&vg_xCfuz10}qwah@ z5ZhAZ&XMDUt1>NZJz{u+td&Mn2`j`Ob(cY&l^;!C%Cb&m!>@-HTiKmzM|$d=wU8w(ZnxYtb$Q5 zy|k5S2i+gR_L&6l91ivhSX*5oGyvg8BeI!zA9UZuST0B-05eimBvk88tX^qs5h1^X znY#tTWi&^7SWzq<*J~zdPFEtaeef(D|2iS?XuJ?NlQR;8Z$#5ynVyLfMxBc)Sre*t ze5ZEq?vNrG@&FR+51oX`ULe62oAIQWXR2ki2tt65(dlJWCE?#~?-cOn?>>cBUb{j< zIVe_lY;8a+`kj0T`(q1NH}~P=E4Sh4C)VNQi2;zFnVkWd9}x*qJalC#f$u+i0(SO? z@al(m;O4=QT0yHxhu(cgbOeljT(iq>KYmG_3?egikkX!e7hK}n{K_8bQb8jTS@)q zbgrqiHm(mKsby|=GS7(N{tl6&3l9GD4k8z6LaKae0s);&#UBNC9?tb+LBef88G$ZU zr-a=C10h;W)!0l(l>{r*QSi?-aUDWMopW%6AU{u87GC}ByUw{vu#1;1BZ(#$v_*x- zqXghSNr1W#!v=DJtQOZKYO)g~N~;LWzlk8R1wVW@Pw#FE&^sRVMza6f*=878F(&CVkroan zDFMs_-~vo&Ef_d`Yydy{?s*vd3i!R7dvIlI4|*89d(pNi?``+;s4Kq*`#ypFhG&GDyH zz@*(yApCKgC8Z*T1<^#41TP5(aPmhXiS>jEmqdu*@wp4qY6VH=P1+Ur!9y*?h0gRD z$v}uPtSut)*h>1Xy{C^5fCrKRa6pVdCnEvWM!A^{iNN%AX~ZA6M`4EM{(n>j1GiMg zBivW)WcyKZ{ID zO2-00X*ZSkhmiq70}>ZZe~`_NnK?n4{&zXqbIKHjo9^jrufFXNnHQ9ss+Fe0si~KF z6eFUx!!DswruYyrjfg?j7vTA8Otwy*Iw|cE$1t#q5&(S91=@FcW%$&H5YPc3<+Fdk zhrkE5 zaPjkPIN2*<<5&j@!$vM84^#k2QTP{iW4DA0SH|$`OZ)KY_K0rRNkj#13gMgcLTCLF zCqMjqz1%V4h*@Xai%?L>CR$ARvteW~B$uu^zRX*<^TdMcJb*T2tuEa?i!&3q@`8$~ z1hGsM0s&zGBw+EN zpu7pl0s>v5%REW|9#j(G0&&ZcVF?}XLef#lKLjV~b0)GNj1YN}#69rm1)yUwP6&S> z+SE+4>tFy82wxe*Il$h{WC;c6QMH_elal%j+65`6E z(~1-vHH#h&59obO!ogW@Ye0~FJ^WF+Xj(vfqi}!vuD=3%GS_1i$<6HoWus4t%<=gK$>+Op;qo2$;q`5J z>hVB(9j>0-h3k7mA;0;A1nhl}AQ~c*@r2HvPi#K= zbQhMPgy$d6V0oF_ETrM$Z#zCfsp}Fxx?aFPUL2Eo54J=)I1Wiv8oMwT0cK22gcQQ5 z&q19musIr;{Ohl6^vh^4bTvgq{u)|rt)bP7onBq>a( znMVo01L*;1kKasfT_yPuh|ObIP|d5RN(ay^%`D1YK3W#2W*AuUPeL%{-hCq3cxkyx z=WMpD+Kh%5ajLH^68<2Dt7AQLR=TQ*@8BlHY!^2gJr*ZNr0!=*fxabpV~;;enZ=Cy z*)mx{L@F6Mgc;RzQ(&*FnAMraF)1)k7~=6lB}=Mc(V~#)tabydA|}xoPOOO@lXHXt zP)i1sFu1?J2TQQx4;4%N3Pq2c2*A+)ApvMc2*}CIA9_7sU3UH9baQhIZ+>tSe*M86 z_#9{a`x#X!RD_A+o+Cl%FaZ1Hk!U-9c znEL{g68ezT$?wzeulio&wJZK`|5q=Zgsr_Xyz<^P_cxZX0;#(*i!cox`1xg}z_EOWkU+W8r>( z_?oXB`=G)eIVY z`TR3Ur~;!g{CsPx$(c%9;?O$d^@8u^=B?Xsuzvs>Cr&_SZSWZ{3Fb7!kf**et*gTb zfyLR&4w9cRNlRcnF5vQwUHIh(oABDlcZlgf=rWm!$O9;>Yj`}$iRvA;b8rmm#?}yC zf9EqFpi}t4|779xnKk=|Z;5DK{un0m>IPQgStassuFQ0?`yo9%I zY{AF3S)U>4Nf12BuBlbtoStAX02mbxKHYcFyPL!L&B7-Jj&*t{2spU2W8m%2GI;Nn zud0WJS`^$;1L9KfslPZAG7+T*4bdWs9bV72f0?g-Vqjwc@OR&_Q+@Ko5WWfjtJ7zi za;pGG_u4A$MU(4!$-%7kKkNSM+yO?p$|)THKF>JV(pa;NNq|WZDN78K0YSI|gdm2( z#L_sdqOC;3Wp*)(`=}eBoY{rtJ(t)*&JRw4X;R9hGOaM7gaO;D)RIC()iCWEktMu7 zAsvI1MoMwgpkvv>Xfhh%eKd(qntRC(teyTN+^LD2XL^T5MjXGYoq&f-2#6PU0?mpH znl0LByo;Ilf&xg0ODe6v`$d3sH(L($j6@hQ?$LffE=0WaM8OP$c?bQhEvx?#aGYjB zAS#8dhtmW6eO~elN+W0~RfjCU=Kx2&K9(Fts|! z(iAI|-91=4b}Upli68)2SiSF|hiQZW?`@ExC9|VL=*o=|yz$`{T)4ImcZUU4 zD*bLJ%#oLJC`uTlYcl`)PS3*rq=esJyaO9+eR%e3>u~zya)4~n_7=zBOv*YBgoLG; zB)pamYeK;g9xW3tP}G4)_DE?(Uc>MF_4O2>q$q`ZE=5+ z_)m0On*5YLS(>s4QW*ayYh@FRdz_485-Q`*8$>O+1pqiOb^=pgw|5DO&Pxay$5RzX)pfDl2z{v11&i4S(9 zg^tRA6!?9F!j0psh?J13R?c?8WR05yiCinZiBjfqo0I_Si9r28X>taPCok&1SAwBR zDlcN1G7lj@AN4RUC8J4GWUlJi4z-|(_ySQQfo?*Y3Wl@%GT|9#{9WGR_m6ez%RrQ) zwv90V`@Mp=9vJ+8`qmb_`u<(GvFks_eoD5rHXv2N7Pf{DQf+L8@!np;912n`Ue2VVOHSExlo3Xml5gFly!5dsxzi9G^V zd+^Q2R^it56}WhJNc~k}j>H6~d#u3m;3O+6|3XK8JKVgJz`11ygQbiT)z3E#e01Hw z&3&JYiWpBO`BTNS2Pc^PXT{@v9B(IM zaqdgf&?_%klqKj7psxw`?L&)GY?-I@5A>79q(hQ~PPflzJrMzspD`dvmcLw+g}cJya7vM47kttm=r^qg^g3?VlR+A53kNrR zmH+t;z}gzn9Qc(T2cPfx0AkTRi;=ad`t2TJJ8NR(5JxuM)D1Rz7EUZJ2Hm$=_#z1~ zuGVJ}_~s?JtE;OEqXl(?pC-gj?Jnr6Y) z*O0MKhdEDjpRDJfGeB;*#Yjnmo@c<^DG~xJSvs5EJ8@sc${+6st*W)17Zg6lcY`d^ zOHn8kK2*;aUxaETLJst2G@jK*J>T1Ir@s)Om#0w#1yOZzFwykPqXgjoG4~J{OhsO^ z5n+ylyGTaHFtQNxjE?G!oYDsn+~mXy`X z8=nfiS1|iltNwZ)Uj6MU36R7T5a#0UQo{N}?w`24OV1c9BL z4arv0h*^! z3m_FK3q!Sqe*I$r;4m=OUqI&Ic@1DbRMr@|;;HX#6Y6hW^a4Mz~9 z*Qpwp)+?T4KKUbml1y|>K*s;%_hB!&g3d3s9?xh=bs)&*DsvvklaZ&Cu%jwXGNnx5 zRpK*hk_`QG%4DWr&sCaKz!cJOD-_iWNsP#U$P<(mC-g59OJh0*i=&?J^NLa{XcqVT zgE>Tn1BgZOqXgi75ddJRe}a)rwNZ@p!}(25f|8hu1*uK2_W$*ueNcIcUswlhVq=7H zp2%3+N zf6Ge)>Rs#KCb9WbQQ*zZGD3fW2Eeygr^ z82G8;7P)FnBt{Od-7Mg(Pxj%$jU0vvA{{P5p%o}P>0}EQZnj*w?|z7V|_K0 zm+=1OUGfHa>Zw&YvC*T_7Avt__zt8yVZ`-OI3zZ847&?Lz$(-_DU#6Iqytt6HOsvv z7_9W*v2$y1&Og?=4{$iYk5Uyh7M3In%{s@G_Y`->Ri)I>zgIWV)bBP2%L{ObvAoBCc7d3|X6X%>;Mi8oVs$-9psEx?fcDa82dN`C(7a>WLfY7jQG=#o?=z*#+AkHbH5}Je_)=Uu7 zC1l-eJA*27?$2XIjau*otqTgXhYEIk6S#0KhYzi~{_wg=z7u?MG4^q|wt#6gXFk$EbKXCjjcC<4XK zQxQUdUKA;h9Qp?sldE1z36OCK`61vsI@UMvt+T6e>--*kvN`k>drlEOfyG344p-ix zyCJPGqD%PKWyzu!Z#MMLIc0hRG^4@fioBrhF0O0#i0lavMgMU-7kArLsrN<6> znh1RM*=IA?W<7wnwF7idG)*DQ;=r^q{_8xQxWyOydf)_&4Yt`1?cqK3i|pfexG4m(T! zaGJ>ZDK^2Bd}KjGgC4@Kv*E#kCIEBK^u^F5)}e7x+%bs>x)C%JB(3V?Q48R~v;b7l z7a{XPbnHU{;9T&m*2*ldFjbjJ+W-%$e&7UPNU@tTV88H2IYU&Ko$}($g0fhez*M$M zy?hx31R?RIAt0IHt4%Ef5cNP=RDtC!bGbBf7(vk7pR*!<%7_6vO zh88piq7hXA(^XKt8V_)HWKt5hDB^>rNi0aG3*vs~JmOyypu8TP?gD0l}$7GE|C$mR20rip%DSycK`)Me;b2-0{f=wpIE|?0C7*v1wX2G=1A4sSBSpXF zKL>1G#2f$}p{2z~E=Ok2>lRQHDvIJhuUT#j~%FKu;t<%jRUkCj{@4 zI4F32bXhl`6tT9HRZ-|YJ=m{QHmzu#7@jT&2_{WPnV_tyt%sD*uY?fIC;_-{EJ

    - From 48df8e6e6188478588bde31f68cd49d727177dc9 Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Fri, 17 Jan 2014 15:59:25 -0500 Subject: [PATCH 009/158] top fixed navbar and completed currencies in Locale dropdown --- catalog/includes/classes/currencies.php | 8 +++++ catalog/templates/core15/classes/output.php | 36 +++++++++++++++++++-- catalog/templates/core15/css/template.css | 34 ++++++++++--------- catalog/templates/core15/header.php | 14 ++++---- 4 files changed, 68 insertions(+), 24 deletions(-) diff --git a/catalog/includes/classes/currencies.php b/catalog/includes/classes/currencies.php index baa8cbaa7..aa9bafecd 100644 --- a/catalog/includes/classes/currencies.php +++ b/catalog/includes/classes/currencies.php @@ -156,6 +156,14 @@ public function getSymbolRight() { return $value['symbol_right']; } } + } + + public function getSessionSymbolLeft() { + foreach ($this->currencies as $key => $value) { + if ($key == $_SESSION['currency']) { + return $value['symbol_left']; + } + } } } ?> \ No newline at end of file diff --git a/catalog/templates/core15/classes/output.php b/catalog/templates/core15/classes/output.php index bcb56232e..f7057e421 100644 --- a/catalog/templates/core15/classes/output.php +++ b/catalog/templates/core15/classes/output.php @@ -338,7 +338,7 @@ public static function getCategoriesStatus($id) { return $result; } /* - * Return the language selection + * Return the language selections * * @access public * @return array @@ -349,8 +349,8 @@ public function getTemplateLanguageSelection($include_image = true, $include_nam $text = ''; $output = ''; foreach ($lC_Language->getAll() as $value) { - if ($include_image === true && $include_name === true) { - $text = '' . $lC_Language->showImage($value['code']) . ' ' . $value['name'] . ''; + if ($include_name === true && $include_image === true) { + $text = '' . $lC_Language->showImage($value['code']) . ' ' . $value['name'] . ''; } else if ($include_name === true && $include_image === false) { $text = $value['name']; } else { @@ -359,6 +359,36 @@ public function getTemplateLanguageSelection($include_image = true, $include_nam $output .= '
  • ' . lc_link_object(lc_href_link(basename($_SERVER['SCRIPT_FILENAME']), lc_get_all_get_params(array('language', 'currency')) . '&language=' . $value['code'], 'AUTO'), $text) . '
  • '; } + return $output; + } + /* + * Return the currency selections + * + * @access public + * @return array + */ + public function getTemplateCurrenciesSelection($include_symbol = true, $include_name = false, $params = '') { + global $lC_Currencies; + + $currency_data = array(); + foreach ($lC_Currencies->currencies as $key => $value) { + $currency_data[] = array('id' => $key, 'text' => $value['title']); + } + foreach ($currency_data as $currency) { + if ($include_name === true && $include_symbol === true) { + $text = '' . $currency['text'] . ' (' . $currency['id'] . ')'; + } else if ($include_name === true && $include_symbol === false) { + $text = '' . $currency['text'] . ''; + } else { + $text = '' . $currency['id'] . ''; + } + echo '
  • + + ' . $text . ' + +
  • '; + } + return $output; } } diff --git a/catalog/templates/core15/css/template.css b/catalog/templates/core15/css/template.css index d1466f4f3..4e3aae004 100644 --- a/catalog/templates/core15/css/template.css +++ b/catalog/templates/core15/css/template.css @@ -162,32 +162,32 @@ max-width: 1170px; } -#loaded7 .navbar .header-lang-dropdown { +#loaded7 .navbar .locale-header-dropdown { left: -45px; } -#loaded7 .navbar .header-lang-dropdown > li { +#loaded7 .navbar .locale-header-dropdown > li { width: 100%; } -#loaded7 .lang-dropdown-image { +#loaded7 .navbar .locale-dropdown-lang-image { position: relative; top: -1px; } -#loaded7 .lang-header-currency { - color: #ffffff; -} - -#loaded7 .lang-dropdown-title { +#loaded7 .navbar .locale-dropdown-lang-title { margin-left: 4px; } -#loaded7 .lang-header-icon { +#loaded7 .navbar .locale-header-icon { position: relative; top: -1px; } +#loaded7 .navbar .locale-header-currency { + color: #ffffff; +} + #loaded7 .navbar-inverse .container { -webkit-border-radius: 0px; -moz-border-radius: 0px; @@ -202,9 +202,9 @@ } #loaded7 .page-header { - border:none; + border: none; padding: 10px 0px 0px; - margin: 0px 0 0px; + margin: 56px 0px 0px; } #loaded7 .logo { @@ -462,8 +462,12 @@ } @media (min-width: 768px) { - .navbar { - border-radius: 0px; + .navbar { + border-radius: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 10; } } @@ -601,8 +605,8 @@ #loaded7 .cursor-pointer { cursor:pointer !important; } -#loaded7 .language-menu { list-style:none; } -#loaded7 .language-menu li { display:inline-block; padding:0; margin-right:8px; } +#loaded7 .locale-menu { list-style:none; } +#loaded7 .locale-menu li { display:inline-block; padding:0; margin-right:8px; } /********************************************************/ /* 10. Site Maintenace masking */ diff --git a/catalog/templates/core15/header.php b/catalog/templates/core15/header.php index 304516b25..2437685fd 100644 --- a/catalog/templates/core15/header.php +++ b/catalog/templates/core15/header.php @@ -10,6 +10,8 @@ */ //echo '
    ';
     //print_r($lC_Language);
    +//print_r($lC_Currencies);
    +//print_r($_SESSION);
     //echo '
    '; ?> @@ -47,22 +49,22 @@
    -
    - + + + getBranding('chat_code') != '') { ?> + + + From 8352235627764d26d4d0b6e678e1fed71934296d Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Fri, 17 Jan 2014 19:46:52 -0500 Subject: [PATCH 011/158] much more header work for 1.5 template --- catalog/templates/core15/css/template.css | 95 ++++++++++----- catalog/templates/core15/header.php | 140 ++++++++++++---------- 2 files changed, 139 insertions(+), 96 deletions(-) diff --git a/catalog/templates/core15/css/template.css b/catalog/templates/core15/css/template.css index a14f01de9..c6678c0f4 100644 --- a/catalog/templates/core15/css/template.css +++ b/catalog/templates/core15/css/template.css @@ -163,57 +163,91 @@ /********************************************************/ /* header/nav */ -#loaded7 .navbar { - min-height: 0px; +#loaded7 .topnav { + width: 100%; + min-height: 35px; + background-color: #000000; + list-style: none outside none; + margin-bottom: 0; + padding-left: 0; } -#loaded7 .navbar-nav > li > a { - padding-bottom: 7px; - padding-top: 7px; +#loaded7 .topnav > li { + float: right; } -#loaded7 .navbar .container { - max-width: 1170px; +#loaded7 .topnav .navbar-nav > li > a { + color: #999999; +} + +#loaded7 .topnav .navbar-nav > li > a:hover, #loaded7 .topnav .navbar-nav > li > a:focus { + background-color: rgba(0, 0, 0, 0); + color: #FFFFFF; +} + +#loaded7 .topnav .navbar-nav > .dropdown > a:hover .caret { + border-bottom-color: #FFFFFF; + border-top-color: #FFFFFF; +} + +#loaded7 .topnav .navbar-nav > .open > a { + background-color: #080808; + color: #FFFFFF; } -#loaded7 .navbar .locale-header-dropdown { - left: -68px; +#loaded7 .topnav .navbar-nav > .dropdown > a .caret { + border-bottom-color: #999999; + border-top-color: #999999; } -#loaded7 .navbar .account-dropdown { - left: -40px; +#loaded7 .topnav .locale-header-dropdown { } -#loaded7 .navbar .cart-dropdown { - left: -38px; +#loaded7 .topnav .account-dropdown { } -#loaded7 .navbar .locale-header-dropdown > li, #loaded7 .navbar .account-dropdown > li { +#loaded7 .topnav .cart-dropdown { + left: -61px; +} + +#loaded7 .topnav .locale-header-dropdown > li, #loaded7 .topnav .account-dropdown > li { width: 100%; } -#loaded7 .navbar .locale-dropdown-lang-image { +#loaded7 .topnav .locale-dropdown-lang-image { position: relative; top: -1px; } -#loaded7 .navbar .locale-dropdown-lang-title { +#loaded7 .topnav .locale-dropdown-lang-title { margin-left: 4px; } -#loaded7 .navbar .locale-header-icon { +#loaded7 .topnav .locale-header-icon { position: relative; top: -1px; } -#loaded7 .navbar .locale-header-currency { - color: #ffffff; +#loaded7 .topnav .locale-header-currency { } #loaded .account-dropdown > ul > li { width: 100%; } +#loaded7 .navbar { + min-height: 0px; +} + +#loaded7 .navbar-nav > li > a { + padding-bottom: 7px; + padding-top: 7px; +} + +#loaded7 .navbar .container { + max-width: 1170px; +} + #loaded7 .navbar-inverse .container { -webkit-border-radius: 0px; -moz-border-radius: 0px; @@ -221,6 +255,18 @@ /*background:#282828; border:none;*/; } +.navbar-toggle { + /*background-color: rgba(0, 0, 0, 0); + border: 1px solid rgba(0, 0, 0, 0); + border-radius: 4px;*/ + float: left; + /*margin-bottom: 8px;*/ + margin-left: 15px; + /*margin-top: 8px; + padding: 9px 10px; + position: relative;*/ +} + #loaded7 .nav-tabs > li > a { -webkit-border-radius: 0px; -moz-border-radius: 0px; @@ -486,17 +532,6 @@ @media (min-width: 768px) and (max-width: 939px) { } -@media (min-width: 768px) { - .navbar { - border-radius: 0; - /* uncomment below for fixed top navbar when scrolling */ - /*position: fixed; - top: 0; - width: 100%; - z-index: 10;*/; - } -} - @media (min-width: 600px) and (max-width: 767px) { #loaded7 .show-on-mobile { display: block; diff --git a/catalog/templates/core15/header.php b/catalog/templates/core15/header.php index 9d7546cf5..c07a28d99 100644 --- a/catalog/templates/core15/header.php +++ b/catalog/templates/core15/header.php @@ -14,79 +14,67 @@ //print_r($_SESSION); //echo ''; ?> - -' . "\n"; } } diff --git a/catalog/includes/classes/specials.php b/catalog/includes/classes/specials.php index bde0cd725..77c476c6e 100644 --- a/catalog/includes/classes/specials.php +++ b/catalog/includes/classes/specials.php @@ -112,7 +112,11 @@ public function getListingOutput() { $output .= '
    ' . lc_clean_html($Qspecials->value('products_description')) . '
    ' . "\n"; $output .= '
    ' . $lC_Currencies->displayPrice($Qspecials->value('products_price'), $Qspecials->valueInt('products_tax_class_id')) . ' ' . $lC_Currencies->displayPrice($Qspecials->value('specials_new_products_price'), $Qspecials->valueInt('products_tax_class_id')) . '
    ' . "\n"; $output .= '
    ' . lc_link_object(lc_href_link(FILENAME_PRODUCTS, $Qspecials->value('products_keyword')), $lC_Image->show($Qspecials->value('image'), $Qspecials->value('products_name'))) . '
    ' . "\n"; - $output .= '
    ' . "\n"; + if (DISABLE_ADD_TO_CART == 1 && $Qspecials->valueInt('products_quantity') < 1) { + $output .= '
    ' . "\n"; + } else { + $output .= '
    ' . "\n"; + } $output .= '' . "\n"; } diff --git a/catalog/includes/javascript/general.js.php b/catalog/includes/javascript/general.js.php index cc03fe4fc..d52bd438f 100644 --- a/catalog/includes/javascript/general.js.php +++ b/catalog/includes/javascript/general.js.php @@ -51,6 +51,7 @@ function setMaintenanceMode(s) { + $(":contains('get('out_of_stock'); ?>')").closest('button').removeClass("btn-success").addClass("btn-default"); }); diff --git a/catalog/includes/modules/product_listing.php b/catalog/includes/modules/product_listing.php index 0c8673e0f..58ab23b6a 100644 --- a/catalog/includes/modules/product_listing.php +++ b/catalog/includes/modules/product_listing.php @@ -79,7 +79,11 @@ break; case 'PRODUCT_LIST_BUY_NOW': - $output .= '
    ' . "\n"; + if (DISABLE_ADD_TO_CART == 1 && $lC_Product->getQuantity() < 1) { + $output .= '
    ' . "\n"; + } else { + $output .= '
    ' . "\n"; + } break; } } From 1de64b0d0e73b2d89b98191c955fcd16984c4073 Mon Sep 17 00:00:00 2001 From: datazen Date: Thu, 23 Jan 2014 16:39:07 -0500 Subject: [PATCH 018/158] [IC] updated to next version --- catalog/includes/version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog/includes/version.txt b/catalog/includes/version.txt index 91f465bf3..8218a6979 100644 --- a/catalog/includes/version.txt +++ b/catalog/includes/version.txt @@ -1 +1 @@ -7.002.0.0|01/22/2014 +7.002.0.1|02/05/2014 From 4cf27f6c06114b98983f42e3df4c649ebdaba4dd Mon Sep 17 00:00:00 2001 From: datazen Date: Thu, 23 Jan 2014 16:42:54 -0500 Subject: [PATCH 019/158] [IC] working on QPB --- .../classes/product_classes.php | 219 ++++++++++++++ .../product_classes/classes/rpc.php | 78 +++++ .../product_classes/js/product_classes.js.php | 39 +++ .../product_classes/modal/delete.php | 94 ++++++ .../product_classes/modal/edit.php | 117 ++++++++ .../product_classes/modal/new.php | 115 ++++++++ .../product_classes/pages/main.php | 60 ++++ .../product_classes/product_classes.php | 28 ++ .../pages/tabs/options_subproducts.inc.php | 210 +++++++++++++ .../admin/hooks/database_tables.xml | 13 + .../admin/hooks/product_classes.xml | 28 ++ .../admin/hooks/product_edit_data.xml | 17 ++ .../admin/hooks/product_edit_images.xml | 17 ++ .../admin/hooks/product_edit_options.xml | 26 ++ .../Loaded_7_Pro/admin/hooks/store_class.xml | 13 + .../en_US/modules/access/product_classes.php | 12 + .../product_attributes/product_classes.php | 12 + .../admin/languages/en_US/product_classes.php | 38 +++ .../product_attributes/product_classes.php | 45 +++ catalog/addons/Loaded_7_Pro/controller.php | 276 ++++++++++++++++++ .../Loaded_7_Pro/images/loaded7_pro.png | Bin 0 -> 3708 bytes .../addons/Loaded_7_Pro/languages/en_US.xml | 15 + 22 files changed, 1472 insertions(+) create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/product_classes.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/rpc.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/js/product_classes.js.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/delete.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/edit.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/new.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/pages/main.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/product_classes/product_classes.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/products/pages/tabs/options_subproducts.inc.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/database_tables.xml create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/product_classes.xml create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_data.xml create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_images.xml create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_options.xml create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/store_class.xml create mode 100644 catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/access/product_classes.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/product_attributes/product_classes.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/languages/en_US/product_classes.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/modules/product_attributes/product_classes.php create mode 100644 catalog/addons/Loaded_7_Pro/controller.php create mode 100644 catalog/addons/Loaded_7_Pro/images/loaded7_pro.png create mode 100644 catalog/addons/Loaded_7_Pro/languages/en_US.xml diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/product_classes.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/product_classes.php new file mode 100644 index 000000000..7e8bf8374 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/product_classes.php @@ -0,0 +1,219 @@ +query('select * from :table_product_classes where language_id = :language_id order by name'); + $Qclasses->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qclasses->bindInt(':language_id', $lC_Language->getID()); + $Qclasses->execute(); + + $result = array('aaData' => array()); + while ( $Qclasses->next() ) { + $name = $Qclasses->value('name'); + if ( $Qclasses->valueInt('id') == DEFAULT_PRODUCT_CLASSES_ID ) { + $name .= '' . $lC_Language->get('default_entry') . ''; + } + + $title = '' . $name . ''; + $comment = '' . $Qclasses->value('comment') . ''; + $usage = ' '; + $action = ' + ' . (($media === 'mobile-portrait' || $media === 'mobile-landscape') ? NULL : $lC_Language->get('icon_edit')) . ' + + '; + + $result['aaData'][] = array("$title", "$comment", "$usage", "$action"); + $result['entries'][] = $Qclasses->toArray(); + } + + $Qclasses->freeResult(); + + return $result; + } + /* + * Return the data used on the dialog forms + * + * @param integer $id The customer groups id + * @param boolean $edit True = called from edit dialog else called from delete dialog + * @access public + * @return array + */ + public static function getFormData($id = null, $edit = false) { + global $lC_Database, $lC_Language; + + $result = array(); + if (isset($id) && $id != null) { + if ($edit === true) { + $Qclasses = $lC_Database->query('select language_id, name, comment from :table_product_classes where id = :id'); + $Qclasses->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qclasses->bindInt(':id', $id); + $Qclasses->execute(); + + $status_name = array(); + $result['editComment'] = ''; + while ( $Qclasses->next() ) { + $status_name[$Qclasses->valueInt('language_id')] = $Qclasses->value('name'); + $result['editComment'] = $Qclasses->value('comment'); + } + $result['editNames'] = ''; + foreach ( $lC_Language->getAll() as $l ) { + $result['editNames'] .= '' . lc_draw_input_field('name[' . $l['id'] . ']', (isset($status_name[$l['id']]) ? $status_name[$l['id']] : null), 'class="input-unstyled"') . '
    '; + } + } else { + $Qclasses = $lC_Database->query('select count(*) as total from :table_products where product_class_id = :product_class_id'); + $Qclasses->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qclasses->bindInt(':product_class_id', $id); + $Qclasses->execute(); + + if ( $Qclasses->valueInt('total') > 0 ) { + $result['totalProducts'] = $Qclasses->valueInt('total'); + $result['rpcStatus'] = -2; + } + } + } else { + $result['names'] = ''; + foreach ( $lC_Language->getAll() as $l ) { + $result['names'] .= '' . lc_draw_input_field('name[' . $l['id'] . ']', null, 'class="input-unstyled"') . '
    '; + } + } + + return $result; + } + /* + * Get the customer group information + * + * @param integer $id The customer group id + * @access public + * @return array + */ + public static function getData($id) { + global $lC_Database, $lC_Language; + + $Qclasses = $lC_Database->query('select* from :table_product_classes where id = :id and language_id = :language_id order by name'); + $Qclasses->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qclasses->bindInt(':id', $id); + $Qclasses->bindInt(':language_id', $lC_Language->getID()); + + $data = $Qclasses->toArray(); + + $Qclasses->freeResult(); + + return $data; + } + /* + * Save the customer group information + * + * @param integer $id The customer group id used on update, null on insert + * @param array $data An array containing the customer group information + * @param boolean $default True = set the customer group to be the default + * @access public + * @return boolean + */ + public static function save($id = null, $data, $default = false) { + global $lC_Database, $lC_Language; + + $error = false; + + $lC_Database->startTransaction(); + + if ( is_numeric($id) ) { + $product_class_id = $id; + } else { + $Qpc = $lC_Database->query('select max(id) as product_class_id from :table_product_classes'); + $Qpc->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qpc->execute(); + + $product_class_id = $Qpc->valueInt('product_class_id') + 1; + } + + foreach ( $lC_Language->getAll() as $l ) { + if ( is_numeric($id) ) { + $Qpc = $lC_Database->query('update :table_product_classes set name = :name, comment = :comment where id = :id and language_id = :language_id'); + } else { + $Qpc = $lC_Database->query('insert into :table_product_classes (name, comment, language_id) values (:name, :comment, :language_id)'); + } + + $Qpc->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qpc->bindInt(':id', $product_class_id); + $Qpc->bindValue(':name', $data['name'][$l['id']]); + $Qpc->bindValue(':comment', $data['comment']); + $Qpc->bindInt(':language_id', $l['id']); + $Qpc->setLogging($_SESSION['module'], $product_class_id); + $Qpc->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + } + + if ( $error === false ) { + if ( $default === true ) { + $Qupdate = $lC_Database->query('update :table_configuration set configuration_value = :configuration_value where configuration_key = :configuration_key'); + $Qupdate->bindTable(':table_configuration', TABLE_CONFIGURATION); + $Qupdate->bindInt(':configuration_value', $product_class_id); + $Qupdate->bindValue(':configuration_key', 'DEFAULT_PRODUCT_CLASSES_ID'); + $Qupdate->setLogging($_SESSION['module'], $product_class_id); + $Qupdate->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + } + } + } + + if ( $error === false ) { + $lC_Database->commitTransaction(); + + if ( $default === true ) { + lC_Cache::clear('configuration'); + } + + return true; + } + + $lC_Database->rollbackTransaction(); + + return false; + } + /* + * Delete the customer group record + * + * @param integer $id The customer group id to delete + * @access public + * @return boolean + */ + public static function delete($id) { + global $lC_Database; + + $Qclasses = $lC_Database->query('delete from :table_product_classes where id = :id'); + $Qclasses->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qclasses->bindInt(':id', $id); + $Qclasses->setLogging($_SESSION['module'], $id); + $Qclasses->execute(); + + if ( $lC_Database->isError() ) { + return false; + } + + return true; + } +} +?> \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/rpc.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/rpc.php new file mode 100644 index 000000000..c418dc4ef --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/classes/rpc.php @@ -0,0 +1,78 @@ + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/js/product_classes.js.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/js/product_classes.js.php new file mode 100644 index 000000000..faf5f69e2 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/js/product_classes.js.php @@ -0,0 +1,39 @@ + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/delete.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/delete.php new file mode 100644 index 000000000..6895ceaa9 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/delete.php @@ -0,0 +1,94 @@ + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/edit.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/edit.php new file mode 100644 index 000000000..33b2e1160 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/edit.php @@ -0,0 +1,117 @@ + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/new.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/new.php new file mode 100644 index 000000000..c9f8bede6 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/modal/new.php @@ -0,0 +1,115 @@ + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/pages/main.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/pages/main.php new file mode 100644 index 000000000..9836d1d27 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/pages/main.php @@ -0,0 +1,60 @@ + + +
    + +
    +

    getPageTitle(); ?>

    +
    + +
    +
    + + + + + + + + + + + + + + + + +
    get('table_heading_name'); ?>get('table_heading_comment'); ?>get('table_heading_usage'); ?>  get('table_heading_action'); ?>
     
    +
    +
    + +
    +
    +loadModal($lC_Template->getModule()); ?> + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/product_classes.php b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/product_classes.php new file mode 100644 index 000000000..fa1be3dfe --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/product_classes/product_classes.php @@ -0,0 +1,28 @@ +_page_title = $lC_Language->get('heading_title'); + } +} +?> \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/products/pages/tabs/options_subproducts.inc.php b/catalog/addons/Loaded_7_Pro/admin/applications/products/pages/tabs/options_subproducts.inc.php new file mode 100644 index 000000000..e76cc7e88 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/products/pages/tabs/options_subproducts.inc.php @@ -0,0 +1,210 @@ + +
    + + +
    + +
    + Coming Soon ... +
    + +
    + + + + + + + + + + + + + + + +
    get('table_heading_sub_products_name'); ?>get('table_heading_sub_products_status'); ?>get('table_heading_sub_products_weight'); ?>get('table_heading_sub_products_sku'); ?>get('table_heading_sub_products_qoh'); ?>get('table_heading_sub_products_cost'); ?>get('table_heading_sub_products_img'); ?>get('table_heading_action'); ?>
    +
    + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/database_tables.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/database_tables.xml new file mode 100644 index 000000000..41ee6411f --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/database_tables.xml @@ -0,0 +1,13 @@ + + + Add Pro DB Tables + 1.0.0 + 2.3.2 + loadedcommerce.com + + + + + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_classes.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_classes.xml new file mode 100644 index 000000000..38c0134f4 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_classes.xml @@ -0,0 +1,28 @@ + + + After Image Groups, add Product Classes + 1.0.0 + 2.3.2 + loadedcommerce.com + + + + loadIniFile(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/languages/en_US/modules/access/product_classes.php', null, null, true);]]> + $lC_Template->setSubOf('product_settings'); + + + + '?image_groups'),]]> + 'classes.png', + 'title' => $lC_Language->get('access_product_classes_title'), + 'identifier' => '?product_classes'), ]]> + + + + + 0) { $ok = TRUE;]]> + 0) { $ok = TRUE;]]> + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_data.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_data.xml new file mode 100644 index 000000000..4ea50ef92 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_data.xml @@ -0,0 +1,17 @@ + + + Enable Multi SKU Inv Control + 1.0.0 + 2.3.2 + loadedcommerce.com + + + get('text_multi_sku'); ?>" upselldesc="get('text_multi_sku_desc'); ?>" for="ic_radio_2" class="upsellinfo disabled oicb button red-activegetInt('has_children') == 1 || $pInfo->getInt('has_subproducts') == 1) ? ' active' : ''); ?>">]]> + getInt('has_children') == 1 || $pInfo->getInt('has_subproducts') == 1) ? ' active' : ''); ?>">]]> + + + get('text_multi_sku') . '' . lc_go_pro() . ''; ?>]]> + get('text_multi_sku'); ?>]]> + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_images.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_images.xml new file mode 100644 index 000000000..f98547c16 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_images.xml @@ -0,0 +1,17 @@ + + + Enable Pro on Images Tab + 1.0.0 + 2.3.2 + loadedcommerce.com + + + get('text_additional_images'); ?>]]> + get('text_additional_images'); ?>]]> + + + ]]> +
    get('subsection_original_images'); ?>
    get('subsection_images'); ?>
    ]]>
    +
    +
    +
    \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_options.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_options.xml new file mode 100644 index 000000000..22a99b369 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_edit_options.xml @@ -0,0 +1,26 @@ + + + Enable Pro on Options Tab + 1.0.0 + 2.3.2 + loadedcommerce.com + + + get('text_multi_sku'); ?>" upselldesc="get('text_multi_sku_desc'); ?>" for="ioc_radio_2" class="upsellinfo disabled oicb button red-activegetInt('has_children') == 1 || $pInfo->getInt('has_subproducts') == 1) ? ' active' : ''); ?>">]]> + getInt('has_children') == 1 || $pInfo->getInt('has_subproducts') == 1) ? ' active' : ''); ?>">]]> + + + get('text_multi_sku') . '' . lc_go_pro() . ''; ?>]]> + get('text_multi_sku'); ?>]]> + + + ]]> + ]]> + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/store_class.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/store_class.xml new file mode 100644 index 000000000..83959d3d1 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/store_class.xml @@ -0,0 +1,13 @@ + + + Hide Pro Template Pack + 1.0.0 + 2.3.2 + loadedcommerce.com + + + $type ) {]]> + + + + \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/access/product_classes.php b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/access/product_classes.php new file mode 100644 index 000000000..7dc443b88 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/access/product_classes.php @@ -0,0 +1,12 @@ +# $Id: product_classes.php v1.0 2013-01-01 datazen $ +# +# LoadedCommerce, Innovative eCommerce Solutions +# http://www.loadedcommerce.com +# +# Copyright (c) 2013 Loaded Commerce, LLC +# +# @author LoadedCommerce Team +# @copyright (c) 2013 LoadedCommerce Team +# @license http://loadedcommerce.com/license.html + +access_product_classes_title = Product Classes \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/product_attributes/product_classes.php b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/product_attributes/product_classes.php new file mode 100644 index 000000000..c0acd0786 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/modules/product_attributes/product_classes.php @@ -0,0 +1,12 @@ +# $Id: product_classes.php v1.0 2013-01-01 datazen $ +# +# LoadedCommerce, Innovative eCommerce Solutions +# http://www.loadedcommerce.com +# +# Copyright (c) 2013 Loaded Commerce, LLC +# +# @author LoadedCommerce Team +# @copyright (c) 2013 LoadedCommerce Team +# @license http://loadedcommerce.com/license.html + +product_attributes_product_classes_title = Product Classes \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/languages/en_US/product_classes.php b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/product_classes.php new file mode 100644 index 000000000..c15fcc747 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/product_classes.php @@ -0,0 +1,38 @@ +# $Id: product_classes.php v1.0 2011-11-04 datazen $ +# +# LoadedCommerce, Innovative eCommerce Solutions +# http://www.loadedcommerce.com +# +# Copyright (c) 2011 LoadedCommerce.com +# +# @author LoadedCommerce Team +# @copyright (c) 2011 LoadedCommerce Team +# @license http://loadedcommerce.com/license.html + +heading_title = Product Classes + +access_product_classes_title = Product Classes + +table_heading_name = Name +table_heading_comment = Comment +table_heading_usage = Usage +table_heading_action = Action + +modal_heading_new_class = New Product Class +modal_heading_edit_class = Edit Product Class +modal_heading_delete_class = Delete Product Class + +field_name = Name: +field_comment = Comment: +field_status = Status: +field_set_as_default = Set as Default? + +button_new_class = New Class + +introduction_new_class = Please fill in the following information for the new class. +introduction_edit_class = Please make the necessary changes for this class. +introduction_delete_class = Please verify the removal of this classe. + +delete_error_class_prohibited = Error: The default class cannot be removed. +delete_error_class_in_use_1 = Error: This class is currently assigned to +delete_error_class_in_use_2 = product(s) and cannot be removed. \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/modules/product_attributes/product_classes.php b/catalog/addons/Loaded_7_Pro/admin/modules/product_attributes/product_classes.php new file mode 100644 index 000000000..16087e42f --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/modules/product_attributes/product_classes.php @@ -0,0 +1,45 @@ +_section = 'dataManagementSettings'; + } + + public function setFunction($value) { + global $lC_Database, $lC_Language; + + $string = ''; + + if (defined('ADDONS_SYSTEM_LOADED_7_PRO_STATUS') && ADDONS_SYSTEM_LOADED_7_PRO_STATUS == '1') { + $Qclass = $lC_Database->query('select id, name from :table_product_classes where language_id = :language_id order by name'); + $Qclass->bindTable(':table_product_classes', TABLE_PRODUCT_CLASSES); + $Qclass->bindInt(':language_id', $lC_Language->getID()); + $Qclass->execute(); + + $classes = array(); + while ( $Qclass->next() ) { + $classes[] = array('id' => $Qclass->valueInt('id'), + 'text' => $Qclass->value('name')); + } + + if ( !empty($classes) ) { + $string = lc_draw_pull_down_menu('attributes[' . self::getID() . ']', $classes, $value, 'class="select full-width"'); + } + } + + return $string; + } +} +?> \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/controller.php b/catalog/addons/Loaded_7_Pro/controller.php new file mode 100644 index 000000000..32b4b93ad --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/controller.php @@ -0,0 +1,276 @@ +modCheck(DIR_FS_CATALOG . 'includes/classes/transport.php')); + +class Loaded_7_Pro extends lC_Addon { // your addon must extend lC_Addon + /* + * Class constructor + */ + public function Loaded_7_Pro() { + global $lC_Language, $lC_Database; + /** + * The addon type (category) + * valid types; payment, shipping, themes, checkout, catalog, admin, reports, connectors, other + */ + $this->_type = 'systems'; + /** + * The addon class name + */ + $this->_code = 'Loaded_7_Pro'; + /** + * The addon title used in the addons store listing + */ + $this->_title = $lC_Language->get('addon_system_pro_title'); + /** + * The addon description used in the addons store listing + */ + $this->_description = $lC_Language->get('addon_system_pro_description'); + /** + * The developers name + */ + $this->_author = 'Loaded Commerce, LLC'; + /** + * The developers web address + */ + $this->_authorWWW = 'http://www.loadedcommerce.com'; + /** + * The addon version + */ + $this->_version = '1.0.2'; + /** + * The Loaded 7 core compatibility version + */ + $this->_compatibility = '7.002.0.1'; // the addon is compatible with this core version and later + /** + * The base64 encoded addon image used in the addons store listing + */ + $this->_thumbnail = lc_image(DIR_WS_CATALOG . 'addons/' . $this->_code . '/images/loaded7_pro.png', $this->_title); + /** + * The addon enable/disable switch + */ + if (defined('INSTALLATION_ID') && INSTALLATION_ID != '') { + if ($this->_timeToCheck() === true) { + $this->_enabled = $this->_validateSerial(INSTALLATION_ID); + if ($this->_enabled) $this->_updateLastChecked(); + } else { + $this->_enabled = (defined('ADDONS_SYSTEM_' . strtoupper($this->_code) . '_STATUS') && @constant('ADDONS_SYSTEM_' . strtoupper($this->_code) . '_STATUS') == '1') ? true : false; + } + if (!$this->_enabled) { + $lC_Database->simpleQuery("update " . TABLE_CONFIGURATION . " set configuration_value = '0' where configuration_key = 'ADDONS_SYSTEM_" . strtoupper($this->_code) . "_STATUS'"); + } else { + $lC_Database->simpleQuery("update " . TABLE_CONFIGURATION . " set configuration_value = '1' where configuration_key = 'ADDONS_SYSTEM_" . strtoupper($this->_code) . "_STATUS'"); + } + } else { + $this->_enabled = false; + } + /** + * Automatically install the module + */ + $this->_auto_install = true; + } + /** + * Checks to see if the addon has been installed + * + * @access public + * @return boolean + */ + public function isInstalled() { + return (bool)defined('ADDONS_SYSTEM_' . strtoupper($this->_code) . '_STATUS'); + } + /** + * Install the addon + * + * @access public + * @return void + */ + public function install() { + global $lC_Database; + + if (isset($_SESSION['remove_loaded_7_pro']) && $_SESSION['remove_loaded_7_pro'] == true) { + unset($_SESSION['remove_loaded_7_pro']); + $this->_clearCache(); + } else if (!$this->_checkStatus()) { + $lC_Database->simpleQuery("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'ADDONS_SYSTEM_" . strtoupper($this->_code) . "_STATUS'"); + $lC_Database->simpleQuery("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Enable AddOn', 'ADDONS_SYSTEM_" . strtoupper($this->_code) . "_STATUS', '1', 'Do you want to enable this addon?', '6', '0', 'lc_cfg_use_get_boolean_value', 'lc_cfg_set_boolean_value(array(1, -1))', now())"); + $lC_Database->simpleQuery("delete from " . TABLE_TEMPLATES_BOXES . " where modules_group like '%Loaded_7_Pro%'"); + $lC_Database->simpleQuery("insert into " . TABLE_TEMPLATES_BOXES . " (title, code, author_name, author_www, modules_group) values ('Loaded 7 Pro', '" . $this->_type . "', '" . $this->_author . "','" . $this->_authorWWW . "', 'systems|Loaded_7_Pro')"); + // product classes + $lC_Database->simpleQuery("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'DEFAULT_PRODUCT_CLASSES_ID'"); + $lC_Database->simpleQuery("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('', 'DEFAULT_PRODUCT_CLASSES_ID', '1', '', '6', '0', '', '', now())"); + $lC_Database->simpleQuery("CREATE TABLE IF NOT EXISTS `" . DB_TABLE_PREFIX . "product_classes` (id int(11) NOT NULL AUTO_INCREMENT,`name` varchar(128) NOT NULL DEFAULT '', `comment` varchar(255) DEFAULT NULL, `status` tinyint(1) NOT NULL DEFAULT '0', language_id int(11) NOT NULL DEFAULT '1', PRIMARY KEY (id)) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=2;"); + $lC_Database->simpleQuery("delete from `" . DB_TABLE_PREFIX . "product_classes` where id = '1'"); + $lC_Database->simpleQuery("insert into `" . DB_TABLE_PREFIX . "product_classes` (id, name, comment, status, language_id) VALUES ('1', 'Common', 'Common Class', 1, 1);"); + $lC_Database->simpleQuery("delete from " . TABLE_TEMPLATES_BOXES . " where code = 'product_classes'"); + $lC_Database->simpleQuery("insert into " . TABLE_TEMPLATES_BOXES . " (title, code, author_name, author_www, modules_group) VALUES ('Product Classes', 'product_classes', 'Loaded Commerce, LLC', 'http://www.loadedcommerce.com', 'product_attributes')"); + $lC_Database->simpleQuery("alter table " . TABLE_PRODUCTS . " ADD `is_subproduct` TINYINT( 1 ) NOT NULL DEFAULT '0'"); + // skip shipping + $lC_Database->simpleQuery("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'SKIP_CHECKOUT_SHIPPING_PAGE'"); + $lC_Database->simpleQuery("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, date_added, use_function, set_function) VALUES('Skip Shipping Page', 'SKIP_CHECKOUT_SHIPPING_PAGE', '-1', 'Bypass the checkout shipping page? No shipping will be charged.', 19, 0, NULL, now(), 'lc_cfg_use_get_boolean_value', 'lc_cfg_set_boolean_value(array(1, -1))')"); + + $this->_clearCache(); + } + } + /** + * Return the configuration parameter keys an an array + * + * @access public + * @return array + */ + public function getKeys() { + global $lC_Database; + + if (!isset($this->_keys)) { + $this->_keys = array('ADDONS_SYSTEM_' . strtoupper($this->_code) . '_STATUS'); + } + + return $this->_keys; + } + /** + * Remove the addon + * + * @access public + * @return void + */ + public function remove() { + global $lC_Database, $lC_Language; + + if ($this->hasKeys()) { + $Qdel = $lC_Database->query('delete from :table_configuration where configuration_key in (":configuration_key")'); + $Qdel->bindTable(':table_configuration', TABLE_CONFIGURATION); + $Qdel->bindRaw(':configuration_key', implode('", "', $this->getKeys())); + $Qdel->execute(); + } + + if (file_exists(DIR_FS_CATALOG . 'addons/' . $this->_code . '/languages/' . $lC_Language->getCode() . '.xml')) { + foreach ($lC_Language->extractAddonDefinitions(DIR_FS_CATALOG . 'addons/' . $this->_code . '/languages/' . $lC_Language->getCode() . '.xml') as $def) { + $Qdel = $lC_Database->query('delete from :table_languages_definitions where definition_key = :definition_key and content_group = :content_group'); + $Qdel->bindTable(':table_languages_definitions', TABLE_LANGUAGES_DEFINITIONS); + $Qdel->bindValue(':definition_key', $def['key']); + $Qdel->bindValue(':content_group', $def['group']); + $Qdel->execute(); + } + } + // product classes + $lC_Database->simpleQuery("DROP TABLE IF EXISTS `" . DB_TABLE_PREFIX . "product_classes`"); + $lC_Database->simpleQuery("alter table " . TABLE_PRODUCTS . " DROP COLUMN `is_subproduct`"); + $lC_Database->simpleQuery("delete from " . TABLE_TEMPLATES_BOXES . " where modules_group like '%Loaded_7_Pro%'"); + $lC_Database->simpleQuery("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'DEFAULT_PRODUCT_CLASSES_ID'"); + $lC_Database->simpleQuery("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'SKIP_CHECKOUT_SHIPPING_PAGE'"); + + $_SESSION['remove_loaded_7_pro'] = true; + + $this->_clearCache(); + } + /** + * Clear the cache + * + * @access public + * @return void + */ + private function _clearCache() { + lC_Cache::clear('configuration'); + lC_Cache::clear('languages'); + lC_Cache::clear('addons'); + lC_Cache::clear('vqmoda'); + } + /** + * Check the addon install status + * + * @access public + * @return void + */ + private function _checkStatus() { + $addons = ''; + if (file_exists('../includes/work/cache/addons.cache')) { + $addons = @file_get_contents('../includes/work/cache/addons.cache'); + } + + return (strstr($addons, 'Loaded_7_Pro/controller.php') != '') ? true : false; + } + /** + * Validate the serial is valid and active + * + * @access private + * @return boolean + */ + private function _validateSerial($serial) { + $result = array(); + $validateArr = array('serial' => $serial, + 'storeName' => STORE_NAME, + 'storeEmail' => STORE_OWNER_EMAIL_ADDRESS, + 'storeWWW' => HTTP_SERVER . DIR_WS_HTTP_CATALOG); + + $checksum = hash('sha256', json_encode($validateArr)); + $validateArr['checksum'] = $checksum; + + $resultXML = transport::getResponse(array('url' => 'https://api.loadedcommerce.com/1_0/check/serial/?product=pro', 'method' => 'post', 'parameters' => $validateArr)); + $result = utility::xml2arr($resultXML); + + if ($result['data']['error'] == '1') return false; + + return ($result['data']['valid'] == '1') ? true : false; + } + /** + * Check to see if it's time to re-check addon validity + * + * @access private + * @return boolean + */ + private function _timeToCheck() { + global $lC_Database; + + $itsTime = false; + + $today = substr(lC_DateTime::getShort(date("Y-m-d H:m:s")), 3, 2); + + $instID = (defined('INSTALLATION_ID') && INSTALLATION_ID != '') ? INSTALLATION_ID : NULL; + if ($instID == NULL) return true; + + $last_checked = (isset($_SESSION['Loaded_7_Pro']['last_checked']) && $_SESSION['Loaded_7_Pro']['last_checked'] != NULL) ? $_SESSION['Loaded_7_Pro']['last_checked'] : NULL; + + if ($last_checked == NULL || $today != substr(lC_DateTime::getShort($last_checked), 3, 2)) { + + $itsTime = true; + + $Qcheck = $lC_Database->query('select last_modified from :table_configuration where configuration_key = :configuration_key'); + $Qcheck->bindTable(':table_configuration', TABLE_CONFIGURATION); + $Qcheck->bindValue(':configuration_key', 'ADDONS_SYSTEM_' . strtoupper($this->_code) . '_STATUS'); + $Qcheck->execute(); + + $last_checked = $Qcheck->value('last_modified'); + $_SESSION['Loaded_7_Pro']['last_checked'] = $last_checked; + + $Qcheck->freeResult(); + } + + return $itsTime; + } + /** + * Update the time last checked the install ID + * + * @access private + * @return void + */ + private function _updateLastChecked() { + global $lC_Database; + + $Qcheck = $lC_Database->query('update :table_configuration set last_modified = :last_modified where configuration_key = :configuration_key'); + $Qcheck->bindTable(':table_configuration', TABLE_CONFIGURATION); + $Qcheck->bindValue(':configuration_key', 'ADDONS_SYSTEM_' . strtoupper($this->_code) . '_STATUS'); + $Qcheck->bindRaw(':last_modified', 'now()'); + $Qcheck->execute(); + } +} +?> \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/images/loaded7_pro.png b/catalog/addons/Loaded_7_Pro/images/loaded7_pro.png new file mode 100644 index 0000000000000000000000000000000000000000..5529704c677ed7ee1095f75c7e7b683aa705f6cf GIT binary patch literal 3708 zcmaJ^dpy(o{~xkkBT7iDxus!-O&@$2`wy)TdF^Z9zdU$56cpC}tEGhqQ~0RR9Xj5WvDaz-1@ zi{=AzzKhDbEY2XsFmYtqQQa5;cp3>{NTj-wKv*)~on%YG6EFF-kk9}C57^V*k>Q9t zfg(`J>i8XudLY@C!{&(T2m0a(-XsRdmE`V8(FM;}R)ayFL|yP{I8FoSYfSR+G!LSY z?1HT92|?ZjBoVBy2SNv;I09r60}l!$`%vhpKwa=JT@+`&vke7Uty zjHxsd2(GTBM$mx4KnR37OdF0sz*Iq+8Zb?$2IoPj!L(6u1WHo}^v?z6M57ViP_`J; ze`0Y~x?m3m!xsgG1_T7C2WY8NY3@)M5{cZ=(9~4pAk^rWC=7g{8ig+ZTLD9&6KI~k z3{NTrw4;c3rTQ~;!5pXmIRe@DUs($MpEPk21`WjfLSgC}J4gBr#NqybD4F~(n$EB# z{nzjRDNMJ&YUuu?8G&qyaP3#=u}ET1YK8{Fo^m zW`xny#F!W(eseKYfkwi45QOTfRM@D)6(TkzU zANBs>694GM(DaX7D8~$Rr?CI4(7(4h-Lo_Ow{1C#e;c1f;dDEV)7FjF#xVeZzycOy zXdgH*>->Xm*Smjf_`UiWN6iauUK)L>Sf1wwT`Ig?+BFJ1<=UMs&>#0>tt^he?@$QA zY#yj7$7QA=xWw*;E5w!(jm{WpGFahXP1i37q57S3c;xorgX@z&_Z>=<*-K?vQahWxi{vH3KX>FI;vi4 z2R3@$-n@n3Hbw6-uGXLb>=IOTrDE{@Ldu;>``V(LG~=;S$r+?a1z}$ww}j^IzTWw= z^0QuqUUG>k;LTT~6s0!_^e5*8XC|=53D+cY)_|F7D~2;)jh0&X=b%uTF;YC6guhyH zV;1+Y(L>jI`gwH+L>|97)bcj@{@;@-Ru2JQ#5+y*49~jVL-MR9NjN^lh2_4M^}@+s zs|9^8qU3m_Hbe-TyHpD3riU9Dw3_N4xwhW~$dz|YMzZWnvajAsckrf`FZXc8Ok~DS zp|~(6kt?Q$H;+9uk0*OPpO<`eJb<*wiPpLOm56G8tQ{5*rr z@BB8Y7C|umu{bwulGqd_tHb-vmBm9aK&ZUiEpN;lg#< z8*=^Zvy#4)3yf174%kZ1^9qcx(Qr@VU-b`lwDU`!0 zMtj*sVcVf|d~CK{XXG9DOi$f2k|39^r%k!X+MJ=hR7s4S^5HbWQy;h?CEaVSkflnO z0nsyd4(H7hLUT7@_l)MN!lt9dvmi-+{=Rx!$38+FY7nGW05AtT_b^20bHif!>cm@! zCvl-Y&D{B=IX5-zE2FmmrRcE#On4*GK|FHqHe~NsFPG!NgJVO*c+tQ``c&uI@a4!1 z-QBOMzhtZbtC%FQrprD1`>ig9B&4!vil5Iy^54^LU5w2V7vfMRZCG*}# z>p^{4&~5bDnQyq`5o3w8p#7&?MEx&kuFp&_)n}SCtGi$>OsOk8IWJe`-C$9{XVBSj z+X=eQHKmTV{Csb@8hD);g@Z8bGl4o8|U+&R3sAgN`c(S@7*V23u938)FCMyu#r78$(w!(jPS(RT( zP1tR2T2rc>*ZrM+$A2=#wQ*DOyfQ=ilW2 zHprA+qVCablzG6r{4nF&uAmn^BNwH0k3W@PuVsEgIU5#9tHkatieg5JxhZ>}3mtPi z*TL;rM`ESi!iu;I@$|_nsmy|vt+QrUbVRd*lE^Gudsy+)Tofv|+TTc5)n04rS>KOk zK3Nn?;kL`s2ui$WS*^d{Q@PL@C*ZwPIT)1^Su0T?nX+@a@r=yLZiO8B=xIM&ZLrWj z_L#Ud_u*g*qke14!-k(7;tS2E6RbM}z90E=nyF!}a+0EW1YP-b-hd^>3SkFzlRw&s z*1;`9`1ILD2}UXXsk779Bm`QA@SyEi+yQ*XV zc0qC-B>iTfNl@?*YS*pQYCr=v!Wui>#m#j`VN?6IaW3XXLx$Pw4S`^@7z1miyzzzX ziy!h+hsG9)2A{`Ojgk9fr+W{?c~qaiKuRSRA5ts3FQcpElzcwPudiTYcbYYt%goMh ztn85j%hpX|21Dyx2B{rt6V^k!DL2m}~ngM1TBnzVKMkf0JCBgZ5+ z?>TYxTZMCf^TF{mrIIU9YEzp2&%HzQ^AVL5{s5xa9Is&K!r(}a>2O@Z;TZ1pdxRkQ zpYL>;(l4t4Xw8vVo2&AMD;i}Ehvx9tUHsIXx5{R76Qv-R0r?`x8+!^Wf!I>5q03wR z2fjER^2|~sFeMvGpjFp)MbMOQlfIpO=Gs;8q%J)mbM#D=WJi)4W}qVyK{ukcQ*My2 z1moGbt}fil<#)|;#_urEE}u6S$6&?N3MT$2+T@44iK}1F#`0>p*jhk=uw|A)i{a+M zK^0hcef3g*>VuLdgwGFnd@UeI@27cw8vi|=`Z)J6)e1e@$6{hI`mE}tI-q|>X2-hyjD5XseQtMGq z_rUFkCNiKK86mRl?N`@ho?Qf6DLU6r;udV=fZ6*%uUs9GsujS`-BWQupG9?51}XILE=moj!LlK8y&Vtz=UE#=VDcEVBl4W#MC8+YNh z^eb9?<YStWW^1|4}sQRD#0^+3cE!cyXOEi>R>Y>z~Q zf>FAr=~EN2^sLGJ*fDKIZ)tsRpIJkb?Q+Ao1-scq&kEKl&`_5+R^`);@_y4Bx()*P zj_!O#w&hl~_m^k>yp2`yuum|qdLu=bjoT!|EV(qw>3m9Gs;E{6Q)rc6xHw+8)!GeR zBq6jn@*AzZan0gZJHSEY{JaR|V_v~VuB`;`E$=Mzw_nk@ZwOu~Fw4wsuj-ubMszK>VkMb$O+LcJDy5(7^ziVnB#uPO+ReXvkD zesq59Q;~&>zT1Y%jmK@k7@xOgu=P0|!agqTZCV`vXg05nPDx;=f-9|4Xv|EyPU*T5 z4-QZr(f;%7h7wOT3~*QUuF#bnz+Jw(*ol+O;& + + + + addon_system_pro_title + + checkout + + + addon_system_pro_description + + checkout + + + \ No newline at end of file From afd17a1225af159e85377c240be00ecaa524f2e6 Mon Sep 17 00:00:00 2001 From: gulsarrays Date: Fri, 24 Jan 2014 18:01:43 +0530 Subject: [PATCH 020/158] D2269 Move Image processing buttons to Image Manager --- .../image_groups/classes/image_groups.php | 2 + .../applications/image_groups/classes/rpc.php | 39 ++++++++++++++++++- .../applications/image_groups/pages/main.php | 13 +++++-- .../includes/languages/en_US/image_groups.php | 6 +++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/catalog/admin/includes/applications/image_groups/classes/image_groups.php b/catalog/admin/includes/applications/image_groups/classes/image_groups.php index 6bb380c06..0f0071254 100644 --- a/catalog/admin/includes/applications/image_groups/classes/image_groups.php +++ b/catalog/admin/includes/applications/image_groups/classes/image_groups.php @@ -8,6 +8,8 @@ @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: image_groups.php v1.0 2013-08-08 datazen $ */ + require($lC_Vqmod->modCheck('includes/applications/images/classes/images.php')); + class lC_Image_groups_Admin { /* * Returns the image groups datatable data for listings diff --git a/catalog/admin/includes/applications/image_groups/classes/rpc.php b/catalog/admin/includes/applications/image_groups/classes/rpc.php index 93436cfe8..a4061adeb 100644 --- a/catalog/admin/includes/applications/image_groups/classes/rpc.php +++ b/catalog/admin/includes/applications/image_groups/classes/rpc.php @@ -91,6 +91,43 @@ public static function batchDelete() { } echo json_encode($result); - } + } + /* + * Checks for images + * + * @access public + * @return json + */ + public static function checkImages() { + $result = lC_Images_Admin::check(); + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + + echo json_encode($result); + } + /* + * Returns the data used on the resize dialog form + * + * @access public + * @return json + */ + public static function getResizeInfo() { + $result = lC_Images_Admin::getInfo(); + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + + echo json_encode($result); + } + /* + * Resize images + * + * @access public + * @return json + */ + public static function resizeImages() { + $result = lC_Images_Admin::resizeBatch(); + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + + echo json_encode($result); + } + } ?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/image_groups/pages/main.php b/catalog/admin/includes/applications/image_groups/pages/main.php index b1660a2de..45b87e6d0 100644 --- a/catalog/admin/includes/applications/image_groups/pages/main.php +++ b/catalog/admin/includes/applications/image_groups/pages/main.php @@ -49,11 +49,18 @@ diff --git a/catalog/admin/includes/languages/en_US/image_groups.php b/catalog/admin/includes/languages/en_US/image_groups.php index 9ef995051..9fb29b2f8 100644 --- a/catalog/admin/includes/languages/en_US/image_groups.php +++ b/catalog/admin/includes/languages/en_US/image_groups.php @@ -12,6 +12,12 @@ table_heading_image_groups = Image Groups table_heading_action = Action +table_heading_groups = Groups +table_heading_totals = Existing Images / Total Images +table_heading_total_resized = Total Resized + +modal_heading_check_images = Check Images +modal_heading_resize_images = Resize Images button_new_group = New Group From 4cee69c50a38fc8fa2eaee0fde1607742792bcd5 Mon Sep 17 00:00:00 2001 From: gulsarrays Date: Fri, 24 Jan 2014 18:40:50 +0530 Subject: [PATCH 021/158] D2269 Move Image processing buttons to Image Manager --- .../applications/image_groups/modal/run.php | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 catalog/admin/includes/applications/image_groups/modal/run.php diff --git a/catalog/admin/includes/applications/image_groups/modal/run.php b/catalog/admin/includes/applications/image_groups/modal/run.php new file mode 100644 index 000000000..dacc24d3e --- /dev/null +++ b/catalog/admin/includes/applications/image_groups/modal/run.php @@ -0,0 +1,175 @@ + + + \ No newline at end of file From 0d8fbb466fecfd37690833fc19a11d1e3fb6ac45 Mon Sep 17 00:00:00 2001 From: jamielea Date: Fri, 24 Jan 2014 16:09:28 +0000 Subject: [PATCH 022/158] [B2330] --- .../admin/includes/languages/en_US/customers.php | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/catalog/admin/includes/languages/en_US/customers.php b/catalog/admin/includes/languages/en_US/customers.php index b3e65d313..1651c0d51 100644 --- a/catalog/admin/includes/languages/en_US/customers.php +++ b/catalog/admin/includes/languages/en_US/customers.php @@ -93,18 +93,7 @@ email_greet_general = Dear %s, email_greet_mr = Dear Mr. %s, email_greet_ms = Dear Ms. %s, -email_text = We welcome you to %s. - -You can now take part in the various services we have to offer you. Some of these services include: - -* Permanent Shopping Cart - Any products added to your online shopping cart remain there until you purchase or remove them -* Address Book - Products can be delivered to any addresses you define in your addres book! This is perfect for sending gifts direct to the person themself. -* Order History - The previous orders you have made can be viewed online. -* Product Reviews - Share your opinions on products with other customers. - -For help with any of our online services please e-mail us at: %s - -Please note: This account has been created for you by the store owner. Please use your e-mail address with the following password as your login account: %s +email_text = We welcome you to %s.

    You can now take part in the various services we have to offer you. Some of these services include:

    * Permanent Shopping Cart - Any products added to your online shopping cart remain there until you purchase or remove them
    * Address Book - Products can be delivered to any addresses you define in your addres book! This is perfect for sending gifts direct to the person themself.
    * Order History - The previous orders you have made can be viewed online.
    * Product Reviews - Share your opinions on products with other customers.

    For help with any of our online services please e-mail us at: %s

    Please note: This account has been created for you by the store owner. Please use your e-mail address with the following password as your login account: %s text_new_address_saved = New Address Saved text_changes_saved = Changes Saved From 25aa024fe481bce605386a2a99883f5cae03aa0c Mon Sep 17 00:00:00 2001 From: datazen Date: Fri, 24 Jan 2014 21:09:16 -0500 Subject: [PATCH 023/158] [IC] qpb --- .../products/classes/products.php | 18 ++ .../admin/languages/en_US/products.php | 9 + catalog/addons/Loaded_7_Pro/controller.php | 2 + .../products/classes/products.php | 125 ++++++++++- .../applications/products/pages/main.php | 196 +++++++++--------- .../products/pages/tabs/pricing.php | 104 +++++++++- 6 files changed, 347 insertions(+), 107 deletions(-) create mode 100644 catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php create mode 100644 catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php new file mode 100644 index 000000000..95e0ea887 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php @@ -0,0 +1,18 @@ +modCheck('includes/applications/products/classes/products.php')); + +class lC_Products_Admin_Pro extends lC_Products_Admin { + + +} \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php new file mode 100644 index 000000000..1223001f2 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php @@ -0,0 +1,9 @@ +# @package admin::languages +# @author Loaded Commerce +# @copyright Copyright 2003-2014 Loaded Commerce, LLC +# @copyright Portions Copyright 2003 osCommerce +# @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt +# @version $Id: products.php v1.0 2013-08-08 datazen $ + +error_break_point_must_be_higher = The break point must be higher than the previous break point. +error_break_price_must_be_lower = The price must be lower than the previous price. \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/controller.php b/catalog/addons/Loaded_7_Pro/controller.php index 32b4b93ad..9ba8e51ca 100644 --- a/catalog/addons/Loaded_7_Pro/controller.php +++ b/catalog/addons/Loaded_7_Pro/controller.php @@ -12,7 +12,9 @@ @license http://loadedcommerce.com/license.html */ global $lC_Vqmod; + require_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'includes/classes/transport.php')); +include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/includes/applications/products/classes/products.php')); class Loaded_7_Pro extends lC_Addon { // your addon must extend lC_Addon /* diff --git a/catalog/admin/includes/applications/products/classes/products.php b/catalog/admin/includes/applications/products/classes/products.php index ed88c4c42..850dc3e1f 100644 --- a/catalog/admin/includes/applications/products/classes/products.php +++ b/catalog/admin/includes/applications/products/classes/products.php @@ -8,11 +8,13 @@ @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: products.php v1.0 2013-08-08 datazen $ */ -include_once('includes/applications/customer_groups/classes/customer_groups.php'); -include_once('includes/applications/product_variants/classes/product_variants.php'); -include_once('includes/applications/specials/classes/specials.php'); -include_once('includes/applications/categories/classes/categories.php'); -include_once('includes/classes/addons.php'); +global $lC_Vqmod; + +include_once($lC_Vqmod->modCheck('includes/applications/customer_groups/classes/customer_groups.php')); +include_once($lC_Vqmod->modCheck('includes/applications/product_variants/classes/product_variants.php')); +include_once($lC_Vqmod->modCheck('includes/applications/specials/classes/specials.php')); +include_once($lC_Vqmod->modCheck('includes/applications/categories/classes/categories.php')); +include_once($lC_Vqmod->modCheck('includes/classes/addons.php')); class lC_Products_Admin { /* @@ -2345,5 +2347,118 @@ public static function getProductsDropdownArray($exclude = array()) { } return $result; } + +//################ + + /* + * Determine if product has qty price breaks + * + * @param integer $id The product id + * @access public + * @return array + */ + public static function hasQPBPricing($id) { + global $lC_Database; + + $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id limit 1'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $id); + $Qpb->execute(); + + if ( $Qpb->numberOfRows() > 0 ) { + return true; + } + + return false; + } + /* + * Retrieve qty price breaks + * + * @param integer $id The product id + * @access public + * @return array + */ + public static function getQPBPricing($id, $group = null) { + global $lC_Database; + + if ($group == null) $group = (defined('DEFAULT_CUSTOMERS_GROUP_ID') && DEFAULT_CUSTOMERS_GROUP_ID != null) ? (int)DEFAULT_CUSTOMERS_GROUP_ID : 1; + + $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id and group_id = :group_id'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $id); + $Qpb->bindInt(':group_id', $group); + $Qpb->execute(); + + $data = $Qpb->toArray(); + + $Qpb->freeResult(); + + return $data; + } + + /* + * Return the qty price breaks listing content + * + * @access public + * @return array + */ + public static function getQPBPricingContent() { + +ini_set('display_errors', 1); + + global $lC_Language, $lC_Currencies, $pInfo; + + $content = ''; + $groups = lC_Customer_groups_Admin::getAll(); + foreach($groups['entries'] as $key => $value) { + + if ($value['customers_group_id'] == DEFAULT_CUSTOMERS_GROUP_ID) { // locked to default for Pro + + $base = (isset($pInfo)) ? (float)$pInfo->get('products_price') : 0.00; + $special = (isset($pInfo)) ? (float)$pInfo->get('products_special_price') : 0.00; + + $content .= '' . + + '
    ' . + '
    ' . + '
    ' . + ' #' . + ' ' . + '
    ' . + ' Qty' . + '
    ' . + ' ' . $lC_Currencies->getSymbolLeft() . '' . + ' ' . + '
    ' . + ' Price' . + '
    '; + + if (self::hasQPBPricing($pInfo->get('products_id'))) { + + $qpbData = self::getQPBPricing($pInfo->get('products_id'), $value['customers_group_id']); + + } else { // no qpb recorded, setup new + $content .= '
    ' . + '
    ' . + ' #' . + ' ' . + '
    ' . + ' Qty' . + '
    ' . + ' ' . $lC_Currencies->getSymbolLeft() . '' . + ' ' . + '
    ' . + ' Price' . + '
    '; + } + + $content .= '
    '; + } + + } + + return $content; + } + } ?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products/pages/main.php b/catalog/admin/includes/applications/products/pages/main.php index 5dcead4d4..28f9e7eb8 100644 --- a/catalog/admin/includes/applications/products/pages/main.php +++ b/catalog/admin/includes/applications/products/pages/main.php @@ -1,99 +1,99 @@ - - -
    - -
    -

    getPageTitle(); ?>

    -
    - -
    -
    -
    -
    - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - -
    get('table_heading_products'); ?>get('table_heading_categories'); ?>get('table_heading_class'); ?>get('table_heading_price'); ?>get('table_heading_quantity'); ?>get('table_heading_status'); ?> - - - - -   get('table_heading_action'); ?> -
     
    -
    - -
    -
    -
    - -
    -
    -loadModal($lC_Template->getModule()); ?> + + +
    + +
    +

    getPageTitle(); ?>

    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    get('table_heading_products'); ?>get('table_heading_categories'); ?>get('table_heading_class'); ?>get('table_heading_price'); ?>get('table_heading_quantity'); ?>get('table_heading_status'); ?> + + + + +   get('table_heading_action'); ?> +
     
    +
    + +
    +
    +
    + +
    +
    +loadModal($lC_Template->getModule()); ?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products/pages/tabs/pricing.php b/catalog/admin/includes/applications/products/pages/tabs/pricing.php index 84c44a12d..cbff775a8 100644 --- a/catalog/admin/includes/applications/products/pages/tabs/pricing.php +++ b/catalog/admin/includes/applications/products/pages/tabs/pricing.php @@ -35,18 +35,114 @@ -
    - +
    + get('info_bubble_pricing_qty_price_breaks'), null, 'info-spot on-left grey margin-left'); ?>
    - From d2b2d0463b6f9863cb7fc92dcf1ba4cb8c395938 Mon Sep 17 00:00:00 2001 From: datazen Date: Fri, 24 Jan 2014 21:26:11 -0500 Subject: [PATCH 024/158] [IC] qpb --- .../Loaded_7_Pro/admin/languages/en_US/products.php | 9 --------- catalog/addons/Loaded_7_Pro/controller.php | 2 +- .../includes/applications/products/actions/save.php | 4 +++- .../admin/includes/applications/products/classes/rpc.php | 2 +- .../applications/products/pages/tabs/pricing.php | 4 ++-- catalog/admin/includes/languages/en_US/products.php | 2 ++ 6 files changed, 9 insertions(+), 14 deletions(-) delete mode 100644 catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php diff --git a/catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php b/catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php deleted file mode 100644 index 1223001f2..000000000 --- a/catalog/addons/Loaded_7_Pro/admin/languages/en_US/products.php +++ /dev/null @@ -1,9 +0,0 @@ -# @package admin::languages -# @author Loaded Commerce -# @copyright Copyright 2003-2014 Loaded Commerce, LLC -# @copyright Portions Copyright 2003 osCommerce -# @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt -# @version $Id: products.php v1.0 2013-08-08 datazen $ - -error_break_point_must_be_higher = The break point must be higher than the previous break point. -error_break_price_must_be_lower = The price must be lower than the previous price. \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/controller.php b/catalog/addons/Loaded_7_Pro/controller.php index 9ba8e51ca..bcf6fcc43 100644 --- a/catalog/addons/Loaded_7_Pro/controller.php +++ b/catalog/addons/Loaded_7_Pro/controller.php @@ -14,7 +14,7 @@ global $lC_Vqmod; require_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'includes/classes/transport.php')); -include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/includes/applications/products/classes/products.php')); +include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')); class Loaded_7_Pro extends lC_Addon { // your addon must extend lC_Addon /* diff --git a/catalog/admin/includes/applications/products/actions/save.php b/catalog/admin/includes/applications/products/actions/save.php index 153e7db00..1ff50f999 100644 --- a/catalog/admin/includes/applications/products/actions/save.php +++ b/catalog/admin/includes/applications/products/actions/save.php @@ -8,6 +8,7 @@ @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: save.php v1.0 2013-08-08 datazen $ */ +if (file_exists(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')) include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')); class lC_Application_Products_Actions_save extends lC_Application_Products { public function __construct() { @@ -140,7 +141,8 @@ public function __construct() { } if ( $error === false ) { - $id = lC_Products_Admin::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); + //$id = lC_Products_Admin::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); + $id = lC_Products_Admin_Pro::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); if ( is_numeric($id) ) { if(empty($_POST['save_close'])){ diff --git a/catalog/admin/includes/applications/products/classes/rpc.php b/catalog/admin/includes/applications/products/classes/rpc.php index 935ede3b2..c9b280939 100644 --- a/catalog/admin/includes/applications/products/classes/rpc.php +++ b/catalog/admin/includes/applications/products/classes/rpc.php @@ -414,4 +414,4 @@ public static function updateStatus() { } } -?> +?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products/pages/tabs/pricing.php b/catalog/admin/includes/applications/products/pages/tabs/pricing.php index cbff775a8..ccda082aa 100644 --- a/catalog/admin/includes/applications/products/pages/tabs/pricing.php +++ b/catalog/admin/includes/applications/products/pages/tabs/pricing.php @@ -59,7 +59,7 @@ function validateQPBPoint(e) { $.modal({ content: '
    '+ '
    '+ - '

    get('error_break_point_must_be_higher'); ?>

    '+ + '

    get('ms_error_break_point_must_be_higher'); ?>

    '+ '
    '+ '
    ', title: 'get('text_error'); ?>', @@ -121,7 +121,7 @@ function validateQPBPrice(e) { $.modal({ content: '
    '+ '
    '+ - '

    get('error_break_price_must_be_lower'); ?>

    '+ + '

    get('ms_error_break_price_must_be_lower'); ?>

    '+ '
    '+ '
    ', title: 'get('text_error'); ?>', diff --git a/catalog/admin/includes/languages/en_US/products.php b/catalog/admin/includes/languages/en_US/products.php index dcc8b7ab8..eba02dbee 100644 --- a/catalog/admin/includes/languages/en_US/products.php +++ b/catalog/admin/includes/languages/en_US/products.php @@ -83,6 +83,8 @@ ms_error_no_variant_groups = You must setup at least one variant group before using simple options. ms_error_no_variant_entries = You must setup at least one entry before using this variant group. ms_warning_image_processor_not_available = Warning: An image processor is not available. Please install and check the location of ImageMagicks "convert" program in the Configuration -> Configuration -> Program Locations section. +ms_error_break_point_must_be_higher = The break point must be higher than the previous break point. +ms_error_break_price_must_be_lower = The price must be lower than the previous price. section_general = Content section_pricing = Pricing From d302a4fce5d7351dfbaa644ddeb06c77e1989dc8 Mon Sep 17 00:00:00 2001 From: datazen Date: Fri, 24 Jan 2014 21:37:16 -0500 Subject: [PATCH 025/158] [IC] qpb --- .../applications/products/classes/products.php | 10 ++++++++++ .../admin/hooks/product_actions_save.xml | 17 +++++++++++++++++ .../applications/products/actions/save.php | 13 +++++++++---- 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 catalog/addons/Loaded_7_Pro/admin/hooks/product_actions_save.xml diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php index 95e0ea887..3904d51ba 100644 --- a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php +++ b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php @@ -14,5 +14,15 @@ class lC_Products_Admin_Pro extends lC_Products_Admin { + public static function save($id = null, $data) { + parent::save($id, $data); + + echo "
    ";
    +    print_r($data);
    +    echo "
    "; + + die('products pro'); + } + } \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_actions_save.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_actions_save.xml new file mode 100644 index 000000000..b34a4348a --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_actions_save.xml @@ -0,0 +1,17 @@ + + + extend products save() + 1.0.0 + 2.3.2 + loadedcommerce.com + + + + modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php'));]]> + + + _module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data);]]> + _module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data);]]> + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products/actions/save.php b/catalog/admin/includes/applications/products/actions/save.php index 1ff50f999..d0ab3b08b 100644 --- a/catalog/admin/includes/applications/products/actions/save.php +++ b/catalog/admin/includes/applications/products/actions/save.php @@ -8,7 +8,8 @@ @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: save.php v1.0 2013-08-08 datazen $ */ -if (file_exists(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')) include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')); +//if (file_exists(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')) include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')); + class lC_Application_Products_Actions_save extends lC_Application_Products { public function __construct() { @@ -79,7 +80,11 @@ public function __construct() { if (isset($_POST['sub_products_id']) && $_POST['sub_products_id'] != NULL) $data['sub_products_id'] = $_POST['sub_products_id']; if (isset($_POST['sub_products_cost']) && $_POST['sub_products_cost'] != NULL) $data['sub_products_cost'] = $_POST['sub_products_cost']; if (isset($_POST['sub_products_price']) && $_POST['sub_products_price'] != NULL) $data['sub_products_price'] = $_POST['sub_products_price']; - } + } + + // qpb + if (isset($_POST['products_qty_break_point']) && $_POST['products_qty_break_point'] != NULL) $data['products_qty_break_point'] = $_POST['products_qty_break_point']; + if (isset($_POST['products_qty_break_price']) && $_POST['products_qty_break_price'] != NULL) $data['products_qty_break_price'] = $_POST['products_qty_break_price']; // multi SKU combo if ($has_variants === true) { @@ -141,8 +146,8 @@ public function __construct() { } if ( $error === false ) { - //$id = lC_Products_Admin::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); - $id = lC_Products_Admin_Pro::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); + $id = lC_Products_Admin::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); + //$id = lC_Products_Admin_Pro::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); if ( is_numeric($id) ) { if(empty($_POST['save_close'])){ From ec7283838bd2e04e2f3b06d4c1ff6d1006b47a9b Mon Sep 17 00:00:00 2001 From: datazen Date: Fri, 24 Jan 2014 21:46:39 -0500 Subject: [PATCH 026/158] [IC] qpb --- .../includes/applications/products/actions/save.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/catalog/admin/includes/applications/products/actions/save.php b/catalog/admin/includes/applications/products/actions/save.php index d0ab3b08b..a281c2c4a 100644 --- a/catalog/admin/includes/applications/products/actions/save.php +++ b/catalog/admin/includes/applications/products/actions/save.php @@ -8,8 +8,6 @@ @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: save.php v1.0 2013-08-08 datazen $ */ -//if (file_exists(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')) include_once($lC_Vqmod->modCheck(DIR_FS_CATALOG . 'addons/Loaded_7_Pro/admin/applications/products/classes/products.php')); - class lC_Application_Products_Actions_save extends lC_Application_Products { public function __construct() { @@ -146,16 +144,13 @@ public function __construct() { } if ( $error === false ) { + // the line below is used as a hook match point - do not not modify or remove $id = lC_Products_Admin::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); - //$id = lC_Products_Admin_Pro::save((isset($_GET[$this->_module]) && is_numeric($_GET[$this->_module]) ? $_GET[$this->_module] : null), $data); + if ( is_numeric($id) ) { - if(empty($_POST['save_close'])){ - lc_redirect_admin(lc_href_link_admin(FILENAME_DEFAULT, $this->_module . '='.$id.'&action=save&cID=' . $_GET['cID'])); - - }else{ - + } else { lc_redirect_admin(lc_href_link_admin(FILENAME_DEFAULT, $this->_module . '&cID=' . $_GET['cID'])); } } else { From d72675002361328e8b84d83d8e8635fe8d15d8ef Mon Sep 17 00:00:00 2001 From: datazen Date: Fri, 24 Jan 2014 21:54:17 -0500 Subject: [PATCH 027/158] [IC] qpb --- .../products/classes/products.php | 115 ++++++++++++++++++ ...ons_save.xml => products_actions_save.xml} | 0 .../products/classes/products.php | 113 ----------------- .../products/pages/tabs/pricing.php | 2 +- 4 files changed, 116 insertions(+), 114 deletions(-) rename catalog/addons/Loaded_7_Pro/admin/hooks/{product_actions_save.xml => products_actions_save.xml} (100%) diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php index 3904d51ba..d7bed6ccf 100644 --- a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php +++ b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php @@ -11,6 +11,11 @@ global $lC_Vqmod; include_once($lC_Vqmod->modCheck('includes/applications/products/classes/products.php')); +include_once($lC_Vqmod->modCheck('includes/applications/customer_groups/classes/customer_groups.php')); +//include_once($lC_Vqmod->modCheck('includes/applications/product_variants/classes/product_variants.php')); +//include_once($lC_Vqmod->modCheck('includes/applications/specials/classes/specials.php')); +//include_once($lC_Vqmod->modCheck('includes/applications/categories/classes/categories.php')); +//include_once($lC_Vqmod->modCheck('includes/classes/addons.php')); class lC_Products_Admin_Pro extends lC_Products_Admin { @@ -24,5 +29,115 @@ public static function save($id = null, $data) { die('products pro'); } + /* + * Determine if product has qty price breaks + * + * @param integer $id The product id + * @access public + * @return array + */ + public static function hasQPBPricing($id) { + global $lC_Database; + + $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id limit 1'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $id); + $Qpb->execute(); + + if ( $Qpb->numberOfRows() > 0 ) { + return true; + } + + return false; + } + /* + * Retrieve qty price breaks + * + * @param integer $id The product id + * @access public + * @return array + */ + public static function getQPBPricing($id, $group = null) { + global $lC_Database; + + if ($group == null) $group = (defined('DEFAULT_CUSTOMERS_GROUP_ID') && DEFAULT_CUSTOMERS_GROUP_ID != null) ? (int)DEFAULT_CUSTOMERS_GROUP_ID : 1; + + $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id and group_id = :group_id'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $id); + $Qpb->bindInt(':group_id', $group); + $Qpb->execute(); + + $data = $Qpb->toArray(); + + $Qpb->freeResult(); + + return $data; + } + + /* + * Return the qty price breaks listing content + * + * @access public + * @return array + */ + public static function getQPBPricingContent() { + +ini_set('display_errors', 1); + + global $lC_Language, $lC_Currencies, $pInfo; + + $content = ''; + $groups = lC_Customer_groups_Admin::getAll(); + foreach($groups['entries'] as $key => $value) { + + if ($value['customers_group_id'] == DEFAULT_CUSTOMERS_GROUP_ID) { // locked to default for Pro + + $base = (isset($pInfo)) ? (float)$pInfo->get('products_price') : 0.00; + $special = (isset($pInfo)) ? (float)$pInfo->get('products_special_price') : 0.00; + + $content .= '' . + + '
    ' . + '
    ' . + '
    ' . + ' #' . + ' ' . + '
    ' . + ' Qty' . + '
    ' . + ' ' . $lC_Currencies->getSymbolLeft() . '' . + ' ' . + '
    ' . + ' Price' . + '
    '; + + if (self::hasQPBPricing($pInfo->get('products_id'))) { + + $qpbData = self::getQPBPricing($pInfo->get('products_id'), $value['customers_group_id']); + + } else { // no qpb recorded, setup new + $content .= '
    ' . + '
    ' . + ' #' . + ' ' . + '
    ' . + ' Qty' . + '
    ' . + ' ' . $lC_Currencies->getSymbolLeft() . '' . + ' ' . + '
    ' . + ' Price' . + '
    '; + } + + $content .= '
    '; + } + + } + + return $content; + } + } \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_actions_save.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/products_actions_save.xml similarity index 100% rename from catalog/addons/Loaded_7_Pro/admin/hooks/product_actions_save.xml rename to catalog/addons/Loaded_7_Pro/admin/hooks/products_actions_save.xml diff --git a/catalog/admin/includes/applications/products/classes/products.php b/catalog/admin/includes/applications/products/classes/products.php index 850dc3e1f..58adfc7f4 100644 --- a/catalog/admin/includes/applications/products/classes/products.php +++ b/catalog/admin/includes/applications/products/classes/products.php @@ -2347,118 +2347,5 @@ public static function getProductsDropdownArray($exclude = array()) { } return $result; } - -//################ - - /* - * Determine if product has qty price breaks - * - * @param integer $id The product id - * @access public - * @return array - */ - public static function hasQPBPricing($id) { - global $lC_Database; - - $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id limit 1'); - $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); - $Qpb->bindInt(':products_id', $id); - $Qpb->execute(); - - if ( $Qpb->numberOfRows() > 0 ) { - return true; - } - - return false; - } - /* - * Retrieve qty price breaks - * - * @param integer $id The product id - * @access public - * @return array - */ - public static function getQPBPricing($id, $group = null) { - global $lC_Database; - - if ($group == null) $group = (defined('DEFAULT_CUSTOMERS_GROUP_ID') && DEFAULT_CUSTOMERS_GROUP_ID != null) ? (int)DEFAULT_CUSTOMERS_GROUP_ID : 1; - - $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id and group_id = :group_id'); - $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); - $Qpb->bindInt(':products_id', $id); - $Qpb->bindInt(':group_id', $group); - $Qpb->execute(); - - $data = $Qpb->toArray(); - - $Qpb->freeResult(); - - return $data; - } - - /* - * Return the qty price breaks listing content - * - * @access public - * @return array - */ - public static function getQPBPricingContent() { - -ini_set('display_errors', 1); - - global $lC_Language, $lC_Currencies, $pInfo; - - $content = ''; - $groups = lC_Customer_groups_Admin::getAll(); - foreach($groups['entries'] as $key => $value) { - - if ($value['customers_group_id'] == DEFAULT_CUSTOMERS_GROUP_ID) { // locked to default for Pro - - $base = (isset($pInfo)) ? (float)$pInfo->get('products_price') : 0.00; - $special = (isset($pInfo)) ? (float)$pInfo->get('products_special_price') : 0.00; - - $content .= '' . - - '
    ' . - '
    ' . - '
    ' . - ' #' . - ' ' . - '
    ' . - ' Qty' . - '
    ' . - ' ' . $lC_Currencies->getSymbolLeft() . '' . - ' ' . - '
    ' . - ' Price' . - '
    '; - - if (self::hasQPBPricing($pInfo->get('products_id'))) { - - $qpbData = self::getQPBPricing($pInfo->get('products_id'), $value['customers_group_id']); - - } else { // no qpb recorded, setup new - $content .= '
    ' . - '
    ' . - ' #' . - ' ' . - '
    ' . - ' Qty' . - '
    ' . - ' ' . $lC_Currencies->getSymbolLeft() . '' . - ' ' . - '
    ' . - ' Price' . - '
    '; - } - - $content .= '
    '; - } - - } - - return $content; - } - } ?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products/pages/tabs/pricing.php b/catalog/admin/includes/applications/products/pages/tabs/pricing.php index ccda082aa..2d0342f62 100644 --- a/catalog/admin/includes/applications/products/pages/tabs/pricing.php +++ b/catalog/admin/includes/applications/products/pages/tabs/pricing.php @@ -43,7 +43,7 @@
    \ No newline at end of file diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml new file mode 100644 index 000000000..09e954ea5 --- /dev/null +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml @@ -0,0 +1,13 @@ + + + QPB Pricing + 1.0.0 + 2.3.2 + loadedcommerce.com + + + ]]> + ]]> + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products/pages/tabs/pricing.php b/catalog/admin/includes/applications/products/pages/tabs/pricing.php index 2d0342f62..ee016ca5f 100644 --- a/catalog/admin/includes/applications/products/pages/tabs/pricing.php +++ b/catalog/admin/includes/applications/products/pages/tabs/pricing.php @@ -32,133 +32,23 @@ - - - -
    - - get('info_bubble_pricing_qty_price_breaks'), null, 'info-spot on-left grey margin-left'); ?> - -
    -
    -
    - - - - - - - - -
    - - get('products_special_price') != null) ? ' checked' : ''); ?> />get('info_bubble_pricing_specials'), null, 'info-spot on-left grey margin-left margin-right'); ?> -
    -
    -
    get('products_special_price') != null) ? ' style="display:block;"' : ' style="display:none;"'); ?>> - -
    - + + + +
    + + get('products_special_price') != null) ? ' checked' : ''); ?> />get('info_bubble_pricing_specials'), null, 'info-spot on-left grey margin-left margin-right'); ?> +
    +
    +
    get('products_special_price') != null) ? ' style="display:block;"' : ' style="display:none;"'); ?>> + +
    +
    - + \ No newline at end of file From 4fa91ec10a4fc4762bc5ba5a7fc535e91d96f445 Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 12:32:01 -0500 Subject: [PATCH 119/158] [IC] updated curl test to include curlSSL --- catalog/install/includes/languages/en_US/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog/install/includes/languages/en_US/index.php b/catalog/install/includes/languages/en_US/index.php index f588754dd..ba2ad3022 100644 --- a/catalog/install/includes/languages/en_US/index.php +++ b/catalog/install/includes/languages/en_US/index.php @@ -43,7 +43,7 @@ box_server_php_extensions = PHP Extensions box_server_mysqli = MySQLi box_server_gd = GD -box_server_curl = cURL +box_server_curl = curlSSL box_server_openssl = OpenSSL box_server_phar = Phar box_server_on = On From 0489d608c15bab558a632605221dd6358ef2d466 Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Wed, 5 Feb 2014 12:52:39 -0500 Subject: [PATCH 120/158] index page ionCube display code --- catalog/install/templates/pages/index.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/catalog/install/templates/pages/index.php b/catalog/install/templates/pages/index.php index 074c436c2..0631858f0 100644 --- a/catalog/install/templates/pages/index.php +++ b/catalog/install/templates/pages/index.php @@ -231,7 +231,19 @@ function cURLTest(){

    get('page_text_ioncube'); ?>

    -

    + +

    + +

    + From a905281c96ac43f588f6f80faa04994092ab526a Mon Sep 17 00:00:00 2001 From: jamielea Date: Wed, 5 Feb 2014 18:05:17 +0000 Subject: [PATCH 121/158] [B2330] html email fix --- catalog/includes/functions/general.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/catalog/includes/functions/general.php b/catalog/includes/functions/general.php index 8133b611f..040452ba3 100644 --- a/catalog/includes/functions/general.php +++ b/catalog/includes/functions/general.php @@ -239,7 +239,11 @@ function lc_email($to_name, $to_email_address, $subject, $body, $from_name, $fro } $lC_Mail = new lC_Mail($to_name, $to_email_address, $from_name, $from_email_address, $subject); - $lC_Mail->setBodyPlain($body); + if(EMAIL_USE_HTML == '-1'){ + $lC_Mail->setBodyHTML($body); + }else{ + $lC_Mail->setBodyPlain($body); + } $lC_Mail->send(); } } From d25004ee96372aa20ce1df23bb6de1f3a25cbd36 Mon Sep 17 00:00:00 2001 From: jamielea Date: Wed, 5 Feb 2014 18:10:30 +0000 Subject: [PATCH 122/158] [B2330] email html fix --- catalog/includes/functions/general.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/catalog/includes/functions/general.php b/catalog/includes/functions/general.php index 040452ba3..9efb4c921 100644 --- a/catalog/includes/functions/general.php +++ b/catalog/includes/functions/general.php @@ -239,9 +239,9 @@ function lc_email($to_name, $to_email_address, $subject, $body, $from_name, $fro } $lC_Mail = new lC_Mail($to_name, $to_email_address, $from_name, $from_email_address, $subject); - if(EMAIL_USE_HTML == '-1'){ + if (EMAIL_USE_HTML == '1') { $lC_Mail->setBodyHTML($body); - }else{ + } else { $lC_Mail->setBodyPlain($body); } $lC_Mail->send(); From 3c514733dc8fcec5a3e8b66f7b0b221dcb5f5fff Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 13:43:08 -0500 Subject: [PATCH 123/158] [IC] merge work --- .../admin/applications/products/classes/products.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php index 028393283..9162d1a39 100644 --- a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php +++ b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php @@ -10,6 +10,8 @@ */ global $lC_Vqmod; +if (!defined('DIR_FS_ADMIN')) return false; + include_once($lC_Vqmod->modCheck(DIR_FS_ADMIN . 'includes/applications/products/classes/products.php')); include_once($lC_Vqmod->modCheck(DIR_FS_ADMIN . 'includes/applications/customer_groups/classes/customer_groups.php')); //include_once($lC_Vqmod->modCheck('includes/applications/product_variants/classes/product_variants.php')); @@ -30,7 +32,9 @@ public static function save($id = null, $data) { global $lC_Database, $lC_Language; $error = false; + $products_id = parent::save($id, $data); + $group = (defined('DEFAULT_CUSTOMERS_GROUP_ID') && DEFAULT_CUSTOMERS_GROUP_ID != null) ? (int)DEFAULT_CUSTOMERS_GROUP_ID : 1; if (is_array($data['products_qty_break_point'][$group]) && $data['products_qty_break_point'][$group][1] != null) { From f040cd56d20d6f6b8cdbb08330e9902eed1e69de Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 13:58:39 -0500 Subject: [PATCH 124/158] [IC] merge work --- catalog/admin/external/vqmod/vqmod.php | 2 +- catalog/ext/vqmod/vqmod.php | 2 +- catalog/includes/classes/customer.php | 28 +- catalog/includes/classes/product.php | 263 +++++++++++++++--- catalog/includes/classes/template.php | 12 +- .../includes/content/products/products.php | 2 +- catalog/includes/content/products/reviews.php | 2 +- catalog/includes/languages/en_US.xml | 12 +- catalog/includes/rpc/products/rpc.php | 22 ++ catalog/templates/core.php | 3 + .../templates/core/content/products/info.php | 80 +++--- 11 files changed, 346 insertions(+), 82 deletions(-) diff --git a/catalog/admin/external/vqmod/vqmod.php b/catalog/admin/external/vqmod/vqmod.php index 44466cc48..13cbd10db 100644 --- a/catalog/admin/external/vqmod/vqmod.php +++ b/catalog/admin/external/vqmod/vqmod.php @@ -375,7 +375,7 @@ private function _loadProtected() { * @description Returns cache file name for a path */ private function _cacheName($file) { - return $this->_cachePathFull . 'vqa-' . preg_replace('~[:/\\\\]+~', '_', $file); + return $this->_cachePathFull . 'vq2-' . preg_replace('~[:/\\\\]+~', '_', $file); } /** * VQMod::_setCwd() diff --git a/catalog/ext/vqmod/vqmod.php b/catalog/ext/vqmod/vqmod.php index 5859a7640..baf1f1701 100644 --- a/catalog/ext/vqmod/vqmod.php +++ b/catalog/ext/vqmod/vqmod.php @@ -368,7 +368,7 @@ private function _loadProtected() { * @description Returns cache file name for a path */ private function _cacheName($file) { - return $this->_cachePathFull . 'vqs-' . preg_replace('~[:/\\\\]+~', '_', $file); + return $this->_cachePathFull . 'vq2-' . preg_replace('~[:/\\\\]+~', '_', $file); } /** * VQMod::_setCwd() diff --git a/catalog/includes/classes/customer.php b/catalog/includes/classes/customer.php index f8b923299..229141631 100644 --- a/catalog/includes/classes/customer.php +++ b/catalog/includes/classes/customer.php @@ -37,6 +37,29 @@ public function getCustomerGroup() { return false; } + + public function getBaselineDiscount($id = null) { + if (isset($this->_data['baseline_discount']) && is_numeric($this->_data['baseline_discount'])) { + return $this->_data['baseline_discount']; + } else if (is_numeric($id)) { + $Qcg = $lC_Database->query('select baseline_discount from :table_customers_groups_data where customers_group_id = :customers_group_id limit 1'); + $Qcg->bindTable(':table_customers_groups_data', TABLE_CUSTOMERS_GROUPS_DATA); + $Qcg->bindInt(':customers_group_id', $id); + $Qcg->execute(); + +if ($lC_Database->isError()) die($lC_Database->getError()); + + if ($Qcg->numberOfRows() > 0) { + $discount = $Qcg->valueDecimal('baseline_discount'); + $Qcg->freeResult(); + + return $discount; + } + $Qcg->freeResult(); + } + + return false; + } public function getFirstName() { static $first_name = null; @@ -192,12 +215,15 @@ public function setCustomerData($customer_id = -1) { } if (is_numeric($Qcustomer->value('customers_group_id')) && ($Qcustomer->value('customers_group_id') > 0)) { - $Qcg = $lC_Database->query('select customers_group_name from :table_customers_groups where customers_group_id = :customers_group_id and language_id = :language_id'); + $Qcg = $lC_Database->query('select cg.customers_group_name, cgd.baseline_discount from :table_customers_groups cg left join :table_customers_groups_data cgd on (cg.customers_group_id = cgd.customers_group_id) where cg.customers_group_id = :customers_group_id and cg.language_id = :language_id'); $Qcg->bindTable(':table_customers_groups', TABLE_CUSTOMERS_GROUPS); + $Qcg->bindTable(':table_customers_groups_data', TABLE_CUSTOMERS_GROUPS_DATA); $Qcg->bindInt(':customers_group_id', $Qcustomer->value('customers_group_id')); $Qcg->bindInt(':language_id', $lC_Language->getID()); $Qcg->execute(); +if ($lC_Database->isError()) die($lC_Database->getError()); + if ($Qcg->numberOfRows() === 1) { $this->setGroupName($Qcg->value('customers_group_name')); diff --git a/catalog/includes/classes/product.php b/catalog/includes/classes/product.php index b891c21d7..fb2e3f240 100644 --- a/catalog/includes/classes/product.php +++ b/catalog/includes/classes/product.php @@ -111,7 +111,6 @@ public function __construct($id) { $Qsubproducts->execute(); while ( $Qsubproducts->next() ) { - //$this->_data['variants'][$Qsubproducts->valueInt('products_id')]['data'] = array('price' => $this->getPriceBreak(), $this->_data['variants'][$Qsubproducts->valueInt('products_id')]['data'] = array('price' => $Qsubproducts->value('products_price'), 'tax_class_id' => $Qsubproducts->valueInt('products_tax_class_id'), //'tax_class_id' => $this->getTaxClassID(), @@ -254,55 +253,224 @@ public function hasTags() { public function getTags() { return $this->_data['tags']; } + + //######## PRICING #########// + public function getPriceInfo($product_id, $customers_group_id = 1, $data) { + global $lC_Specials, $lC_Database, $lC_Language, $lC_Customer, $lC_Services, $lC_Currencies; + + $quantity = (isset($_GET['quantity']) && $_GET['quantity'] != null) ? (int)$_GET['quantity'] : 1; + + // #### SET BASE PRICE #### // + + // initial price = base price + $base_price = $this->getBasePrice(); + $price = (float)$base_price; + + //options modifiers + if (is_array($data['simple_options']) && count($data['simple_options']) > 0) { + $modTotal = 0; + foreach ($data['simple_options'] as $options_id => $values_id) { + $QsimpleOptions = $lC_Database->query("select price_modifier from :table_products_simple_options_values where customers_group_id = :customers_group_id and options_id = :options_id and values_id = :values_id limit 1"); + $QsimpleOptions->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); + $QsimpleOptions->bindInt(':customers_group_id', $customers_group_id); + $QsimpleOptions->bindInt(':options_id', $options_id); + $QsimpleOptions->bindInt(':values_id', $values_id); + $QsimpleOptions->execute(); + + $modTotal = (float)$modTotal + $QsimpleOptions->valueDecimal('price_modifier'); + } + } + + // if has special price, base price becomes special price + $special_price = 0.00; + if ($lC_Services->isStarted('specials') && $lC_Specials->isActive($product_id)) { + $special_price = $lC_Specials->getPrice($product_id); + $price = ((float)$special_price < (float)$price) ? (float)$special_price : (float)$price; + } + + // if has qty price breaks, adjust base price to break price + $qpbText = ''; + if ($this->hasQtyPriceBreaks($product_id, $customers_group_id)) { + $qpbArr = $this->getQtyPriceBreaks($product_id, $customers_group_id); + usort($qpbArr, "self::_usortBreakPoint"); + + $maxBreak = end($qpbArr); + + $cnt = 0; + foreach($qpbArr as $key => $value) { + if ((int)$value['qty_break'] <= (int)$quantity ) { + if ($lC_Services->isStarted('specials') && $lC_Specials->isActive($product_id)) { + $price = ($special_price < (float)$value['price_break']) ? $special_price : (float)$value['price_break']; + } else { + $price = (float)$value['price_break']; + } + $cnt = $key; + } + } + + if (defined('PRODUCT_PRICING_QPB_FORMAT') && PRODUCT_PRICING_QPB_FORMAT != NULL) { + switch (PRODUCT_PRICING_QPB_FORMAT) { + case 'None' : + $listing = $lC_Currencies->displayPrice($price, DECIMAL_PLACES); + break; + case 'Starts At' : + $listing = '
    ' . $lC_Language->get('pricing_starts_at') . '

    ' . $lC_Currencies->displayPrice($this->getBasePrice(), $this->getTaxClassID()) . '

    '; + break; + case 'Low As' : + $listing = '
    ' . $lC_Language->get('pricing_low_as') . '

    ' . $lC_Currencies->displayPrice( ($maxBreak['price_break'] < $price) ? $maxBreak['price_break'] : $price, $this->getTaxClassID()) . '

    '; + break; + default : + $listing = $lC_Currencies->displayPrice( ($maxBreak['price_break'] < $price) ? $maxBreak['price_break'] : $price, $this->getTaxClassID()) . ' - ' . $lC_Currencies->displayPrice($price, $this->getTaxClassID()); + } + } + + // if has special and qpb determine the next break point based off special price and adjust $cnt + if ($special_price != 0.00) { + $cnt = 0; + usort($qpbArr, "self::_usortBreakPoint"); + foreach($qpbArr as $key => $value) { + if ((int)$value['price_break'] < $special_price) { + $cnt = $key; + break; + } + } + } else if ($quantity > 1 && $quantity >= $qpbArr[$cnt]['qty_break']) { + $cnt++; + } + + $youSave =( ((int)$quantity == 1) ? round( ( 1- ( (float)$qpbArr[$cnt]['price_break'] / (float)$this->getBasePrice() )) * 100, DECIMAL_PLACES) : (((int)$quantity >= (int)$maxBreak['qty_break']) ? round( ( 1- ( (float)$maxBreak['price_break'] / (float)$this->getBasePrice() )) * 100, DECIMAL_PLACES) : round( ( 1- ( (float)$qpbArr[$cnt]['price_break'] / (float)$this->getBasePrice() )) * 100, DECIMAL_PLACES))); + $qpbData = array('nextBreak' => ( ((int)$quantity == 1) ? (int)$qpbArr[$cnt]['qty_break'] : (($quantity >= (int)$maxBreak['qty_break']) ? $maxBreak['qty_break'] : $qpbArr[$cnt]['qty_break']) ), + 'nextPrice' => ( ((int)$quantity == 1) ? number_format($qpbArr[$cnt]['price_break'] + $modTotal, DECIMAL_PLACES) : (((int)$quantity >= $maxBreak['qty_break']) ? number_format($maxBreak['price_break'] + $modTotal, DECIMAL_PLACES) : number_format($qpbArr[$cnt]['price_break'] + $modTotal, DECIMAL_PLACES) ) ), + 'youSave' => number_format($youSave, 0) . '%', + 'listing' => $listing); + } + + $price = $price + $modTotal; + + if ($lC_Services->isStarted('specials') && $lC_Specials->isActive($product_id)) { + $formatted = '' . $lC_Currencies->displayPrice($this->getBasePrice() + $modTotal, $this->_data['tax_class_id']) . ' ' . $lC_Currencies->displayPrice($price, $this->_data['tax_class_id']) . ''; + } else { + $formatted = $lC_Currencies->displayPrice($price, $this->getTaxClassID()); + } + + // #### DISCOUNTS #### // + /* + // set the adjusted base price var + $base_price = $price; + // if logged in and has a group baseline discount, apply to price + if ($lC_Customer->isLoggedOn()) { + $baseline_discount = $lC_Customer->getBaselineDiscount($customers_group_id); + $price = round((float)$base_price * ((float)$baseline_discount * .01), DECIMAL_PLACES); + } + */ + $return = array('base' => number_format($this->getBasePrice(), DECIMAL_PLACES), + 'price' => number_format($price, DECIMAL_PLACES), + 'formatted' => $formatted, + 'modTotal' => $modTotal, + 'qpbData' => $qpbData + ); +//echo "
    return ";
    +//print_r($return);
    +//echo "
    "; +//die('55'); + + return $return; + } + + public function getPrice() { + $data = $this->getPriceInfo($this->getID(), 1, array()); + + return $data['price']; + } + + /* + * Retrieve the base price + * + * @access public + * @return array + */ public function getBasePrice() { return $this->_data['price']; } - - public function getPriceBreak($qty = 1) { - $base_price = $this->_data['price']; - - if (isset($this->_data['price_breaks'])) { - reset($this->_data['price_breaks']); - foreach ($this->_data['price_breaks'] as $value) { - if ($qty >= $value['qty_break']) { - $base_price = $value['price_break']; - } - } - } + /* + * Determine if product has quantity price breaks + * + * @param integer $products_id The product id + * @param integer $customers_group_id The customer group id + * @access public + * @return boolean + */ + public function hasQtyPriceBreaks($products_id, $customers_group_id = 1) { + global $lC_Database; - return $base_price; - } - - public function getTaxClassID($qty = 1) { - $tax_class_id = $this->_data['tax_class_id']; - if (isset($this->_data['price_breaks'])) { - reset($this->_data['price_breaks']); - foreach ($this->_data['price_breaks'] as $value) { - if ($qty >= $value['qty_break']) { - $tax_class_id = $value['tax_class_id']; - } - } + $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id and group_id = :group_id limit 1'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $products_id); + $Qpb->bindInt(':group_id', $customers_group_id); + $Qpb->execute(); + + $hasQPB = false; + if ($Qpb->numberOfRows() > 0) $hasQPB = true; + + $Qpb->freeResult(); + + return $hasQPB; + } + /* + * Retrieve quantity price breaks data + * + * @param integer $products_id The product id + * @param integer $customers_group_id The customer group id + * @access public + * @return array + */ + public function getQtyPriceBreaks($products_id, $customers_group_id = 1) { + global $lC_Database; + + $Qpb = $lC_Database->query('select * from :table_products_pricing where products_id = :products_id and group_id = :group_id'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $products_id); + $Qpb->bindInt(':group_id', $customers_group_id); + $Qpb->execute(); + + $data = array(); + while($Qpb->next()) { + $data[] = $Qpb->toArray(); } - return $tax_class_id; - } - + $Qpb->freeResult(); + + return $data; + } + public function getPriceFormated($with_special = false) { global $lC_Services, $lC_Specials, $lC_Currencies; - - if (($with_special === true) && $lC_Services->isStarted('specials') && ($new_price = $lC_Specials->getPrice($this->_data['id'])) && ($lC_Specials->getPrice($this->_data['id']) < $this->getPriceBreak()) ) { - // $price = '' . $lC_Currencies->displayPrice($new_price, $this->_data['tax_class_id']) . '' . $lC_Currencies->displayPrice($this->_data['price'], $this->_data['tax_class_id']) . ''; + + $pData = $this->getPriceInfo($this->getID(), 1, array()); + + if (isset($pData['qpbData']['listing']) && empty($pData['qpbData']['listing']) === false) { + $result = $pData['qpbData']['listing']; + } else { + $result = $pData['formatted']; + } + + + return $result; + + /* + if (($with_special === true) && $lC_Services->isStarted('specials') && ($new_price = $lC_Specials->getPrice($this->_data['id']))) { $price = '' . $lC_Currencies->displayPrice($this->_data['price'], $this->_data['tax_class_id']) . ' ' . $lC_Currencies->displayPrice($new_price, $this->_data['tax_class_id']) . ''; } else { if ( $this->hasVariants() ) { $price = 'from ' . $lC_Currencies->displayPrice($this->getVariantMinPrice(), $this->_data['tax_class_id']); } else { - $price = $lC_Currencies->displayPrice($this->getPriceBreak(), $this->getTaxClassID()); + $price = $lC_Currencies->displayPrice($this->getPrice(), $this->getTaxClassID()); } } return $price; + */ } public function getVariantMinPrice() { @@ -329,6 +497,8 @@ public function getVariantMaxPrice() { return $price; } + //######## PRICING eof #########// + public function getQuantity() { $quantity = $this->_data['quantity']; @@ -341,7 +511,21 @@ public function getQuantity() { return $quantity; } - + + public function getTaxClassID($qty = 1) { + $tax_class_id = $this->_data['tax_class_id']; + if (isset($this->_data['price_breaks'])) { + reset($this->_data['price_breaks']); + foreach ($this->_data['price_breaks'] as $value) { + if ($qty >= $value['qty_break']) { + $tax_class_id = $value['tax_class_id']; + } + } + } + + return $tax_class_id; + } + public function getWeight() { global $lC_Weight; @@ -737,5 +921,16 @@ protected static function _usortVariantValues($a, $b) { return ( $a['sort_order'] < $b['sort_order'] ) ? -1 : 1; } -} + /* + * Custom quantity price breaks sort + * + * @param integer $a The 1st sort value + * @param integer $b The 2nd sort value + * @access protected + * @return boolean + */ + protected static function _usortBreakPoint($a, $b) { + return $a['qty_break'] == $b['qty_break'] ? 0 : $a['qty_break'] > $b['qty_break'] ? 1 : -1; + } +} ?> \ No newline at end of file diff --git a/catalog/includes/classes/template.php b/catalog/includes/classes/template.php index c841d72af..b8f08c455 100644 --- a/catalog/includes/classes/template.php +++ b/catalog/includes/classes/template.php @@ -203,11 +203,19 @@ public function getCode($id = null) { if (is_numeric($id)) { foreach ($this->getTemplates() as $template) { if ($template['id'] == $id) { - return $template['code']; + if (file_exists(DIR_FS_CATALOG . 'templates/' . $template['code'] . '.php')) { + return $template['code']; + } else { + return 'core'; + } } } } else { - return $this->_template; + if (file_exists(DIR_FS_CATALOG . 'templates/' . $this->_template . '.php')) { + return $this->_template; + } else { + return 'core'; + } } } /** diff --git a/catalog/includes/content/products/products.php b/catalog/includes/content/products/products.php index 44232c99c..c1517dbda 100644 --- a/catalog/includes/content/products/products.php +++ b/catalog/includes/content/products/products.php @@ -49,7 +49,7 @@ public function lC_Products_Products() { $this->addOGPTags('type', 'product'); $this->addOGPTags('title', $lC_Product->getTitle() . ' ' . $lC_Product->getModel()); - $this->addOGPTags('description', $lC_Currencies->displayPrice($lC_Product->getPriceBreak(), $lC_Product->getTaxClassID()) . ' - ' . $lC_Product->getTitle() . ' ' . lc_clean_html($lC_Product->getDescription())); + $this->addOGPTags('description', $lC_Currencies->displayPrice($lC_Product->getPrice(), $lC_Product->getTaxClassID()) . ' - ' . $lC_Product->getTitle() . ' ' . lc_clean_html($lC_Product->getDescription())); $this->addOGPTags('url', lc_href_link(FILENAME_PRODUCTS, $lC_Product->getKeyword(), 'NONSSL',false,true,true)); $this->addOGPTags('image', HTTP_SERVER . DIR_WS_CATALOG . 'templates/' . $template_code . '/images/logo.png'); $this->addOGPTags('image', HTTP_SERVER . DIR_WS_CATALOG . $lC_Image->getAddress($lC_Product->getImage(), 'large')); diff --git a/catalog/includes/content/products/reviews.php b/catalog/includes/content/products/reviews.php index cfd674830..190142ef9 100644 --- a/catalog/includes/content/products/reviews.php +++ b/catalog/includes/content/products/reviews.php @@ -41,7 +41,7 @@ public function lC_Products_Reviews() { $this->addOGPTags('type', 'product'); $this->addOGPTags('title', $lC_Product->getTitle() . ' ' . $lC_Product->getModel()); - $this->addOGPTags('description', $lC_Currencies->displayPrice($lC_Product->getPriceBreak(), $lC_Product->getTaxClassID()) . ' - ' . $lC_Product->getTitle() . ' ' . lc_clean_html($lC_Product->getDescription())); + $this->addOGPTags('description', $lC_Currencies->displayPrice($lC_Product->getPrice(), $lC_Product->getTaxClassID()) . ' - ' . $lC_Product->getTitle() . ' ' . lc_clean_html($lC_Product->getDescription())); $this->addOGPTags('url', lc_href_link(FILENAME_PRODUCTS, $lC_Product->getKeyword(), 'NONSSL',false,true,true)); $this->addOGPTags('image', HTTP_SERVER . DIR_WS_CATALOG . 'templates/' . $template_code . '/images/logo.png'); $this->addOGPTags('image', HTTP_SERVER . DIR_WS_CATALOG . $lC_Image->getAddress($lC_Product->getImage(), 'large')); diff --git a/catalog/includes/languages/en_US.xml b/catalog/includes/languages/en_US.xml index 9d5efc624..d4a3521d3 100644 --- a/catalog/includes/languages/en_US.xml +++ b/catalog/includes/languages/en_US.xml @@ -2834,6 +2834,16 @@ Your friend, %s, thought that you would be interested in %s from %s.]]> breadcrumb_featured_products general - + + + pricing_starts_at + + general + + + pricing_low_as + + general + \ No newline at end of file diff --git a/catalog/includes/rpc/products/rpc.php b/catalog/includes/rpc/products/rpc.php index ed5c8770e..bde8d5616 100644 --- a/catalog/includes/rpc/products/rpc.php +++ b/catalog/includes/rpc/products/rpc.php @@ -9,6 +9,7 @@ */ global $lC_Vqmod; require_once($lC_Vqmod->modCheck('includes/classes/products.php')); +require_once($lC_Vqmod->modCheck('includes/classes/product.php')); class lC_Products_rpc { /* @@ -25,5 +26,26 @@ public static function getAll() { echo json_encode($result); } + /* + * Returns the calculated product price + * + * @param integer $_GET['id'] The product id + * @param integer $_GET['group'] The customer group + * @param integer $_GET['qty'] The product quantity + * @access public + * @return json + */ + public static function getPriceInfo() { + global $lC_Product; + + if (!isset($lC_Product)) $lC_Product = new lC_Product($_GET['id']); + + $result = $lC_Product->getPriceInfo($_GET['id'], $_GET['group'], $_GET); + if ($result !== false) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } + + echo json_encode($result); + } } ?> \ No newline at end of file diff --git a/catalog/templates/core.php b/catalog/templates/core.php index b22b77d73..cbdf11065 100644 --- a/catalog/templates/core.php +++ b/catalog/templates/core.php @@ -51,6 +51,9 @@ + + + diff --git a/catalog/templates/core/content/products/info.php b/catalog/templates/core/content/products/info.php index dd943d4cc..58c3859ca 100644 --- a/catalog/templates/core/content/products/info.php +++ b/catalog/templates/core/content/products/info.php @@ -136,13 +136,16 @@ hasSubProducts($lC_Product->getID()) === false) { - ?> + ?> +
    - + + +
    @@ -160,50 +163,47 @@
    \ No newline at end of file From 2d7b8bbcc2537154dc869521d516175882a1ae91 Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 14:07:25 -0500 Subject: [PATCH 125/158] [IC] merge work --- .../products/classes/products.php | 537 +++++++++--------- 1 file changed, 284 insertions(+), 253 deletions(-) diff --git a/catalog/admin/includes/applications/products/classes/products.php b/catalog/admin/includes/applications/products/classes/products.php index 3420f4fdc..0f2721300 100644 --- a/catalog/admin/includes/applications/products/classes/products.php +++ b/catalog/admin/includes/applications/products/classes/products.php @@ -4,7 +4,7 @@ @author Loaded Commerce @copyright Copyright 2003-2014 Loaded Commerce, LLC @copyright Portions Copyright 2003 osCommerce - @copyright Template built on Developr theme by DisplayInline http://themeforest.net/user/displayinline under Extended license + @copyright Template built on Developr theme by DisplayInline http://themeforest.net/user/displayinline under Extended license @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: products.php v1.0 2013-08-08 datazen $ */ @@ -34,7 +34,7 @@ public static function getAll($category_id = null) { $lC_Language->loadIniFile('products.php'); $media = $_GET['media']; - + $result = array('aaData' => array()); if ( $category_id > 0 ) { @@ -78,21 +78,21 @@ public static function getAll($category_id = null) { foreach ($Qcategories as $cat) { if ($cnt == 0) { $categories = '' . $cat['name'] . ''; - } + } if ($cnt == 1) { $more_title = $cat['name']; $categories .= '...'; - } + } $cnt++; } - $Qcategories = null; + $Qcategories = null; $lC_Image = new lC_Image_Admin(); $Qimage = $lC_Database->query('select image from :table_products_images where products_id = :products_id and default_flag = 1'); $Qimage->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); $Qimage->bindInt(':products_id', $Qproducts->valueInt('products_id')); $Qimage->execute(); - + $cost = $lC_Currencies->format($Qproducts->value('products_cost')); $msrp = $lC_Currencies->format($Qproducts->value('products_msrp')); $products_status = ($Qproducts->valueInt('products_status') === 1); @@ -102,23 +102,23 @@ public static function getAll($category_id = null) { $product_icon = 'icon-path icon-orange icon-size2'; $product_icon_title = $lC_Language->get('text_inventory_control_has_children'); $qtyArr = self::getMinMax($Qproducts->valueInt('products_id')); - $products_quantity = $qtyArr['low'] . '-' . $qtyArr['high']; + $products_quantity = $qtyArr['low'] . '-' . $qtyArr['high']; $priceArr = self::getMinMax($Qproducts->valueInt('products_id'), 'products_price'); - $price = $lC_Currencies->format($priceArr['low']) . ' - ' . $lC_Currencies->format($priceArr['high']); + $price = $lC_Currencies->format($priceArr['low']) . ' - ' . $lC_Currencies->format($priceArr['high']); } else if ( self::hasSubProducts($Qproducts->valueInt('products_id')) === true ) { $product_icon = 'icon-flow-tree icon-red icon-size2'; $product_icon_title = $lC_Language->get('text_inventory_control_has_subproducts'); $qtyArr = self::getMinMax($Qproducts->valueInt('products_id')); $products_quantity = $qtyArr['low'] . ' - ' . $qtyArr['high']; $priceArr = self::getMinMax($Qproducts->valueInt('products_id'), 'products_price'); - $price = $lC_Currencies->format($priceArr['low']) . ' - ' . $lC_Currencies->format($priceArr['high']); + $price = $lC_Currencies->format($priceArr['low']) . ' - ' . $lC_Currencies->format($priceArr['high']); } else { $product_icon = 'icon-stop icon-anthracite icon-size2'; $product_icon_title = $lC_Language->get('text_inventory_control_simple');*/ $products_quantity = $Qproducts->valueInt('products_quantity'); $price = $lC_Currencies->format($Qproducts->value('products_price')); //} - + $icons = ''; if ( $Qproducts->valueInt('has_children') === 1 ) { $Qvariants = $lC_Database->query('select min(products_price) as min_price, max(products_price) as max_price, sum(products_quantity) as total_quantity, min(products_status) as products_status from :table_products where parent_id = :parent_id'); @@ -138,12 +138,12 @@ public static function getAll($category_id = null) { } else if ( self::hasSubProducts($Qproducts->valueInt('products_id')) === true ) { $icons .= ''; } - + $Qspecials = $lC_Database->query('select specials_new_products_price, status from :table_specials where products_id = :products_id'); $Qspecials->bindTable(':table_specials', TABLE_SPECIALS); $Qspecials->bindInt(':products_id', $Qproducts->valueInt('products_id')); $Qspecials->execute(); - + if ($Qspecials->numberOfRows() > 0) { $price = $price . ' ' . $Qspecials->value('specials_new_products_price') . ''; } @@ -163,7 +163,7 @@ public static function getAll($category_id = null) { $class = '' . $lC_Language->get('text_common') . ''; $price = '' . $price . ''; $qty = '' . $products_quantity . ''; - $status = '' . (($Qproducts->valueInt('products_status') == 1) ? '' : '') . ''; + $status = '' . (($Qproducts->valueInt('products_status') == 1) ? '' : '') . ''; $action = ' @@ -176,8 +176,8 @@ public static function getAll($category_id = null) { '; $result['aaData'][] = array("$check", "$products"/*, "$inv"*/, "$cats", "$class", "$price", "$qty", "$status", "$action"); - $result['entries'][] = array_merge($Qproducts->toArray(), $extra_data); - + $result['entries'][] = array_merge($Qproducts->toArray(), $extra_data); + $Qproductscategories->freeResult(); $Qimage->freeResult(); $Qspecials->freeResult(); @@ -248,7 +248,7 @@ public static function getProductFormData($id = null) { $Qcpn->bindInt(':language_id', $lC_Language->getID()); $Qcpn->bindInt(':categories_id', $cats); $Qcpn->execute(); - + $titlestr .= $Qcpn->value('categories_name') . ' » '; } } @@ -266,17 +266,17 @@ public static function getProductFormData($id = null) { // create path names /*function createPathNames($id) { global $lC_Database; - + $Qcpn = $lC_Database->query('select categories_name from :table_categories_description where parent_id = :categories_id and language_id = :language_id'); $Qcpn->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); $Qcpn->bindInt(':language_id', $lC_Language->getID()); $Qcpn->bindInt(':categories_id', $id); $Qcpn->execute(); - + $result = $Qcpn->toArray(); - + if ($result['categoryId'] == 0) { - $name = '' . $result['title'] . ''; + $name = '' . $result['title'] . ''; return $name; } else { $name = ' > ' . $result['title'] . ''; @@ -387,32 +387,32 @@ public static function get($id) { $Qproducts->execute(); $data = array_merge(array('products_id' => $id), (array)$Qproducts->toArray()); - - $Qproducts->freeResult(); - + + $Qproducts->freeResult(); + $Qspecials = $lC_Database->query('select * from :table_specials where products_id = :products_id'); $Qspecials->bindTable(':table_specials', TABLE_SPECIALS); $Qspecials->bindInt(':products_id', $id); - $Qspecials->execute(); - + $Qspecials->execute(); + $data['products_special_status'] = $Qspecials->valueInt('status'); $data['products_special_price'] = $Qspecials->valueDecimal('specials_new_products_price'); if ($Qspecials->value('start_date') != null) { $data['products_special_start_date'] = lC_DateTime::getShort($Qspecials->value('start_date')); } if ($Qspecials->value('expires_date') != null) { - $data['products_special_expires_date'] = lC_DateTime::getShort($Qspecials->value('expires_date')); + $data['products_special_expires_date'] = lC_DateTime::getShort($Qspecials->value('expires_date')); } - - $Qspecials->freeResult(); - + + $Qspecials->freeResult(); + $Qfeatured = $lC_Database->query('select status from :table_featured_products where products_id = :products_id limit 1'); $Qfeatured->bindTable(':table_featured_products', TABLE_FEATURED_PRODUCTS); $Qfeatured->bindInt(':products_id', $id); - $Qfeatured->execute(); - + $Qfeatured->execute(); + $data['products_featured'] = $Qfeatured->valueInt('status'); - $Qfeatured->freeResult(); + $Qfeatured->freeResult(); $variants_array = array(); @@ -467,14 +467,14 @@ public static function get($id) { while ( $Qattributes->next() ) { // if the value is date, reformat for datepicker - $value = (substr($Qattributes->value('value'), 4, 1) == '-') ? lC_DateTime::getShort($Qattributes->value('value')) : $Qattributes->value('value'); + $value = (substr($Qattributes->value('value'), 4, 1) == '-') ? lC_DateTime::getShort($Qattributes->value('value')) : $Qattributes->value('value'); $attributes_array[$Qattributes->valueInt('id')] = $value; } $data['attributes'] = $attributes_array; - - $Qattributes->freeResult(); - + + $Qattributes->freeResult(); + $Qimages = $lC_Database->query('select id, image, default_flag from :table_products_images where products_id = :products_id order by sort_order'); $Qimages->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); $Qimages->bindInt(':products_id', $id); @@ -485,17 +485,17 @@ public static function get($id) { $data['image'] = $Qimages->value('image'); } } - + $Qimages->freeResult(); - + // load subproducts $Qsubproducts = $lC_Database->query('select p.*, pd.* from :table_products p, :table_products_description pd where p.parent_id = :products_id and p.products_id = pd.products_id and pd.language_id = :language_id'); $Qsubproducts->bindTable(':table_products', TABLE_PRODUCTS); $Qsubproducts->bindTable(':table_products_description', TABLE_PRODUCTS_DESCRIPTION); $Qsubproducts->bindInt(':products_id', $id); - $Qsubproducts->bindInt(':language_id', $lC_Language->getID()); + $Qsubproducts->bindInt(':language_id', $lC_Language->getID()); $Qsubproducts->execute(); - + $subproducts_array = array(); while ( $Qsubproducts->next() ) { // subproduct images @@ -505,39 +505,39 @@ public static function get($id) { $Qimages->execute(); $subproducts_array[] = array_merge((array)$Qsubproducts->toArray(), array('image' => $Qimages->value('image'))); - - $Qimages->freeResult(); - } + + $Qimages->freeResult(); + } $data['subproducts'] = $subproducts_array; if (sizeof($data['subproducts']) > 0) $data['has_subproducts'] = 1; - - $Qsubproducts->freeResult(); - + + $Qsubproducts->freeResult(); + // load simple options - $Qoptions = $lC_Database->query('select so.options_id, so.sort_order, so.status, vg.title, vg.module from :table_products_simple_options so left join :table_products_variants_groups vg on (so.options_id = vg.id) where so.products_id = :products_id and vg.languages_id = :languages_id order by so.sort_order'); + $Qoptions = $lC_Database->query('select so.options_id, so.products_id, so.sort_order, so.status, vg.title, vg.module from :table_products_simple_options so left join :table_products_variants_groups vg on (so.options_id = vg.id) where so.products_id = :products_id and vg.languages_id = :languages_id order by so.sort_order'); $Qoptions->bindTable(':table_products_simple_options', TABLE_PRODUCTS_SIMPLE_OPTIONS); $Qoptions->bindTable(':table_products_variants_groups', TABLE_PRODUCTS_VARIANTS_GROUPS); $Qoptions->bindInt(':products_id', $id); $Qoptions->bindInt(':languages_id', $lC_Language->getID()); $Qoptions->execute(); - + while ($Qoptions->next()) { - $data['simple_options'][] = $Qoptions->toArray(); - - $Qvalues = $lC_Database->query('select sov.options_id, sov.values_id, sov.price_modifier, sov.customers_group_id, vv.title from :table_products_simple_options_values sov left join :table_products_variants_values vv on (sov.values_id = vv.id) where sov.options_id = :options_id and vv.languages_id = :languages_id'); + $data['simple_options'][] = $Qoptions->toArray(); + + $Qvalues = $lC_Database->query('select sov.products_id, sov.options_id, sov.values_id, sov.price_modifier, sov.customers_group_id, vv.title from :table_products_simple_options_values sov left join :table_products_variants_values vv on (sov.values_id = vv.id) where sov.options_id = :options_id and vv.languages_id = :languages_id'); $Qvalues->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); $Qvalues->bindTable(':table_products_variants_values', TABLE_PRODUCTS_VARIANTS_VALUES); $Qvalues->bindInt(':options_id', $Qoptions->valueInt('options_id')); $Qvalues->bindInt(':languages_id', $lC_Language->getID()); $Qvalues->execute(); - + while ($Qvalues->next()) { - $data['simple_options']['values'][] = $Qvalues->toArray(); + $data['simple_options']['values'][] = $Qvalues->toArray(); } - $Qvalues->freeResult(); + $Qvalues->freeResult(); } - $Qoptions->freeResult(); - + $Qoptions->freeResult(); + return $data; } /* @@ -563,12 +563,12 @@ public static function save($id = null, $data) { $Qproduct->bindRaw(':products_date_added', 'now()'); $Qproduct->bindInt(':products_ordered', $data['products_ordered']); } - + // set parent status if ( isset($_POST['products_status']) && $_POST['products_status'] == 'active' ) $data['status'] = 1; if ( isset($_POST['products_status']) && $_POST['products_status'] == 'inactive' ) $data['status'] = -1; if ( isset($_POST['products_status']) && $_POST['products_status'] == 'recurring' ) $data['status'] = 0; - + $Qproduct->bindTable(':table_products', TABLE_PRODUCTS); $Qproduct->bindInt(':parent_id', $data['parent_id']); $Qproduct->bindInt(':products_quantity', $data['quantity']); @@ -579,7 +579,7 @@ public static function save($id = null, $data) { $Qproduct->bindValue(':products_sku', $data['sku']); $Qproduct->bindFloat(':products_weight', $data['weight']); $Qproduct->bindInt(':products_weight_class', $data['weight_class']); - $Qproduct->bindInt(':products_tax_class_id', $data['tax_class_id']); + $Qproduct->bindInt(':products_tax_class_id', $data['tax_class_id']); $Qproduct->bindInt(':products_status', $data['status']); $Qproduct->setLogging($_SESSION['module'], $id); $Qproduct->execute(); @@ -593,13 +593,51 @@ public static function save($id = null, $data) { $products_id = $lC_Database->nextID(); } + // remove any old pricing records + $Qpricing = $lC_Database->query('delete from :table_products_pricing where products_id = :products_id'); + $Qpricing->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpricing->bindInt(':products_id', $products_id); + $Qpricing->setLogging($_SESSION['module'], $products_id); + $Qpricing->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + } else { + if ( isset($data['variants_combo']) && !empty($data['variants_combo']) ) { + } else { + if ( isset($data['price_breaks']) && !empty($data['price_breaks']) ) { + for ($i=0; sizeof($data['price_breaks']['group_id']) > $i; $i++) { + if (is_array($data['price_breaks']['group_id'][$i])) continue; + if ($data['price_breaks']['group_id'][$i] == 0) continue; + if ($data['price_breaks']['qty'][$i] == null) continue; + if ($data['price_breaks']['price'][$i] == 0) continue; + $Qpb = $lC_Database->query('insert into :table_products_pricing (products_id, group_id, tax_class_id, qty_break, price_break, date_added) values (:products_id, :group_id, :tax_class_id, :qty_break, :price_break, :date_added)'); + $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); + $Qpb->bindInt(':products_id', $products_id ); + $Qpb->bindInt(':group_id', $data['price_breaks']['group_id'][$i] ); + $Qpb->bindInt(':tax_class_id', $data['price_breaks']['tax_class_id'][$i] ); + $Qpb->bindValue(':qty_break', $data['price_breaks']['qty'][$i] ); + $Qpb->bindValue(':price_break', $data['price_breaks']['price'][$i] ); + $Qpb->bindRaw(':date_added', 'now()'); + $Qpb->setLogging($_SESSION['module'], $products_id); + $Qpb->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + } + } + } + } + $Qcategories = $lC_Database->query('delete from :table_products_to_categories where products_id = :products_id'); $Qcategories->bindTable(':table_products_to_categories', TABLE_PRODUCTS_TO_CATEGORIES); $Qcategories->bindInt(':products_id', $products_id); $Qcategories->setLogging($_SESSION['module'], $products_id); $Qcategories->execute(); - if ( $lC_Database->isError() ) { + if ( $lC_Database->isError() ) { $error = true; } else { if ( isset($data['categories']) && !empty($data['categories']) ) { @@ -619,12 +657,12 @@ public static function save($id = null, $data) { } } } - + if ( $error === false ) { $images = array(); $products_image = new upload('products_image'); - + $products_image->set_extensions(array('gif', 'jpg', 'jpeg', 'png')); if ( $products_image->exists() ) { @@ -649,7 +687,7 @@ public static function save($id = null, $data) { } $default_flag = 1; - + foreach ($images as $image) { $Qimage = $lC_Database->query('insert into :table_products_images (products_id, image, default_flag, sort_order, date_added) values (:products_id, :image, :default_flag, :sort_order, :date_added)'); $Qimage->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); @@ -674,7 +712,7 @@ public static function save($id = null, $data) { $default_flag = 0; } } - + if ( $error === false ) { if ( isset($data['categories']) && !empty($data['categories']) ) { $cPath = $lC_CategoryTree->getcPath($data['categories'][0]); @@ -702,7 +740,7 @@ public static function save($id = null, $data) { $error = true; break; } - + // added for permalink if (is_numeric($id)) { $Qpl = $lC_Database->query('update :table_permalinks set permalink = :permalink, query = :query where item_id = :item_id and type = :type and language_id = :language_id'); @@ -741,7 +779,7 @@ public static function save($id = null, $data) { $Qattribute = $lC_Database->query('insert into :table_product_attributes (id, products_id, languages_id, value) values (:id, :products_id, :languages_id, :value)'); $Qattribute->bindInt(':languages_id', 0); } - + $Qattribute->bindTable(':table_product_attributes', TABLE_PRODUCT_ATTRIBUTES); $Qattribute->bindValue(':value', $value); $Qattribute->bindInt(':products_id', $products_id); @@ -950,20 +988,20 @@ public static function save($id = null, $data) { $Qchk->bindTable(':table_products', TABLE_PRODUCTS); $Qchk->bindInt(':parent_id', $products_id); $Qchk->execute(); - + while( $Qchk->next() ) { if (! @in_array($Qchk->valueInt('products_id'), $data['sub_products_id'])) { - self::delete($Qchk->valueInt('products_id')); + self::delete($Qchk->valueInt('products_id')); } } - } else { + } else { // delete any possible ghosts for sanity $Qdel = $lC_Database->query('delete from :table_products where parent_id = :products_id and is_subproduct = :is_subproduct'); $Qdel->bindTable(':table_products', TABLE_PRODUCTS); $Qdel->bindInt(':parent_id', $products_id); $Qdel->bindInt(':is_subproduct', 1); - $Qdel->execute(); - } + $Qdel->execute(); + } for ($i=0; $i < sizeof($data['sub_products_name']); $i++) { if ($data['sub_products_name'][$i] == '') continue; @@ -975,9 +1013,9 @@ public static function save($id = null, $data) { } else { // add new subproduct record $Qsubproduct = $lC_Database->query('insert into :table_products (parent_id, products_quantity, products_cost, products_price, products_sku, products_weight, products_weight_class, products_status, products_tax_class_id, products_ordered, products_date_added, is_subproduct) values (:parent_id, :products_quantity, :products_cost, :products_price, :products_sku, :products_weight, :products_weight_class, :products_status, :products_tax_class_id, :products_ordered, :products_date_added, :is_subproduct)'); - $Qsubproduct->bindInt(':products_ordered', $data['products_ordered'][$i]); + $Qsubproduct->bindInt(':products_ordered', $data['products_ordered'][$i]); } - + $Qsubproduct->bindTable(':table_products', TABLE_PRODUCTS); $Qsubproduct->bindInt(':parent_id', $products_id); $Qsubproduct->bindInt(':products_quantity', $data['sub_products_qoh'][$i]); @@ -988,11 +1026,11 @@ public static function save($id = null, $data) { $Qsubproduct->bindInt(':products_weight_class', $data['weight_class']); $Qsubproduct->bindInt(':products_status', $data['sub_products_status'][$i]); $Qsubproduct->bindInt(':products_tax_class_id', $data['tax_class_id']); - $Qsubproduct->bindRaw(':products_date_added', 'now()'); - $Qsubproduct->bindInt(':is_subproduct', ($data['sub_products_default'][$i] == '1' || sizeof($data['sub_products_name']) == 2) ? 2 : 1); + $Qsubproduct->bindRaw(':products_date_added', 'now()'); + $Qsubproduct->bindInt(':is_subproduct', ($data['sub_products_default'][$i] == '1' || sizeof($data['sub_products_name']) == 2) ? 2 : 1); $Qsubproduct->setLogging($_SESSION['module'], $products_id); $Qsubproduct->execute(); - + if ( $lC_Database->isError() ) { $error = true; } else { @@ -1000,7 +1038,7 @@ public static function save($id = null, $data) { $sub_products_id = $data['sub_products_id'][$i]; } else { $sub_products_id = self::_getLastID(); - } + } // subproduct description foreach ($lC_Language->getAll() as $l) { if (is_numeric($id) && @in_array($data['sub_products_id'][$i], $data['sub_products_id'])) { @@ -1020,9 +1058,9 @@ public static function save($id = null, $data) { break; } } - } + } - //subproduct images + //subproduct images if ( $error === false ) { if (empty($_FILES['sub_products_image']['name'][$i]) === false) { $images = array(); @@ -1032,7 +1070,7 @@ public static function save($id = null, $data) { 'tmp_name' => $_FILES['sub_products_image']['tmp_name'][$i]); $products_image = new upload($file); - + $products_image->set_extensions(array('gif', 'jpg', 'jpeg', 'png')); if ( $products_image->exists() ) { @@ -1044,7 +1082,7 @@ public static function save($id = null, $data) { } $default_flag = 1; - + foreach ($images as $image) { $Qimage = $lC_Database->query('insert into :table_products_images (products_id, image, default_flag, sort_order, date_added) values (:products_id, :image, :default_flag, :sort_order, :date_added)'); $Qimage->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); @@ -1068,40 +1106,32 @@ public static function save($id = null, $data) { $default_flag = 0; } } - } - } + } + } } - } - + } + // simple options if ( $error === false ) { - - // remove old values - $Qcheck = $lC_Database->query('select options_id from :table_products_simple_options where products_id = :products_id'); - $Qcheck->bindTable(':table_products_simple_options', TABLE_PRODUCTS_SIMPLE_OPTIONS); - $Qcheck->bindInt(':products_id', $products_id); - $Qcheck->execute(); - // delete the simple options values - while ( $Qcheck->next() ) { - $Qdel = $lC_Database->query('delete from :table_products_simple_options_values where options_id = :options_id'); - $Qdel->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); - $Qdel->bindInt(':options_id', $Qcheck->valueInt('options_id')); - $Qdel->setLogging($_SESSION['module'], $products_id); - $Qdel->execute(); - } - // delete the simple option + + // delete the simple options $Qdel = $lC_Database->query('delete from :table_products_simple_options where products_id = :products_id'); $Qdel->bindTable(':table_products_simple_options', TABLE_PRODUCTS_SIMPLE_OPTIONS); $Qdel->bindInt(':products_id', $products_id); $Qdel->setLogging($_SESSION['module'], $products_id); - $Qdel->execute(); - - $Qcheck->freeResult(); - + $Qdel->execute(); + + // delete the simple options values + $Qdel = $lC_Database->query('delete from :table_products_simple_options_values where products_id = :products_id'); + $Qdel->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); + $Qdel->bindInt(':products_id', $products_id); + $Qdel->setLogging($_SESSION['module'], $products_id); + $Qdel->execute(); + // if values are set, save them if ( isset($data['simple_options_group_name']) && !empty($data['simple_options_group_name']) ) { foreach ( $data['simple_options_group_name'] as $group_id => $value ) { - + // add the new option $Qoptions = $lC_Database->query('insert into :table_products_simple_options (options_id, products_id, sort_order, status) values (:options_id, :products_id, :sort_order, :status)'); $Qoptions->bindTable(':table_products_simple_options', TABLE_PRODUCTS_SIMPLE_OPTIONS); @@ -1115,34 +1145,35 @@ public static function save($id = null, $data) { if ( $lC_Database->isError() ) { $error = true; break; - } - + } + // add the new option values foreach ( $data['simple_options_entry_price_modifier'] as $customers_group_id => $options ) { foreach ( $options as $options_id => $option_value ) { if ($options_id == $group_id) { foreach ( $option_value as $values_id => $price_modifier ) { - $Qoptions = $lC_Database->query('insert into :table_products_simple_options_values (values_id, options_id, customers_group_id, price_modifier) values (:values_id, :options_id, :customers_group_id, :price_modifier)'); - $Qoptions->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); - $Qoptions->bindInt(':values_id', $values_id); - $Qoptions->bindInt(':options_id', $options_id); - $Qoptions->bindInt(':customers_group_id', $customers_group_id); - $Qoptions->bindFloat(':price_modifier', (float)$price_modifier); - $Qoptions->setLogging($_SESSION['module'], $products_id); - $Qoptions->execute(); + $Qoptval = $lC_Database->query('insert into :table_products_simple_options_values (products_id, values_id, options_id, customers_group_id, price_modifier) values (:products_id, :values_id, :options_id, :customers_group_id, :price_modifier)'); + $Qoptval->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); + $Qoptval->bindInt(':products_id', $products_id); + $Qoptval->bindInt(':values_id', $values_id); + $Qoptval->bindInt(':options_id', $options_id); + $Qoptval->bindInt(':customers_group_id', $customers_group_id); + $Qoptval->bindFloat(':price_modifier', (float)$price_modifier); + $Qoptval->setLogging($_SESSION['module'], $products_id); + $Qoptval->execute(); if ( $lC_Database->isError() ) { $error = true; break 4; - } + } } } } } } - } + } } - + // specials pricing if ( $error === false ) { if ($data['specials_pricing_switch'] == 1) { @@ -1155,7 +1186,7 @@ public static function save($id = null, $data) { 'specials_status' => (($data['products_special_pricing_enable1'] != '') ? 1 : 0)); lC_Specials_Admin::save((int)$specials_id, $specials_data); } - } + } if ( $error === false ) { $lC_Database->commitTransaction(); @@ -1164,7 +1195,7 @@ public static function save($id = null, $data) { lC_Cache::clear('category_tree'); lC_Cache::clear('also_purchased'); - return $products_id; // Return the products id for use with the save_close buttons + return $products_id; // Reutrn the products id for use with the save_close buttons } $lC_Database->rollbackTransaction(); @@ -1255,7 +1286,7 @@ public static function copy($id, $category_id, $type) { $error = true; break; } - + // permalink addition $lC_CategoryTree = new lC_CategoryTree_Admin(); $cPath = (end($category_array) != 0) ? $lC_CategoryTree->getcPath(end($category_array)) : 0; @@ -1571,20 +1602,20 @@ public static function delete($id, $categories = null) { $Qim->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); $Qim->bindInt(':products_id', $id); $Qim->execute(); - + // added to check for other products using same image and do not delete $Qop = $lC_Database->query('select id from :table_products_images where image = :image'); $Qop->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); $Qop->bindInt(':image', $Qim->value('image')); $Qop->execute(); - + if ($Qop->numberOfRows() < 2) { while ($Qim->next()) { $lC_Image->delete($Qim->valueInt('id')); } } } - + // QPB if ( $error === false ) { $Qpb = $lC_Database->query('delete from :table_products_pricing where products_id = :products_id'); @@ -1597,7 +1628,7 @@ public static function delete($id, $categories = null) { $error = true; } } - + // permalink if ( $error === false ) { $Qpb = $lC_Database->query('delete from :table_permalinks where item_id = :item_id'); @@ -1610,14 +1641,14 @@ public static function delete($id, $categories = null) { } } } - + // delete subproducts if ( ($error === false) && ($delete_product === true) ) { $Qcheck = $lC_Database->query('select products_id from :table_products where parent_id = :parent_id'); $Qcheck->bindTable(':table_products', TABLE_PRODUCTS); $Qcheck->bindInt(':parent_id', $id); - $Qcheck->execute(); - + $Qcheck->execute(); + while ( $Qcheck->next() ) { // delete the description data $Qdel = $lC_Database->query('delete from :table_products_description where products_id = :products_id'); @@ -1625,26 +1656,26 @@ public static function delete($id, $categories = null) { $Qdel->bindInt(':products_id', $Qcheck->valueInt('products_id')); $Qdel->setLogging($_SESSION['module'], $id); $Qdel->execute(); - + // delete the image data $Qdel = $lC_Database->query('delete from :table_products_images where products_id = :products_id'); $Qdel->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); $Qdel->bindInt(':products_id', $Qcheck->valueInt('products_id')); $Qdel->setLogging($_SESSION['module'], $id); - $Qdel->execute(); - } + $Qdel->execute(); + } // delete the subproduct $Qdel = $lC_Database->query('delete from :table_products where products_id = :products_id'); $Qdel->bindTable(':table_products', TABLE_PRODUCTS); $Qdel->bindInt(':products_id', $Qcheck->valueInt('products_id')); $Qdel->setLogging($_SESSION['module'], $id); - $Qdel->execute(); - + $Qdel->execute(); + if ( $lC_Database->isError() ) { $error = true; - } + } } - + // delete simple options if ( ($error === false) && ($delete_product === true) ) { $Qcheck = $lC_Database->query('select options_id from :table_products_simple_options where products_id = :products_id'); @@ -1658,21 +1689,21 @@ public static function delete($id, $categories = null) { $Qdel->bindInt(':options_id', $Qcheck->valueInt('options_id')); $Qdel->setLogging($_SESSION['module'], $id); $Qdel->execute(); - } + } // delete the simple option $Qdel = $lC_Database->query('delete from :table_products_simple_options where products_id = :products_id'); $Qdel->bindTable(':table_products_simple_options', TABLE_PRODUCTS_SIMPLE_OPTIONS); $Qdel->bindInt(':products_id', $id); $Qdel->setLogging($_SESSION['module'], $id); - $Qdel->execute(); - + $Qdel->execute(); + $Qcheck->freeResult(); - + if ( $lC_Database->isError() ) { $error = true; } } - + if ( $error === false ) { $lC_Database->commitTransaction(); @@ -1739,7 +1770,7 @@ public static function setDateAvailable($id, $data) { */ public static function getPermalinkCount($permalink, $iid = null, $type = null) { global $lC_Database; - + $Qpermalinks = $lC_Database->query('select count(*) as total, item_id, permalink from :table_permalinks where permalink = :permalink'); if (is_numeric($iid)) { @@ -1750,13 +1781,13 @@ public static function getPermalinkCount($permalink, $iid = null, $type = null) $Qpermalinks->bindTable(':table_permalinks', TABLE_PERMALINKS); $Qpermalinks->bindValue(':permalink', $permalink); $Qpermalinks->execute(); - + if ($iid == $Qpermalinks->valueInt('item_id') && $permalink == $Qpermalinks->value('permalink')) { $permalink_count = 0; - } else { + } else { $permalink_count = $Qpermalinks->valueInt('total'); } - + return $permalink_count; } /* @@ -1767,14 +1798,14 @@ public static function getPermalinkCount($permalink, $iid = null, $type = null) * @return array */ public static function validatePermalink($permalink_array, $iid = null, $type = null) { - + $validated = true; foreach($permalink_array as $permalink) { echo '[' . $permalink . ']'; if ( preg_match('/^[a-z0-9_-]+$/iD', $permalink) !== 1 ) $validated = false; if ( lC_Products_Admin::getPermalinkCount($permalink, $iid, $type) > 0) $validated = false; } - + return $validated; } /* @@ -1783,15 +1814,15 @@ public static function validatePermalink($permalink_array, $iid = null, $type = * @param string $section The product page section to display in * @access public * @return string - */ + */ public static function getProductAttributeModules($section = '') { global $lC_Database, $lC_Language, $_module; $aInfo = new lC_ObjectInfo(lC_Products_Admin::get($_GET[$_module])); - $attributes = $aInfo->get('attributes'); - + $attributes = $aInfo->get('attributes'); + $output = ''; - + $Qattributes = $lC_Database->query('select id, code from :table_templates_boxes where modules_group = :modules_group order by code desc'); $Qattributes->bindTable(':table_templates_boxes'); $Qattributes->bindValue(':modules_group', 'product_attributes'); @@ -1814,7 +1845,7 @@ public static function getProductAttributeModules($section = '') { } else { lC_Addons_Admin::loadAdminAddonsProductAttributesDefinitions($module->getCode()); } - + $output .= '
    ' . $lC_Language->get('product_attributes_' . $module->getCode() . '_title') . '' . lc_show_info_bubble($lC_Language->get('info_bubble_attributes_' . $module->getCode() . '_text'), null, 'info-spot on-left grey float-right mid-margin-bottom') . ' @@ -1825,8 +1856,8 @@ public static function getProductAttributeModules($section = '') {
    '; } } - } - + } + return $output; } /* @@ -1837,26 +1868,26 @@ public static function getProductAttributeModules($section = '') { */ public static function getSimpleOptionData() { return lC_Product_variants_Admin::getVariantGroups(); - } + } /* - * Return the product variant entry data for options wizard modal + * Return the product variant entry data for options wizard modal * * @access public * @return array */ - public static function getSimpleOptionEntryData($eData) { + public static function getSimpleOptionEntryData($eData) { global $lC_Database; - + $veData = lC_Product_variants_Admin::getVariantEntries($eData['group']); - + $optionsArr = array(); foreach($veData as $key => $value) { $Qoption = $lC_Database->query('select price_modifier from :table_products_simple_options_values where options_id = :options_id limit 1'); $Qoption->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); $Qoption->bindValue(':options_id', $value['id']); $Qoption->bindValue(':languages_id', $value['languages_id']); - $Qoption->execute(); - + $Qoption->execute(); + $optionsArr[$key] = array('id' => $value['id'], 'languages_id' => $value['languages_id'], 'products_variants_groups_id' => $value['products_variants_groups_id'], @@ -1864,12 +1895,12 @@ public static function getSimpleOptionEntryData($eData) { 'price_modifier' => $Qoption->valueDecimal('price_modifier')); $Qoption->freeResult(); } - + if (empty($optionsArr[0])) $optionsArr['rpcStatus'] = '-2'; - + return $optionsArr; - } - + } + /* * Return the product simple options accordian listing content * @@ -1878,37 +1909,37 @@ public static function getSimpleOptionEntryData($eData) { */ public static function getSimpleOptionsContent($options = array()) { $content = ''; - + $content .= self::_getSimpleOptionsTbody($options); - + return $content; - } + } /* * Return the product simple options tbody content * * @param array $options The product simple options array * @access public * @return string - */ + */ private static function _getSimpleOptionsTbody($options) { - $tbody = ''; + $tbody = ''; if (isset($options) && !empty($options)) { foreach ($options as $key => $so) { if ( (isset($so['title']) && $so['title'] != NULL) ){ $items = ''; $itemsInput = ''; if (is_array($options['values'])) { - foreach ($options['values'] as $k => $v) { - if (($v['options_id'] == $so['options_id']) && $v['customers_group_id'] == DEFAULT_CUSTOMERS_GROUP_ID) { + foreach ($options['values'] as $k => $v) { + if (($v['options_id'] == $so['options_id']) && $v['customers_group_id'] == DEFAULT_CUSTOMERS_GROUP_ID && $so['products_id'] == $v['products_id']) { $items .= '
    ' . $v['title'] . '
    '; $itemsInput .= ''; } } } - + $statusIcon = (isset($so['status']) && $so['status'] == '1') ? '' : ''; - - + + $tbody .= '' . ' ' . ' ' . @@ -1928,8 +1959,8 @@ private static function _getSimpleOptionsTbody($options) { } } } - - return $tbody; + + return $tbody; } /* * Return the product simple options accordian price listing content @@ -1939,45 +1970,45 @@ private static function _getSimpleOptionsTbody($options) { */ public static function getOptionsPricingContent() { global $lC_Language, $pInfo; - + $content = ''; $groups = lC_Customer_groups_Admin::getAll(); foreach($groups['entries'] as $key => $value) { $content .= '
    ' . $value['customers_group_name'] . '
    ' . '
    ' . '
    '; - - if (isset($pInfo) && is_array($pInfo->get('simple_options'))) { + + if (isset($pInfo) && is_array($pInfo->get('simple_options'))) { $content .= '
    ' . $lC_Language->get('text_simple_options') . '
    ' . ' ' . ' ' . self::_getSimpleOptionsPricingTbody($pInfo->get('simple_options'), $value['customers_group_id']) . '' . '
    '; - + } else if (isset($pInfo) && $pInfo->get('has_subproducts') == '1') { $content .= '
    ' . $lC_Language->get('text_sub_products') . '
    ' . ' ' . ' ' . self::_getSubProductsPricingTbody($pInfo, $value['customers_group_id']) . '' . - '
    '; - + ' '; + } else if (isset($pInfo) && $pInfo->get('has_variants') == '1') { - - } else { - $content .= '
    ' . $lC_Language->get('text_no_options_defined') . '
    '; + + } else { + $content .= '
    ' . $lC_Language->get('text_no_options_defined') . '
    '; } - + $content .= '
    ' . - '
    '; + ''; } - + return $content; - } + } /* * Determine if the product has subproducts * * @param integer $id The product id * @access public * @return boolean - */ + */ public static function hasSubProducts($id) { global $lC_Database; @@ -1992,7 +2023,7 @@ public static function hasSubProducts($id) { } return false; - } + } /* * Determine the min/max product values based on key * @@ -2000,7 +2031,7 @@ public static function hasSubProducts($id) { * @param string $key The product column key * @access public * @return array - */ + */ public static function getMinMax($id, $key = 'products_quantity') { global $lC_Database; @@ -2009,34 +2040,34 @@ public static function getMinMax($id, $key = 'products_quantity') { $Qproducts->bindInt(':parent_id', $id); $Qproducts->bindInt(':is_subproduct', 0); $Qproducts->execute(); - + $result = $Qproducts->toArray(); - + $Qproducts->freeResult(); - + return $result; - } + } /* * Return the sub products pricing content * * @param array $data The product data object * @access private * @return string - */ + */ private static function _getSubProductsPricingTbody($pInfo, $customers_group_id) { global $lC_Currencies; - - if ($customers_group_id == '') return false; + + if ($customers_group_id == '') return false; $ok = (defined('ADDONS_SYSTEM_LOADED_7_PRO_STATUS') && ADDONS_SYSTEM_LOADED_7_PRO_STATUS == '1') ? true : false; - - $tbody = ''; - $cnt = 0; + + $tbody = ''; + $cnt = 0; if (isset($pInfo) && $pInfo->get('has_subproducts') == '1') { foreach ($pInfo->get('subproducts') as $key => $sub) { if ((isset($sub['products_name']) && $sub['products_name'] != NULL)) { $tbody .= '' . - ' ' . $sub['products_name'] . '' . + ' ' . $sub['products_name'] . '' . ' ' . '
    ' . ' ' . $lC_Currencies->getSymbolLeft() . '' . @@ -2044,11 +2075,11 @@ private static function _getSubProductsPricingTbody($pInfo, $customers_group_id) '
    ' . ' ' . ''; - $cnt++; - } + $cnt++; + } } - } - + } + return $tbody; } /* @@ -2057,31 +2088,31 @@ private static function _getSubProductsPricingTbody($pInfo, $customers_group_id) * @param array $options The product simple options array * @access public * @return string - */ + */ private static function _getSimpleOptionsPricingTbody($options, $customers_group_id) { global $lC_Currencies, $pInfo; - + if ($customers_group_id == '') return false; - + $gData = lC_Customer_groups_Admin::getData($customers_group_id); $baselineDiscount = (float)$gData['baseline_discount']; $basePrice = (isset($pInfo)) ? (float)$pInfo->get('products_price') : 0.00; - $tbody = ''; + $tbody = ''; if (isset($options) && !empty($options)) { foreach ($options as $key => $so) { if ((isset($so['title']) && $so['title'] != NULL)) { $items = ''; - if (is_array($options['values'])) { + if (is_array($options['values'])) { foreach ($options['values'] as $k => $v) { - if ($v['options_id'] == $so['options_id'] && $v['customers_group_id'] == $customers_group_id) { + if ($v['options_id'] == $so['options_id'] && $v['customers_group_id'] == $customers_group_id && $v['products_id'] == $pInfo->get('products_id')) { if ($customers_group_id == DEFAULT_CUSTOMERS_GROUP_ID) { $mod = (isset($v['price_modifier']) && !empty($v['price_modifier'])) ? number_format($v['price_modifier'], DECIMAL_PLACES) : '0.00'; } else { $mod = number_format(round(($basePrice * $baselineDiscount) * .01, DECIMAL_PLACES), DECIMAL_PLACES); } $items .= '' . - ' ' . $v['title'] . '' . + ' ' . $v['title'] . '' . ' ' . '
    ' . '
    ' . @@ -2094,15 +2125,15 @@ private static function _getSimpleOptionsPricingTbody($options, $customers_group } } } - + $tbody .= '' . $so['title'] . '' . $items; } } } - - return $tbody; - } + + return $tbody; + } /* * Return the product simple options accordian price listing content * @@ -2111,14 +2142,14 @@ private static function _getSimpleOptionsPricingTbody($options, $customers_group */ public static function getGroupPricingContent($base_price) { global $lC_Language, $lC_Currencies; - + $content = ''; $groups = lC_Customer_groups_Admin::getAll(); foreach($groups['entries'] as $key => $value) { - $discount = round((float)$base_price * ((float)$value['baseline_discount'] * .01), DECIMAL_PLACES); + $discount = round((float)$base_price * ((float)$value['baseline_discount'] * .01), DECIMAL_PLACES); $discounted_price = $base_price - $discount; - + $content .= '
    ' . ' ' . ' ' . @@ -2126,12 +2157,12 @@ public static function getGroupPricingContent($base_price) { ' ' . $lC_Currencies->getSymbolLeft() . '' . ' ' . '
    ' . - ' ' . $lC_Language->get('text_price') . '-' . number_format($value['baseline_discount'], DECIMAL_PLACES) . '%' . + ' ' . $lC_Language->get('text_price') . '-' . number_format($value['baseline_discount'], DECIMAL_PLACES) . '%' . '
    '; } - + return $content; - } + } /* * Return the product simple options accordian price listing content * @@ -2140,15 +2171,15 @@ public static function getGroupPricingContent($base_price) { */ public static function getSpecialPricingContent() { global $lC_Language, $lC_Currencies, $pInfo; - + $content = ''; $groups = lC_Customer_groups_Admin::getAll(); foreach($groups['entries'] as $key => $value) { if ($value['customers_group_id'] == 1) { // remove this line when specials per group is reintroduced $base = (isset($pInfo)) ? (float)$pInfo->get('products_price') : 0.00; $special = (isset($pInfo)) ? (float)$pInfo->get('products_special_price') : 0.00; - $discount = (isset($base) && $base > 0.00) ? round( ((($base - $special) / $base) * 100), DECIMAL_PLACES) : 0.00; - + $discount = (isset($base) && $base > 0.00) ? round( ((($base - $special) / $base) * 100), DECIMAL_PLACES) : 0.00; + $content .= '' . '
    ' . '
    ' . @@ -2176,15 +2207,15 @@ public static function getSpecialPricingContent() { '
    '; } // remove this line when specials per group is reintroduced } - + return $content; - } + } /* * Return true if product has special in db, false if none * * @access public * @return boolean true or false - */ + */ public static function hasSpecial($id) { global $lC_Database; @@ -2192,44 +2223,44 @@ public static function hasSpecial($id) { $Qspecial->bindTable(':table_specials', TABLE_SPECIALS); $Qspecial->bindInt(':products_id', $id); $Qspecial->execute(); - + if ( $Qspecial->numberOfRows() > 0 ) { return $Qspecial->value('specials_id'); } return false; - } - + } + private static function _getLastID() { global $lC_Database; - + $Qchk = $lC_Database->query('select products_id from :table_products order by products_id desc'); $Qchk->bindTable(':table_products', TABLE_PRODUCTS); $Qchk->bindInt(':parent_id', $products_id); - $Qchk->execute(); - + $Qchk->execute(); + return $Qchk->valueInt('products_id'); } /* * update product status db entry - * + * * @access public * @return true or false */ public static function updateStatus($id, $val) { global $lC_Database; - + $Qupdate = $lC_Database->query('update :table_products set products_status = :products_status where products_id = :products_id'); $Qupdate->bindTable(':table_products', TABLE_PRODUCTS); $Qupdate->bindInt(':products_status', $val); $Qupdate->bindInt(':products_id', $id); $Qupdate->execute(); - + return true; } /* * get assignedCategoryTreeSelect options - * + * * @access public * @return html */ @@ -2237,18 +2268,18 @@ public static function assignedCategoryTreeSelect($spacer = 0) { $assignedCategoryTree = new lC_CategoryTree(); $assignedCategoryTree->setBreadcrumbUsage(false); $assignedCategoryTree->setSpacerString(' ', 3); - + $assignedCategoryTreeSelect = ''; foreach ($assignedCategoryTree->getArray() as $value) { if ($value['mode'] == 'category') { $assignedCategoryTreeSelect .= '' . "\n"; } } - + return $assignedCategoryTreeSelect; - } + } /* - * Returns an array of product + * Returns an array of product * * @param integer $id The product id * @access public @@ -2256,29 +2287,29 @@ public static function assignedCategoryTreeSelect($spacer = 0) { */ public static function getProductsArray($pID = null, $ppID = 0) { global $lC_Database, $lC_Language, $lC_Currencies, $_module; - + $result = array(); - + $Qproducts = $lC_Database->query('select SQL_CALC_FOUND_ROWS p.*, pd.products_name, pd.products_keyword from :table_products p, :table_products_description pd where p.parent_id = :products_parent_id and p.products_id = pd.products_id and pd.language_id = :language_id'); - + if (is_numeric($pID)) { $Qproducts->appendQuery('and p.products_id = :products_id'); - $Qproducts->bindInt(':products_id', $pID); + $Qproducts->bindInt(':products_id', $pID); } - + $Qproducts->appendQuery('order by pd.products_name'); $Qproducts->bindTable(':table_products', TABLE_PRODUCTS); $Qproducts->bindTable(':table_products_description', TABLE_PRODUCTS_DESCRIPTION); $Qproducts->bindInt(':language_id', $lC_Language->getID()); $Qproducts->bindInt(':products_parent_id', $ppID); $Qproducts->execute(); - + if ($Qproducts->numberOfRows()) { while ($Qproducts->next()) { $result[] = $Qproducts->toArray(); } } - + return $result; } /* @@ -2290,7 +2321,7 @@ public static function getProductsArray($pID = null, $ppID = 0) { */ public static function getProductsDropdownArray($exclude = array()) { global $lC_Database, $lC_Language, $lC_Currencies, $_module; - + $result = array(); $Qproducts = $lC_Database->query('select SQL_CALC_FOUND_ROWS p.products_id, pd.products_name from :table_products p, :table_products_description pd where p.products_id = pd.products_id and pd.language_id = :language_id'); @@ -2301,7 +2332,7 @@ public static function getProductsDropdownArray($exclude = array()) { $Qproducts->execute(); if ($Qproducts->numberOfRows()) { while ( $Qproducts->next() ) { - if (!in_array($Qproducts->value('products_id'), $exclude)) { + if (!in_array($Qproducts->value('products_id'), $exclude)) { $result[] = array('id' => $Qproducts->value('products_id'), 'text' => $Qproducts->value('products_name')); } From b9606d7edb976f7d1f7072167837f454ab6c57be Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 14:29:22 -0500 Subject: [PATCH 126/158] [IC] merge work --- .../admin/applications/products/classes/products.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php index 9162d1a39..e65166f43 100644 --- a/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php +++ b/catalog/addons/Loaded_7_Pro/admin/applications/products/classes/products.php @@ -14,10 +14,6 @@ include_once($lC_Vqmod->modCheck(DIR_FS_ADMIN . 'includes/applications/products/classes/products.php')); include_once($lC_Vqmod->modCheck(DIR_FS_ADMIN . 'includes/applications/customer_groups/classes/customer_groups.php')); -//include_once($lC_Vqmod->modCheck('includes/applications/product_variants/classes/product_variants.php')); -//include_once($lC_Vqmod->modCheck('includes/applications/specials/classes/specials.php')); -//include_once($lC_Vqmod->modCheck('includes/applications/categories/classes/categories.php')); -//include_once($lC_Vqmod->modCheck('includes/classes/addons.php')); class lC_Products_Admin_Pro extends lC_Products_Admin { /* @@ -53,10 +49,11 @@ public static function save($id = null, $data) { $error = true; } else { // add the new records + foreach($data['products_qty_break_point'][$group] as $key => $val) { - if ($val['qty_break'] == 1) continue; // do not save the base price in pricing table if ($data['products_qty_break_point'][$group][$key] == null) continue; + if ($data['products_qty_break_point'][$group][$key] == '1') continue; $Qpb = $lC_Database->query('insert into :table_products_pricing (products_id, group_id, tax_class_id, qty_break, price_break, date_added) values (:products_id, :group_id, :tax_class_id, :qty_break, :price_break, :date_added)'); $Qpb->bindTable(':table_products_pricing', TABLE_PRODUCTS_PRICING); @@ -76,7 +73,7 @@ public static function save($id = null, $data) { return $products_id; // Return the products id for use with the save_close buttons } - + $lC_Database->rollbackTransaction(); } } From 52c623de3b1ce586a564e8f141ff694c1708ca8a Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 14:35:19 -0500 Subject: [PATCH 127/158] [IC] update version number --- catalog/includes/version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog/includes/version.txt b/catalog/includes/version.txt index 8218a6979..73cd7b30e 100644 --- a/catalog/includes/version.txt +++ b/catalog/includes/version.txt @@ -1 +1 @@ -7.002.0.1|02/05/2014 +7.002.1.0|02/07/2014 From 5299c37bf39fd3e2f62b58262f0cbda100756530 Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Wed, 5 Feb 2014 16:09:07 -0500 Subject: [PATCH 128/158] recent history image stretch issue fix --- catalog/templates/core15/css/template.css | 1 - 1 file changed, 1 deletion(-) diff --git a/catalog/templates/core15/css/template.css b/catalog/templates/core15/css/template.css index 407c2ae8e..68e098eaa 100644 --- a/catalog/templates/core15/css/template.css +++ b/catalog/templates/core15/css/template.css @@ -487,7 +487,6 @@ } #loaded7 .content-recently-visited-image-src { - width: 100px; height: 120px; } From ce382d714c628fb22d3619732bf0f77f0e66bc49 Mon Sep 17 00:00:00 2001 From: datazen Date: Wed, 5 Feb 2014 16:26:01 -0500 Subject: [PATCH 129/158] [951] merge work --- .../actions/download.php | 91 + .../classes/products_import_export.php | 1638 +++++++++++++++++ .../products_import_export/classes/rpc.php | 252 +++ .../js/products_import_export.js.php | 241 +++ .../modal/getCategoriesFile.php | 64 + .../modal/getOptionGroupsFile.php | 64 + .../modal/getOptionProductsFile.php | 65 + .../modal/getOptionVariantsFile.php | 64 + .../modal/getProductsFile.php | 65 + .../modal/importCategories.php | 78 + .../modal/importOptions.php | 168 ++ .../modal/importProducts.php | 78 + .../products_import_export/pages/main.php | 229 +++ .../products_import_export.php | 32 + .../samples/categories_import_sample.txt | 1 + .../samples/options_groups_import_sample.txt | 1 + .../options_to_products_import_sample.txt | 1 + .../options_variants_import_sample.txt | 1 + .../samples/products_import_sample.txt | 2 + .../modules/access/products_import_export.php | 12 + .../en_US/products_import_export.php | 103 ++ .../modules/access/products_import_export.php | 28 + .../default/css/products_import_export.css | 14 + .../products_import_export/imports/.htaccess | 4 + 24 files changed, 3296 insertions(+) create mode 100644 catalog/admin/includes/applications/products_import_export/actions/download.php create mode 100644 catalog/admin/includes/applications/products_import_export/classes/products_import_export.php create mode 100644 catalog/admin/includes/applications/products_import_export/classes/rpc.php create mode 100644 catalog/admin/includes/applications/products_import_export/js/products_import_export.js.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/getCategoriesFile.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/getOptionGroupsFile.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/getOptionProductsFile.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/getOptionVariantsFile.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/getProductsFile.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/importCategories.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/importOptions.php create mode 100644 catalog/admin/includes/applications/products_import_export/modal/importProducts.php create mode 100644 catalog/admin/includes/applications/products_import_export/pages/main.php create mode 100644 catalog/admin/includes/applications/products_import_export/products_import_export.php create mode 100644 catalog/admin/includes/applications/products_import_export/samples/categories_import_sample.txt create mode 100644 catalog/admin/includes/applications/products_import_export/samples/options_groups_import_sample.txt create mode 100644 catalog/admin/includes/applications/products_import_export/samples/options_to_products_import_sample.txt create mode 100644 catalog/admin/includes/applications/products_import_export/samples/options_variants_import_sample.txt create mode 100644 catalog/admin/includes/applications/products_import_export/samples/products_import_sample.txt create mode 100644 catalog/admin/includes/languages/en_US/modules/access/products_import_export.php create mode 100644 catalog/admin/includes/languages/en_US/products_import_export.php create mode 100644 catalog/admin/includes/modules/access/products_import_export.php create mode 100644 catalog/admin/templates/default/css/products_import_export.css create mode 100644 catalog/includes/work/products_import_export/imports/.htaccess diff --git a/catalog/admin/includes/applications/products_import_export/actions/download.php b/catalog/admin/includes/applications/products_import_export/actions/download.php new file mode 100644 index 000000000..b7f7ce554 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/actions/download.php @@ -0,0 +1,91 @@ + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/classes/products_import_export.php b/catalog/admin/includes/applications/products_import_export/classes/products_import_export.php new file mode 100644 index 000000000..2afb33a10 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/classes/products_import_export.php @@ -0,0 +1,1638 @@ +query($QtotalsSQL); + $Qtotals->execute(); + + $result = array(); + if( !$lC_Database->isError() ){ + $result['total'] = $Qtotals->valueInt('total'); + } + + return $result; + } + + /* + * Return the temp file name for downloading products + * + * @param string $pfilter A string of the filter that is selected + * @param string $pgtype A string of the export type + * @param string $pgformat A string of the file format + * @access public + * @return array + */ + public static function getProducts($pfilter, $pgtype, $pgformat) { + global $lC_Database, $lC_Datetime, $lC_Language; + + // generate file name to use with this file + $datetime = '';//lC_Datetime::getTimestamp(); + $filename = 'products-'.$datetime.$pgtype; + if($pgformat == 'tabbed'){ + $filename = $filename.'.txt'; + $delim = "\t"; + $seperator = ","; + } elseif($pgformat == 'csv'){ + $filename = $filename.'.'.$pgformat; + $delim = ","; + $seperator = ","; + } else { + return false; + } + + $filepath = DIR_FS_DOWNLOAD . $filename; + + $errormsg = ''; + + // make columns in clude full table names to i can implode into sql statement + // add image and category and other product tables to columns and query + $sql_columns = array('p.products_id', + 'p.parent_id', + 'p.products_quantity', + 'p.products_price', + 'p.products_cost', + 'p.products_msrp', + 'p.products_model', + 'p.products_sku', + 'p.products_date_added', + 'p.products_last_modified', + 'p.products_weight', + 'wc.weight_class_key', + 'p.products_status', + 'p.products_tax_class_id', + 'm.manufacturers_name', + 'p.products_ordered', + 'p.has_children', + + 'pd.language_id', + 'pd.products_name', + 'pd.products_description', + 'pd.products_keyword', + 'pd.products_tags', + 'pd.products_meta_title', + 'pd.products_meta_keywords', + 'pd.products_meta_description', + 'pd.products_url', + 'pd.products_viewed' + ); + $columns = array('id', + 'parent_id', + 'quantity', + 'price', + 'cost', + 'msrp', + 'model', + 'sku', + 'date_added', + 'last_modified', + 'weight', + 'weight_class', + 'status', + 'tax_class_id', + 'manufacturer', + 'products_ordered', + 'has_children', + + 'language_id', + 'name', + 'description', + 'permalink', + 'tags', + 'meta_title', + 'meta_keywords', + 'meta_description', + 'url', + 'products_viewed' + ); + + $sql_columns = implode(", ", $sql_columns); + + $sql_statement = 'SELECT '.$sql_columns.' FROM :table_products_description pd, :table_weight_classes wc, :table_products p LEFT JOIN :table_manufacturers m ON (p.manufacturers_id = m.manufacturers_id) WHERE pd.products_id = p.products_id AND p.products_weight_class = wc.weight_class_id'; + + // make this section get the data and make a file in work folder for the url to be returned. + $Qproducts = $lC_Database->query($sql_statement); + $Qproducts->bindTable(':table_products_description', TABLE_PRODUCTS_DESCRIPTION); + $Qproducts->bindTable(':table_weight_classes', TABLE_WEIGHT_CLASS); + $Qproducts->bindTable(':table_products', TABLE_PRODUCTS); + $Qproducts->bindTable(':table_manufacturers', TABLE_MANUFACTURERS); + $Qproducts->execute(); + + if($lC_Database->isError()){ + $errormsg .= $lC_Database->getError(); + } + + $columns[] = 'categories'; + $columns[] = 'base_image'; + + $products = array(); + while ($Qproducts->next()) { + $products[] = $Qproducts->toArray(); + } + + // seperate out all categories and images and comma delimited columns + + $content = ''; + foreach($products as $product){ + foreach($product as $column_output){ + $content .= "\"" . trim(preg_replace('/\s+/', ' ', $column_output)) . "\"" . $delim; + } + + $Qcategories = $lC_Database->query("SELECT * FROM :table_products_to_categories ptc, :table_categories_description cd WHERE ptc.products_id = :products_id AND ptc.categories_id = cd.categories_id AND cd.language_id = :language_id"); + $Qcategories->bindTable(':table_products_to_categories', TABLE_PRODUCTS_TO_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':products_id', $product['products_id']); + $Qcategories->bindInt(':language_id', $product['language_id']); + $Qcategories->execute(); + + $categories = array(); + while ($Qcategories->next()) { + $categories[] = $Qcategories->value('categories_name'); + } + $content .= "\"" . implode($seperator, $categories) . "\"" . $delim; + + $Qimage = $lC_Database->query("SELECT * FROM :table_products_images WHERE products_id = :products_id"); + $Qimage->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); + $Qimage->bindInt(':products_id', $product['products_id']); + $Qimage->execute(); + + $content .= $Qimage->value('image'); + + $content .= "\n"; + + //$content .= '\'' . implode('\'' . "\t" . '\'', $product) . '\'' . "\n"; + } + + $fp = fopen($filepath,"wb"); + fwrite($fp, implode($delim, $columns) . "\n" . $content); + fclose($fp); + + return array('filename' => $filename, 'sql_statement' => $sql_statement, 'errors' => $errormsg); + } + + /* + * Return the temp file name for downloading categories + * + * @param string $cfilter A string of the filter that is selected + * @param string $cgformat A string of the file format + * @access public + * @return array + */ + public static function getCategories($cfilter, $cgformat) { + global $lC_Database, $lC_Datetime, $lC_Language; + + // generate file name to use with this file + $datetime = '';//lC_Datetime::getTimestamp(); + $filename = 'categories';// . '-' . $datetime; + if($cgformat == 'tabbed'){ + $filename = $filename.'.txt'; + $delim = "\t"; + $seperator = ","; + } elseif($cgformat == 'csv'){ + $filename = $filename.'.'.$pgformat; + $delim = ","; + $seperator = ","; + } else { + return false; + } + + $filepath = DIR_FS_DOWNLOAD . $filename; + + // make columns in clude full table names to i can implode into sql statement + // add image and category and other product tables to columns and query + $sql_columns = array('c.categories_id', + 'c.categories_image', + 'c.parent_id', + 'c.sort_order', + 'c.categories_mode', + 'c.categories_link_target', + 'c.categories_custom_url', + 'c.categories_status', + 'c.categories_visibility_nav', + 'c.categories_visibility_box', + 'c.date_added', + 'c.last_modified', + + 'cd.language_id', + 'cd.categories_name', + 'cd.categories_menu_name', + 'cd.categories_blurb', + 'cd.categories_description', + 'cd.categories_keyword', + 'cd.categories_tags', + ); + $columns = array('id', + 'image', + 'parent_id', + 'sort_order', + 'mode', + 'link_target', + 'custom_url', + 'status', + 'visibility_nav', + 'visibility_box', + 'date_added', + 'last_modified', + + 'language_id', + 'name', + 'menu_name', + 'blurb', + 'description', + 'keyword', + 'tags' + ); + + $sql_columns = implode(",", $sql_columns); + + $sql_statement = 'SELECT '.$sql_columns.' FROM :table_categories c, :table_categories_description cd WHERE cd.categories_id = c.categories_id'; + + $errormsg = ''; + + // make this section get the data and make a file in work folder for the url to be returned. + $Qcategories = $lC_Database->query($sql_statement); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->execute(); + + if($lC_Database->isError()){ + $errormsg .= $lC_Database->getError(); + } + + $categories = array(); + while ($Qcategories->next()) { + $categories[] = $Qcategories->toArray(); + } + + // seperate out all categories and images and comma delimited columns + + $content = ''; + foreach($categories as $category){ + foreach($category as $column_output){ + $content .= "\"" . trim(preg_replace('/\s+/', ' ', $column_output)) . "\"" . $delim; + } + $content .= "\n"; + } + + $fp = fopen($filepath,"wb"); + fwrite($fp, implode($delim, $columns) . "\n" . $content); + fclose($fp); + + return array('filename' => $filename, 'sql_statement' => $sql_statement, 'errors' => $errormsg); + } + + /* + * Return the temp file name for downloading option groups + * + * @param string $ofilter A string of the filter that is selected + * @param string $ogformat A string of the file format + * @access public + * @return array + */ + public static function getOptionGroups($ofilter, $ogformat) { + global $lC_Database, $lC_Datetime, $lC_Language; + + // generate file name to use with this file + $datetime = '';//lC_Datetime::getTimestamp(); + $filename = 'option-groups';// . '-' . $datetime; + if($ogformat == 'tabbed'){ + $filename = $filename.'.txt'; + $delim = "\t"; + $seperator = ","; + } elseif($ogformat == 'csv'){ + $filename = $filename.'.'.$ogformat; + $delim = ","; + $seperator = ","; + } else { + return false; + } + + $filepath = DIR_FS_DOWNLOAD . $filename; + + // make columns in clude full table names to i can implode into sql statement + // add image and category and other product tables to columns and query + $sql_columns = array('pvg.id', + 'pvg.languages_id', + 'pvg.title', + 'pvg.sort_order', + 'pvg.module', + ); + $columns = array('id', + 'languages_id', + 'title', + 'sort_order', + 'module', + ); + + $sql_columns = implode(",", $sql_columns); + + $sql_statement = 'SELECT '.$sql_columns.' FROM :table_products_variants_groups pvg'; + + $errormsg = ''; + + // make this section get the data and make a file in work folder for the url to be returned. + $Qoptiongroups = $lC_Database->query($sql_statement); + $Qoptiongroups->bindTable(':table_products_variants_groups', TABLE_PRODUCTS_VARIANTS_GROUPS); + $Qoptiongroups->execute(); + + if($lC_Database->isError()){ + $errormsg .= $lC_Database->getError(); + } + + $optiongroups = array(); + while ($Qoptiongroups->next()) { + $optiongroups[] = $Qoptiongroups->toArray(); + } + + // seperate out all categories and images and comma delimited columns + + $content = ''; + foreach($optiongroups as $optiongroup){ + foreach($optiongroup as $column_output){ + $content .= "\"" . trim(preg_replace('/\s+/', ' ', $column_output)) . "\"" . $delim; + } + $content .= "\n"; + } + + $fp = fopen($filepath,"wb"); + fwrite($fp, implode($delim, $columns) . "\n" . $content); + fclose($fp); + + return array('filename' => $filename, 'sql_statement' => $sql_statement, 'errors' => $errormsg); + } + + /* + * Return the temp file name for downloading option variants + * + * @param string $ofilter A string of the filter that is selected + * @param string $ogformat A string of the file format + * @access public + * @return array + */ + public static function getOptionVariants($ofilter, $ogformat) { + global $lC_Database, $lC_Datetime, $lC_Language; + + // generate file name to use with this file + $datetime = '';//lC_Datetime::getTimestamp(); + $filename = 'option-variants';// . '-' . $datetime; + if($ogformat == 'tabbed'){ + $filename = $filename.'.txt'; + $delim = "\t"; + $seperator = ","; + } elseif($cgformat == 'csv'){ + $filename = $filename.'.'.$ogformat; + $delim = ","; + $seperator = ","; + } else { + return false; + } + + $filepath = DIR_FS_DOWNLOAD . $filename; + + // make columns include full table names to i can implode into sql statement + $sql_columns = array('pvv.id', + 'pvv.languages_id', + 'pvv.products_variants_groups_id', + 'pvv.title', + 'pvv.sort_order', + ); + $columns = array('id', + 'languages_id', + 'variants_groups_id', + 'title', + 'sort_order', + ); + + $sql_columns = implode(",", $sql_columns); + + $sql_statement = 'SELECT '.$sql_columns.' FROM :table_products_variants_values pvv'; + + $errormsg = ''; + + // make this section get the data and make a file in work folder for the url to be returned. + $Qoptionvariants = $lC_Database->query($sql_statement); + $Qoptionvariants->bindTable(':table_products_variants_values', TABLE_PRODUCTS_VARIANTS_VALUES); + $Qoptionvariants->execute(); + + if($lC_Database->isError()){ + $errormsg .= $lC_Database->getError(); + } + + $optionvariants = array(); + while ($Qoptionvariants->next()) { + $optionvariants[] = $Qoptionvariants->toArray(); + } + + // seperate out all categories and images and comma delimited columns + + $content = ''; + foreach($optionvariants as $optionvariant){ + foreach($optionvariant as $column_output){ + $content .= "\"" . trim(preg_replace('/\s+/', ' ', $column_output)) . "\"" . $delim; + } + $content .= "\n"; + } + + $fp = fopen($filepath,"wb"); + fwrite($fp, implode($delim, $columns) . "\n" . $content); + fclose($fp); + + return array('filename' => $filename, 'sql_statement' => $sql_statement, 'errors' => $errormsg); + } + + /* + * Return the temp file name for downloading option 2 products + * + * @param string $cfilter A string of the filter that is selected + * @param string $cgformat A string of the file format + * @access public + * @return array + */ + public static function getOptionProducts($ofilter, $ogformat) { + global $lC_Database, $lC_Datetime, $lC_Language; + + // generate file name to use with this file + $datetime = '';//lC_Datetime::getTimestamp(); + $filename = 'options-to-products';// . '-' . $datetime; + if($ogformat == 'tabbed'){ + $filename = $filename.'.txt'; + $delim = "\t"; + $seperator = ","; + } elseif($ogformat == 'csv'){ + $filename = $filename.'.'.$ogformat; + $delim = ","; + $seperator = ","; + } else { + return false; + } + + $filepath = DIR_FS_DOWNLOAD . $filename; + + // make columns in clude full table names to i can implode into sql statement + // add image and category and other product tables to columns and query + $sql_columns = array('psov.id', + 'psov.customers_group_id', + 'psov.values_id', + 'psov.options_id', + 'psov.price_modifier', + ); + $columns = array('id', + 'customers_group_id', + 'values_id', + 'options_id', + 'price_modifier', + ); + + $sql_columns = implode(",", $sql_columns); + + $sql_statement = 'SELECT '.$sql_columns.' FROM :table_products_simple_options_values psov'; + + $errormsg = ''; + + // make this section get the data and make a file in work folder for the url to be returned. + $Qoptionproducts = $lC_Database->query($sql_statement); + $Qoptionproducts->bindTable(':table_products_simple_options_values', TABLE_PRODUCTS_SIMPLE_OPTIONS_VALUES); + $Qoptionproducts->execute(); + + if($lC_Database->isError()){ + $errormsg .= $lC_Database->getError(); + } + + $optionproducts = array(); + while ($Qoptionproducts->next()) { + $optionproducts[] = $Qoptionproducts->toArray(); + } + + // seperate out all categories and images and comma delimited columns + + $content = ''; + foreach($optionproducts as $optionproduct){ + foreach($optionproduct as $column_output){ + $content .= "\"" . trim(preg_replace('/\s+/', ' ', $column_output)) . "\"" . $delim; + } + $content .= "\n"; + } + + $fp = fopen($filepath,"wb"); + fwrite($fp, implode($delim, $columns) . "\n" . $content); + fclose($fp); + + return array('filename' => $filename, 'sql_statement' => $sql_statement, 'errors' => $errormsg); + } + + /* Permalink function */ + public static function generate_clean_permalink($str){ + setlocale(LC_ALL, 'en_US.UTF8'); + $plink = iconv('UTF-8', 'ASCII//TRANSLIT', $str); + $plink = preg_replace("/[^a-zA-Z0-9\/_| -]/", '', $plink); + $plink = strtolower(trim($plink, '-')); + $plink = preg_replace("/[\/_| -]+/", '-', $plink); + + return $plink; + } + + /* + * Return the temp file name for downloading products + * + * @param boolean $pwizard A boolean saying do pwizard or not + * @param string $ptype A string of the import type + * @param boolean $pbackup A boolean letting me know to backup the whole table or not + * @access public + * @return array + */ + public static function importProducts($filename, $pwizard, $ptype, $pbackup, $pmapdata = NULL) { + global $lC_Database, $lC_Datetime, $lC_Language, $lC_Image; + + $lC_Products = new lC_Products_Admin(); + + $error = ""; + $msg = ""; + $other = ""; + + $uploaddir = DIR_FS_WORK . 'products_import_export/imports/'; + $uploadfile = $uploaddir . basename($filename); + + if(is_null($pmapdata)){ + + $columns = array('id', + 'parent_id', + 'quantity', + 'price', + 'cost', + 'msrp', + 'model', + 'sku', + 'date_added', + 'last_modified', + 'weight', + 'weight_class', + 'status', + 'tax_class_id', + 'manufacturer', + 'ordered', + 'has_children', + + 'language_id', + 'name', + 'description', + 'permalink', + 'tags', + 'meta_title', + 'meta_keywords', + 'meta_description', + 'url', + 'products_viewed', + + 'categories', + 'base_image' + ); + + } else { + // do the mapping of columns here with the mapdata + } + + $ext = end(explode(".", $filename)); + $delim = (($ext == 'txt')?"\t":(($ext == 'csv')?",":"\t")); + + $row = 0; + if (($handle = fopen($uploadfile, "r")) !== FALSE) { + while (($data = fgetcsv($handle, 1000, $delim)) !== FALSE) { + $num = count($data); + for ($c=0; $c < $num; $c++) { + if($row != 0){ + $import_array[$row][$columns[$c]] = $data[$c]; + } + } + $row++; + } + fclose($handle); + } + + // Need to find and remove blank rows + + $match_count = 0; + $insert_count = 0; + + if($pwizard != 'false') { + // p wizard stuff like return columns and etc. + //$other = 'pwizard ' . $pwizard; + } else { + // do the import as usual + // utilize import array to go through each column and run on each to check for product id and if not matched import and remove from arrray + foreach($import_array as $product){ + // Get the products ID for control + $products_id = $product['id']; + + // need to get the weight class since Im outputting lb and kg instead of the ids + if($product['weight_class'] != ''){ + $QweightClass = $lC_Database->query("SELECT * FROM :table_weight_classes wc WHERE wc.weight_class_key = :weight_class_key"); + $QweightClass->bindTable(':table_weight_classes', TABLE_WEIGHT_CLASS); + $QweightClass->bindValue(':weight_class_key', $product['weight_class']); + $QweightClass->execute(); + + if($lC_Database->isError()){ + $errormsg .= 'weight class err ' . $lC_Database->getError(); + } else { + $product['weight_class_id'] = $QweightClass->value('weight_class_id'); + } + } + + // convert the permalink to a safe output + $product['permalink'] = lC_Products_import_export_Admin::generate_clean_permalink($product['permalink']); + + // need to get ids for these categories if they dont exist we need to make them and return that id + if($product['categories'] != ''){ + $product['categories'] = explode(",",$product['categories']); + foreach($product['categories'] as $catName){ + if($catName != ''){ + $catCheck = $lC_Database->query("SELECT * FROM :table_categories_description cd WHERE cd.categories_name = :categories_name"); + $catCheck->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $catCheck->bindValue(':categories_name', $catName); + $catCheck->execute(); + + if($catCheck->numberOfRows()){ + $category_ids[] = $catCheck->value('categories_id'); + } else { + // insert a category that doesnt exist + $QcatInsert = $lC_Database->query("INSERT INTO :table_categories (parent_id, categories_status, categories_mode) values (:parent_id, :categories_status, :categories_mode)"); + $QcatInsert->bindTable(':table_categories', TABLE_CATEGORIES); + $QcatInsert->bindInt(':parent_id', '0'); + $QcatInsert->bindInt(':categories_status', '1'); + $QcatInsert->bindValue(':categories_mode', 'category'); + $QcatInsert->execute(); + + if($lC_Database->isError()){ + $errormsg .= $lC_Database->getError(); + } else { + // if we did ok inserting to the main cat table lets do the description + $currentCatId = $lC_Database->nextID(); + $QcatDescInsert = $lC_Database->query("INSERT INTO :table_categories_description (categories_id, language_id, categories_name) VALUES (:categories_id, :language_id, :categories_name)"); + $QcatDescInsert->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $QcatDescInsert->bindInt(':categories_id', $currentCatId); + $QcatDescInsert->bindInt(':language_id', $product['language_id']); + $QcatDescInsert->bindValue(':categories_name', $catName); + $QcatDescInsert->execute(); + + if($lC_Database->isError()){ + $errormsg .= 'descerr: ' . $lC_Database->getError(); + } else { + // if were successful add the inserted id to the category ids + $category_ids[] = $currentCatId; + } + } + } + } + } + $product['categories'] = $category_ids; + } + + // need to get the id for the manufacturerif($product['manufacturer'] != ''){ + if($product['manufacturer'] != ''){ + $Qman = $lC_Database->query("SELECT * FROM :table_manufacturers WHERE manufacturers_name = :manufacturers_name"); + $Qman->bindTable(':table_manufacturers', TABLE_MANUFACTURERS); + $Qman->bindValue(':manufacturers_name', $product['manufacturer']); + $Qman->execute(); + + if($Qman->numberOfRows()){ + $product['manufacturers_id'] = $Qman->value('manufacturers_id'); + } else { + // insert a manufacture that doesn't exist + $QmanInsert = $lC_Database->query("INSERT INTO :table_manufacturers (manufacturers_name) VALUES (:manufacturers_name)"); + $QmanInsert->bindTable(':table_manufacturers', TABLE_MANUFACTURERS); + $QmanInsert->bindValue(':manufacturers_name', $product['manufacturer']); + $QmanInsert->execute(); + + if($lC_Database->isError()){ + $errormsg .= 'man insert err '.$lC_Database->getError();; + } else { + $product['manufacturers_id'] = $lC_Database->nextID(); + } + } + } + + + + // check for a match in the database + $Qcheck = $lC_Database->query("SELECT * FROM :table_products WHERE products_id = :products_id"); + $Qcheck->bindTable(':table_products', TABLE_PRODUCTS); + $Qcheck->bindInt(':products_id', $products_id); + $Qcheck->execute(); + + if($Qcheck->numberOfRows()){ + // the product exists in the database so were just going to update the product with the new data + $match_count++; + + $error = false; + + $lC_Database->startTransaction(); + + $Qproduct = $lC_Database->query('update :table_products set products_quantity = :products_quantity, products_cost = :products_cost, products_price = :products_price, products_msrp = :products_msrp, products_model = :products_model, products_sku = :products_sku, products_weight = :products_weight, products_weight_class = :products_weight_class, products_status = :products_status, products_tax_class_id = :products_tax_class_id, manufacturers_id = :manufacturers_id, products_date_added = :products_date_added WHERE products_id = :products_id'); + $Qproduct->bindInt(':products_id', $products_id); + $Qproduct->bindValue(':products_date_added', $product['date_added']); + $Qproduct->bindTable(':table_products', TABLE_PRODUCTS); + $Qproduct->bindValue(':products_quantity', $product['quantity']); + $Qproduct->bindValue(':products_cost', $product['cost']); + $Qproduct->bindValue(':products_price', $product['price']); + $Qproduct->bindValue(':products_msrp', $product['msrp']); + $Qproduct->bindValue(':products_model', $product['model']); + $Qproduct->bindValue(':products_sku', $product['sku']); + $Qproduct->bindValue(':products_weight', $product['weight']); + $Qproduct->bindInt(':products_weight_class', $product['weight_class_id']); + $Qproduct->bindInt(':products_status', $product['status']); + $Qproduct->bindInt(':products_tax_class_id', $product['tax_class_id']); + $Qproduct->bindInt(':manufacturers_id', $product['manufacturers_id']); + $Qproduct->setLogging($_SESSION['module'], $products_id); + $Qproduct->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + $errormsg .= ' initial: '.$products_id.' '.$lC_Database->getError(); + } else { + + $Qcategories = $lC_Database->query('delete from :table_products_to_categories where products_id = :products_id'); + $Qcategories->bindTable(':table_products_to_categories', TABLE_PRODUCTS_TO_CATEGORIES); + $Qcategories->bindInt(':products_id', $products_id); + $Qcategories->setLogging($_SESSION['module'], $products_id); + $Qcategories->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + } else { + $categories = $product['categories']; + if ( isset($categories) && !empty($categories) ) { + foreach ($categories as $category_id) { + $Qp2c = $lC_Database->query('insert into :table_products_to_categories (products_id, categories_id) values (:products_id, :categories_id)'); + $Qp2c->bindTable(':table_products_to_categories', TABLE_PRODUCTS_TO_CATEGORIES); + $Qp2c->bindInt(':products_id', $products_id); + $Qp2c->bindInt(':categories_id', $category_id); + $Qp2c->setLogging($_SESSION['module'], $products_id); + $Qp2c->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + } + } + } + } + + if ( $error === false ) { + $Qpd = $lC_Database->query('update :table_products_description set products_name = :products_name, products_description = :products_description, products_keyword = :products_keyword, products_tags = ":products_tags", products_url = ":products_url" WHERE products_id = :products_id AND language_id = :language_id'); + $Qpd->bindTable(':table_products_description', TABLE_PRODUCTS_DESCRIPTION); + $Qpd->bindInt(':products_id', $products_id); + $Qpd->bindInt(':language_id', $product['language_id']); + $Qpd->bindValue(':products_name', $product['name']); + $Qpd->bindValue(':products_description', $product['description']); + $Qpd->bindValue(':products_keyword', $product['permalink']); + $Qpd->bindValue(':products_tags', $product['tags']); + $Qpd->bindValue(':products_url', $product['url']); + $Qpd->setLogging($_SESSION['module'], $products_id); + $Qpd->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + } + + + + if ( $error === false ) { + $lC_Database->commitTransaction(); + + lC_Cache::clear('categories'); + lC_Cache::clear('category_tree'); + lC_Cache::clear('also_purchased'); + + } else { + $lC_Database->rollbackTransaction(); + $errormsg .= ' Error on product id: '.$products_id.' '; + } + + + } else { + // the product doesnt exist so lets write it into the database + $insert_count++; + + $error = false; + + $lC_Database->startTransaction(); + + $Qproduct = $lC_Database->query('insert into :table_products (products_id, products_quantity, products_cost, products_price, products_msrp, products_model, products_sku, products_weight, products_weight_class, products_status, products_tax_class_id, manufacturers_id, products_date_added) values (:products_id, :products_quantity, :products_cost, :products_price, :products_msrp, :products_model, :products_sku, :products_weight, :products_weight_class, :products_status, :products_tax_class_id, :manufacturers_id, :products_date_added)'); + $Qproduct->bindInt(':products_id', $products_id); + $Qproduct->bindRaw(':products_date_added', 'now()'); + $Qproduct->bindTable(':table_products', TABLE_PRODUCTS); + $Qproduct->bindInt(':products_quantity', $product['quantity']); + $Qproduct->bindFloat(':products_cost', $product['cost']); + $Qproduct->bindFloat(':products_price', $product['price']); + $Qproduct->bindFloat(':products_msrp', $product['msrp']); + $Qproduct->bindValue(':products_model', $product['model']); + $Qproduct->bindValue(':products_sku', $product['sku']); + $Qproduct->bindFloat(':products_weight', $product['weight']); + $Qproduct->bindInt(':products_weight_class', $product['weight_class']); + $Qproduct->bindInt(':products_status', $product['status']); + $Qproduct->bindInt(':products_tax_class_id', $product['tax_class_id']); + $Qproduct->bindInt(':manufacturers_id', $product['manufacturers_id']); + $Qproduct->setLogging($_SESSION['module'], $products_id); + $Qproduct->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + } else { + + + $Qcategories = $lC_Database->query('delete from :table_products_to_categories where products_id = :products_id'); + $Qcategories->bindTable(':table_products_to_categories', TABLE_PRODUCTS_TO_CATEGORIES); + $Qcategories->bindInt(':products_id', $products_id); + $Qcategories->setLogging($_SESSION['module'], $products_id); + $Qcategories->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + } else { + $categories = explode(',',$product['categories']); + if ( isset($categories) && !empty($categories) ) { + foreach ($categories as $category_id) { + $Qp2c = $lC_Database->query('insert into :table_products_to_categories (products_id, categories_id) values (:products_id, :categories_id)'); + $Qp2c->bindTable(':table_products_to_categories', TABLE_PRODUCTS_TO_CATEGORIES); + $Qp2c->bindInt(':products_id', $products_id); + $Qp2c->bindInt(':categories_id', $category_id); + $Qp2c->setLogging($_SESSION['module'], $products_id); + $Qp2c->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + } + } + } + } + + + if ( $error === false ) { + $Qimage = $lC_Database->query('insert into :table_products_images (products_id, image, default_flag, sort_order, date_added) values (:products_id, :image, :default_flag, :sort_order, :date_added)'); + $Qimage->bindTable(':table_products_images', TABLE_PRODUCTS_IMAGES); + $Qimage->bindInt(':products_id', $products_id); + $Qimage->bindValue(':image', $product['base_image']); + $Qimage->bindInt(':default_flag', '1'); + $Qimage->bindInt(':sort_order', 0); + $Qimage->bindRaw(':date_added', 'now()'); + $Qimage->setLogging($_SESSION['module'], $products_id); + $Qimage->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + } + } + + + if ( $error === false ) { + $Qpd = $lC_Database->query('insert into :table_products_description (products_id, language_id, products_name, products_description, products_keyword, products_tags, products_url) values (:products_id, :language_id, :products_name, :products_description, :products_keyword, :products_tags, :products_url)'); + $Qpd->bindTable(':table_products_description', TABLE_PRODUCTS_DESCRIPTION); + $Qpd->bindInt(':products_id', $products_id); + $Qpd->bindInt(':language_id', $product['language_id']); + $Qpd->bindValue(':products_name', $product['name']); + $Qpd->bindValue(':products_description', $product['description']); + $Qpd->bindValue(':products_keyword', $product['permalink']); + $Qpd->bindValue(':products_tags', $product['tags']); + $Qpd->bindValue(':products_url', $product['url']); + $Qpd->setLogging($_SESSION['module'], $products_id); + $Qpd->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + } + + if ( $error === false ) { + $lC_Database->commitTransaction(); + + lC_Cache::clear('categories'); + lC_Cache::clear('category_tree'); + lC_Cache::clear('also_purchased'); + + } else { + $lC_Database->rollbackTransaction(); + } + + } + } + } // end if $do + // for all left in array match and update the records + // use columns from import to figure out what columns are what + + if($errormsg){$ipreturn['error'] = $errormsg;} + if($msg){$ipreturn['msg'] = $msg;} + if($other){$ipreturn['other'] = $other;} + $ipreturn['matched'] = $match_count; + $ipreturn['inserted'] = $insert_count; + $ipreturn['total'] = $match_count+$insert_count; + + return $ipreturn; + } + + /* + * Return the temp file name for downloading categories + * + * @param boolean $cwizard A boolean saying do cwizard or not + * @param string $ctype A string of the import type + * @param boolean $cbackup A boolean letting me know to backup the whole table or not + * @access public + * @return array + */ + public static function importCategories($filename, $cwizard, $ctype, $cbackup, $cmapdata = NULL) { + global $lC_Database, $lC_Datetime, $lC_Language, $lC_Image; + + if($cwizard == 'false'){ + $cwizard = FALSE; + } else { + $cwizard = TRUE; + } + + $lC_Categories = new lC_Categories_Admin(); + + $error = FALSE; + $errormsg = ""; + $msg = ""; + + $uploaddir = DIR_FS_WORK . 'products_import_export/imports/'; + //$other .= 'Upload Dir: ' . $uploaddir; + $uploadfile = $uploaddir . basename($filename); + + if(is_null($cmapdata)){ + + $columns = array('categories_id', + 'image', + 'parent_id', + 'sort_order', + 'mode', + 'link_target', + 'custom_url', + 'status', + 'nav', + 'box', + 'date_added', + 'last_modified', + + 'language_id', + 'name', + 'menu_name', + 'blurb', + 'description', + 'keyword', + 'tags', + ); + } else { + + // do the mapping of columns here with the mapdata + $columns = array('categories_id', + 'image', + 'parent_id', + 'sort_order', + 'mode', + 'link_target', + 'custom_url', + 'status', + 'nav', + 'box', + 'date_added', + 'last_modified', + + 'language_id', + 'name', + 'menu_name', + 'blurb', + 'description', + 'keyword', + 'tags', + ); + } + + $ext = end(explode(".", $filename)); + if($ext == 'txt'){ + $delim = "\t"; + } else if($ext == 'csv'){ + $delim = ","; + } else { + $delim = "\t"; + } + + $row = 0; + if (($handle = fopen($uploadfile, "r")) !== FALSE) { + while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { + $num = count($data); + for ($c=0; $c < $num; $c++) { + if($row != 0){ + $import_array[$row][$columns[$c]] = $data[$c]; + } + } + $row++; + } + fclose($handle); + } + + $match_count = 0; + $insert_count = 0; + + if($cwizard) { + // p wizard stuff like return columns and etc. + $msg .= 'CWIZARD AGAIN!~!!!!!!!!!!'; + } else { + // do the import as usual + // utilize import array to go through each column and run on each to check for product id and if not matched import and remove from arrray + foreach($import_array as $category){ + // Get the products ID for control + $categories_id = $category['categories_id']; + + // check for a match in the database + $Qcheck = $lC_Database->query("SELECT * FROM :table_categories WHERE categories_id = :categories_id"); + $Qcheck->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcheck->bindInt(':categories_id', $categories_id); + $category_check = $Qcheck->numberOfRows(); + + if($category_check > 0){ + // the product exists in the database so were just going to update the product with the new data + $match_count++; + + // build data array of product information + $data['categories_id'] = $category['categories_id']; + $data['image'] = $category['image']; + $data['parent_id'] = $category['parent_id']; + $data['sort_order'] = $category['sort_order']; + $data['mode'] = $category['mode']; + $data['link_target'] = $category['link_target']; + $data['custom_url'] = $category['custom_url']; + $data['status'] = $category['status']; + $data['nav'] = $category['nav']; + $data['box'] = $category['box']; + $data['date_added'] = $category['date_added']; + $data['last_modified'] = $category['last_modified']; + + $data['name'][$category['language_id']] = $category['name']; + $data['menu_name'][$category['language_id']] = $category['menu_name']; + $data['blurb'][$category['language_id']] = $category['blurb']; + $data['description'][$category['language_id']] = $category['description']; + $data['keyword'][$category['language_id']] = $category['keyword']; + $data['tags'][$category['language_id']] = $category['tags']; + + $lC_Categories->save($categories_id, $data); + + } else { + // the product doesnt exist so lets write it into the database + $insert_count++; + + // Insert using code from the catgories class + $error = false; + + $lC_Database->startTransaction(); + + $Qcat = $lC_Database->query('insert into :table_categories (categories_id, categories_image, parent_id, sort_order, categories_mode, categories_link_target, categories_custom_url, categories_status, categories_visibility_nav, categories_visibility_box, date_added) values (:categories_id, :categories_image, :parent_id, :sort_order, :categories_mode, :categories_link_target, :categories_custom_url, :categories_status, :categories_visibility_nav, :categories_visibility_box, now())'); + $Qcat->bindInt(':categories_id', $category['categories_id']); + $Qcat->bindInt(':parent_id', $category['parent_id']); + + $Qcat->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcat->bindValue(':categories_image', $category['image']); + $Qcat->bindInt(':parent_id', $category['parent_id']); + $Qcat->bindInt(':sort_order', $category['sort_order']); + $Qcat->bindValue(':categories_mode', $category['mode']); + $Qcat->bindInt(':categories_link_target', $category['link_target']); + $Qcat->bindValue(':categories_custom_url', $category['custom_url']); + $Qcat->bindInt(':categories_status', $category['status']); + $Qcat->bindInt(':categories_visibility_nav', $category['nav']); + $Qcat->bindInt(':categories_visibility_box', $category['box']); + $Qcat->setLogging($_SESSION['module'], $id); + $Qcat->execute(); + + + // remove this line from categories for it to be re inserted + $Qrcd = $lC_Database->query('delete from :table_categories_description where categories_id = :categories_id and language_id = :language_id'); + $Qrcd->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qrcd->bindInt(':categories_id', $categories_id); + $Qrcd->bindInt(':language_id', $category['language_id']); + $Qrcd->execute(); + + + $Qcd = $lC_Database->query('insert into :table_categories_description (categories_id, language_id, categories_name, categories_menu_name, categories_blurb, categories_description, categories_tags) values (:categories_id, :language_id, :categories_name, :categories_menu_name, :categories_blurb, :categories_description, :categories_tags)'); + + $Qcd->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcd->bindInt(':categories_id', $categories_id); + $Qcd->bindInt(':language_id', $category['language_id']); + $Qcd->bindValue(':categories_name', $category['name']); + $Qcd->bindValue(':categories_menu_name', $category['menu_name']); + $Qcd->bindValue(':categories_blurb', $category['blurb']); + $Qcd->bindValue(':categories_description', $category['description']); + $Qcd->bindValue(':categories_tags', $category['tags']); + $Qcd->setLogging($_SESSION['module'], $categories_id); + $Qcd->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + + if ( $error === false ) { + $lC_Database->commitTransaction(); + } else { + $lC_Database->rollbackTransaction(); + } + } + } + } // end if $do + // for all left in array match and update the records + // use columns from import to figure out what columns are what + if($error || $errormsg != ''){ + if($errormsg){$icreturn['error'] = $errormsg . 'Error: ' . $error;} + } + if($msg){$icreturn['msg'] = $msg . ' cwizard: ' . $cwizard;} + $icreturn['matched'] = $match_count; + $icreturn['inserted'] = $insert_count; + $icreturn['total'] = $match_count+$insert_count; + + return $icreturn; + } + + /* + * Return the temp file name for downloading categories + * + * @param boolean $cwizard A boolean saying do cwizard or not + * @param string $ctype A string of the import type + * @param boolean $cbackup A boolean letting me know to backup the whole table or not + * @access public + * @return array + */ + public static function importOptionGroups($filename, $owizard, $otype, $obackup, $omapdata = NULL) { + global $lC_Database, $lC_Datetime, $lC_Language, $lC_Image; + + if($owizard == 'false'){ + $owizard = FALSE; + } else { + $owizard = TRUE; + } + + $error = FALSE; + $errormsg = ""; + $msg = ""; + + $uploaddir = DIR_FS_WORK . 'products_import_export/imports/'; + //$other .= 'Upload Dir: ' . $uploaddir; + $uploadfile = $uploaddir . basename($filename); + + if(is_null($mapdata)){ + + $columns = array('id', + 'language_id', + 'title', + 'sort_order', + 'module', + ); + } else { + // do the mapping of columns here with the mapdata + } + + $ext = end(explode(".", $filename)); + if($ext == 'txt'){ + $delim = "\t"; + } else if($ext == 'csv'){ + $delim = ","; + } else { + $delim = "\t"; + } + + $row = 0; + if (($handle = fopen($uploadfile, "r")) !== FALSE) { + while (($data = fgetcsv($handle, 1000, $delim)) !== FALSE) { + $num = count($data); + for ($c=0; $c < $num; $c++) { + if($row != 0){ + $import_array[$row][$columns[$c]] = $data[$c]; + } + } + $row++; + } + fclose($handle); + } + + $match_count = 0; + $insert_count = 0; + + if($owizard) { + // o wizard stuff like return columns and etc. + } else { + // do the import as usual + // utilize import array to go through each column and run on each to check for product id and if not matched import and remove from arrray + $znum = count($import_array); + for ($z=0; $z < $znum; $z++) { + $group = $import_array[$z]; + // Get the products ID for control + $group_id = $group['id']; + + // check for a match in the database + $Qcheck = $lC_Database->query("SELECT * FROM :table_products_variants_groups WHERE id = :id and language_id = :language_id"); + $Qcheck->bindTable(':table_products_variants_groups', 'products_variants_groups'); + $Qcheck->bindInt(':id', $group_id); + $Qcheck->bindInt(':language_id', $group['language_id']); + $group_check = $Qcheck->numberOfRows(); + + if($group_check > 0){ + // the product exists in the database so were just going to update the product with the new data + $match_count++; + + // build data array of product information + $lC_Database->startTransaction(); + + $Qcat = $lC_Database->query('update :table_products_variants_groups set title = :title, sort_order = :sort_order, module = :module where id = :id and language_id = :language_id'); + $Qcat->bindInt(':id', $group['id']); + $Qcat->bindInt(':language_id', $group['language_id']); + + $Qcat->bindTable(':table_products_variants_groups', 'products_variants_groups'); + $Qcat->bindValue(':title', $group['title']); + $Qcat->bindInt(':sort_order', $group['sort_order']); + $Qcat->bindValue(':module', $group['module']); + $Qcat->setLogging($_SESSION['module'], $group_id); + $Qcat->execute(); + + } else { + // the product doesnt exist so lets write it into the database + $insert_count++; + + // Insert using code from the catgories class + $error = false; + + $lC_Database->startTransaction(); + + $Qcat = $lC_Database->query('insert into :table_products_variants_groups (id, language_id, title, sort_order, module) values (:id, :language_id, :title, :sort_order, :module'); + $Qcat->bindInt(':id', $group['id']); + $Qcat->bindInt(':language_id', $group['language_id']); + + $Qcat->bindTable(':table_products_variants_groups', 'products_variants_groups'); + $Qcat->bindValue(':title', $group['title']); + $Qcat->bindInt(':sort_order', $group['sort_order']); + $Qcat->bindValue(':module', $group['module']); + $Qcat->setLogging($_SESSION['module'], $group_id); + $Qcat->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + + if ( $error === false ) { + $lC_Database->commitTransaction(); + } else { + $lC_Database->rollbackTransaction(); + } + } + } + } // end if $do + // for all left in array match and update the records + // use columns from import to figure out what columns are what + if($error || $errormsg != ''){ + if($errormsg){$iogreturn['error'] = $errormsg . 'Error: ' . $error;} + } + if($msg){$iogreturn['msg'] = $msg . ' owizard: ' . $owizard . ' group check ' . $group_check; } + $iogreturn['matched'] = $match_count; + $iogreturn['inserted'] = $insert_count; + $iogreturn['total'] = $match_count+$insert_count; + + return $iogreturn; + } + + /* + * Return the temp file name for downloading categories + * + * @param boolean $cwizard A boolean saying do cwizard or not + * @param string $ctype A string of the import type + * @param boolean $cbackup A boolean letting me know to backup the whole table or not + * @access public + * @return array + */ + public static function importOptionVariants($filename, $owizard, $otype, $obackup, $omapdata = NULL) { + global $lC_Database, $lC_Datetime, $lC_Language, $lC_Image; + + if($owizard == 'false'){ + $owizard = FALSE; + } else { + $owizard = TRUE; + } + + $error = FALSE; + $errormsg = ""; + $msg = ""; + + $uploaddir = DIR_FS_WORK . 'products_import_export/imports/'; + //$other .= 'Upload Dir: ' . $uploaddir; + $uploadfile = $uploaddir . basename($filename); + + if(is_null($mapdata)){ + + $columns = array('id', + 'languages_id', + 'groups_id', + 'title', + 'sort_order', + ); + } else { + // do the mapping of columns here with the mapdata + } + + $ext = end(explode(".", $filename)); + if($ext == 'txt'){ + $delim = "\t"; + } else if($ext == 'csv'){ + $delim = ","; + } else { + $delim = "\t"; + } + + $row = 0; + if (($handle = fopen($uploadfile, "r")) !== FALSE) { + while (($data = fgetcsv($handle, 1000, $delim)) !== FALSE) { + $num = count($data); + for ($c=0; $c < $num; $c++) { + if($row != 0){ + $import_array[][$columns[$c]] = $data[$c]; + } + } + $row++; + } + fclose($handle); + } + + $match_count = 0; + $insert_count = 0; + + if($owizard) { + // o wizard stuff like return columns and etc. + } else { + // do the import as usual + // utilize import array to go through each column and run on each to check for product id and if not matched import and remove from arrray + $znum = count($import_array); + for ($z=0; $z < $znum; $z++) { + $variant = $import_array[$z]; + // Get the products ID for control + $variant_id = $variant['id']; + + // check for a match in the database + $Qcheck = $lC_Database->query("SELECT * FROM :table_products_variants_values WHERE id = :id AND languages_id = :languages_id"); + $Qcheck->bindTable(':table_products_variants_values', 'products_variants_values'); + $Qcheck->bindInt(':id', $variant_id); + $Qcheck->bindInt(':languages_id', $variant['languages_id']); + $variant_check = $Qcheck->numberOfRows(); + + if($variant_check > 0){ + // the product exists in the database so were just going to update the product with the new data + $match_count++; + + // build data array of product information + $lC_Database->startTransaction(); + + $Qvar = $lC_Database->query('update :table_products_variants_values set groups_id = :groups_id, title = :title, sort_order = :sort_order where id = :id and languages_id = :languages_id'); + $Qvar->bindInt(':id', $variant['id']); + $Qvar->bindInt(':languages_id', $variant['languages_id']); + + $Qvar->bindTable(':table_products_variants_values', 'products_variants_values'); + $Qvar->bindInt(':groups_id', $variant['groups_id']); + $Qvar->bindValue(':title', $variant['title']); + $Qvar->bindInt(':sort_order', $variant['sort_order']); + $Qvar->setLogging($_SESSION['module'], $variant_id); + $Qvar->execute(); + + } else { + // the product doesnt exist so lets write it into the database + $insert_count++; + + // Insert using code from the catgories class + $error = false; + + $lC_Database->startTransaction(); + + $Qvar = $lC_Database->query('insert into :table_products_variants_values (id, languages_id, products_variants_groups_id, title, sort_order) values (:id, :languages_id, :groups_id, :title, :sort_order'); + $Qvar->bindInt(':id', $variant['id']); + $Qvar->bindInt(':languages_id', $variant['languages_id']); + + $Qvar->bindTable(':table_products_variants_values', 'products_variants_values'); + $Qvar->bindInt(':groups_id', $variant['groups_id']); + $Qvar->bindValue(':title', $variant['title']); + $Qvar->bindInt(':sort_order', $variant['sort_order']); + $Qvar->setLogging($_SESSION['module'], $variant_id); + $Qvar->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + + if ( $error === false ) { + $lC_Database->commitTransaction(); + } else { + $lC_Database->rollbackTransaction(); + } + } + } + } // end if $do + // for all left in array match and update the records + // use columns from import to figure out what columns are what + if($error || $errormsg != ''){ + if($errormsg){$iovreturn['error'] = $errormsg . 'Error: ' . $error;} + } + if($msg){$iovreturn['msg'] = $msg . ' owizard: ' . $owizard . ' variant check ' . $variant_check; } + $iovreturn['matched'] = $match_count; + $iovreturn['inserted'] = $insert_count; + $iovreturn['total'] = $match_count+$insert_count; + + return $iovreturn; + } + + /* + * Return the temp file name for downloading categories + * + * @param boolean $cwizard A boolean saying do cwizard or not + * @param string $ctype A string of the import type + * @param boolean $cbackup A boolean letting me know to backup the whole table or not + * @access public + * @return array + */ + public static function importOptionProducts($filename, $owizard, $otype, $obackup, $omapdata = NULL) { + global $lC_Database, $lC_Datetime, $lC_Language, $lC_Image; + + if($owizard == 'false'){ + $owizard = FALSE; + } else { + $owizard = TRUE; + } + + $error = FALSE; + $errormsg = ""; + $msg = ""; + + $uploaddir = DIR_FS_WORK . 'products_import_export/imports/'; + //$other .= 'Upload Dir: ' . $uploaddir; + $uploadfile = $uploaddir . basename($filename); + + if(is_null($mapdata)){ + + $columns = array('id', + 'customers_group_id', + 'values_id', + 'options_id', + 'price_modifier', + ); + } else { + // do the mapping of columns here with the mapdata + } + + $ext = end(explode(".", $filename)); + if($ext == 'txt'){ + $delim = "\t"; + } else if($ext == 'csv'){ + $delim = ","; + } else { + $delim = "\t"; + } + + $row = 0; + if (($handle = fopen($uploadfile, "r")) !== FALSE) { + while (($data = fgetcsv($handle, 1000, $delim)) !== FALSE) { + $num = count($data); + for ($c=0; $c < $num; $c++) { + if($row != 0){ + $import_array[$row][$columns[$c]] = $data[$c]; + } + } + $row++; + } + fclose($handle); + } + + $match_count = 0; + $insert_count = 0; + + if($owizard) { + // o wizard stuff like return columns and etc. + } else { + // do the import as usual + // utilize import array to go through each column and run on each to check for product id and if not matched import and remove from arrray + $znum = count($import_array); + for ($z=0; $z < $znum; $z++) { + $vproduct = $import_array[$z]; + // Get the products ID for control + $vproduct_id = $vproduct['id']; + + // check for a match in the database + $Qcheck = $lC_Database->query("SELECT * FROM :table_products_simple_options_values WHERE id = :id"); + $Qcheck->bindTable(':table_products_simple_options_values', 'products_simple_options_values'); + $Qcheck->bindInt(':id', $vproduct_id); + $vproduct_check = $Qcheck->numberOfRows(); + + if($vproduct_check > 0){ + // the product exists in the database so were just going to update the product with the new data + $match_count++; + + // build data array of product information + $lC_Database->startTransaction(); + + $Qvprod = $lC_Database->query('update :table_products_simple_options_values set customers_group_id = :customers_group_id, values_id = :values_id, options_id = :options_id, price_modifier = :price_modifier where id = :id'); + $Qvprod->bindInt(':id', $vproduct['id']); + + $Qvprod->bindTable(':table_products_simple_options_values', 'products_simple_options_values'); + $Qvprod->bindInt(':customers_group_id', $vproduct['customers_group_id']); + $Qvprod->bindInt(':values_id', $vproduct['values_id']); + $Qvprod->bindInt(':options_id', $vproduct['options_id']); + $Qvprod->bindInt(':price_modifier', $vproduct['price_modifier']); + $Qvprod->setLogging($_SESSION['module'], $vproduct_id); + $Qvprod->execute(); + + } else { + // the product doesnt exist so lets write it into the database + $insert_count++; + + // Insert using code from the catgories class + $error = false; + + $lC_Database->startTransaction(); + + $Qvprod = $lC_Database->query('insert into :table_products_simple_options_values (id, title, sort_order, module) values (:id, :language_id, :title, :sort_order, :module'); + $Qvprod->bindInt(':id', $vproduct['id']); + + $Qvprod->bindTable(':table_products_simple_options_values', 'products_simple_options_values'); + $Qvprod->bindInt(':customers_group_id', $vproduct['customers_group_id']); + $Qvprod->bindInt(':values_id', $vproduct['values_id']); + $Qvprod->bindInt(':options_id', $vproduct['options_id']); + $Qvprod->bindInt(':price_modifier', $vproduct['price_modifier']); + $Qvprod->setLogging($_SESSION['module'], $vproduct_id); + $Qvprod->execute(); + + if ( $lC_Database->isError() ) { + $error = true; + break; + } + + if ( $error === false ) { + $lC_Database->commitTransaction(); + } else { + $lC_Database->rollbackTransaction(); + } + } + } + } // end if $do + // for all left in array match and update the records + // use columns from import to figure out what columns are what + if($error || $errormsg != ''){ + if($errormsg){$iopreturn['error'] = $errormsg . 'Error: ' . $error;} + } + if($msg){$iopreturn['msg'] = $msg . ' owizard: ' . $owizard . ' vproduct check ' . $vproduct_check; } + $iopreturn['matched'] = $match_count; + $iopreturn['inserted'] = $insert_count; + $iopreturn['total'] = $match_count+$insert_count; + + return $iopreturn; + } +} +?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/classes/rpc.php b/catalog/admin/includes/applications/products_import_export/classes/rpc.php new file mode 100644 index 000000000..263fe964e --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/classes/rpc.php @@ -0,0 +1,252 @@ +modCheck('includes/applications/products_import_export/classes/products_import_export.php')); + +class lC_Products_import_export_Admin_rpc { + /* + * Get total number of products to export after filter + * + * @param $_GET['filter'] An string filter type + * @param $_GET['type'] An string export type + * @access public + * @return json + */ + public static function getFilterTotal() { + $result = lC_Products_import_export_Admin::getFilterTotal($_GET['filter'], $_GET['type']); + if (isset($result['total']) && $result['total'] != null) { + } else { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } + + echo json_encode($result); + } + + /* + * Get products data set + * + * @param $_GET['pfilter'] An string filter type + * @param $_GET['pgtype'] An string export type + * @param $_GET['pgformat'] An string export format + * @access public + * @return json + */ + public static function getProducts() { + $result = lC_Products_import_export_Admin::getProducts($_GET['pfilter'], $_GET['pgtype'], $_GET['pgformat']); + if (isset($result['url']) && $result['url'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Get categories data set + * + * @param $_GET['cfilter'] An string filter type + * @param $_GET['cgformat'] An string export type + * @access public + * @return json + */ + public static function getCategories() { + $result = lC_Products_import_export_Admin::getCategories($_GET['cfilter'], $_GET['cgformat']); + if (isset($result['url']) && $result['url'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Get Option Groups data set + * + * @param $_GET['ofilter'] An string filter type + * @param $_GET['ogformat'] An string export type + * @access public + * @return json + */ + public static function getOptionGroups() { + $result = lC_Products_import_export_Admin::getOptionGroups($_GET['ofilter'], $_GET['ogformat']); + if (isset($result['url']) && $result['url'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Get Option Variants data set + * + * @param $_GET['ofilter'] An string filter type + * @param $_GET['ogformat'] An string export type + * @access public + * @return json + */ + public static function getOptionVariants() { + $result = lC_Products_import_export_Admin::getOptionVariants($_GET['ofilter'], $_GET['ogformat']); + if (isset($result['url']) && $result['url'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Get Options to Products data set + * + * @param $_GET['ofilter'] An string filter type + * @param $_GET['ogformat'] An string export type + * @access public + * @return json + */ + public static function getOptionProducts() { + $result = lC_Products_import_export_Admin::getOptionProducts($_GET['ofilter'], $_GET['ogformat']); + if (isset($result['url']) && $result['url'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Import Products from Import File + * + * @param $_GET['pwizard'] An array of mapping wizard data for mapping columns + * @param $_GET['ptype'] A string of the type of import + * @param $_GET['pbackkup'] An boolean whether to backup the products tables first + * @access public + * @return json + */ + public static function importProducts() { + $result = lC_Products_import_export_Admin::importProducts($_GET['pfilename'], $_GET['pwizard'], $_GET['ptype'], $_GET['pbackup']); + if (isset($result['total']) && $result['total'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Import Categores from Import File + * + * @param $_GET['cwizard'] An array of mapping wizard data for mapping columns + * @param $_GET['ctype'] A string of the type of import + * @param $_GET['cbackkup'] An boolean whether to backup the categories tables first + * @access public + * @return json + */ + public static function importCategories() { + $result = lC_Products_import_export_Admin::importCategories($_GET['cfilename'], $_GET['cwizard'], $_GET['ctype'], $_GET['cbackup']); + if (isset($result['total']) && $result['total'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Import Option Groups from Import File + * + * @param $_GET['owizard'] An array of mapping wizard data for mapping columns + * @param $_GET['otype'] A string of the type of import + * @param $_GET['obackkup'] An boolean whether to backup the products tables first + * @access public + * @return json + */ + public static function importOptionGroups() { + $result = lC_Products_import_export_Admin::importOptionGroups($_GET['ogfilename'], $_GET['owizard'], $_GET['otype'], $_GET['obackup']); + if (isset($result['total']) && $result['total'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Import Option Variants from Import File + * + * @param $_GET['owizard'] An array of mapping wizard data for mapping columns + * @param $_GET['otype'] A string of the type of import + * @param $_GET['obackkup'] An boolean whether to backup the products tables first + * @access public + * @return json + */ + public static function importOptionVariants() { + $result = lC_Products_import_export_Admin::importOptionVariants($_GET['ovfilename'], $_GET['owizard'], $_GET['otype'], $_GET['obackup']); + if (isset($result['total']) && $result['total'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + + /* + * Import Option to Products from Import File + * + * @param $_GET['owizard'] An array of mapping wizard data for mapping columns + * @param $_GET['otype'] A string of the type of import + * @param $_GET['obackkup'] An boolean whether to backup the products tables first + * @access public + * @return json + */ + public static function importOptionProducts() { + $result = lC_Products_import_export_Admin::importOptionProducts($_GET['opfilename'], $_GET['owizard'], $_GET['otype'], $_GET['obackup']); + if (isset($result['total']) && $result['total'] != null) { + $result['rpcStatus'] = RPC_STATUS_SUCCESS; + } else { + } + + echo json_encode($result); + } + public static function fileUpload() { + global $lC_Database, $lC_Vqmod, $_module; + + require_once($lC_Vqmod->modCheck('includes/classes/ajax_upload.php')); + + // list of valid extensions, ex. array("jpeg", "xml", "bmp") + $allowedExtensions = array('gif', 'jpg', 'jpeg', 'png', 'txt', 'csv'); + // max file size in bytes + $sizeLimit = 10 * 1024 * 1024; + + $uploader = new qqFileUploader($allowedExtensions, $sizeLimit); + + $import_file = $uploader->handleUpload('../includes/work/products_import_export/imports/'); + + if ( $import_file['exists'] == true ) { + if ( isset($import_file['filename']) && $import_file['filename'] != null ) { + $success = true; + } + } + + $result = array('result' => 1, + 'success' => $success, + 'rpcStatus' => RPC_STATUS_SUCCESS, + 'filename' => $import_file['filename']); + + echo json_encode($result); + } + +} +?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/js/products_import_export.js.php b/catalog/admin/includes/applications/products_import_export/js/products_import_export.js.php new file mode 100644 index 000000000..e0c9c73ce --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/js/products_import_export.js.php @@ -0,0 +1,241 @@ + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/getCategoriesFile.php b/catalog/admin/includes/applications/products_import_export/modal/getCategoriesFile.php new file mode 100644 index 000000000..072bafc2f --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/getCategoriesFile.php @@ -0,0 +1,64 @@ + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/getOptionGroupsFile.php b/catalog/admin/includes/applications/products_import_export/modal/getOptionGroupsFile.php new file mode 100644 index 000000000..668cc62fb --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/getOptionGroupsFile.php @@ -0,0 +1,64 @@ + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/getOptionProductsFile.php b/catalog/admin/includes/applications/products_import_export/modal/getOptionProductsFile.php new file mode 100644 index 000000000..32461c120 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/getOptionProductsFile.php @@ -0,0 +1,65 @@ + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/getOptionVariantsFile.php b/catalog/admin/includes/applications/products_import_export/modal/getOptionVariantsFile.php new file mode 100644 index 000000000..f1c9c53bb --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/getOptionVariantsFile.php @@ -0,0 +1,64 @@ + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/getProductsFile.php b/catalog/admin/includes/applications/products_import_export/modal/getProductsFile.php new file mode 100644 index 000000000..7c930455e --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/getProductsFile.php @@ -0,0 +1,65 @@ + + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/importCategories.php b/catalog/admin/includes/applications/products_import_export/modal/importCategories.php new file mode 100644 index 000000000..aa68b75e8 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/importCategories.php @@ -0,0 +1,78 @@ + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/importOptions.php b/catalog/admin/includes/applications/products_import_export/modal/importOptions.php new file mode 100644 index 000000000..63819b719 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/importOptions.php @@ -0,0 +1,168 @@ + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/modal/importProducts.php b/catalog/admin/includes/applications/products_import_export/modal/importProducts.php new file mode 100644 index 000000000..ea1b69da4 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/modal/importProducts.php @@ -0,0 +1,78 @@ + + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/pages/main.php b/catalog/admin/includes/applications/products_import_export/pages/main.php new file mode 100644 index 000000000..1951cf392 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/pages/main.php @@ -0,0 +1,229 @@ + + +
    + +
    +

    getPageTitle(); ?>

    +
    +
    +
    +
    +
    +

    get('block_title_products'); ?>

    +
    +
    +
    +
    + get('fieldset_title_products_export'); ?> +

    + 0 get('text_records_to_be_exported'); ?> +

    +

    + +

    + +

    + +

    +

    + + + +

    +
    +
    +
    +
    +
    +
    + get('fieldset_title_products_import'); ?> +
    + +
    +

    + +

    +

    + +

    +
    +
    +
    +
    +
    + +
    +

    get('block_title_categories'); ?>

    +
    +
    +
    +
    + get('fieldset_title_categories_export'); ?> +

    + 0 get('text_records_to_be_exported'); ?> +

    +

    + +

    +

    + +

    +

    + + + +

    +
    +
    +
    +
    +
    +
    + get('fieldset_title_categories_import'); ?> +
    + +
    +

    + +

    +

    + +

    +
    +
    +
    +
    +
    +
    +

    get('block_title_options'); ?>

    +
    +
    +
    +
    + get('fieldset_title_options_export'); ?> +

    + 0 get('text_records_to_be_exported'); ?> +

    +

    + +

    +

    + +

    +

    + + + +

    +

    + +

    +

    + + + +

    +

    + +

    +

    + + + +

    +
    +
    +
    +
    +
    +
    + get('fieldset_title_options_import'); ?> +

    + +

    + +
    +

    +

    + +

    + +
    +

    +

    + +

    + +
    +

    +

    + +

    +

    + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +loadModal($lC_Template->getModule()); +?> + \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/products_import_export.php b/catalog/admin/includes/applications/products_import_export/products_import_export.php new file mode 100644 index 000000000..f8b0b704a --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/products_import_export.php @@ -0,0 +1,32 @@ +_page_title = $lC_Language->get('heading_title'); + } +} +?> \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/samples/categories_import_sample.txt b/catalog/admin/includes/applications/products_import_export/samples/categories_import_sample.txt new file mode 100644 index 000000000..ee7c834ba --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/samples/categories_import_sample.txt @@ -0,0 +1 @@ +sample tab seperated file for products import \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/samples/options_groups_import_sample.txt b/catalog/admin/includes/applications/products_import_export/samples/options_groups_import_sample.txt new file mode 100644 index 000000000..ee7c834ba --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/samples/options_groups_import_sample.txt @@ -0,0 +1 @@ +sample tab seperated file for products import \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/samples/options_to_products_import_sample.txt b/catalog/admin/includes/applications/products_import_export/samples/options_to_products_import_sample.txt new file mode 100644 index 000000000..ee7c834ba --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/samples/options_to_products_import_sample.txt @@ -0,0 +1 @@ +sample tab seperated file for products import \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/samples/options_variants_import_sample.txt b/catalog/admin/includes/applications/products_import_export/samples/options_variants_import_sample.txt new file mode 100644 index 000000000..ee7c834ba --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/samples/options_variants_import_sample.txt @@ -0,0 +1 @@ +sample tab seperated file for products import \ No newline at end of file diff --git a/catalog/admin/includes/applications/products_import_export/samples/products_import_sample.txt b/catalog/admin/includes/applications/products_import_export/samples/products_import_sample.txt new file mode 100644 index 000000000..209122a00 --- /dev/null +++ b/catalog/admin/includes/applications/products_import_export/samples/products_import_sample.txt @@ -0,0 +1,2 @@ +id parent_id quantity price cost msrp model sku date_added last_modified weight weight_class status tax_class_id manufacturer products_ordered has_children language_id name description permalink tags meta_title meta_keywords meta_description url products_viewed categories base_image +"1" "0" "999" "80.0000" "0.0000" "0.0000" "WOM20091189" "" "2013-02-27 08:33:11" "2013-10-25 12:46:22" "3.30" "4" "1" "0" "Results Only Web" "0" "0" "1" "Adding a name" "to the stuff" "womens-pink-dress" "test tag, other" "" "" "" "" "" "Dresses" dress3.jpg \ No newline at end of file diff --git a/catalog/admin/includes/languages/en_US/modules/access/products_import_export.php b/catalog/admin/includes/languages/en_US/modules/access/products_import_export.php new file mode 100644 index 000000000..21898dcc0 --- /dev/null +++ b/catalog/admin/includes/languages/en_US/modules/access/products_import_export.php @@ -0,0 +1,12 @@ +# $Id: products_import_export.php v1.0 2013-12-01 resultsonlyweb $ +# +# LoadedCommerce, Innovative eCommerce Solutions +# http://www.loadedcommerce.com +# +# Copyright (c) 2013 Loaded Commerce, LLC +# +# @author LoadedCommerce Team +# @copyright (c) 2013 LoadedCommerce Team +# @license http://loadedcommerce.com/license.html + +access_products_import_export_title = Products Import/Export \ No newline at end of file diff --git a/catalog/admin/includes/languages/en_US/products_import_export.php b/catalog/admin/includes/languages/en_US/products_import_export.php new file mode 100644 index 000000000..5aa0ea6e6 --- /dev/null +++ b/catalog/admin/includes/languages/en_US/products_import_export.php @@ -0,0 +1,103 @@ +# $Id: products_import_export.php v1.0 2013-12-01 resultsonlyweb $ +# +# LoadedCommerce, Innovative eCommerce Solutions +# http://www.loadedcommerce.com +# +# Copyright (c) 2013 Loaded Commerce, LLC +# +# @author LoadedCommerce Team +# @copyright (c) 2013 LoadedCommerce Team +# @license http://loadedcommerce.com/license.html + +heading_title = Products Import/Export + +batch_delete_error_entry_in_use = The following entries are currently assigned to products and could not be deleted. + +block_title_products = Products +block_title_categories = Categories +block_title_options = Simple Options + +button_import = Import +button_get_sample_file = Get Sample File +button_full_data_set = Full Data Set +button_export_options_groups = Export Options Groups +button_export_option_variants = Export Option Variants +button_export_options_to_products = Export Options to Products +button_qty_price_set = QTY & Price Set +button_new_variant_group = New Group +button_new_variant_entry = New Variant +button_delete_this_group = Delete this Group +button_delete_these_groups = Delete these Groups +button_delete_this_entry = Delete this Entry +button_delete_these_entries = Delete these Entries +button_cancel = Cancel +button_save = Save + +delete_error_entry_in_use_start = This entry is currently assigned to +delete_error_entry_in_use_end = products and cannot be deleted. + +download_export_file = Download Export File + +field_name = Name: +field_display_module = Display Module: +field_sort_order = Sort Order: +field_error = Error:fieldset_title_products_import = Products Import +fieldset_title_products_import = Products Import +fieldset_title_products_export = Products Export +fieldset_title_categories_import = Categories Import +fieldset_title_categories_export = Categories Export +fieldset_title_options_import = Options Import +fieldset_title_options_export = Options Export + +icon_check_all = Check All +icon_add_new_variant_group = Add New Variant Group +icon_add_new_variant_entry = Add New Variant Entry + +info_export_filter = Select a filter to narrow down your export. + +introduction_get_export = Your export has been processed. +introduction_new_variant_group = Please fill in the following information for the new variant group. +introduction_edit_variant_group = Please make the necessary changes for this variant group. +introduction_delete_variant_group = Please verify the removal of this variant group. +introduction_batch_delete_variant_groups = Please verify the removal of the selected variant groups and their entries. +introduction_new_entry = Please fill in the following information for the new variant group entry. +introduction_edit_entry = Please make the necessary changes for this variant group entry. +introduction_delete_entry = Please verify the removal of this variant group entry. +introduction_batch_delete_entries = Please verify the removal of the selected variant group entries. + +label_add_match = Add/Match +label_replace_database = Replace Entire Database +label_use_mapping_wizard = Use Mapping Wizard +label_create_product_backup = Create Backup of Product Tables +label_create_category_backup = Create Backup of Category Tables +label_create_options_backup = Create Backup of Options Tables + +modal_heading_import_results = Import Results +modal_heading_export_results = Export Results +modal_heading_new_variant_group = Add Product Variant Group +modal_heading_edit_variant_group = Edit Product Variant Group +modal_heading_delete_variant_group = Delete Product Variant Group +modal_heading_batch_delete_variant_groups = Batch Delete Product Variant Groups +modal_heading_new_entry = Add Product Variant Group Entry +modal_heading_edit_entry = Edit Product Variant Group Entry +modal_heading_delete_entry = Delete Product Variant Group Entry +modal_heading_batch_delete_entries = Batch Delete Product Variant Group Entries + +option_groups = Option Groups +option_variants = Option Variants +options_to_products = Options to Products + +tabbed = Tabbed + +table_heading_variant_groups = Variant Groups +table_heading_sort_order = Sort Order +table_heading_total_entries = Total Entries +table_heading_entries = Entries +table_heading_action = Action + +text_filter_applied = Filter Applied: +text_records_to_be_exported = records to be exported +text_choose_a_data_set = Choose a Data Set to Download: +text_records_imported = records imported +text_matched_and_updated = MATCHED and updated +text_new_records_added = NEW records added \ No newline at end of file diff --git a/catalog/admin/includes/modules/access/products_import_export.php b/catalog/admin/includes/modules/access/products_import_export.php new file mode 100644 index 000000000..77e939f28 --- /dev/null +++ b/catalog/admin/includes/modules/access/products_import_export.php @@ -0,0 +1,28 @@ +_title = $lC_Language->get('access_products_import_export_title'); + } + } +?> \ No newline at end of file diff --git a/catalog/admin/templates/default/css/products_import_export.css b/catalog/admin/templates/default/css/products_import_export.css new file mode 100644 index 000000000..d7f6eef6c --- /dev/null +++ b/catalog/admin/templates/default/css/products_import_export.css @@ -0,0 +1,14 @@ +/* admin product import/export page specific css */ + +/* custom media queries */ +@media screen and (min-width: 480px) and (max-width: 767px) { +} + +@media screen and (max-width: 479px) { + #products-export-form { margin: -10px; } + #products-import-form { margin: -10px; } + #categories-export-form { margin: -10px; } + #categories-import-form { margin: -10px; } + #options-export-form { margin: -10px; } + #options-import-form { margin: -10px; } +} \ No newline at end of file diff --git a/catalog/includes/work/products_import_export/imports/.htaccess b/catalog/includes/work/products_import_export/imports/.htaccess new file mode 100644 index 000000000..dcdb93eb2 --- /dev/null +++ b/catalog/includes/work/products_import_export/imports/.htaccess @@ -0,0 +1,4 @@ + + Order Deny,Allow + Deny from all + From 669163b64e3b846cfc8e3ddf1032424ef1aa72bd Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Wed, 5 Feb 2014 16:42:24 -0500 Subject: [PATCH 130/158] added fix for changing permalink on category edit --- .../applications/categories/js/categories.js.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/catalog/admin/includes/applications/categories/js/categories.js.php b/catalog/admin/includes/applications/categories/js/categories.js.php index 275b8a4cb..d5a4df39f 100644 --- a/catalog/admin/includes/applications/categories/js/categories.js.php +++ b/catalog/admin/includes/applications/categories/js/categories.js.php @@ -8,7 +8,7 @@ @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: categories.js.php v1.0 2013-08-08 datazen $ */ -global $lC_Template, $lC_Language, $lC_ObjectInfo; +global $lC_Template, $lC_Language, $cInfo; ?> @@ -67,8 +70,8 @@ if (file_exists('templates/' . $lC_Template->getCode() . '/header.php')) { include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/header.php')); } - } - + } + // set the format; 1, 2, or 3 columns $left = $lC_Template->getBoxModules('left'); $right = $lC_Template->getBoxModules('right'); @@ -93,11 +96,39 @@ ?>
    + +
    +
    +
    + hasPageContentModules()) { + foreach ($lC_Template->getContentModules('header') as $box) { + $lC_Box = new $box(); + $lC_Box->initialize(); + if ($lC_Box->hasContent()) { + if ($lC_Template->getCode() == DEFAULT_TEMPLATE) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')); + } else { + if (file_exists('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')) { + include($lC_Vqmod->modCheck('templates/' . $lC_Template->getCode() . '/modules/content/' . $lC_Box->getCode() . '.php')); + } else { + include($lC_Vqmod->modCheck('templates/' . DEFAULT_TEMPLATE . '/modules/content/' . $lC_Box->getCode() . '.php')); + } + } + } + unset($lC_Box); + } + } + ?> +
    +
    +
    + ' . $lC_Template->getInfoBoxHtml('left') . '
    ' . "\n"; ?> -
    +
    size('header') > 0) { echo '
    ' . $lC_MessageStack->get('header') . '
    '; @@ -162,13 +193,39 @@ } ?>
    + + - ' . $lC_Template->getInfoBoxHtml('left') . '
    ' . "\n"; ?> - ' . $lC_Template->getInfoBoxHtml('right') . '
    ' . "\n"; ?> + ' . $lC_Template->getInfoBoxHtml('left') . '
    ' . "\n"; ?> + ' . $lC_Template->getInfoBoxHtml('right') . '
    ' . "\n"; ?> -
    - +
    hasPageFooter()) { @@ -195,6 +252,9 @@ + + + query('select c.categories_id, cd.categories_name, c.parent_id, c.categories_mode, c.categories_link_target, c.categories_custom_url from :table_categories c, :table_categories_description cd where c.parent_id = :parent_id and c.categories_id = cd.categories_id and cd.language_id = :language_id and c.categories_status = 1 ' . $visibility . ' order by sort_order, cd.categories_name'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':parent_id', $categoryId); + $Qcategories->bindInt(':language_id', $lC_Language->getID()); + $Qcategories->execute(); + + $output = array(); + while ($Qcategories->next()) { + $hasChildren = $lC_CategoryTree->hasChildren($Qcategories->valueInt('categories_id')); + if ($Qcategories->value('categories_mode') == 'override') { + $url = 'value('categories_link_target') == 1) ? ' target="_blank"' : null) . '>' . $Qcategories->value('categories_name') . ''; + } else { + $url = lc_link_object(($Qcategories->value('categories_custom_url') != '' ? lc_href_link($Qcategories->value('categories_custom_url'), '', 'AUTO') : lc_href_link(FILENAME_DEFAULT . '?cPath=' . $lC_CategoryTree->buildBreadcrumb($Qcategories->valueInt('categories_id')), '', 'AUTO')), $Qcategories->value('categories_name') . (($hasChildren > 0 && $level == 0) ? ' ' : null), (($hasChildren > 0 && $level == 0) ? ' data-toggle="dropdown" class="dropdown-toggle"' : null)); + } + $output[] .= ' 0) ? ' class="dropdown"' : null) . '>' . + $url . + lC_Template_output::getCategoryNav($Qcategories->valueInt('categories_id'), $level+1) . + ''; + } + + return (($categoryId > 0) ? '' : null); + } /* * Returns the current category information (i.e. description, blurb, meta data etc) * @@ -243,9 +281,7 @@ public static function getZonesField() { } return $output; - } - - + } /* * Returns the product listing data * @@ -338,6 +374,60 @@ public static function getCategoriesStatus($id) { $Qcategories->execute(); return $result; + } + /* + * Return the language selections + * + * @access public + * @return array + */ + public function getTemplateLanguageSelection($include_image = true, $include_name = false, $params = '') { + global $lC_Language; + + $text = ''; + $output = ''; + foreach ($lC_Language->getAll() as $value) { + if ($include_name === true && $include_image === true) { + $text = '' . $lC_Language->showImage($value['code']) . ' ' . $value['name'] . ''; + } else if ($include_name === true && $include_image === false) { + $text = $value['name']; + } else { + $text = $lC_Language->showImage($value['code'], null, null, $params); + } + $output .= '
  • ' . lc_link_object(lc_href_link(basename($_SERVER['SCRIPT_FILENAME']), lc_get_all_get_params(array('language', 'currency')) . '&language=' . $value['code'], 'AUTO'), $text) . '
  • '; + } + + return $output; + } + /* + * Return the currency selections + * + * @access public + * @return array + */ + public function getTemplateCurrenciesSelection($include_symbol = true, $include_name = false, $params = '') { + global $lC_Currencies; + + $currency_data = array(); + foreach ($lC_Currencies->currencies as $key => $value) { + $currency_data[] = array('id' => $key, 'text' => $value['title']); + } + foreach ($currency_data as $currency) { + if ($include_name === true && $include_symbol === true) { + $text = '' . $currency['text'] . ' (' . $currency['id'] . ')'; + } else if ($include_name === true && $include_symbol === false) { + $text = '' . $currency['text'] . ''; + } else { + $text = '' . $currency['id'] . ''; + } + echo '
  • + + ' . $text . ' + +
  • '; + } + + return $output; } } ?> \ No newline at end of file diff --git a/catalog/templates/core/classes/success.php b/catalog/templates/core/classes/success.php index c31d49708..b58cf6f39 100644 --- a/catalog/templates/core/classes/success.php +++ b/catalog/templates/core/classes/success.php @@ -249,7 +249,7 @@ public static function getPaymentMethod($_oID) { public static function getShippingAddress($_oID, $_cID) { global $lC_Database; - $QorderShipping = $lC_Database->query('select delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_state_code, delivery_country, delivery_address_format from :table_orders where orders_id = :orders_id'); + $QorderShipping = $lC_Database->query('select delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state_code, delivery_country, delivery_address_format from :table_orders where orders_id = :orders_id'); $QorderShipping->bindTable(':table_orders', TABLE_ORDERS); $QorderShipping->bindInt(':orders_id', $_oID); $QorderShipping->execute(); @@ -261,8 +261,6 @@ public static function getShippingAddress($_oID, $_cID) { 'suburb' => $QorderShipping->value('delivery_suburb'), 'city' => $QorderShipping->value('delivery_city'), 'postcode' => $QorderShipping->value('delivery_postcode'), - 'state' => $QorderShipping->value('delivery_state'), - 'state_code' => lC_Address::getZoneCode($QorderShipping->value('delivery_state_code')), 'zone_code' => $QorderShipping->value('delivery_state_code'), 'country_title' => $QorderShipping->value('delivery_country'), 'format' => $QorderShipping->value('delivery_address_format')); @@ -281,7 +279,7 @@ public static function getShippingAddress($_oID, $_cID) { public static function getBillingAddress($_oID, $_cID) { global $lC_Database; - $QorderBilling = $lC_Database->query('select billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_state_code, billing_country, billing_address_format from :table_orders where orders_id = :orders_id'); + $QorderBilling = $lC_Database->query('select billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state_code, billing_country, billing_address_format from :table_orders where orders_id = :orders_id'); $QorderBilling->bindTable(':table_orders', TABLE_ORDERS); $QorderBilling->bindInt(':orders_id', $_oID); $QorderBilling->execute(); @@ -292,7 +290,6 @@ public static function getBillingAddress($_oID, $_cID) { 'street_address' => $QorderBilling->value('billing_street_address'), 'suburb' => $QorderBilling->value('billing_suburb'), 'city' => $QorderBilling->value('billing_city'), - 'state' => $QorderBilling->value('billing_state'), 'postcode' => $QorderBilling->value('billing_postcode'), 'zone_code' => $QorderBilling->value('billing_state_code'), 'country_title' => $QorderBilling->value('billing_country'), @@ -324,4 +321,4 @@ public static function getOrderComments($_oID) { return $order_comments; } } -?> +?> \ No newline at end of file diff --git a/catalog/templates/core/content/checkout/shopping_cart.php b/catalog/templates/core/content/checkout/shopping_cart.php index d0e082fe5..6e8d2ccbf 100644 --- a/catalog/templates/core/content/checkout/shopping_cart.php +++ b/catalog/templates/core/content/checkout/shopping_cart.php @@ -45,19 +45,19 @@ echo '

    ' . lc_link_object(lc_href_link(FILENAME_PRODUCTS, $products['keyword']), $products['name']) . '

    ' . "\n"; echo '
    ' . "\n"; if (!empty($products['model'])) { - echo '- ' . $lC_Language->get('listing_model_heading') . ': ' . $products['model'] . '' . "\n"; + echo '' . $lC_Language->get('listing_model_heading') . ': ' . $products['model'] . '' . "\n"; } if ( (STOCK_CHECK == '1') && ($lC_ShoppingCart->isInStock($products['id']) === false) ) { echo '' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '' . "\n"; } if ( $lC_ShoppingCart->isVariant($products['item_id']) ) { foreach ( $lC_ShoppingCart->getVariant($products['item_id']) as $variant) { - echo '
    - ' . $variant['group_title'] . ': ' . $variant['value_title'] . '' . "\n"; + echo '
    - ' . $variant['group_title'] . ': ' . $variant['value_title'] . "\n"; } } if ( $lC_ShoppingCart->hasSimpleOptions($products['item_id']) ) { foreach ( $lC_ShoppingCart->getSimpleOptions($products['item_id']) as $option) { - echo '
    - ' . $option['group_title'] . ': ' . $option['value_title'] . '' . "\n"; + echo '
    - ' . $option['group_title'] . ': ' . $option['value_title'] . '' . "\n"; } } echo '
    ' . "\n"; @@ -83,7 +83,7 @@ hasStock() === false) ) { - if (AUTODISABLE_OUT_OF_STOCK_PRODUCT == '-1') { + if (STOCK_ALLOW_CHECKOUT == '1') { echo '

    ' . sprintf($lC_Language->get('products_out_of_stock_checkout_possible'), STOCK_MARK_PRODUCT_OUT_OF_STOCK) . '

    '; } else { echo '

    ' . sprintf($lC_Language->get('products_out_of_stock_checkout_not_possible'), STOCK_MARK_PRODUCT_OUT_OF_STOCK) . '

    '; diff --git a/catalog/templates/core/content/products/info.php b/catalog/templates/core/content/products/info.php index dd943d4cc..ce3d42f9e 100644 --- a/catalog/templates/core/content/products/info.php +++ b/catalog/templates/core/content/products/info.php @@ -51,8 +51,6 @@ ?>
    isInStock($lC_Product->getID()) === false) ) ? '' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . '' : $lC_Product->getAttribute('shipping_availability'); if ($lC_Product->getAttribute('manufacturers') != null || $lC_Product->hasModel()) { echo '
    ' . "\n" . @@ -146,7 +144,7 @@
    -

    +

    $(document).ready(function() { $('#main-content-container').addClass('large-margin-top-neg'); - isInStock($lC_Product->getID()) === false) ) { - ?> - $('#button_buy_now_id').addClass('disabled'); - refreshPrice(); }); diff --git a/catalog/templates/core/content/products/new.php b/catalog/templates/core/content/products/new.php index 27d22c63d..1817101dc 100644 --- a/catalog/templates/core/content/products/new.php +++ b/catalog/templates/core/content/products/new.php @@ -82,14 +82,13 @@ var buttonContentText; var mediaType = _setMediaType(); var mainContentClass = $('#main-content-container').attr('class'); - if(mainContentClass == 'col-sm-6 col-lg-6') { + if (mainContentClass == 'col-sm-6 col-lg-6') { thisContentClass = 'col-sm-6 col-lg-6'; } else { thisContentClass = 'col-sm-4 col-lg-4'; } - $(".product-listing-module-items").each(function(){ - + $(".product-listing-module-items").each(function() { var imageContent = $(this).find('div.product-listing-module-image').html(); var nameContent = $(this).find('div.product-listing-module-name').html(); var nameContentText = $(this).find('div.product-listing-module-name').text(); @@ -105,7 +104,7 @@ var newDescContentText = (descContentText.length > 65) ? descContentText.substr(0, 62) + '...' : descContentText; descContent = descContent.replace(descContentText, newDescContentText); - output = '
    '+ + output = '
    '+ '
    '+ imageContent + '
    ' + '

    ' + nameContent + '

    ' + diff --git a/catalog/templates/core/css/template.css b/catalog/templates/core/css/template.css index 48c4322ba..68e098eaa 100644 --- a/catalog/templates/core/css/template.css +++ b/catalog/templates/core/css/template.css @@ -17,131 +17,155 @@ * 5. Main layout elements * 6. Main layout styles * 7. Error styles - * 8. Media query styles - * 9. Utility classes - * 10. Site Maintenance masking + * 8. Utility classes + * 9. Site Maintenance masking + * 10. Media query styles */ /********************************************************/ /* 1. Global */ /********************************************************/ -#loaded7 { - font-family: 'Roboto', sans-serif; +#loaded7 { + font-family: 'Roboto', sans-serif; } /********************************************************/ /* 2. Basic elements/styles */ /********************************************************/ -#loaded7 { - padding-top: 0px; - padding-bottom: 40px; - padding-top: 0px; - padding-bottom: 0px; +#loaded7 { + padding-top: 0px; + padding-bottom: 40px; + padding-top: 0px; + padding-bottom: 0px; } -#loaded7 .box-header { - margin-left:-5px; - text-transform:uppercase; - font-size:.9em; +#loaded7 .box-header { + margin-left: -5px; + text-transform: uppercase; + font-size: .9em; } -#loaded7 .btn-set { - clear:both; - margin:20px; +#loaded7 .btn-set { + clear: both; + margin: 20px; } -#loaded7 .well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 0px; - -moz-border-radius: 0px; - border-radius: 0px; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; +#loaded7 .well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; } -#loaded7 .thumbnail { - margin-bottom:20px; - padding:0px; - -webkit-border-radius: 0px; - -moz-border-radius: 0px; - border-radius: 0px; +#loaded7 .thumbnail { + margin-bottom: 20px; + padding: 0px; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; } -#loaded7 .carousel-inner > .item > img, #loaded7 .carousel-inner > .item > a > img { - min-width:100%; +#loaded7 .carousel-inner > .item > img, #loaded7 .carousel-inner > .item > a > img { + min-width: 100%; } -#loaded7 .strong { - font-weight:bold; +#loaded7 .strong { + font-weight: bold; } -#loaded7 .normal { - font-weight:200; +#loaded7 .normal { + font-weight: 200; } -#loaded7 .no-decoration { - text-decoration:none !important; +#loaded7 .no-decoration { + text-decoration: none !important; } -#loaded7 .no-wrap { - white-space: nowrap !important; +#loaded7 .no-wrap { + white-space: nowrap !important; } -#loaded7 .form-input-width { - width:96% !important; +#loaded7 .form-input-width { + width: 96% !important; } -#loaded7 .img-responsive { margin:auto !important; } +#loaded7 .img-responsive { + margin: auto !important; +} + +#loaded7 .img-logo-responsive { + display: block; + height: auto; + max-width: 100%; +} + +#loaded7 .popover.left { + margin-left: -25px; +} /********************************************************/ /* 3. Typography */ /********************************************************/ -#loaded7 h1, #loaded7 h2, #loaded7 h3, #loaded7 h4, #loaded7 h5, #loaded7 h6 { - font-weight:200; +#loaded7 h1, #loaded7 h2, #loaded7 h3, #loaded7 h4, #loaded7 h5, #loaded7 h6 { + font-weight: 200; } #loaded7 .highlight-color { - color:#66afe9; + color: #66afe9; +} + +#loaded7 .red { + color: #ff0000; } -#loaded7 .red { - color:#ff0000; +#loaded7 .lt-blue { + color: #0088cd; } -#loaded7 .lt-blue { - color:#0088cd; +#loaded7 .white { + color: #ffffff; +} + +#loaded7 .black { + color: #000000; +} + +#loaded7 .no-text-decoration { + text-decoration: none; } /********************************************************/ /* 4. Lists & tags */ /********************************************************/ -#loaded7 .list-indent { - padding-left:8px; +#loaded7 .list-indent { + padding-left: 8px; } -#loaded7 .list-indent-large { - padding-left:10px; +#loaded7 .list-indent-large { + padding-left: 10px; } /********************************************************/ /* 5. Main layout elements */ /********************************************************/ -#loaded7 #login input { - width:97%; +#loaded7 #login input { + width: 97%; } -#loaded7 #page { - width: 60px; +#loaded7 #page { + width: 60px; } /********************************************************/ @@ -149,56 +173,234 @@ /********************************************************/ /* header/nav */ -#loaded7 .navbar .container { - max-width: 1170px; +#loaded7 .topnav { + width: 100%; + min-height: 35px; + background-color: #222222; + list-style: none outside none; + margin-bottom: 0; + padding-left: 0; } -#loaded7 .navbar-inverse .container{ - -webkit-border-radius: 0px; - -moz-border-radius: 0px; - border-radius: 0px; - background:#282828; border:none; +#loaded7 .topnav .nav-item { + font-size: 13px; + padding: 8px 0 0 25px; } -#loaded7 .nav-tabs > li > a { - -webkit-border-radius: 0px; - -moz-border-radius: 0px; - border-radius: 0px; -} +#loaded7 .topnav .nav-item > li { + float: right; + list-style: none; +} -#loaded7 .page-header { - border:none; - padding: 10px 0px 0px; - margin: 0px 0 0px; +#loaded7 .topnav .nav-item > li > a { + color: #999999; + text-decoration: none; } -#loaded7 .logo { +#loaded7 .topnav .nav-item > li > a:hover, #loaded7 .topnav .nav-item > li > a:focus { + background-color: rgba(0, 0, 0, 0); + color: #FFFFFF; +} + +#loaded7 .topnav .nav-item > .dropdown > a:hover .caret { + border-bottom-color: #FFFFFF; + border-top-color: #FFFFFF; +} + +#loaded7 .topnav .nav-item > .open > a { + /*background-color: #080808;*/ + color: #FFFFFF; +} + +#loaded7 .topnav .nav-item > .dropdown > a .caret { + border-bottom-color: #999999; + border-top-color: #999999; +} + +#loaded7 .topnav .locale-header-dropdown { + margin-top: 8px; +} + +#loaded7 .topnav .account-dropdown { + margin-top: 8px; +} + +#loaded7 .topnav .cart-dropdown { + left: -125px; + margin-top: 8px; +} + +#loaded7 .topnav .locale-header-dropdown > li, #loaded7 .topnav .account-dropdown > li { + width: 100%; +} + +#loaded7 .topnav .locale-dropdown-lang-image { + position: relative; + top: -1px; +} + +#loaded7 .topnav .locale-dropdown-lang-title { + margin-left: 4px; +} + +#loaded7 .topnav .locale-header-icon { + position: relative; + top: -1px; +} + +#loaded7 .topnav .locale-header-currency { +} + +#loaded .account-dropdown > ul > li { + width: 100%; +} + +#loaded7 .locale-menu { + list-style: none; +} + +#loaded7 .chat-menu { + list-style: none; + padding: 7px; +} + +#loaded7 .locale-menu li { + display: inline-block; + padding: 0; + margin-right: 0px; +} + +#loaded7 .nav-item > li > a { + padding-bottom: 8px; + padding-top: 9px; +} + +#loaded7 .navbar { + min-height: 0px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +#loaded7 .navbar .container { + max-width: 1170px; +} + +#loaded7 .navbar-inverse .container { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + /*background:#282828; border:none;*/; +} + +#loaded7 .navbar-nav > li > .dropdown-menu { + margin-top: 1px; +} + +#loaded7 .navbar-toggle { + /*background-color: rgba(0, 0, 0, 0); + border: 1px solid rgba(0, 0, 0, 0); + border-radius: 4px;*/ + float: left; + /*margin-bottom: 8px;*/ + margin-left: 15px; + /*margin-top: 8px; + padding: 9px 10px; + position: relative;*/ +} + +#loaded7 .dropdown-menu > li > a { + line-height: 2.0; +} + +#loaded7 .navbar .dropdown-submenu { + position: relative; +} + +#loaded7 .navbar .dropdown-submenu > .dropdown-menu { + top: 0; + left: 0; + margin-top: 50px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +#loaded7 .navbar .dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +#loaded7 .navbar .dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} + +#loaded7 .navbar .dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +#loaded7 .navbar .dropdown-submenu > .dropdown-menu > .dropdown-submenu > .dropdown-menu { + left: 100%; + margin-top: 0; +} + +#loaded7 .navbar-nav > li > a { + padding-top: 12px; + padding-bottom: 12px; +} + +#loaded7 .nav-tabs > li > a { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} + +#loaded7 .page-header { + border: none; + padding: 10px 0px 0px; + margin: 0px; +} + +#loaded7 .logo { /*margin-left:10px; */ - margin-top:-5px; + margin-top: -5px; } #loaded7 .logo a { text-decoration: none; +} + +#loaded7 .header-branding { } /* box modules */ -#loaded7 .product_notifications-image { - float:left; - margin-top:8px; +#loaded7 .product_notifications-image { + float: left; + margin-top: 8px; } -#loaded7 .box-products-price { - font-size:1.4em; - font-weight:200; +#loaded7 .box-products-price { + font-size: 1.4em; + font-weight: 200; } /* product listings */ -#loaded7 .product-special-price { - color:#FF0000; +#loaded7 .product-special-price { + color: #FF0000; } -#loaded7 .product-listing-module-buy-now a { - text-decoration:none; +#loaded7 .product-listing-module-buy-now a { + text-decoration: none; } #loaded7 .products-listing-separator { @@ -206,376 +408,636 @@ } #loaded7 #content-product-listing-category-description-container { - padding: 0 3px; + padding: 0 3px; } /* product info page */ -#loaded7 .content-products-info-price { - font-size:2.4em; - font-weight:200; - margin-bottom:4px; +#loaded7 .content-products-info-price { + font-size: 2.4em; + font-weight: 200; + margin-bottom: 4px; } -#loaded7 .content-products-info-reviews-rating-label { - text-transform:uppercase; - display:inline; +#loaded7 .content-products-info-reviews-rating-label { + text-transform: uppercase; + display: inline; } -#loaded7 .content-products-info-qty-input { - width:20%; - float:right; - font-weight: bold; - text-align: center; +#loaded7 .content-products-info-qty-input { + width: 20%; + float: right; + font-weight: bold; + text-align: center; } -#loaded7 .content-products-info-qty-label { - display:inline; - vertical-align:-30%; - margin-right:10px; -} +#loaded7 .content-products-info-qty-label { + display: inline; + vertical-align: -30%; + margin-right: 10px; +} -#loaded7 .content-products-info-manuf-model { - position:absolute; - right:0; top:15px; - right:20px; +#loaded7 .content-products-info-manuf-model { + position: absolute; + right: 0; + top: 15px; + right: 20px; } /* content modules */ -#loaded7 .content-upcoming-products-image-tag { - padding-top:20px; +#loaded7 .content-upcoming-products-image-tag { + padding-top: 20px; } -#loaded7 .content-upcoming-products-text-expected { - font-size:.9em; +#loaded7 .content-upcoming-products-text-expected { + font-size: .9em; } -#loaded7 .content-upcoming-products-text-price { - font-size:1.3em; +#loaded7 .content-upcoming-products-text-price { + font-size: 1.3em; } -#loaded7 .content-upcoming-products-text-name { - line-height:1.1; - font-size:1.3em; +#loaded7 .content-upcoming-products-text-name { + line-height: 1.1; + font-size: 1.3em; } -#loaded7 .content-featured-products-image-tag { - padding-top:20px; +#loaded7 .content-featured-products-image-tag { + padding-top: 20px; } -#loaded7 .content-featured-products-text-expected { - font-size:.9em; +#loaded7 .content-featured-products-text-expected { + font-size: .9em; } -#loaded7 .content-featured-products-text-price { - font-size:1.3em; +#loaded7 .content-featured-products-text-price { + font-size: 1.3em; } -#loaded7 .content-featured-products-text-name { - line-height:1.1; - font-size:1.3em; +#loaded7 .content-featured-products-text-name { + line-height: 1.1; + font-size: 1.3em; } -#loaded7 .content-reviews-text { - padding-top:4px; +#loaded7 .content-reviews-text { + padding-top: 4px; } -#loaded7 .content-recently-visited-text-name { - font-size:1.2em; -} +#loaded7 .content-recently-visited-text-name { + font-size: 1.2em; +} -#loaded7 .content-recently-visited-image-src { - width:100px; height:120px; -} +#loaded7 .content-recently-visited-image-src { + height: 120px; +} -#loaded7 .content-also-purchased-products-text-name a { - font-size:.8em; +#loaded7 .content-also-purchased-products-text-name a { + font-size: .8em; } /* checkout pages */ -#loaded7 .ot-total { - font-weight:bold; - font-size: 1.3em; - color:#428BCA; +#loaded7 .ot-total { + font-weight: bold; + font-size: 1.3em; + color: #428BCA; } -#loaded7 .module-row-selected { - background-color:#e6e6e6; -} +#loaded7 .module-row-selected { + background-color: #e6e6e6; +} -#loaded7 .payment-selection span { - margin-left: 4px; +#loaded7 .payment-selection span { + margin-left: 4px; } -#loaded7 .payment-selection-title { - font-weight:200; +#loaded7 .payment-selection-title { + font-weight: 200; } -#loaded7 .content-checkout-payment-methods-table td { - height: 60px; +#loaded7 .content-checkout-payment-methods-table td { + height: 60px; } #loaded7 .content-shopping-cart-image-td { - width:50px; + width: 50px; } #loaded7 .content-shopping-cart-qty-input-td { - width:12%; + width: 12%; } -#loaded7 .content-shopping-cart-qty-input { - width:60px; +#loaded7 .content-shopping-cart-qty-input { + width: 60px; } #loaded7 .content-shopping-cart-remove-td { - width:16px; + width: 16px; } #loaded7 .content-checkout-confirmation-qty-td { - width:30px; + width: 30px; } #loaded7 .content-checkout-success-qty-td { - width:30px; + width: 30px; } #loaded7 .content-checkout-listing-blank { - width:1px; + width: 1px; background-image: url('images/pixel_trans.gif'); } -#loaded7 #loading-container { - position:absolute; - left:50%; - top:10%; +#loaded7 #loading-container { + position: absolute; + left: 50%; + top: 10%; } -#loaded7 #iloader { - margin:100px 0 0 0px; +#loaded7 #iloader { + margin: 100px 0 0 0px; } /* QR Code */ -#loaded7 #qr-message { - display:none; - position:fixed; - bottom:25px; - right:25px; - width: 250px; - text-align:center; - background:#f5f5f5; - padding:10px 0; +#loaded7 #qr-message { + display: none; + position: fixed; + bottom: 25px; + right: 25px; + width: 250px; + text-align: center; + background: #f5f5f5; + padding: 10px 0; z-index: 1; } -#loaded7 .close-qr { - background-color: #D52607; - border-radius: 15px 15px 15px 15px; - border-style: solid; - border-width: 1px; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset, 0 1px 3px rgba(0, 0, 0, 0.75); - color: #FFFFFF; - font-family: verdana,Arial,Helvetica,sans-serif; - font-size: 11px; - font-weight: bold; - height: 16px; - right: -6px; - line-height: 13px; - min-width: 12px; - padding: 0 3px; - position: absolute; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); - top: -6px; - z-index: 1; +#loaded7 .close-qr { + background-color: #D52607; + border-radius: 15px 15px 15px 15px; + border-style: solid; + border-width: 1px; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset, 0 1px 3px rgba(0, 0, 0, 0.75); + color: #FFFFFF; + font-family: verdana,Arial,Helvetica,sans-serif; + font-size: 11px; + font-weight: bold; + height: 16px; + right: -6px; + line-height: 13px; + min-width: 12px; + padding: 0 3px; + position: absolute; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + top: -6px; + z-index: 1; cursor: pointer; text-decoration: none; } + +#loaded7 .fa-bars-mobile { + display: none; +} + +#loaded7 input.navbar-search { + background: #b2b2b2; + border: 0 none; + font: bold 12px Arial,Helvetica,Sans-serif; + color: #444444; + width: 85px; + padding: 7px 15px 7px 25px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all 0.4s ease 0s; + -moz-transition: all 0.4s ease 0s; + -o-transition: all 0.4s ease 0s; + transition: all 0.4s ease 0s; + margin: 0 -24px 0 0; +} + +#loaded7 input.navbar-search:focus { + background: #fcfcfc; + color: #444444; + width: 150px; + margin: 0 -24px 0 0; + outline: none; +} + +#loaded7 .navbar-search-icon { + margin: 0 -25px 0 8px; + position: relative; + z-index: 2; + color: #444444; +} + +::-webkit-input-placeholder { /* WebKit browsers */ + color: #444444; +} +:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #444444; +} +::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #444444; +} +:-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #444444; +} + +#loaded7 .popover-content { + padding: 5px 10px; +} + +#loaded7 .mobile-portrait-search-input-cover { + display: none; +} + +#loaded7 .breadcrumb { + margin-bottom: 5px; +} + +#loaded7 .table-responsive { + border: none; +} + +#loaded7 .table > thead > tr > th { + border-bottom: none; +} + +#loaded7 table { + border-collapse: inherit; +} + +#loaded7 .navbar-toggle { + margin-top: 5px; + margin-bottom: 5px; +} + +#loaded7 #search { + margin-top: 3px; +} /********************************************************/ /* 7. Error classes */ /********************************************************/ -#loaded7 .messageStack { - margin-top:4px +#loaded7 .messageStack { + margin-top: 4px; } -#loaded7 .message-stack-container { - padding:5px 5px 1px 5px; +#loaded7 .message-stack-container { + padding: 5px 5px 1px 5px; } -#loaded7 .message-success-container { - padding:10px; +#loaded7 .message-success-container { + padding: 10px; } #loaded7 .show-on-mobile { display: none; } -#loaded7 .warning { - color: #ff0000; +#loaded7 .show-on-mobile-portrait { + display: none; } /********************************************************/ -/* 8. Media query styles */ +/* 8. Utility classes */ /********************************************************/ - -@media (min-width: 1200px) { +#loaded7 .clear-left { + clear: left !important; +} +#loaded7 .clear-right { + clear: right !important; } -@media (min-width: 940px) and (max-width: 1199px) { - +#loaded7 .clear-both { + clear: both !important; } +#loaded7 .margin-top { + margin-top: 10px !important; +} -@media (min-width: 768px) and (max-width: 939px) { +#loaded7 .small-margin-top { + margin-top: 4px !important; +} +#loaded7 .mid-margin-top { + margin-top: 15px !important; } +#loaded7 .large-margin-top { + margin-top: 20px !important; +} -@media (min-width: 600px) and (max-width: 767px) { - #loaded7 .show-on-mobile { - display: block; - } - #loaded7 .hide-on-mobile { - display: none; - } +#loaded7 .no-margin-top { + margin-top: 0 !important; } +#loaded7 .margin-bottom { + margin-bottom: 10px !important; +} -@media (min-width: 480px) and (max-width: 599px) { - #loaded7 .show-on-mobile { - display: block; - } - #loaded7 .hide-on-mobile { - display: none; - } +#loaded7 .small-margin-bottom { + margin-bottom: 4px !important; } +#loaded7 .mid-margin-bottom { + margin-bottom: 15px !important; +} -@media (max-width: 479px) { - #loaded7 .show-on-mobile { - display: block; - } - #loaded7 .hide-on-mobile { - display: none; - } +#loaded7 .large-margin-bottom { + margin-bottom: 20px !important; +} + +#loaded7 .no-margin-bottom { + margin-bottom: 0 !important; +} + +#loaded7 .margin-left { + margin-left: 10px !important; +} + +#loaded7 .small-margin-left { + margin-left: 4px !important; +} + +#loaded7 .mid-margin-left { + margin-left: 15px !important; +} + +#loaded7 .large-margin-left { + margin-left: 20px !important; +} + +#loaded7 .no-margin-left { + margin-left: 0 !important; +} + +#loaded7 .margin-right { + margin-right: 10px !important; +} + +#loaded7 .small-margin-right { + margin-right: 4px !important; +} + +#loaded7 .mid-margin-right { + margin-right: 15px !important; +} + +#loaded7 .large-margin-right { + margin-right: 20px !important; +} + +#loaded7 .no-margin-right { + margin-right: 0 !important; +} + +#loaded7 .float-left { + float: left !important; +} /* use bootstrap pull-left instead */ +#loaded7 .float-right { + float: right !important; +} /* use bootstrap pull-right instead */ + +#loaded7 .align-center { + text-align: center !important; +} /* use bootstrap text-center instead */ +#loaded7 .align-left { + text-align: left !important; +} /* use bootstrap text-left instead */ +#loaded7 .align-right { + text-align: right !important; +} /* use bootstrap text-right instead */ +#loaded7 .valign-middle { + vertical-align: middle !important; +} + +#loaded7 .small-margin-top-neg { + margin-top: -4px !important; +} + +#loaded7 .small-margin-bottom-neg { + margin-bottom: -4px !important; +} + +#loaded7 .small-margin-left-neg { + margin-left: -4px !important; +} + +#loaded7 .small-margin-right-neg { + margin-right: -4px !important; +} + +#loaded7 .margin-top-neg { + margin-top: -10px !important; +} + +#loaded7 .margin-bottom-neg { + margin-bottom: -10px !important; +} + +#loaded7 .margin-left-neg { + margin-left: -10px !important; +} + +#loaded7 .margin-right-neg { + margin-right: -10px !important; +} + +#loaded7 .large-margin-top-neg { + margin-top: -20px !important; +} + +#loaded7 .large-margin-bottom-neg { + margin-bottom: -20px !important; +} + +#loaded7 .large-margin-left-neg { + margin-left: -20px !important; +} + +#loaded7 .large-margin-right-neg { + margin-right: -20px !important; +} + +#loaded7 .with-padding { + padding: 10px !important; +} + +#loaded7 .with-small-padding { + padding: 4px !important; +} + +#loaded7 .with-mid-padding { + padding: 15px !important; +} + +#loaded7 .with-large-padding { + padding: 20px !important; +} + +#loaded7 .with-padding-no-top { + padding: 0 10px 10px 10px !important; +} + +#loaded7 .with-padding-no-bottom { + padding: 10px 10px 0 10px !important; +} + +#loaded7 .with-padding-no-top-bottom { + padding: 0 10px !important; +} + +#loaded7 .small-padding-top { + padding-top: 4px !important; +} + +#loaded7 .padding-top { + padding-top: 10px !important; +} + +#loaded7 .mid-padding-top { + padding-top: 15px !important; +} + +#loaded7 .large-padding-top { + padding-top: 20px !important; +} + +#loaded7 .small-padding-bottom { + padding-bottom: 4px !important; +} + +#loaded7 .padding-bottom { + padding-bottom: 10px !important; +} + +#loaded7 .mid-padding-bottom { + padding-bottom: 15px !important; +} + +#loaded7 .large-padding-bottom { + padding-bottom: 20px !important; +} + +#loaded7 .small-padding-left { + padding-left: 4px !important; +} + +#loaded7 .padding-left { + padding-left: 10px !important; +} + +#loaded7 .mid-padding-bottom { + padding-top: 15px !important; +} + +#loaded7 .large-padding-left { + padding-left: 20px !important; +} + +#loaded7 .small-padding-right { + padding-right: 4px !important; +} + +#loaded7 .padding-right { + padding-right: 10px !important; +} + +#loaded7 .mid-padding-bottom { + padding-bottom: 15px !important; +} + +#loaded7 .large-padding-right { + padding-right: 20px !important; +} + +#loaded7 .no-padding { + padding: 0 !important; +} + +#loaded7 .no-padding-top { + padding-top: 0 !important; +} + +#loaded7 .no-padding-bottom { + padding-bottom: 0 !important; +} + +#loaded7 .no-padding-left { + padding-left: 0 !important; +} + +#loaded7 .no-padding-right { + padding-right: 0 !important; +} + +#loaded7 .full-width { + width: 100% !important; +} + +#loaded7 .three-quarter-width { + width: 74% !important; +} + +#loaded7 .two-third-width { + width: 65% !important; +} + +#loaded7 .half-width { + width: 49% !important; +} + +#loaded7 .third-width { + width: 32% !important; +} + +#loaded7 .quarter-width { + width: 24% !important; +} + +#loaded7 .display-inline { + display: inline !important; +} + +#loaded7 .relative { + position: relative !important; +} + +#loaded7 .absolute { + position: absolute !important; +} + +#loaded7 .absolute-top-right { + position: absolute !important; + top: 0 !important; + right: 0 !important; +} + +#loaded7 .absolute-top-right-large-padding { + position: absolute !important; + top: 20px !important; + right: 20px !important; +} + +.cursor-pointer { + cursor: pointer !important; +} + +.z-index-1 { + z-index: 1; } /********************************************************/ -/* 9. Utility classes */ -/********************************************************/ -#loaded7 .clear-left { clear: left !important; } -#loaded7 .clear-right { clear: right !important; } -#loaded7 .clear-both { clear: both !important; } - -#loaded7 .margin-top { margin-top:10px !important; } -#loaded7 .small-margin-top { margin-top:4px !important; } -#loaded7 .mid-margin-top { margin-top:15px !important; } -#loaded7 .large-margin-top { margin-top:20px !important; } -#loaded7 .no-margin-top { margin-top:0 !important; } - -#loaded7 .margin-bottom { margin-bottom:10px !important; } -#loaded7 .small-margin-bottom { margin-bottom:4px !important; } -#loaded7 .mid-margin-bottom { margin-bottom:15px !important; } -#loaded7 .large-margin-bottom { margin-bottom:20px !important; } -#loaded7 .no-margin-bottom { margin-bottom:0 !important; } - -#loaded7 .margin-left { margin-left:10px !important; } -#loaded7 .small-margin-left { margin-left:4px !important; } -#loaded7 .mid-margin-left { margin-left:15px !important; } -#loaded7 .large-margin-left { margin-left:20px !important; } -#loaded7 .no-margin-left { margin-left:0 !important; } - -#loaded7 .margin-right { margin-right:10px !important; } -#loaded7 .small-margin-right { margin-right:4px !important; } -#loaded7 .mid-margin-right { margin-right:15px !important; } -#loaded7 .large-margin-right { margin-right:20px !important; } -#loaded7 .no-margin-right { margin-right:0 !important; } - -#loaded7 .float-left { float:left !important; } /* use bootstrap pull-left instead */ -#loaded7 .float-right { float:right !important; } /* use bootstrap pull-right instead */ - -#loaded7 .align-center { text-align:center !important; } /* use bootstrap text-center instead */ -#loaded7 .align-left { text-align:left !important; } /* use bootstrap text-left instead */ -#loaded7 .align-right { text-align:right !important; } /* use bootstrap text-right instead */ -#loaded7 .valign-middle { vertical-align:middle !important; } - -#loaded7 .small-margin-top-neg { margin-top:-4px !important; } -#loaded7 .small-margin-bottom-neg { margin-bottom:-4px !important; } -#loaded7 .small-margin-left-neg { margin-left:-4px !important; } -#loaded7 .small-margin-right-neg { margin-right:-4px !important; } - -#loaded7 .margin-top-neg { margin-top:-10px !important; } -#loaded7 .margin-bottom-neg { margin-bottom:-10px !important; } -#loaded7 .margin-left-neg { margin-left:-10px !important; } -#loaded7 .margin-right-neg { margin-right:-10px !important; } - -#loaded7 .large-margin-top-neg { margin-top:-20px !important; } -#loaded7 .large-margin-bottom-neg { margin-bottom:-20px !important; } -#loaded7 .large-margin-left-neg { margin-left:-20px !important; } -#loaded7 .large-margin-right-neg { margin-right:-20px !important; } - -#loaded7 .with-padding { padding:10px !important; } -#loaded7 .with-small-padding { padding:4px !important; } -#loaded7 .with-mid-padding { padding:15px !important; } -#loaded7 .with-large-padding { padding:20px !important; } - -#loaded7 .with-padding-no-top { padding:0 10px 10px 10px !important; } -#loaded7 .with-padding-no-bottom { padding:10px 10px 0 10px !important; } -#loaded7 .with-padding-no-top-bottom { padding:0 10px !important; } - -#loaded7 .small-padding-top { padding-top:4px !important; } -#loaded7 .padding-top { padding-top:10px !important; } -#loaded7 .mid-padding-top { padding-top:15px !important; } -#loaded7 .large-padding-top { padding-top:20px !important; } - -#loaded7 .small-padding-bottom { padding-bottom:4px !important; } -#loaded7 .padding-bottom { padding-bottom:10px !important; } -#loaded7 .mid-padding-bottom { padding-bottom:15px !important; } -#loaded7 .large-padding-bottom { padding-bottom:20px !important; } - -#loaded7 .small-padding-left { padding-left:4px !important; } -#loaded7 .padding-left { padding-left:10px !important; } -#loaded7 .mid-padding-bottom { padding-top:15px !important; } -#loaded7 .large-padding-left { padding-left:20px !important; } - -#loaded7 .small-padding-right { padding-right:4px !important; } -#loaded7 .padding-right { padding-right:10px !important; } -#loaded7 .mid-padding-bottom { padding-bottom:15px !important; } -#loaded7 .large-padding-right { padding-right:20px !important; } - -#loaded7 .no-padding { padding:0 !important; } -#loaded7 .no-padding-top { padding-top:0 !important; } -#loaded7 .no-padding-bottom { padding-bottom:0 !important; } -#loaded7 .no-padding-left { padding-left:0 !important; } -#loaded7 .no-padding-right { padding-right:0 !important; } - -#loaded7 .full-width { width:100% !important; } -#loaded7 .three-quarter-width { width:74% !important; } -#loaded7 .two-third-width { width:65% !important; } -#loaded7 .half-width { width:49% !important; } -#loaded7 .third-width { width:32% !important; } -#loaded7 .quarter-width { width:24% !important; } - -#loaded7 .display-inline { display:inline !important; } - -#loaded7 .relative { position:relative !important; } -#loaded7 .absolute { position:absolute !important; } -#loaded7 .absolute-top-right { position:absolute !important; top:0 !important; right:0 !important } -#loaded7 .absolute-top-right-large-padding { position:absolute !important; top:20px !important; right:20px !important } - -#loaded7 .cursor-pointer { cursor:pointer !important; } - -#loaded7 .language-menu { list-style:none; } -#loaded7 .language-menu li { display:inline-block; padding:0; margin-right:8px; } - -/********************************************************/ -/* 10. Site Maintenace masking */ +/* 9. Site Maintenace masking */ /********************************************************/ .loadmask { z-index: 100; position: absolute; - top:0; - left:0; + top: 0; + left: 0; -moz-opacity: 0.5; opacity: .50; filter: alpha(opacity=50); @@ -584,35 +1046,373 @@ height: 100%; zoom: 1; } + .loadmask-msg { z-index: 20001; position: absolute; top: 0; left: 0; - border:1px solid #6593cf; + border: 1px solid #6593cf; background: #c3daf9; - padding:2px; + padding: 2px; -moz-border-radius: 15px; border-radius: 15px; } + .loadmask-msg div { - padding:6px 8px 5px 8px; + padding: 6px 8px 5px 8px; /* background: #fbfbfb url('../../img/loading.gif') no-repeat 5px 5px; */ background: #fbfbfb; line-height: 16px; - border:1px solid #a3bad9; - color:#222; - font:normal 11px tahoma, arial, helvetica, sans-serif; - cursor:wait; + border: 1px solid #a3bad9; + color: #222; + font: normal 11px tahoma, arial, helvetica, sans-serif; + cursor: wait; -moz-border-radius: 15px; border-radius: 15px; } + .masked { - /* overflow: hidden !important; */ + /* overflow: hidden !important; */; } + .masked-relative { position: relative !important; } + .masked-hidden { visibility: hidden !important; +} + +/********************************************************/ +/* 10. Media query styles */ +/********************************************************/ + +@media (min-width: 1200px) { +} + +@media (min-width: 940px) and (max-width: 1199px) { + .nav > li > a { + padding: 10px 6px; + font-size: 13px; + } + + #loaded7 #search { + margin-top: 7px; + } +} + +@media (min-width: 940px) and (max-width: 1024px) { + #loaded7 #mobile-search { + margin: 7px 35px 0px 0px; + } + + #loaded7 input.navbar-search { + width: 25px; + padding: 7px 10px 7px 20px; + } + + #loaded7 input.navbar-search:focus { + width: 25px; + background: #b2b2b2; + } + + #loaded7 .social-nav-gp { + display: none; + } + + #loaded7 .social-nav-yt { + display: none; + } + + #loaded7 .social-nav-in { + display: none; + } +} + +@media (min-width: 768px) and (max-width: 939px) { + .nav > li > a { + padding: 10px 6px; + font-size: 13px; + } + + #loaded7 input.navbar-search:focus { + width: 90px; + } + + #loaded7 #mobile-search { + margin: 7px 35px 0px 0px; + } + + #loaded7 input.navbar-search { + width: 25px; + padding: 7px 10px 7px 20px; + } + + #loaded7 input.navbar-search:focus { + width: 25px; + background: #b2b2b2; + } + + #loaded7 .social-nav-gp { + display: none; + } + + #loaded7 .social-nav-yt { + display: none; + } + + #loaded7 .social-nav-in { + display: none; + } + + #loaded7 #search { + margin-top: 7px; + } +} + +@media (min-width: 600px) and (max-width: 767px) { + #loaded7 .show-on-mobile { + display: block; + } + + #loaded7 .hide-on-mobile { + display: none; + } + + #loaded7 #content-center-main-container h1 { + padding-top: 10px; + margin-left: 13px; + } + + #loaded7 #mobile-search { + margin: 7px 35px 0px 0px; + } + + #loaded7 .popover { + min-width: 360px; + max-width: 360px; + } + + #loaded7 .popover.left { + margin-left: 10px; + } + + #loaded7 .fa-sales-phone { + width: 28px; + padding: 4px 30px 0px; + } + + #loaded7 .fa-sales-email { + width: 28px; + padding: 0px 34px; + } + + #loaded7 .fa-site-slogan { + width: 28px; + padding: 4px 34px 0px; + } + + #loaded7 .header-fa-icons { + float: left !important; + display: inline-block; + } + + #loaded7 .branding-sps { + margin: -5px 0 15px; + } + + #loaded7 input.navbar-search:focus { + width: 90px; + } +} + +@media (min-width: 480px) and (max-width: 599px) { + #loaded7 .show-on-mobile { + display: block; + } + + #loaded7 .hide-on-mobile { + display: none; + } + + #loaded7 #content-center-main-container h1 { + padding-top: 10px; + margin-left: 13px; + } + + #loaded7 #mobile-search { + margin: 7px 35px 0px 0px; + } + + #loaded7 .popover { + min-width: 280px; + max-width: 280px; + } + + #loaded7 .popover.left { + margin-left: 0px; + } + + #loaded7 .fa-sales-phone { + width: 28px; + padding: 4px 24px 0px; + } + + #loaded7 .fa-sales-email { + width: 28px; + padding: 0px 25px; + } + + #loaded7 .fa-site-slogan { + width: 28px; + padding: 4px 26px 0px; + } + + #loaded7 .header-fa-icons { + float: left !important; + display: inline-block; + } + + #loaded7 .branding-sps { + margin: -5px 0 15px; + } + + #loaded7 .topnav .locale-header-dropdown { + margin-top: 9px; + } + + #loaded7 .topnav .account-dropdown { + margin-top: 9px; + } + + #loaded7 .topnav .cart-dropdown { + left: -125px; + margin-top: 9px; + } + + #loaded7 .topnav { + min-height: 35px; + } + + #loaded7 .topnav .nav-item { + padding: 7px 0 0 35px; + } +} + +@media (max-width: 479px) { + #loaded7 .show-on-mobile { + display: block; + } + + #loaded7 .fa-bars-mobile { + display: inline-block; + } + + #loaded7 .hide-on-mobile { + display: none; + } + + #loaded7 .hide-on-mobile-portrait { + display: none !important; + } + + #loaded7 .locale-menu > li { + float: left !important; + } + + #loaded7 #content-center-main-container h1 { + padding-top: 10px; + margin-left: 13px; + } + + #loaded7 .topnav { + min-height: 35px; + } + + #loaded7 .topnav .nav-item { + padding: 7px 0 0 35px; + } + + #loaded7 .topnav-container { + float: left; + margin-left: -12px; + } + + #loaded7 #mobile-search { + margin: 7px 35px 0px 0px; + } + + #loaded7 input.navbar-search { + width: 25px; + padding: 7px 10px 7px 20px; + } + + #loaded7 input.navbar-search:focus { + width: 25px; + background: #b2b2b2; + } + + #loaded7 .popover { + min-width: 180px; + max-width: 180px; + } + + #loaded7 .popover.left { + margin-left: -10px; + } + + #loaded7 .fa-sales-phone { + width: 28px; + padding: 4px 9px 0px; + } + + #loaded7 .fa-sales-email { + width: 28px; + padding: 0px 8px; + } + + #loaded7 .fa-site-slogan { + width: 28px; + padding: 4px 13px 0px; + } + + #loaded7 .header-fa-icons { + float: left !important; + display: inline-block; + } + + #loaded7 .branding-sps { + margin: -5px 0 15px 0; + } + + #loaded7 .topnav .locale-header-dropdown { + left: -24px; + margin-top: 9px; + } + + #loaded7 .topnav .account-dropdown { + left: -20px; + margin-top: 9px; + } + + #loaded7 .topnav .cart-dropdown { + left: -150px; + margin-top: 9px; + } + + #loaded7 .mobile-portrait-search-input-cover { + height: 30px; + padding: 5px; + position: absolute; + right: 11px; + top: 9px; + width: 30px; + z-index: 1; + display: block; + } + + #loaded7 .mobile-expand { + margin: 0 -10px; + } } \ No newline at end of file diff --git a/catalog/templates/core/header.php b/catalog/templates/core/header.php index d91fc1848..47b92ac6a 100644 --- a/catalog/templates/core/header.php +++ b/catalog/templates/core/header.php @@ -9,63 +9,81 @@ @version $Id: header.php v1.0 2013-08-08 datazen $ */ ?> - -
    get('text_options_pricing'); ?> From 418a284a4d123cced4f4333b5eef23eda425137d Mon Sep 17 00:00:00 2001 From: datazen Date: Sat, 25 Jan 2014 10:37:47 -0500 Subject: [PATCH 031/158] [IC] qpb --- catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml b/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml index 09e954ea5..0fd95cfec 100644 --- a/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml +++ b/catalog/addons/Loaded_7_Pro/admin/hooks/product_qpb_pricing.xml @@ -7,7 +7,7 @@ ]]> - ]]> + ]]> \ No newline at end of file From 1b8d16a30eb87f1bfdc54f0036213ec5d4c23fb3 Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Mon, 27 Jan 2014 17:21:42 -0500 Subject: [PATCH 032/158] added install retry functionality with ioncube version check --- .../install/includes/functions/general.php | 30 +++++++++++-------- .../includes/languages/en_US/index.php | 1 + catalog/install/templates/pages/index.php | 14 ++++++++- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/catalog/install/includes/functions/general.php b/catalog/install/includes/functions/general.php index 2ec18b3df..dfd75d23a 100644 --- a/catalog/install/includes/functions/general.php +++ b/catalog/install/includes/functions/general.php @@ -34,27 +34,31 @@ function ioncube_test() { $ioncube_loader_version = ioncube_loader_version_array(); $status .= $lC_Language->get('ioncube_installed_version') . $ioncube_loader_version['version']; $status_icon = ""; - /*if ($ioncube_loader_version['major'] < 4 || ($ioncube_loader_version['major'] == 4 && $ioncube_loader_version['minor'] < 1)) { - $instructions .= "Ioncube loader is installed but needs to be updated.
    - Loaded 7 Commercial Addons will only work with ioncube loader version 4.1 or later.
    - The most recent version of the loader can be found - here."; - $status_class = "orange"; - } else {*/ + if ($ioncube_loader_version['major'] < 4 || ($ioncube_loader_version['major'] == 4 && $ioncube_loader_version['minor'] < 1)) { + $status_icon = ""; + $instructions .= $lC_Language->get('ioncube_update_needed'); + $status_class = "red"; + $ok = FALSE; + } else { $instructions .= $lC_Language->get('ioncube_no_additional_config'); $status_class = "green"; - //} + $ok = TRUE; + } } else { $status .= $lC_Language->get('text_not_installed'); $status_icon = ""; $instructions .= $lC_Language->get('ioncube_not_installed_instructions'); + $ok = FALSE; } - $body = "$status_icon - ionCube Loader
    - " . $lC_Language->get('text_status') . " $status
    - " . $lC_Language->get('text_instructions') . " $instructions"; + $txt = "$status_icon + ionCube Loader
    + " . $lC_Language->get('text_status') . " $status
    + " . $lC_Language->get('text_instructions') . " $instructions"; + + $check = array('txt' => $txt, + 'ok' => $ok); - return $body; + return $check; } ?> \ No newline at end of file diff --git a/catalog/install/includes/languages/en_US/index.php b/catalog/install/includes/languages/en_US/index.php index d1abb12cf..f588754dd 100644 --- a/catalog/install/includes/languages/en_US/index.php +++ b/catalog/install/includes/languages/en_US/index.php @@ -15,6 +15,7 @@ ioncube_no_additional_config = No additional configuration required. ioncube_installed_version = Installed: +ioncube_update_needed = Ioncube loader is installed but needs to be updated. Loaded 7 paid addons will only work with ioncube loader version 4.4.1 or later. The most recent version of the loader can be found here. ioncube_not_installed_instructions =
      - Please contact your web host and ask them to install ionCube loader on your server.
      - Loaders can be downloaded from www.ioncube.com.
      - Installation Instructions can be found here.
      - For additional questions please contact Loaded Commerce Support diff --git a/catalog/install/templates/pages/index.php b/catalog/install/templates/pages/index.php index ca8c8555c..251f13148 100644 --- a/catalog/install/templates/pages/index.php +++ b/catalog/install/templates/pages/index.php @@ -204,7 +204,19 @@

    get('page_text_ioncube'); ?>

    -

    + +

    + +

    + From 0954cd05e088a5509c101515cabd61bd43b6d92b Mon Sep 17 00:00:00 2001 From: Gerald Bullard Jr Date: Tue, 28 Jan 2014 01:48:20 -0500 Subject: [PATCH 033/158] more header work --- catalog/templates/core15/classes/output.php | 30 ++++++++++ catalog/templates/core15/css/template.css | 55 +++++++++++++++++- catalog/templates/core15/header.php | 62 ++++++++------------- 3 files changed, 104 insertions(+), 43 deletions(-) diff --git a/catalog/templates/core15/classes/output.php b/catalog/templates/core15/classes/output.php index f7057e421..ab63c4ae3 100644 --- a/catalog/templates/core15/classes/output.php +++ b/catalog/templates/core15/classes/output.php @@ -186,6 +186,36 @@ public static function getCategoryListing() { return $output; } + /* + * Returns the current category structure (with nav visibility) + * + * @access public + * @return array + */ + function getCategoryNav($categoryId = 0) { + global $lC_Database, $lC_Language, $lC_CategoryTree; + + $Qcategories = $lC_Database->query('select c.categories_id, cd.categories_name, c.parent_id, c.categories_mode, c.categories_link_target, c.categories_custom_url from :table_categories c, :table_categories_description cd where c.parent_id = :parent_id and c.categories_id = cd.categories_id and cd.language_id = :language_id and c.categories_status = 1 order by sort_order, cd.categories_name'); + $Qcategories->bindTable(':table_categories', TABLE_CATEGORIES); + $Qcategories->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION); + $Qcategories->bindInt(':parent_id', $categoryId); + $Qcategories->bindInt(':language_id', $lC_Language->getID()); + $Qcategories->execute(); + + $output = array(); + while ($Qcategories->next()) { + $hasChildren = $lC_CategoryTree->hasChildren($Qcategories->valueInt('categories_id')); + $url = ($Qcategories->value('categories_custom_url') != null) ? $Qcategories->value('categories_custom_url') : FILENAME_DEFAULT . '?cPath=' . $lC_CategoryTree->buildBreadcrumb($Qcategories->valueInt('categories_id')); + $output[] .= ' 0) ? ' class="dropdown-submenu"' : null) . '>' . + '' . + $Qcategories->value('categories_name') . + '' . + lC_Template_output::getCategoryNav($Qcategories->valueInt('categories_id')) . + ''; + } + + return (($categoryId > 0) ? '' : null); + } /* * Returns the current category information (i.e. description, blurb, meta data etc) * diff --git a/catalog/templates/core15/css/template.css b/catalog/templates/core15/css/template.css index 45dd7df4e..ef6d0186e 100644 --- a/catalog/templates/core15/css/template.css +++ b/catalog/templates/core15/css/template.css @@ -207,7 +207,7 @@ } #loaded7 .topnav .cart-dropdown { - left: -61px; + left: -95px; } #loaded7 .topnav .locale-header-dropdown > li, #loaded7 .topnav .account-dropdown > li { @@ -239,6 +239,11 @@ list-style: none; } +#loaded7 .chat-menu { + list-style: none; + padding: 7px; +} + #loaded7 .locale-menu li { display: inline-block; padding: 0; @@ -250,8 +255,8 @@ } #loaded7 .navbar-nav > li > a { - padding-bottom: 7px; - padding-top: 7px; + padding-bottom: 15px; + padding-top: 15px; } #loaded7 .navbar .container { @@ -277,6 +282,47 @@ position: relative;*/ } +#loaded7 .navbar .dropdown-submenu { + position: relative; +} + +#loaded7 .navbar .dropdown-submenu > .dropdown-menu { + top: 0; + left: 0; + margin-top: 50px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +#loaded7 .navbar .dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +#loaded7 .navbar .dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} + +#loaded7 .navbar .dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +#loaded7 .navbar .dropdown-submenu > .dropdown-menu > .dropdown-submenu > .dropdown-menu { + left: 100%; + margin-top: 0; +} + #loaded7 .nav-tabs > li > a { -webkit-border-radius: 0px; -moz-border-radius: 0px; @@ -296,6 +342,9 @@ #loaded7 .logo a { text-decoration: none; +} + +#loaded7 .header-branding { } /* box modules */ diff --git a/catalog/templates/core15/header.php b/catalog/templates/core15/header.php index c07a28d99..ed0b73051 100644 --- a/catalog/templates/core15/header.php +++ b/catalog/templates/core15/header.php @@ -7,12 +7,7 @@ @copyright Template built on DevKit http://www.bootstraptor.com under GPL license @license https://github.com/loadedcommerce/loaded7/blob/master/LICENSE.txt @version $Id: header.php v1.0 2013-08-08 datazen $ -*/ -//echo '
    ';
    -//print_r($lC_Language);
    -//print_r($lC_Currencies);
    -//print_r($_SESSION);
    -//echo '
    '; +*/ ?>
    @@ -55,10 +50,12 @@ @@ -75,7 +72,7 @@