// Merge with revision 7841
git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@7844 b9a71923-0436-4b27-9f14-aed3839534dd
@@ -33,6 +33,269 @@ Release Notes for PrestaShop 1.4
|
||||
|
||||
[+] FO : add dispatcher
|
||||
|
||||
####################################
|
||||
# v1.4.4.0 - 7803 (2011-07-28) #
|
||||
####################################
|
||||
|
||||
Added Features:
|
||||
|
||||
[+] Project : adding RTL language management
|
||||
|
||||
[+] BO : new class Upgrader to check PrestaShop version or download last version.
|
||||
[+] BO : new file ajax-tab.php, you can now make request without ajax.php and handle them directly in the appropriate AdminXXX
|
||||
[+] BO : new tab AdminUpgrade can now automatize the upgrade process. Thanks a lot to Broceliande/Eric Dolou for his great help
|
||||
|
||||
[+] CORE : Add the possibility to personalize an address layout with special chars.
|
||||
|
||||
[+] MO : A better view of the currency used by the module.
|
||||
[+] MO : Fetch content use more than one method (CURL, fopen, fsockopen and file_get_content)
|
||||
[+] MO : Moneybookers, Add the possibility to display the logo in the front Office (works with live edit).
|
||||
[+] MO : New Module - Canada Post (0.1)
|
||||
[+] MO : new module dedicated to german users which enable you to display legal notice on the customer account creation
|
||||
|
||||
Improved/changed features:
|
||||
|
||||
[*] Installer : improve installer template
|
||||
[*] Installer : now class ConfigurationTest is located in classes directory and renamed to ConfigurationTestCore
|
||||
[*] Installer : now method tryToConnect don't use an existing ressource except if specified
|
||||
[*] Installer : php directory is now directly related to INSTALL_DIR
|
||||
|
||||
[*] FO : #PSCFI-2691 - Adding index.php file for redirection
|
||||
[*] FO : CC-24 - Adding previous button for the address creation
|
||||
[*] FO : CC-32 - Adding a checkbox for the displaying of "Powered by PS"
|
||||
[*] FO : CC-93 - Review of the compare product system
|
||||
[*] FO : CC-93 - Review of the compare product system. Adding CompareProduct class
|
||||
[*] FO : Change the id "passwd" by "login_passwd" to avoid ambiguous id in OPC ordering (with guest authorization).
|
||||
[*] FO : Fixed #PSCFI-2176 - now you can use vars in your mail subject
|
||||
[*] FO : Update the jquery.cluetip.js library. From V0.9.9 to V1.1.3
|
||||
|
||||
[*] BO : Add option to disable apache option multiviews. Linked with #PSCFI-2597
|
||||
[*] BO : Added check for safe_mode before activating new image system
|
||||
[*] BO : Added compatibility check before moving images to the new filesystem
|
||||
[*] BO : AdminTab childs can now handle ajax request like index.php (with tab and token params) using specific method ajaxProcess
|
||||
[*] BO : Bug Fixed #PSCFI-2282 - Shipping Prices Range with a tax excluded group
|
||||
[*] BO : CC-108 - Remove informations about stocks in AdminProducts when the stock management is disabled
|
||||
[*] BO : CC-26 - Adding German and Italian translations
|
||||
[*] BO : CC-26 - Rename Alias Tab as Alias Research
|
||||
[*] BO : CC-50 - Increasing the size of the description area
|
||||
[*] BO : CC-99 - Better visibility for the delete module button
|
||||
[*] BO : FA-35 - Changing manufacturer translation in French for the BO. Replaced "fabricant" by "marque"
|
||||
[*] BO : FA-35 - Changing manufacturer translation in French for the BO. Replaced "fabricant" by "marque"
|
||||
[*] BO : Fixed bug PSCFI-2416 - The whole search index is not rewritten when you update a single product
|
||||
[*] BO : It is now possible to edit the field date_add with AdminImport
|
||||
[*] BO : Upgrader class now also check if autoupgrade is indicated for the last version, from http://www.prestashop.com/xml/version.xml
|
||||
[*] BO : added alert if attachment is bind to a product
|
||||
[*] BO : backup directory is now a static definition in Backup class
|
||||
[*] BO : improve CSV import when no csv file is available
|
||||
[*] BO : improve category listing in product edition and loyalty module
|
||||
[*] BO : improved Upgrader to check ps version
|
||||
[*] BO : improved backup class
|
||||
[*] BO : refactoring #PSCFI-2458 - AdminCarrier when Zone disabled & overcomplex processing ( Carrier )
|
||||
[*] BO : the new image filesystem is now entirely deactivated when the legacy setting is activated
|
||||
|
||||
[*] Classes : improvement #PSCFI-2278 - Don't die in Mail::send() method
|
||||
[*] Classes : improvement #PSCFI-2278 - refactoring
|
||||
[*] Classes : improvement #PSCFI-2440 - Tools class improvements
|
||||
|
||||
[*] MO : Adding traduction for blockcms
|
||||
[*] MO : New Admin Panel for "Layered Navigation" module, "Build your own template" feature!
|
||||
[*] MO : Now use the variable Calcul_mode in the hash of the cache
|
||||
[*] MO : Numerous bugs fixed for the "Layered Navigation" module
|
||||
[*] MO : Numerous bugs fixed for the "Layered Navigation" module
|
||||
[*] MO : Translations and changes on TrustedShop module
|
||||
[*] MO : Translations and changes on TrustedShop module (part 2)
|
||||
[*] MO : Upgrade on the UPS module (from enigma32, thx to him :)
|
||||
[*] MO : Upgrade on the USPS module (from enigma32, thx to him :)
|
||||
[*] MO : Upgrade on the fedex module (from enigma32, thx to him :)
|
||||
[*] MO : stats live performance improvment - PSCFI-2080
|
||||
[*] MO : you can now hook blockpermanentlinks on the footer
|
||||
|
||||
[*] WS : Add new feature for date_add/date_upd, PSCFI-2380
|
||||
[*] WS : Allow to change Webservice permission behavior
|
||||
|
||||
Fixed bugs:
|
||||
|
||||
[-] PROJECT : Fix template mail for new layout system
|
||||
|
||||
[-] INSTALLER : CSS Preactivation
|
||||
[-] Installer : Remove a bad space
|
||||
[-] Installer : fix error about version number (1.4.3.0 included when current version is 1.4.3)
|
||||
[-] Installer : fixed Tools::checkDb method when class Validate, DD or MySQL are already loaded
|
||||
[-] Installer : fixed a bug in add_missing_rewrite_value.php
|
||||
[-] Installer : log is now working correctly
|
||||
|
||||
[-] FO : Bug Fixed #PSCFI-2520 - Attribute EcoTax not correctly applied
|
||||
[-] FO : Bug Fixed #PSCFI-2725 Incorrect VAT address
|
||||
[-] FO : Bug Fixed #PSCFI-2734 - Quantity prices not displayed correctly when changing currency
|
||||
[-] FO : BugFix #36138 - Problem with product preview and url rewrite
|
||||
[-] FO : BugFix #PSCFI-2382 - Reductions without end dates are not possible
|
||||
[-] FO : BugFix #PSCFI-2382 - Reductions without end dates are not possible
|
||||
[-] FO : BugFix #PSCFI-2386 - Invalid argument supplied for foreach()
|
||||
[-] FO : BugFix #PSCFI-2402 - Product::getDefaultAttribute is wrong when all attributes quantity less than minimumQuantity
|
||||
[-] FO : BugFix #PSCFI-2487 - Save and preview shows blank page if CCC is enabled
|
||||
[-] FO : BugFix #PSCFI-2498 - Problems with .htaccess
|
||||
[-] FO : BugFix #PSCFI-2537 - RMA not opening/showing content
|
||||
[-] FO : BugFix #PSCFI-2537 - RMA not opening/showing content
|
||||
[-] FO : Fix product sort for Smarty 2
|
||||
[-] FO : Fix undefined json variable in opc when an user select a product and want to be identified.
|
||||
[-] FO : Fixed #PSCFI-2144 - wrong url params, ? instead of &
|
||||
[-] FO : Fixed Bug #PSCFI-2726, Display properly the text depending of the recyclable preference option.
|
||||
[-] FO : Fixed bug #PSCFI-2003 - "Next" button is hidden in scenes slider on FO
|
||||
[-] FO : Fixed bug #PSCFI-2099. Country and state are properly displayed when another invoice address is selected
|
||||
[-] FO : Fixed bug #PSCFI-2316 - there was a notice when you added a product without image to your cart
|
||||
[-] FO : Fixed bug #PSCFI-2393 - After copying language files forwards to frontend with error msg
|
||||
[-] FO : Fixed bug #PSCFI-2417, The compatibility with recent theme under older Prestashop version (< 1.4.2) works.
|
||||
[-] FO : Fixed bug #PSCFI-2662 - Empty script block in order-detail.tpl
|
||||
[-] FO : Problem with .htaccess
|
||||
[-] FO : fixed bug #PSCFI-2299 - Default-home image location
|
||||
[-] FO : fixed bug #PSCFI-2310 - carrier disabled in OPC
|
||||
[-] FO : fixed bug #PSCFI-2326 - fixed smarty error with Smarty 2
|
||||
[-] FO : fixed bug #PSCFI-2348 - bug in order-opc.js 1.4.3
|
||||
[-] FO : fixed bug #PSCFI-2406 - Redirect index file for created image folders
|
||||
[-] FO : fixed bug #PSCFI-2408 - invalid date producttooltip module
|
||||
[-] FO : fixed bug #PSCFI-2464 - manufacturers and suppliers blocks should not display products in inactive categories
|
||||
[-] FO : fixed bug #PSCFI-2493 - One page checkout, "undefined" DNI
|
||||
[-] FO : fixed bug #PSCFI-2502 - The clicking "Continue shopping" on Shopping cart summary is not working properly.
|
||||
[-] FO : fixed bug #PSCFI-2735 - Order manipulation possible after payment method selection
|
||||
[-] FO : fixed bug with guest checkout
|
||||
[-] FO : fixed notice error on One page checkout with Blocknewsletter module
|
||||
|
||||
[-] BO : "alias" tab name is too long
|
||||
[-] BO : Bug Fixed #PSCFI-2368 - Disable ecotax and ecotax is still present on the front office
|
||||
[-] BO : BugFix #PSCFI-1903 - Problem with payment module limited to some countries
|
||||
[-] BO : BugFix #PSCFI-2420 - AdminImport.php ( import csv ) missing handling for escaped list separator and UTF-8 BOM issue
|
||||
[-] BO : BugFix #PSCFI-2420 - AdminImport.php ( import csv ) missing handling for escaped list separator and UTF-8 BOM issue
|
||||
[-] BO : BugFix #PSCFI-2536 - SendMailTest.js does not escape its parameters causing malfunction when trying to send htmlentities (v. 1.4.1.0)
|
||||
[-] BO : BugFix #PSCFI-2550 - can't give a product an attribute of "0"
|
||||
[-] BO : BugFix #PSCFI-2568 - Order page display problem: box expands to overlap another box
|
||||
[-] BO : BugFix #PSCFI-2584 - Orders could have a totals negative
|
||||
[-] BO : BugFix #PSCFI-2614 - Add new method simplexml_load_file
|
||||
[-] BO : BugFix #PSCFI-2614 - Bug this localization file
|
||||
[-] BO : BugFix #PSCFI-2642 - Translation problem with modules
|
||||
[-] BO : BugFix #PSCFI-2645 - sendtoafriend problem with translation
|
||||
[-] BO : BugFix #PSCFI-2663 - "New order" email has hardcoded address format
|
||||
[-] BO : BugFix #PSCFI-2690 - Incorrect closing comment
|
||||
[-] BO : BugFix #PSCFI-2708 Syntax error (working with PHP 5.3 and more)
|
||||
[-] BO : BugFix #PSCFI-2767 - Change guest index of product_comment
|
||||
[-] BO : Fixed Bug #PSCFI-2665, Backup times is now correctly displayed with a H 24 format.
|
||||
[-] BO : Fixed bug #PSCFI-2379 - Avoid the call of memory_get_usage() if it is not defined
|
||||
[-] BO : Fixed bug #PSCFI-2379 - Missing token in form action
|
||||
[-] BO : Fixed bug #PSCFI-2424 - PS_OS_WS_PAYEMENT should be PS_OS_WS_PAYMENT
|
||||
[-] BO : Fixed bug #PSCFI-2429 - IE9 compatibility problem with upload
|
||||
[-] BO : Fixed bug #PSCFI-2535 - Losing opening div
|
||||
[-] BO : Fixed bug #PSCFI-2670 - Increase mime size for attachment from 64 to 128 for support docx file
|
||||
[-] BO : Fixed bug - Empty the cache in the theme for module overrided
|
||||
[-] BO : Fixed bug PSCFI-2253 - Error "invalid date" with some version of PHP fixed
|
||||
[-] BO : Global was missing on AdminThemes
|
||||
[-] BO : In the search tab, Deleted a function which deleted the first occurrence when the last have the samed value in the "search" field
|
||||
[-] BO : PNG images are now supported after activation in BO. Backward compatible.
|
||||
[-] BO : US address format is now correctly displayed for the PDF.
|
||||
[-] BO : fix call on categoryUpdate hook when we change the status of a category #PSCFI-2669
|
||||
[-] BO : fixed bug #PSCFI-2235 - Module panel inoperative after module suppression
|
||||
[-] BO : fixed bug #PSCFI-2300 - clear useless variable in replaceByAbsoluteURL method
|
||||
[-] BO : fixed bug #PSCFI-2301 - html /form tag is inside the translatable string
|
||||
[-] BO : fixed bug #PSCFI-2302 - Product - CSV import: "available for order" and "show price" not available?
|
||||
[-] BO : fixed bug #PSCFI-2302 - Product - CSV import: "available for order" and "show price" not available?
|
||||
[-] BO : fixed bug #PSCFI-2303 - in AdminManufacturers.php have a repeated code
|
||||
[-] BO : fixed bug #PSCFI-2319 - $default_country varaible is missing in AdminProduct
|
||||
[-] BO : fixed bug #PSCFI-2321 - fixed bug on pagination display on AdminGroups
|
||||
[-] BO : fixed bug #PSCFI-2322 - fixed bug on product.tpl
|
||||
[-] BO : fixed bug #PSCFI-2336 - Small typo error in Back Office
|
||||
[-] BO : fixed bug #PSCFI-2360 - redundant lines in Tools::generateHtaccess()
|
||||
[-] BO : fixed bug #PSCFI-2365 - "Warning : the secure key is empty, check your payment account before validation" error with FreeOrder module
|
||||
[-] BO : fixed bug #PSCFI-2366 - Module Bug / "tab cannot be found" on IIS
|
||||
[-] BO : fixed bug #PSCFI-2421 - watermark does not show on regenerated images
|
||||
[-] BO : fixed bug #PSCFI-2447 - Button Home is gone after adding new specific price
|
||||
[-] BO : fixed bug #PSCFI-2455 - Minimum order purchase considers shipping costs
|
||||
[-] BO : fixed bug #PSCFI-2496 - quantity number in pack option
|
||||
[-] BO : fixed bug #PSCFI-2507 - AdminProducts undefined variable and non-object PHP notices in Apache log
|
||||
[-] BO : fixed bug #PSCFI-2533 - image quality button not checked
|
||||
[-] BO : fixed bug #PSCFI-2706 - fields were not created in database for deactivated languages, causing issues when the language is reactivated
|
||||
[-] BO : fixed product images zip upload
|
||||
[-] BO : update jquery colorpicker plugin #PSCFI-2325
|
||||
|
||||
[-] Classes : added some checks to Image class
|
||||
[-] Classes : fix moving images to new filesystem when unused images are present
|
||||
[-] Classes : fixed bug #PSCFI-2005 - Merchandise Returns status emails to customers are BO language dependent
|
||||
[-] Classes : fixed bug #PSCFI-2234 - Hookexec doesn't properly manage execeptions when passing filename by parameter
|
||||
[-] Classes : fixed bug #PSCFI-2311 - Function Validate::isUrl has a problem
|
||||
[-] Classes : fixed bug #PSCFI-2511 - Deleting a product with attachment deletes attachment
|
||||
[-] Classes : fixed bug #PSCFI-2723 - CLONE - Reductions without end dates are not possible
|
||||
[-] Classes : fixed bug on stock mouvement and hook update quantity
|
||||
[-] Classes : fixed rights settings for image folders
|
||||
[-] Classes : fixed url rewrite for missing category images - #PSCFI-2635
|
||||
|
||||
[-] CORE : Check correctly the availability of an object for an external module shipping
|
||||
[-] Core : Fixed bug PSCFI-2436. Cookie object is properly verified before trying to use one of the attributs for the getDefaultCountryId method.
|
||||
|
||||
[-] MO : #PSCFI-2663 - Fix new layout address for mailalerts.
|
||||
[-] MO : Add footer hook for blocklayered to allow AJAX sorting of products
|
||||
[-] MO : Bug fixed on Twenga module (1.7) Image link on PrestaShop 1.3 was wrong (module enabled for nl)
|
||||
[-] MO : Bug fixed on eBay module, when apache cache was enabled, the method fetchToken did not work properly
|
||||
[-] MO : BugFix #PPSCFI-2536 - SendMailTest.js does not escape its parameters causing malfunction when trying to send htmlentities (v. 1.4.1.0)
|
||||
[-] MO : BugFix #PSCFI-2201 - error output of set_time_limit must be "muted"
|
||||
[-] MO : BugFix #PSCFI-2304 - On calculte remaining amount of a voucher, use cart total with tax.
|
||||
[-] MO : BugFix #PSCFI-2305 - Followup module SQL error
|
||||
[-] MO : BugFix #PSCFI-2376 - Bad code : mapi_payment.php line 429
|
||||
[-] MO : BugFix #PSCFI-2427 - Do not fix PSCFI-2427, but the module follow up
|
||||
[-] MO : BugFix #PSCFI-2571 - Missing a global $cookie
|
||||
[-] MO : BugFix #PSCFI-2581 - NEWSLETTER MODULE : Country's filter problem
|
||||
[-] MO : BugFix #PSCFI-2585 - HTML typo in blocklink module
|
||||
[-] MO : BugFix #PSCFI-2593 - Sale message hidden after uncheck (option from layered block module)
|
||||
[-] MO : BugFix #PSCFI-2602 - Web service dispatcher does not stripslashes from POSTed XML
|
||||
[-] MO : BugFix Module Dibs - Must work with PS1.3
|
||||
[-] MO : BugFix in module producttooltip - Can show product page
|
||||
[-] MO : Changing the version of the Treepodia module
|
||||
[-] MO : Changing the version of the fedex module (#previousCommit)
|
||||
[-] MO : Ebay, fix an order validation issue when products list is empty
|
||||
[-] MO : Fedex module used id_lang 2 by default, now use cookie
|
||||
[-] MO : Fixed bug #PSCFI-2369, 'authorization-amount-notification' send now a correct answer to Google.
|
||||
[-] MO : Fixed bug #PSCFI-2370, Shipping fees correctly take in consideration for the form validation
|
||||
[-] MO : Fixed bug #PSCFI-2370. Shipping delivery message is correctly set for Google summary order.
|
||||
[-] MO : Fixed bug SQL error when generate filters
|
||||
[-] MO : Fixed bug according to the last commit about secure_key
|
||||
[-] MO : Module Twenga hiding errors
|
||||
[-] MO : Module treepodia little fix for IE
|
||||
[-] MO : MoneyBookers, fix string manipulation after a fetching content
|
||||
[-] MO : MoneyBookers, replace getProtocol to http:// for older PrestaShop version using with a unsecure page
|
||||
[-] MO : Ogone. Add an ignore key list variable to generate properly the sha1.
|
||||
[-] MO : PayPal fixing rounding issues
|
||||
[-] MO : PayPal module fixing order state issue
|
||||
[-] MO : PayPal retrocompatibility issue
|
||||
[-] MO : PaySafeCard template directory was wrong
|
||||
[-] MO : Paypal, fix the express checkout
|
||||
[-] MO : TrustedShops , fix translations
|
||||
[-] MO : Twenga module (1.7) can now handle more products on their feed
|
||||
[-] MO : added check if curl is loaded in layered block
|
||||
[-] MO : display hook footer for blocklayered module only on page category
|
||||
[-] MO : fix little bug on themeinstallator with blockcms module
|
||||
[-] MO : fixed bug #PSCFI-2249 - Loyalty Point information should not display during Instant Checkout?
|
||||
[-] MO : fixed bug #PSCFI-2318 - fixed typo error in add-to-cart.tpl file of Treepodia module
|
||||
[-] MO : fixed bug #PSCFI-2374 - carriercompare module is not showing any result
|
||||
[-] MO : fixed bug #PSCFI-2713 - Fix issue on Blockwishlist module
|
||||
[-] MO : fixed bug PSCFI-2337 in the statsforecast module : no more division by zero
|
||||
[-] MO : fixed token undifined in shopimport
|
||||
[-] MO : modules exceptions weren't perfectly managed by the theme installer
|
||||
|
||||
[-] WS : Bug PSCFI-2624 fixed
|
||||
[-] WS : Bug PSCFI-2684 fixed
|
||||
[-] WS : Bug PSCFI-2685 fixed
|
||||
[-] WS : Bug PSCFI-2748 fixed
|
||||
[-] WS : Fix a bug when adding a Configuration (Found via Unit Test)
|
||||
[-] WS : Fixed bug PSCFI-2603
|
||||
[-] WS : Small fix
|
||||
[-] WS : Small fix in Order entity (setCurrentState)
|
||||
[-] WS : Small fix in Webservice back-office tab
|
||||
[-] WS : [-] WS : Bug PSCFI-2377 fixed
|
||||
|
||||
[-] PDF : Bug Fixed #PSCFI-2425 - Incorrect tax breakdown (tax excl group)
|
||||
|
||||
[-] TR : fixed fr translation, thanks to Sabrina
|
||||
[-] TR : translation minor fix
|
||||
[-] TR : translations fr about AdminUpgrade.php
|
||||
[-] TR : when a module class was called before the translation proces, its translation wasn't found.
|
||||
|
||||
|
||||
####################################
|
||||
# v1.4.3.0 - 7119 (2011-06-16) #
|
||||
####################################
|
||||
|
||||
@@ -628,7 +628,7 @@ if (Tools::isSubmit('getAdminHomeElement'))
|
||||
$protocol = (!empty($_SERVER['HTTPS']) AND strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http';
|
||||
$isoUser = Language::getIsoById(intval($cookie->id_lang));
|
||||
$isoCountry = Country::getIsoById(Configuration::get('PS_COUNTRY_DEFAULT'));
|
||||
$context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$stream_context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
|
||||
// SCREENCAST
|
||||
if (@fsockopen('www.prestashop.com', 80, $errno, $errst, 3))
|
||||
@@ -637,7 +637,7 @@ if (Tools::isSubmit('getAdminHomeElement'))
|
||||
$result['screencast'] = 'NOK';
|
||||
|
||||
// PREACTIVATION
|
||||
$content = @file_get_contents($protocol.'://www.prestashop.com/partner/preactivation/preactivation-block.php?version=1.0&shop='.urlencode(Configuration::get('PS_SHOP_NAME')).'&protocol='.$protocol.'&url='.urlencode($_SERVER['HTTP_HOST']).'&iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$cookie->id_lang.'&email='.urlencode(Configuration::get('PS_SHOP_EMAIL')).'&date_creation='._PS_CREATION_DATE_.'&v='._PS_VERSION_.'&security='.md5(Configuration::get('PS_SHOP_EMAIL')._COOKIE_IV_), false, $context);
|
||||
$content = @file_get_contents($protocol.'://www.prestashop.com/partner/preactivation/preactivation-block.php?version=1.0&shop='.urlencode(Configuration::get('PS_SHOP_NAME')).'&protocol='.$protocol.'&url='.urlencode($_SERVER['HTTP_HOST']).'&iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$cookie->id_lang.'&email='.urlencode(Configuration::get('PS_SHOP_EMAIL')).'&date_creation='._PS_CREATION_DATE_.'&v='._PS_VERSION_.'&security='.md5(Configuration::get('PS_SHOP_EMAIL')._COOKIE_IV_), false, $stream_context);
|
||||
if (!$content)
|
||||
$result['partner_preactivation'] = 'NOK';
|
||||
else
|
||||
@@ -663,7 +663,7 @@ if (Tools::isSubmit('getAdminHomeElement'))
|
||||
}
|
||||
|
||||
// DISCOVER PRESTASHOP
|
||||
$content = @file_get_contents($protocol.'://www.prestashop.com/partner/prestashop/prestashop-link.php?iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$cookie->id_lang, false, $context);
|
||||
$content = @file_get_contents($protocol.'://www.prestashop.com/partner/prestashop/prestashop-link.php?iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$cookie->id_lang, false, $stream_context);
|
||||
if (!$content)
|
||||
$result['discover_prestashop'] = 'NOK';
|
||||
else
|
||||
@@ -677,7 +677,7 @@ if (Tools::isSubmit('getAdminHomeElement'))
|
||||
if (@fsockopen('www.prestashop.com', 80, $errno, $errst, 3))
|
||||
$result['discover_prestashop'] .= '<iframe frameborder="no" style="margin: 0px; padding: 0px; width: 315px; height: 290px;" src="'.$protocol.'://www.prestashop.com/rss/news2.php?v='._PS_VERSION_.'&lang='.$isoUser.'"></iframe>';
|
||||
|
||||
$content = @file_get_contents($protocol.'://www.prestashop.com/partner/paypal/paypal-tips.php?protocol='.$protocol.'&iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$cookie->id_lang, false, $context);
|
||||
$content = @file_get_contents($protocol.'://www.prestashop.com/partner/paypal/paypal-tips.php?protocol='.$protocol.'&iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$cookie->id_lang, false, $stream_context);
|
||||
$content = explode('|', $content);
|
||||
if ($content[0] == 'OK')
|
||||
$result['discover_prestashop'] .= $content[1];
|
||||
|
||||
@@ -167,11 +167,11 @@ if ($employee->bo_uimode == 'hover')
|
||||
$(this).addClass("active");
|
||||
}
|
||||
</script>';
|
||||
echo ' <ul id="submenu" '.(strlen($mainsubtablist) ? 'class="withLeftBorder"' : '').'>'.$mainsubtablist.'</ul>
|
||||
echo ' <ul id="submenu" '.(strlen($mainsubtablist) ? 'class="withLeftBorder clearfix"' : '').'>'.$mainsubtablist.'</ul>
|
||||
<div id="main">
|
||||
<div id="content">'
|
||||
.(file_exists(PS_ADMIN_DIR.'/../install') ? '<div style="background-color: #FFEBCC;border: 1px solid #F90;line-height: 20px;margin: 0px 0px 10px;padding: 10px 20px;">'
|
||||
.translate('For security reasons, you must also:').' '.
|
||||
translate('deleted the /install folder').
|
||||
translate('delete the /install folder').
|
||||
'</div>' : '').'
|
||||
';
|
||||
|
||||
@@ -145,7 +145,7 @@ $randomNb = rand(100, 999);
|
||||
if(file_exists(PS_ADMIN_DIR.'/../install') OR file_exists(PS_ADMIN_DIR.'/../admin'))
|
||||
{
|
||||
echo ' <span>'.translate('For security reasons, you cannot connect to the Back Office until after you have:').'<br /><br />
|
||||
- '.translate('deleted the /install folder').'<br />
|
||||
- '.translate('delete the /install folder').'<br />
|
||||
- '.translate('renamed the /admin folder (eg. ').'/admin'.$randomNb.')<br />
|
||||
<br />'.translate('Please then access this page by the new url (eg. http://www.domain.tld/admin').$randomNb.')</span>';
|
||||
}
|
||||
|
||||
@@ -144,6 +144,14 @@ class AdminAttributes extends AdminTab
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to delete here.');
|
||||
}
|
||||
elseif (Tools::isSubmit('submitAddattribute'))
|
||||
{
|
||||
// clean \n\r characters
|
||||
foreach($_POST as $key => $value)
|
||||
if (preg_match('/^name_/Ui', $key))
|
||||
$_POST[$key] = str_replace ('\n', '', str_replace('\r', '', $value));
|
||||
parent::postProcess();
|
||||
}
|
||||
else
|
||||
parent::postProcess();
|
||||
}
|
||||
|
||||
@@ -48,7 +48,11 @@ class AdminCountries extends AdminTab
|
||||
'a!active' => array('title' => $this->l('Enabled'), 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false, 'filter_key' => 'a!active'));
|
||||
|
||||
$this->optionTitle = $this->l('Countries options');
|
||||
$this->_fieldsOptions = array('PS_COUNTRY_DEFAULT' => array('title' => $this->l('Default country:'), 'desc' => $this->l('The default country used in shop'), 'cast' => 'intval', 'type' => 'select', 'identifier' => 'id_country', 'list' => Country::getCountries(Context::getContext()->language->id)));
|
||||
$this->_fieldsOptions = array(
|
||||
'PS_COUNTRY_DEFAULT' => array('title' => $this->l('Default country:'), 'desc' => $this->l('The default country used in shop'), 'cast' => 'intval', 'type' => 'select', 'identifier' => 'id_country', 'list' => Country::getCountries(Context::getContext()->language->id)),
|
||||
'PS_RESTRICT_DELIVERED_COUNTRIES' => array('title' => $this->l('Restrict countries in FO by those delivered by active carriers'), 'cast' => 'intval', 'type' => 'bool', 'default' => '0')
|
||||
);
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
@@ -983,7 +983,7 @@ class AdminImport extends AdminTab
|
||||
{
|
||||
$obj = new Attribute();
|
||||
$obj->id_attribute_group = $groups[$group];
|
||||
$obj->name[$defaultLanguage] = $attribute;
|
||||
$obj->name[$defaultLanguage] = str_replace('\n', '', str_replace('\r', '', $attribute));
|
||||
if (($fieldError = $obj->validateFields(UNFRIENDLY_ERROR, true)) === true AND ($langFieldError = $obj->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
|
||||
{
|
||||
$obj->add();
|
||||
|
||||
@@ -58,11 +58,12 @@ class AdminPPreferences extends AdminPreferences
|
||||
array('id' => '3', 'name' => $this->l('Product modified date'))
|
||||
), 'identifier' => 'id'),
|
||||
'PS_PRODUCTS_ORDER_WAY' => array('title' => $this->l('Default order way:'), 'desc' => $this->l('Default order way for product list'), 'type' => 'select', 'list' => array(array('id' => '0', 'name' => $this->l('Ascending')), array('id' => '1', 'name' => $this->l('Descending'))), 'identifier' => 'id'),
|
||||
'PS_PRODUCT_SHORT_DESC_LIMIT' => array('title' => $this->l('Short description max size'), 'desc' => $this->l('Set the maximum size of product short description'), 'validation' => 'isInt', 'cast' => 'intval', 'type' => 'text'),
|
||||
'PS_IMAGE_GENERATION_METHOD' => array('title' => $this->l('Image generated by:'), 'validation' => 'isUnsignedId', 'required' => true, 'cast' => 'intval', 'type' => 'select', 'list' => array(array('id' => '0', 'name' => $this->l('auto')), array('id' => '1', 'name' => $this->l('width')), array('id' => '2', 'name' => $this->l('height'))), 'identifier' => 'id', 'visibility' => Shop::CONTEXT_ALL),
|
||||
'PS_PRODUCT_PICTURE_MAX_SIZE' => array('title' => $this->l('Maximum size of product pictures:'), 'desc' => $this->l('The maximum size of pictures uploadable by customers (in Bytes)'), 'validation' => 'isUnsignedId', 'required' => true, 'cast' => 'intval', 'type' => 'text', 'visibility' => Shop::CONTEXT_ALL),
|
||||
'PS_PRODUCT_PICTURE_WIDTH' => array('title' => $this->l('Product pictures width:'), 'desc' => $this->l('The maximum width of pictures uploadable by customers'), 'validation' => 'isUnsignedId', 'required' => true, 'cast' => 'intval', 'type' => 'text', 'visibility' => Shop::CONTEXT_ALL),
|
||||
'PS_PRODUCT_PICTURE_HEIGHT' => array('title' => $this->l('Product pictures height:'), 'desc' => $this->l('The maximum height of pictures uploadable by customers'), 'validation' => 'isUnsignedId', 'required' => true, 'cast' => 'intval', 'type' => 'text', 'visibility' => Shop::CONTEXT_ALL),
|
||||
'PS_LEGACY_IMAGES' => array('title' => $this->l('Activate legacy images compatibility:'), 'desc' => $this->l('This should be set to yes unless this is a new installation of PrestaShop'), 'validation' => 'isBool', 'cast' => 'intval', 'required' => true, 'type' => 'bool', 'visibility' => Shop::CONTEXT_ALL)
|
||||
'PS_LEGACY_IMAGES' => array('title' => $this->l('Use the legacy image filesystem:'), 'desc' => $this->l('This should be set to yes unless you successfully moved images in Preferences > Images tab'), 'validation' => 'isBool', 'cast' => 'intval', 'required' => true, 'type' => 'bool', 'visibility' => Shop::CONTEXT_ALL),
|
||||
);
|
||||
|
||||
parent::__construct();
|
||||
|
||||
@@ -88,7 +88,7 @@ class AdminPreferences extends AdminTab
|
||||
'PS_GIFT_WRAPPING' => array('title' => $this->l('Offer gift-wrapping'), 'desc' => $this->l('Suggest gift-wrapping to customer and possibility of leaving a message'), 'validation' => 'isBool', 'cast' => 'intval', 'type' => 'bool'),
|
||||
'PS_GIFT_WRAPPING_PRICE' => array('title' => $this->l('Gift-wrapping price'), 'desc' => $this->l('Set a price for gift-wrapping'), 'validation' => 'isPrice', 'cast' => 'floatval', 'type' => 'price'),
|
||||
'PS_GIFT_WRAPPING_TAX' => array('title' => $this->l('Gift-wrapping tax'), 'desc' => $this->l('Set a tax for gift-wrapping'), 'validation' => 'isInt', 'cast' => 'intval', 'type' => 'select', 'list' => $taxes, 'identifier' => 'id'),
|
||||
'PS_ATTACHMENT_MAXIMUM_SIZE' => array('title' => $this->l('Attachment maximum size'), 'desc' => $this->l('Set the maximum size of attachment files (in MegaBytes)'), 'validation' => 'isInt', 'cast' => 'intval', 'type' => 'text'),
|
||||
'PS_ATTACHMENT_MAXIMUM_SIZE' => array('title' => $this->l('Attachment maximum size'), 'desc' => $this->l('Set the maximum size of attachment files (in MegaBytes).').' '.$this->l('Maximum:').' '.((int)str_replace('M', '', ini_get('post_max_size')) > (int)str_replace('M', '', ini_get('upload_max_filesize')) ? ini_get('upload_max_filesize') : ini_get('post_max_size')), 'validation' => 'isInt', 'cast' => 'intval', 'type' => 'text', 'default' => '2'),
|
||||
'PS_RECYCLABLE_PACK' => array('title' => $this->l('Offer recycled packaging'), 'desc' => $this->l('Suggest recycled packaging to customer'), 'validation' => 'isBool', 'cast' => 'intval', 'type' => 'bool'),
|
||||
'PS_CART_FOLLOWING' => array('title' => $this->l('Cart re-display at login'), 'desc' => $this->l('After customer logs in, recall and display contents of his/her last shopping cart'), 'validation' => 'isBool', 'cast' => 'intval', 'type' => 'bool'),
|
||||
'PS_PRICE_ROUND_MODE' => array('title' => $this->l('Round mode'), 'desc' => $this->l('You can choose how to round prices: always round superior; always round inferior, or classic rounding'), 'validation' => 'isInt', 'cast' => 'intval', 'type' => 'select', 'list' => $round_mode, 'identifier' => 'value'),
|
||||
@@ -117,6 +117,15 @@ class AdminPreferences extends AdminTab
|
||||
|
||||
public function postProcess()
|
||||
{
|
||||
if (Tools::getValue('PS_ATTACHMENT_MAXIMUM_SIZE'))
|
||||
{
|
||||
$uploadMaxSize = (int)str_replace('M', '',ini_get('upload_max_filesize'));
|
||||
$postMaxSize = (int)str_replace('M', '', ini_get('post_max_size'));
|
||||
$maxSize = $uploadMaxSize < $postMaxSize ? $uploadMaxSize : $postMaxSize;
|
||||
|
||||
$_POST['PS_ATTACHMENT_MAXIMUM_SIZE'] = $maxSize < Tools::getValue('PS_ATTACHMENT_MAXIMUM_SIZE') ? $maxSize : Tools::getValue('PS_ATTACHMENT_MAXIMUM_SIZE');
|
||||
}
|
||||
|
||||
if (isset($_POST['submitGeneral'.$this->table]))
|
||||
{
|
||||
Module::hookExec('categoryUpdate'); // We call this hook, for regenerate cache of categories
|
||||
@@ -160,6 +169,7 @@ class AdminPreferences extends AdminTab
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
|
||||
}
|
||||
|
||||
parent::postProcess();
|
||||
}
|
||||
|
||||
@@ -336,6 +346,7 @@ class AdminPreferences extends AdminTab
|
||||
else
|
||||
$(\'input[name=PS_MAINTENANCE_IP]\').attr(\'value\',\''.Tools::getRemoteAddr().'\');
|
||||
}
|
||||
|
||||
</script>
|
||||
<form action="'.self::$currentIndex.'&submit'.$name.$this->table.'=1&token='.$this->token.'" method="post" enctype="multipart/form-data">
|
||||
<fieldset><legend><img src="../img/admin/'.strval($icon).'.gif" />'.$tabname.'</legend>';
|
||||
|
||||
@@ -1113,10 +1113,12 @@ class AdminProducts extends AdminTab
|
||||
}
|
||||
|
||||
/* Check description short size without html */
|
||||
$limit = (int)Configuration::get('PS_PRODUCT_SHORT_DESC_LIMIT');
|
||||
if ($limit <= 0) $limit = 400;
|
||||
foreach ($languages AS $language)
|
||||
if ($value = Tools::getValue('description_short_'.$language['id_lang']))
|
||||
if (Tools::strlen(strip_tags($value)) > 400)
|
||||
$this->_errors[] = $this->l('the field').' <b>'.call_user_func(array($className, 'displayFieldName'), 'description_short').' ('.$language['name'].')</b> '.$this->l('is too long').' : 400 '.$this->l('chars max').' ('.$this->l('count now').' '.Tools::strlen(strip_tags($value)).')';
|
||||
if (Tools::strlen(strip_tags($value)) > $limit)
|
||||
$this->_errors[] = $this->l('the field').' <b>'.call_user_func(array($className, 'displayFieldName'), 'description_short').' ('.$language['name'].')</b> '.$this->l('is too long').' : '.$limit.' '.$this->l('chars max').' ('.$this->l('count now').' '.Tools::strlen(strip_tags($value)).')';
|
||||
/* Check multilingual fields sizes */
|
||||
foreach ($rules['sizeLang'] AS $fieldLang => $maxLength)
|
||||
foreach ($languages AS $language)
|
||||
@@ -2099,6 +2101,7 @@ class AdminProducts extends AdminTab
|
||||
updateFriendlyURL();
|
||||
$.ajax({
|
||||
url: "'.dirname(self::$currentIndex).'/ajax.php",
|
||||
cache: false,
|
||||
dataType: "json",
|
||||
data: "ajaxProductManufacturers=1",
|
||||
success: function(j) {
|
||||
@@ -2116,6 +2119,7 @@ class AdminProducts extends AdminTab
|
||||
});
|
||||
$.ajax({
|
||||
url: "'.dirname(self::$currentIndex).'/ajax.php",
|
||||
cache: false,
|
||||
dataType: "json",
|
||||
data: "ajaxProductSuppliers=1",
|
||||
success: function(j) {
|
||||
|
||||
@@ -58,7 +58,7 @@ class AdminStores extends AdminTab
|
||||
'state' => array('title' => $this->l('State'), 'width' => 100),
|
||||
'city' => array('title' => $this->l('City'), 'width' => 100),
|
||||
'postcode' => array('title' => $this->l('Zip code'), 'width' => 50),
|
||||
'name' => array('title' => $this->l('Name'), 'width' => 120),
|
||||
'name' => array('title' => $this->l('Name'), 'width' => 120, 'filter_key' => 'a!name'),
|
||||
'phone' => array('title' => $this->l('Phone'), 'width' => 70),
|
||||
'fax' => array('title' => $this->l('Fax'), 'width' => 70),
|
||||
'active' => array('title' => $this->l('Enabled'), 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false)
|
||||
|
||||
@@ -102,16 +102,16 @@ class AdminUpgrade extends AdminPreferences
|
||||
{
|
||||
$this->_fieldsAutoUpgrade['PS_AUTOUP_DONT_SAVE_IMAGES'] = array(
|
||||
'title' => $this->l('Don\'t save images'), 'cast' => 'intval', 'validation' => 'isBool',
|
||||
'type' => 'bool', 'desc'=>$this->l('You can exclude the image directory from backup if you already saved it by an other method. (not recommended)'),
|
||||
'type' => 'bool', 'desc'=>$this->l('You can exclude the image directory from backup if you already saved it by another method (not recommended)'),
|
||||
);
|
||||
|
||||
$this->_fieldsAutoUpgrade['PS_AUTOUP_KEEP_DEFAULT_THEME'] = array(
|
||||
'title' => $this->l('Keep theme "prestashop"'), 'cast' => 'intval', 'validation' => 'isBool',
|
||||
'type' => 'bool', 'desc'=>$this->l('if you have customized prestashop default theme, you can protect it from upgrade (not recommended)'),
|
||||
'type' => 'bool', 'desc'=>$this->l('If you have customized PrestaShop default theme, you can protect it from upgrade (not recommended)'),
|
||||
);
|
||||
|
||||
$this->_fieldsAutoUpgrade['PS_AUTOUP_KEEP_TRAD'] = array(
|
||||
'title' => $this->l('Don\'t keep translations'), 'cast' => 'intval', 'validation' => 'isBool',
|
||||
'title' => $this->l('Keep translations'), 'cast' => 'intval', 'validation' => 'isBool',
|
||||
'type' => 'bool', 'desc'=>$this->l('If set too yes, you will keep all your translations'),
|
||||
);
|
||||
// allow manual mode only for dev
|
||||
@@ -185,7 +185,18 @@ class AdminUpgrade extends AdminPreferences
|
||||
$this->nextParams['filesToUpgrade'] = $this->currentParams['filesToUpgrade'];
|
||||
|
||||
$this->backupDbFilename = Configuration::get('UPGRADER_BACKUPDB_FILENAME');
|
||||
if(!file_exists($this->backupDbFilename))
|
||||
{
|
||||
$this->backupDbFilename = '';
|
||||
Configuration::updateValue('UPGRADER_BACKUPDB_FILENAME','');
|
||||
}
|
||||
$this->backupFilesFilename = Configuration::get('UPGRADER_BACKUPFILES_FILENAME');
|
||||
if(!file_exists($this->backupFilesFilename))
|
||||
{
|
||||
$this->backupFilesFilename = '';
|
||||
Configuration::updateValue('UPGRADER_BACKUPFILES_FILENAME','');
|
||||
}
|
||||
|
||||
|
||||
$this->autoupgradePath = $this->adminDir.DIRECTORY_SEPARATOR.$this->autoupgradeDir;
|
||||
|
||||
@@ -257,9 +268,15 @@ class AdminUpgrade extends AdminPreferences
|
||||
$this->_postConfig($this->_fieldsAutoUpgrade);
|
||||
}
|
||||
|
||||
public function ajaxProcessUpgradeComplete()
|
||||
{
|
||||
$this->nextDesc = $this->l('Upgrade process done. Congratulations ! You can now reactive your shop.');
|
||||
$this->next = '';
|
||||
}
|
||||
|
||||
public function ajaxProcessUpgradeNow()
|
||||
{
|
||||
$this->nextDesc = 'Starting upgrade ...';
|
||||
$this->nextDesc = $this->l('Starting upgrade ...');
|
||||
$this->next = 'desactiveShop';
|
||||
}
|
||||
public function ajaxProcessSvnExport()
|
||||
@@ -1092,7 +1109,7 @@ class AdminUpgrade extends AdminPreferences
|
||||
}
|
||||
else if (!method_exists(get_class($this), 'ajaxProcess'.$action))
|
||||
{
|
||||
$this->nextDesc = sprintf($this->l('action "%1$s" non trouvée '), $action);
|
||||
$this->nextDesc = sprintf($this->l('action "%1$s" not found'), $action);
|
||||
$this->next = 'error';
|
||||
$this->error = '1';
|
||||
}
|
||||
@@ -1190,17 +1207,17 @@ txtError[37] = "'.$this->l('The config/defines.inc.php file was not found. Where
|
||||
private function _displayRollbackForm()
|
||||
{
|
||||
echo '<fieldset><legend>'.$this->l('Rollback').'</legend>
|
||||
<div id="rollbackContainer">';
|
||||
<div id="rollbackForm">';
|
||||
if (empty($this->backupFilesFilename) AND empty($this->backupDbFilename))
|
||||
echo $this->l('No rollback available');
|
||||
else if (!empty($this->backupFilesFilename) OR !empty($this->backupDbFilename))
|
||||
{
|
||||
echo '<div id="rollbackContainer"><a class="upgradestep button" href="" id="rollback">'.$this->l('rollback').'</a></div>';
|
||||
echo '<div id="rollbackContainer"><a class="upgradestep button" href="" id="rollback">'.$this->l('rollback').'</a></div><br/>';
|
||||
}
|
||||
if (!empty($this->backupFilesFilename))
|
||||
echo '<div id="restoreFilesContainer"><a href="" class="upgradestep button" id="restoreFiles">restoreFiles</a> '.sprintf($this->l('click to restore %s'),$this->backupFilesFilename).'</div>';
|
||||
echo '<div id="restoreFilesContainer"><a href="" class="upgradestep button" id="restoreFiles">restoreFiles</a> '.sprintf($this->l('click to restore %s'),$this->backupFilesFilename).'</div><br/>';
|
||||
if (!empty($this->backupDbFilename))
|
||||
echo '<div id="restoreDbContainer"><a href="" class="upgradestep button" id="restoreDb">restoreDb</a> '.sprintf($this->l('click to restore %s'), $this->backupDbFilename).'</div>';
|
||||
echo '<div id="restoreDbContainer"><a href="" class="upgradestep button" id="restoreDb">restoreDb</a> '.sprintf($this->l('click to restore %s'), $this->backupDbFilename).'</div><br/>';
|
||||
|
||||
echo '</div></fieldset>';
|
||||
}
|
||||
@@ -1211,13 +1228,13 @@ txtError[37] = "'.$this->l('The config/defines.inc.php file was not found. Where
|
||||
|
||||
echo '<fieldset class="width autoupgrade " >';
|
||||
echo '<legend>'.$this->l('Your current configuration').'</legend>';
|
||||
echo '<b>'.$this->l('root directory').' : </b>'.$this->prodRootDir.'<br/><br/>';
|
||||
echo '<b>'.$this->l('Root directory').' : </b>'.$this->prodRootDir.'<br/><br/>';
|
||||
|
||||
if ($this->rootWritable)
|
||||
$srcRootWritable = '../img/admin/enabled.gif';
|
||||
else
|
||||
$srcRootWritable = '../img/admin/disabled.gif';
|
||||
echo '<b>'.$this->l('Root directory').' : </b>'.'<img src="'.$srcRootWritable.'" /> '.($this->rootWritable?$this->l('root directory is fully writable'):$this->l('root directory is not writable recursively')).'. <br/><br/>';
|
||||
echo '<b>'.$this->l('Root directory status').' : </b>'.'<img src="'.$srcRootWritable.'" /> '.($this->rootWritable?$this->l('fully writable'):$this->l('not writable recursively')).'<br/><br/>';
|
||||
|
||||
if ($this->upgrader->needUpgrade)
|
||||
{
|
||||
@@ -1245,7 +1262,7 @@ txtError[37] = "'.$this->l('The config/defines.inc.php file was not found. Where
|
||||
$srcExecTime = '../img/admin/enabled.gif';
|
||||
else
|
||||
$srcExecTime = '../img/admin/warning.gif';
|
||||
echo '<b>'.$this->l('php time limit').' : </b>'.'<img src="'.$srcExecTime.'" />'.($max_exec_time == 0?$this->l('disabled'):$max_exec_time.' '.$this->l('seconds')).' <br/><br/>';
|
||||
echo '<b>'.$this->l('PHP time limit').' : </b>'.'<img src="'.$srcExecTime.'" />'.($max_exec_time == 0?$this->l('disabled'):$max_exec_time.' '.$this->l('seconds')).' <br/><br/>';
|
||||
|
||||
if ($this->rootWritable)
|
||||
$srcRootWritable = '../img/admin/enabled.gif';
|
||||
@@ -1268,7 +1285,7 @@ txtError[37] = "'.$this->l('The config/defines.inc.php file was not found. Where
|
||||
// @TODO : this should be checked when init()
|
||||
if ($this->isUpgradeAllowed()) {
|
||||
if ($pleaseUpdate) {
|
||||
echo '<li><img src="'.$this->prodRootDir.'img/information.png" alt="information"/> '.$this->l('Latest Prestashop version available is:').' <b>'.$pleaseUpdate['name'].'</b></li>';
|
||||
echo '<li><img src="'._PS_ADMIN_IMG_.'information.png" alt="information"/> '.$this->l('Latest Prestashop version available is:').' <b>'.$pleaseUpdate['name'].'</b></li>';
|
||||
}
|
||||
// echo '<input class="button" type="submit" name="sumbitUpdateVersion" value="'.$this->l('Backup Database, backup files and update right now and in one click !').'"/>';
|
||||
// echo '<input class="button" type="submit" id="refreshCurrent" value="'.$this->l("refresh update dir / current").'"/>';
|
||||
@@ -1337,34 +1354,45 @@ txtError[37] = "'.$this->l('The config/defines.inc.php file was not found. Where
|
||||
// temporary infoUpdate will be in #tmpInformation
|
||||
echo '<script type="text/javascript">';
|
||||
// _PS_MODE_DEV_ is available in js
|
||||
if (defined('_PS_MODE_DEV_' AND _PS_MODE_DEV_))
|
||||
if (defined('_PS_MODE_DEV_') AND _PS_MODE_DEV_)
|
||||
echo 'var _PS_MODE_DEV_ = true;';
|
||||
echo $this->_getJsErrorMsgs();
|
||||
|
||||
echo '</script>';
|
||||
}
|
||||
|
||||
public function display()
|
||||
{
|
||||
$this->displayWarning('This function is experimental. It\'s currently recommended to make a backup of your files and database.');
|
||||
$this->displayWarning($this->l('This function is experimental. It\'s highly recommended to make a backup of your files and database before starting the upgrade process.'));
|
||||
|
||||
if ($this->apacheModExists('mod_evasive'))
|
||||
sleep(1);
|
||||
// update['name'] = version name
|
||||
// update['num'] = only the version
|
||||
// update['link'] = download link
|
||||
// @TODO
|
||||
if ($this->useSvn AND FALSE)
|
||||
|
||||
if ($this->isUpgradeAllowed())
|
||||
{
|
||||
if ($this->useSvn)
|
||||
echo '<div class="error"><h1>'.$this->l('Unstable upgrade').'</h1>
|
||||
<p class="warning">'.$this->l('Your current configuration indicate you want to upgrade your system from the unstable development branch, with no version number. If you upgrade, you will not be able to follow the official release process anymore').'.</p>
|
||||
</div>';
|
||||
|
||||
$this->_displayUpgraderForm();
|
||||
|
||||
echo '<br/>';
|
||||
$this->_displayRollbackForm();
|
||||
|
||||
echo '<br/>';
|
||||
$this->_displayForm('autoUpgradeOptions',$this->_fieldsAutoUpgrade,'<a href="" name="options" id="options">'.$this->l('Options').'</a>', 'my-autoupgrade-option','');
|
||||
$this->_displayForm('autoUpgradeOptions',$this->_fieldsAutoUpgrade,'<a href="" name="options" id="options">'.$this->l('Options').'</a>', '','prefs');
|
||||
echo '<script type="text/javascript">'.$this->_getJsInit().'</script>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<fieldset>
|
||||
<legend>'.$this->l('Update').'</legend>';
|
||||
echo '<p>'.$this->l('You currently don\'t need to use this feature.').'</p>';
|
||||
echo '</fieldset>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function _getJsInit()
|
||||
@@ -1456,7 +1484,7 @@ function parseXMLResult(xmlRet)
|
||||
.hide("slow");
|
||||
|
||||
// difference with the original function
|
||||
ret = {next:"upgradeComplete",nextParams:""};
|
||||
ret = {next:"upgradeComplete",nextParams:{typeResult:"json"},status:"ok"};
|
||||
|
||||
}
|
||||
else
|
||||
@@ -1471,7 +1499,7 @@ function parseXMLResult(xmlRet)
|
||||
|
||||
// propose rollback if there is an error
|
||||
if (confirm(txtError[parseInt(ret.getAttribute("error"))]+"\r\n\r\n'.$this->l('Do you want to rollback ?').'"))
|
||||
ret = {next:"rollback","nextParams":nextParams};
|
||||
ret = {next:"rollback",nextParams:{typeResult:"json"},status:"error"};
|
||||
}
|
||||
|
||||
return ret
|
||||
@@ -1519,6 +1547,11 @@ function doAjaxRequest(action, nextParams){
|
||||
},
|
||||
success : function(res,textStatus,jqXHR)
|
||||
{
|
||||
if(eval("typeof nextParams") == "undefined")
|
||||
{
|
||||
nextParams = {typeResult : "json"};
|
||||
}
|
||||
|
||||
if (nextParams.typeResult == "xml")
|
||||
{
|
||||
xmlRes = parseXMLResult(res);
|
||||
@@ -1526,12 +1559,14 @@ function doAjaxRequest(action, nextParams){
|
||||
res.next = xmlRes.next;
|
||||
// if xml, we keep the next params
|
||||
nextParams = myNext;
|
||||
|
||||
// res.status = "ok",
|
||||
res.status = xmlRes.status;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = $.parseJSON(res);
|
||||
nextParams = res.nextParams;
|
||||
}
|
||||
|
||||
if (res.status == "ok")
|
||||
{
|
||||
// a
|
||||
@@ -1557,7 +1592,6 @@ function doAjaxRequest(action, nextParams){
|
||||
$("#"+action).addClass("steperror");
|
||||
handleError(res);
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(res,textStatus,jqXHR)
|
||||
{
|
||||
@@ -1607,9 +1641,9 @@ function prepareNextButton(button_selector, nextParams)
|
||||
*/
|
||||
function handleSuccess(res)
|
||||
{
|
||||
updateInfoStep(res.nextDesc);
|
||||
if (res.next != "")
|
||||
{
|
||||
updateInfoStep(res.nextDesc);
|
||||
addQuickInfo(res.nextQuickInfo);
|
||||
|
||||
$("#"+res.next).addClass("nextStep");
|
||||
|
||||
@@ -39,9 +39,9 @@ legend{background:#7AB51D url(thead.png) repeat-x top left;border:1px solid #364
|
||||
#menu img{display:inline;padding:0 3px 0 6px;vertical-align:top;width:16px;height:16px}
|
||||
#menu li.active{background-position:0 -70px}
|
||||
#menu li.active a{color:#000}
|
||||
#submenu{clear:both;color:#666;margin:0;height:38px;padding:0}
|
||||
.withLeftBorder{background:transparent url(separator_subnav.png) no-repeat 0 5px}
|
||||
#submenu li{display:inline;list-style:none;margin:0;background:transparent url(separator_subnav.png) no-repeat right 0;padding-left:8px;padding-right:8px;margin-top:8px;float:left;height:20px}
|
||||
#submenu{clear:both;color:#666;margin:0;padding:0;border-bottom: #A2A8B2 1px solid}
|
||||
.withLeftBorder{background:url(bg-submenu.png) repeat-x #DADADA;background-position:0 -1px}
|
||||
#submenu li{display:inline;list-style:none;margin:0;background:transparent url(separator_subnav.png) no-repeat right 0;padding-left:8px;padding-right:8px;margin-top:8px;float:left;height:29px}
|
||||
#submenu li a{text-decoration:underline}
|
||||
#menu li{_height:32px;_padding-top:3px}
|
||||
#menu li a{_display:inline;_padding:6px 6px 4px}
|
||||
|
||||
|
After Width: | Height: | Size: 153 B |
@@ -35,9 +35,9 @@ legend{background:#FFF6D3;border:1px solid #DFD5C3;font-weight:700;margin:0;padd
|
||||
#menu img{display:inline;padding:0 3px 0 6px;vertical-align:top;width:16px;height:16px}
|
||||
#menu li.active,#menu li:hover{background-position:0 -38px;white-space:nowrap;}
|
||||
#menu li.active a{color:#000}
|
||||
#submenu{background:#ECEADE;clear:both;color:#666;margin:0;height:32px;padding:0;border:1px solid #999999}
|
||||
#submenu{background:#ECEADE;clear:both;color:#666;margin:0;padding:0;border:1px solid #999999}
|
||||
.withLeftBorder{background:transparent url(separator_subnav.png) no-repeat 0 5px}
|
||||
#submenu li{display:inline;list-style:none;margin:0;background:transparent url(separator_subnav.png) no-repeat right 0;padding-left:7px;padding-right:7px;margin-top:8px;float:left;height:20px}
|
||||
#submenu li{display:inline;list-style:none;margin:0;background:transparent url(separator_subnav.png) no-repeat right 0;padding-left:7px;padding-right:7px;margin-top:8px;float:left;height:29px}
|
||||
#submenu li a{text-decoration:underline}
|
||||
#menu li{_height:32px;_padding-top:3px}
|
||||
#menu li a{_display:inline;_padding:6px 5px 4px 0}
|
||||
|
||||
@@ -37,9 +37,9 @@ legend{background:#FFF6D3;border:1px solid #DFD5C3;font-weight:700;margin:0;padd
|
||||
#menu img{display:inline;padding:0 3px 0 6px;vertical-align:top;width:16px;height:16px}
|
||||
#menu li.active{background-position:0 -38px;white-space:nowrap;}
|
||||
#menu li.active a{color:#000}
|
||||
#submenu{clear:both;color:#666;margin:0;height:38px;padding:0}
|
||||
.withLeftBorder{background:transparent url(separator_subnav.png) no-repeat 0 5px}
|
||||
#submenu li{display:inline;list-style:none;margin:0;background:transparent url(separator_subnav.png) no-repeat right 0;padding-left:8px;padding-right:8px;margin-top:8px;float:left;height:20px}
|
||||
#submenu{clear:both;color:#666;margin:0;padding:0;border-bottom: #A2A8B2 1px solid}
|
||||
.withLeftBorder{background:url(bg-submenu.png) repeat-x #DADADA;background-position:0 -1px}
|
||||
#submenu li{display:inline;list-style:none;margin:0;background:transparent url(separator_subnav.png) no-repeat right 0;padding-left:8px;padding-right:8px;margin-top:8px;float:left;height:29px}
|
||||
#submenu li a{text-decoration:underline}
|
||||
#menu li{_height:32px;_padding-top:3px}
|
||||
#menu li a{_display:inline;_padding:6px 5px 4px 0}
|
||||
|
||||
|
After Width: | Height: | Size: 190 B |
@@ -399,7 +399,38 @@ class CarrierCore extends ObjectModel
|
||||
return $carriers;
|
||||
}
|
||||
|
||||
public static function getCarriersForOrder($id_zone, $groups = NULL, Cart $cart = null, $id_currency = null, $id_lang = null)
|
||||
public static function getDeliveredCountries($id_lang, $activeCountries = false, $activeCarriers = false, $containStates = NULL)
|
||||
{
|
||||
if (!Validate::isBool($activeCountries) OR !Validate::isBool($activeCarriers))
|
||||
die(Tools::displayError());
|
||||
|
||||
$states = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
||||
SELECT s.*
|
||||
FROM `'._DB_PREFIX_.'state` s
|
||||
ORDER BY s.`name` ASC');
|
||||
|
||||
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
||||
SELECT cl.*,c.*, cl.`name` AS country, zz.`name` AS zone FROM `'._DB_PREFIX_.'country` c
|
||||
LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country` AND cl.`id_lang` = 1)
|
||||
INNER JOIN (`'._DB_PREFIX_.'carrier_zone` cz INNER JOIN `'._DB_PREFIX_.'carrier` cr ON ( cr.id_carrier = cz.id_carrier AND cr.deleted = 0 '.($activeCarriers ?
|
||||
'AND cr.active = 1) ' : ') ').'
|
||||
LEFT JOIN `'._DB_PREFIX_.'zone` zz ON cz.id_zone = zz.id_zone) ON zz.`id_zone` = c.`id_zone`
|
||||
WHERE 1
|
||||
'.($activeCountries ? 'AND c.active = 1' : '').'
|
||||
'.(!is_null($containStates) ? 'AND c.`contains_states` = '.(int)($containStates) : '').'
|
||||
ORDER BY cl.name ASC');
|
||||
|
||||
$countries = array();
|
||||
foreach ($result AS &$country)
|
||||
$countries[$country['id_country']] = $country;
|
||||
foreach ($states AS &$state)
|
||||
if (isset($countries[$state['id_country']])) /* Does not keep the state if its country has been disabled and not selected */
|
||||
$countries[$state['id_country']]['states'][] = $state;
|
||||
|
||||
return $countries;
|
||||
}
|
||||
|
||||
public static function getCarriersForOrder($id_zone, $groups = NULL)
|
||||
{
|
||||
$context = Context::getContext();
|
||||
if (!$id_lang)
|
||||
|
||||
@@ -67,7 +67,6 @@ class FrontControllerCore
|
||||
public function __construct()
|
||||
{
|
||||
global $useSSL;
|
||||
|
||||
$useSSL = $this->ssl;
|
||||
}
|
||||
|
||||
@@ -393,8 +392,9 @@ class FrontControllerCore
|
||||
if (isset($this->php_self) AND !empty($this->php_self))
|
||||
{
|
||||
// $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain
|
||||
$canonicalURL = $this->context->link->getPageLink($this->php_self, $this->ssl, $this->context->language->id);
|
||||
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/i', (($this->ssl AND Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
|
||||
|
||||
$canonicalURL = $link->getPageLink($this->php_self, $this->ssl, $this->context->language->id);
|
||||
if (!Tools::getValue('ajax') && !preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', (($this->ssl AND Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
|
||||
{
|
||||
header('HTTP/1.0 301 Moved');
|
||||
$params = '';
|
||||
|
||||
@@ -538,6 +538,8 @@ class ImageCore extends ObjectModel
|
||||
if (!$image || $image->id !== (int)$matches[2])
|
||||
$image = new Image((int)$matches[2]);
|
||||
|
||||
if (Validate::isLoadedObject($image))
|
||||
{
|
||||
// create the new folder if it does not exist
|
||||
if (!$image->createImgFolder())
|
||||
return false;
|
||||
@@ -549,6 +551,7 @@ class ImageCore extends ObjectModel
|
||||
if (!@rename(_PS_PROD_IMG_DIR_.$file, $new_path) || !file_exists($new_path))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ((int)$max_execution_time != 0 && (time() - $start_time > (int)$max_execution_time - 4))
|
||||
return 'timeout';
|
||||
}
|
||||
|
||||
@@ -219,6 +219,7 @@ abstract class PaymentModuleCore extends Module
|
||||
if (!empty($product['ecotax']))
|
||||
$ecotaxTaxRate = Tax::getProductEcotaxRate($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
|
||||
|
||||
$product_price = (float)Product::getPriceStatic((int)($product['id_product']), false, ($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : NULL), (Product::getTaxCalculationMethod((int)($order->id_customer)) == PS_TAX_EXC ? 2 : 6), NULL, false, false, $product['cart_quantity'], false, (int)($order->id_customer), (int)($order->id_cart), (int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}), $specificPrice, false);
|
||||
$quantityDiscount = SpecificPrice::getQuantityDiscount((int)$product['id_product'], $this->context->shop->getID(), (int)$cart->id_currency, (int)$vat_address->id_country, (int)$customer->id_default_group, (int)$product['cart_quantity']);
|
||||
$unitPrice = Product::getPriceStatic((int)$product['id_product'], true, ($product['id_product_attribute'] ? intval($product['id_product_attribute']) : NULL), 2, NULL, false, true, 1, false, (int)$order->id_customer, NULL, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
|
||||
$quantityDiscountValue = $quantityDiscount ? ((Product::getTaxCalculationMethod((int)$order->id_customer) == PS_TAX_EXC ? Tools::ps_round($unitPrice, 2) : $unitPrice) - $quantityDiscount['price'] * (1 + $tax_rate / 100)) : 0.00;
|
||||
@@ -228,7 +229,7 @@ abstract class PaymentModuleCore extends Module
|
||||
\''.pSQL($product['name'].((isset($product['attributes']) AND $product['attributes'] != NULL) ? ' - '.$product['attributes'] : '')).'\',
|
||||
'.(int)($product['cart_quantity']).',
|
||||
'.$quantityInStock.',
|
||||
'.(float)(Product::getPriceStatic((int)($product['id_product']), false, ($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : NULL), (Product::getTaxCalculationMethod((int)($order->id_customer)) == PS_TAX_EXC ? 2 : 6), NULL, false, false, $product['cart_quantity'], false, (int)($order->id_customer), (int)($order->id_cart), (int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}), $specificPrice, FALSE)).',
|
||||
'.$product_price.',
|
||||
'.(float)(($specificPrice AND $specificPrice['reduction_type'] == 'percentage') ? $specificPrice['reduction'] * 100 : 0.00).',
|
||||
'.(float)(($specificPrice AND $specificPrice['reduction_type'] == 'amount') ? (!$specificPrice['id_currency'] ? Tools::convertPrice($specificPrice['reduction'], $order->id_currency) : $specificPrice['reduction']) : 0.00).',
|
||||
'.(float)(Group::getReduction((int)($order->id_customer))).',
|
||||
|
||||
@@ -243,7 +243,7 @@ class ProductCore extends ObjectModel
|
||||
'cache_has_attachments' => 'isBool'
|
||||
);
|
||||
protected $fieldsRequiredLang = array('link_rewrite', 'name');
|
||||
/* Description short is limited to 400 chars, but without html, so it can't be generic */
|
||||
/* Description short is limited to 400 chars (but can be configured in Preferences Tab), but without html, so it can't be generic */
|
||||
protected $fieldsSizeLang = array('meta_description' => 255, 'meta_keywords' => 255,
|
||||
'meta_title' => 128, 'link_rewrite' => 128, 'name' => 128, 'available_now' => 255, 'available_later' => 255);
|
||||
protected $fieldsValidateLang = array(
|
||||
@@ -550,13 +550,16 @@ class ProductCore extends ObjectModel
|
||||
|
||||
public function validateFieldsLang($die = true, $errorReturn = false)
|
||||
{
|
||||
$limit = (int)Configuration::get('PS_PRODUCT_SHORT_DESC_LIMIT');
|
||||
if ($limit <= 0)
|
||||
$limit = 400;
|
||||
if (!is_array($this->description_short))
|
||||
$this->description_short = array();
|
||||
foreach ($this->description_short as $k => $value)
|
||||
if (Tools::strlen(strip_tags($value)) > 400)
|
||||
if (Tools::strlen(strip_tags($value)) > $limit)
|
||||
{
|
||||
if ($die) die (Tools::displayError().' ('.get_class($this).'->description: length > 400 for language '.$k.')');
|
||||
return $errorReturn ? get_class($this).'->'.Tools::displayError('description: length > 400 for language').' '.$k : false;
|
||||
if ($die) die (Tools::displayError().' ('.get_class($this).'->description: length > '.$limit.' for language '.$k.')');
|
||||
return $errorReturn ? get_class($this).'->'.Tools::displayError('description: length >').' '.$limit.' '.Tools::displayError('for language').' '.$k : false;
|
||||
}
|
||||
return parent::validateFieldsLang($die, $errorReturn);
|
||||
}
|
||||
@@ -1635,8 +1638,7 @@ class ProductCore extends ObjectModel
|
||||
* @return float Product price
|
||||
*/
|
||||
public static function getPriceStatic($id_product, $usetax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false,
|
||||
$usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = NULL, $id_cart = NULL, $id_address = NULL, &$specificPriceOutput = NULL,
|
||||
$with_ecotax = TRUE, Context $context = null)
|
||||
$usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = NULL, $id_cart = NULL, $id_address = NULL, &$specificPriceOutput = NULL, $with_ecotax = true, $use_groupReduction = true, Context $context = null)
|
||||
{
|
||||
if (!$context)
|
||||
$context = Context::getContext();
|
||||
@@ -1711,7 +1713,7 @@ class ProductCore extends ObjectModel
|
||||
$usetax = false;
|
||||
|
||||
return Product::priceCalculation($context->shop->getID(), $id_product, $id_product_attribute, $id_country, $id_state, $id_county, $id_currency, $id_group, $quantity, $usetax, $decimals, $only_reduc,
|
||||
$usereduc, $with_ecotax, $specificPriceOutput);
|
||||
$usereduc, $with_ecotax, $specificPriceOutput, $use_groupReduction);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1733,7 +1735,7 @@ class ProductCore extends ObjectModel
|
||||
* @param variable_reference $specific_price_output If a specific price applies regarding the previous parameters, this variable is filled with the corresponding SpecificPrice object
|
||||
* @return float Product price
|
||||
**/
|
||||
public static function priceCalculation($id_shop, $id_product, $id_product_attribute, $id_country, $id_state, $id_county, $id_currency, $id_group, $quantity, $use_tax, $decimals, $only_reduc, $use_reduc, $with_ecotax, &$specific_price)
|
||||
public static function priceCalculation($id_shop, $id_product, $id_product_attribute, $id_country, $id_state, $id_county, $id_currency, $id_group, $quantity, $use_tax, $decimals, $only_reduc, $use_reduc, $with_ecotax, &$specific_price, $use_groupReduction)
|
||||
{
|
||||
// Caching
|
||||
if ($id_product_attribute === NULL)
|
||||
@@ -1803,13 +1805,15 @@ class ProductCore extends ObjectModel
|
||||
$price -= $reduc;
|
||||
|
||||
// Group reduction
|
||||
if ($use_groupReduction)
|
||||
{
|
||||
if ($reductionFromCategory = (float)(GroupReduction::getValueForProduct($id_product, $id_group)))
|
||||
$price -= $price * $reductionFromCategory;
|
||||
else // apply group reduction if there is no group reduction for this category
|
||||
$price *= ((100 - Group::getReductionByIdGroup($id_group)) / 100);
|
||||
}
|
||||
|
||||
$price = Tools::ps_round($price, $decimals);
|
||||
|
||||
// Eco Tax
|
||||
if (($result['ecotax'] OR isset($result['attribute_ecotax'])) AND $with_ecotax)
|
||||
{
|
||||
@@ -3066,22 +3070,21 @@ class ProductCore extends ObjectModel
|
||||
public function checkAccess($id_customer)
|
||||
{
|
||||
if (!$id_customer)
|
||||
{
|
||||
return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT ctg.`id_group`
|
||||
FROM `'._DB_PREFIX_.'category_product` cp
|
||||
INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
|
||||
WHERE cp.`id_product` = '.(int)$this->id.' AND ctg.`id_group` = 1');
|
||||
} else {
|
||||
else
|
||||
return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT cg.`id_group`
|
||||
FROM `'._DB_PREFIX_.'category_product` cp
|
||||
INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
|
||||
INNER JOIN `'._DB_PREFIX_.'customer_group` cg ON (cg.`id_group` = ctg.`id_group`)
|
||||
WHERE cp.`id_product` = '.(int)$this->id.' AND cg.`id_customer` = '.(int)$id_customer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a stock movement for current product
|
||||
*
|
||||
@@ -3092,7 +3095,7 @@ class ProductCore extends ObjectModel
|
||||
* @param int $id_employee
|
||||
* @return bool
|
||||
*/
|
||||
public function addStockMvt($quantity, $id_reason, $id_product_attribute = NULL, $id_order = NULL, $id_employee = NULL)
|
||||
public function addStockMvt($quantity, $id_reason, $id_product_attribute = null, $id_order = null, $id_employee = null)
|
||||
{
|
||||
if (!$this->id)
|
||||
return;
|
||||
@@ -3114,12 +3117,15 @@ class ProductCore extends ObjectModel
|
||||
$stockMvt->id_employee = (int)$id_employee;
|
||||
$stockMvt->quantity = $quantity;
|
||||
$stockMvt->id_stock_mvt_reason = (int)$id_reason;
|
||||
$result = $stockMvt->add();
|
||||
|
||||
// @hook updateQuantity
|
||||
Hook::updateQuantity($this, null);
|
||||
|
||||
return $result;
|
||||
// adding stock mouvement, this action update the stock of product in database only
|
||||
if ($stockMvt->add())
|
||||
{
|
||||
$this->quantity = $this->getStock();
|
||||
Hook::updateQuantity($this, null);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getStockMvts($id_lang)
|
||||
|
||||
@@ -239,8 +239,12 @@ class AddressControllerCore extends FrontController
|
||||
}
|
||||
else
|
||||
$selectedCountry = (int)Configuration::get('PS_COUNTRY_DEFAULT');
|
||||
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
|
||||
if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES'))
|
||||
$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
|
||||
else
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
|
||||
$countriesList = '';
|
||||
foreach ($countries AS $country)
|
||||
$countriesList .= '<option value="'.(int)($country['id_country']).'" '.($country['id_country'] == $selectedCountry ? 'selected="selected"' : '').'>'.htmlentities($country['name'], ENT_COMPAT, 'UTF-8').'</option>';
|
||||
|
||||
@@ -303,8 +303,11 @@ class AuthControllerCore extends FrontController
|
||||
}*/
|
||||
if (!isset($selectedCountry))
|
||||
$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
|
||||
if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES'))
|
||||
$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
|
||||
else
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
$this->context->smarty->assign(array(
|
||||
'countries' => $countries,
|
||||
'sl_country' => (isset($selectedCountry) ? $selectedCountry : 0),
|
||||
@@ -361,7 +364,11 @@ class AuthControllerCore extends FrontController
|
||||
$this->context->smarty->assign('back', Tools::safeOutput($back));
|
||||
if (strpos($back, 'order.php') !== false)
|
||||
{
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES'))
|
||||
$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
|
||||
else
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
|
||||
$this->context->smarty->assign(array(
|
||||
'inOrderProcess' => true,
|
||||
'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'),
|
||||
|
||||
@@ -230,7 +230,12 @@ class OrderOpcControllerCore extends ParentOrderController
|
||||
$this->_assignWrappingAndTOS();
|
||||
|
||||
$selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT'));
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
|
||||
if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES'))
|
||||
$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
|
||||
else
|
||||
$countries = Country::getCountries($this->context->language->id, true);
|
||||
|
||||
$this->context->smarty->assign(array(
|
||||
'isLogged' => $this->isLogged,
|
||||
'isGuest' => isset($this->context->cookie->is_guest) ? $this->context->cookie->is_guest : 0,
|
||||
|
||||
|
After Width: | Height: | Size: 349 B |
|
After Width: | Height: | Size: 141 B |
@@ -762,8 +762,8 @@ if ($lm->getIncludeTradFilename())
|
||||
return '';
|
||||
}
|
||||
|
||||
$context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 3)));
|
||||
$content = @file_get_contents('http://www.prestashop.com/partner/preactivation/partners.php?version=1.0', false, $context);
|
||||
$stream_context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 3)));
|
||||
$content = @file_get_contents('http://www.prestashop.com/partner/preactivation/partners.php?version=1.0', false, $stream_context);
|
||||
if ($content && $content[0] == '<')
|
||||
{
|
||||
$result = simplexml_load_string($content);
|
||||
|
||||
@@ -63,7 +63,6 @@ if ($tmp = strpos($_SERVER['REQUEST_URI'], '?'))
|
||||
$_SERVER['REQUEST_URI'] = str_replace('//', '/', $_SERVER['REQUEST_URI']);
|
||||
|
||||
define('INSTALL_VERSION', '1.5.0.1');
|
||||
|
||||
define('PS_INSTALLATION_IN_PROGRESS', true);
|
||||
include_once(INSTALL_PATH.'/classes/ToolsInstall.php');
|
||||
define('SETTINGS_FILE', INSTALL_PATH.'/../config/settings.inc.php');
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
$p = addslashes(strtolower($_GET['partner']));
|
||||
$c = addslashes(strtolower($_GET['country_iso_code']));
|
||||
|
||||
$context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$content = @file_get_contents('http://www.prestashop.com/partner/preactivation/fields.php?version=1.0&partner='.$p.'&country_iso_code='.$c, false, $context);
|
||||
$stream_context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$content = @file_get_contents('http://www.prestashop.com/partner/preactivation/fields.php?version=1.0&partner='.$p.'&country_iso_code='.$c, false, $stream_context);
|
||||
|
||||
if ($content && $content[0] == '<')
|
||||
{
|
||||
@@ -28,7 +28,7 @@
|
||||
echo '<br clear="left" /><hr /><br clear="left" />';
|
||||
foreach ($result->field as $field)
|
||||
{
|
||||
echo '<div><label class="aligned">'.getPreinstallXmlLang($field, 'label').' :</label>';
|
||||
echo '<div><label class="aligned" style="float:left;width:200px;padding-left:10px;">'.getPreinstallXmlLang($field, 'label').' :</label>';
|
||||
if ($field->type == 'text' || $field->type == 'password')
|
||||
echo '<input type="'.$field->type.'" class="text required" id="'.$p.'_'.$c.'_form_'.$field->key.'" name="'.$p.'_'.$c.'_form_'.$field->key.'" '.(isset($field->size) ? 'size="'.$field->size.'"' : '').' value="'.(isset($_GET[trim($field->key)]) ? $_GET[trim($field->key)] : $field->default).'" />';
|
||||
elseif ($field->type == 'radio')
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
if ($_GET['request'] == 'send')
|
||||
{
|
||||
$context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$stream_context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$url = 'http://www.prestashop.com/partner/preactivation/actions.php?version=1.0&partner='.addslashes($_GET['partner']);
|
||||
|
||||
// Protect fields
|
||||
@@ -111,7 +111,7 @@
|
||||
foreach ($_GET as $key => $val)
|
||||
$url .= '&'.$key.'='.urlencode($val);
|
||||
$url .= '&security='.md5($_GET['email']._COOKIE_IV_);
|
||||
$content = @file_get_contents($url, false, $context);
|
||||
$content = @file_get_contents($url, false, $stream_context);
|
||||
if ($content)
|
||||
echo $content;
|
||||
else
|
||||
|
||||
@@ -202,7 +202,8 @@ INSERT INTO `PREFIX_configuration` (`id_configuration`, `name`, `value`, `date_a
|
||||
(131, 'PS_PNG_QUALITY', '7', NOW(), NOW()),
|
||||
(132, 'PS_JPEG_QUALITY', '90', NOW(), NOW()),
|
||||
(133, 'PS_COOKIE_LIFETIME_FO', '480', NOW(), NOW()),
|
||||
(134, 'PS_COOKIE_LIFETIME_BO', '480', NOW(), NOW());
|
||||
(134, 'PS_COOKIE_LIFETIME_BO', '480', NOW(), NOW()),
|
||||
(135, 'PS_RESTRICT_DELIVERED_COUNTRIES', '0', NOW(), NOW());
|
||||
|
||||
INSERT INTO `PREFIX_configuration_lang` (`id_configuration`, `id_lang`, `value`, `date_upd`) VALUES
|
||||
(36, 1, 'IN', NOW()),(36, 2, 'FA', NOW()),(36, 3, 'CU', NOW()),(36, 4, 'FA', NOW()),(36, 5, 'FA', NOW()),
|
||||
@@ -740,7 +741,7 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(1, 12, 'Addresses'),(1, 13, 'Statuses'),(1, 14, 'Vouchers'),(1, 15, 'Currencies'),(1, 16, 'Taxes'),(1, 17, 'Carriers'),(1, 18, 'Countries'),
|
||||
(1, 19, 'Zones'),(1, 20, 'Price Ranges'),(1, 21, 'Weight Ranges'),(1, 22, 'Positions'),(1, 23, 'Database'),(1, 24, 'E-mail'),(1, 26, 'Image'),
|
||||
(1, 27, 'Products'),(1, 28, 'Contacts'),(1, 29, 'Employees'),(1, 30, 'Profiles'),(1, 31, 'Permissions'),(1, 32, 'Languages'),(1, 33, 'Translations'),
|
||||
(1, 34, 'Suppliers'),(1, 35, 'Tabs'),(1, 36, 'Features'),(1, 37, 'Quick Access'),(1, 38, 'Appearance'),(1, 39, 'Contact Information'),(1, 40, 'Alias Research'),
|
||||
(1, 34, 'Suppliers'),(1, 35, 'Tabs'),(1, 36, 'Features'),(1, 37, 'Quick Access'),(1, 38, 'Appearance'),(1, 39, 'Contact Information'),(1, 40, 'Aliases'),
|
||||
(1, 41, 'Import'),(1, 42, 'Invoices'),(1, 43, 'Search'),(1, 44, 'Localization'),(1, 46, 'States'),(1, 47, 'Merchandise Returns'),(1, 48, 'PDF'),
|
||||
(1, 49, 'Credit Slips'),(1, 51, 'Settings'),(1, 52, 'Subdomains'),(1, 53, 'DB backup'),(1, 54, 'Order Messages'),
|
||||
(1, 55, 'Delivery Slips'),(1, 56, 'SEO & URLs'),(1, 57, 'CMS'),(1, 58, 'Image Mapping'),(1, 59, 'Customer Messages'),(1, 60, 'Tracking'),
|
||||
@@ -755,7 +756,7 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(2, 14, 'Bons de réduction'),(2, 15, 'Devises'),(2, 16, 'Taxes'),(2, 17, 'Transporteurs'),(2, 18, 'Pays'),(2, 19, 'Zones'),(2, 20, 'Tranches de prix'),
|
||||
(2, 21, 'Tranches de poids'),(2, 22, 'Positions'),(2, 23, 'Base de données'),(2, 24, 'Emails'),(2, 26, 'Images'),(2, 27, 'Produits'),(2, 28, 'Contacts'),
|
||||
(2, 29, 'Employés'),(2, 30, 'Profils'),(2, 31, 'Permissions'),(2, 32, 'Langues'),(2, 33, 'Traductions'),(2, 34, 'Fournisseurs'),(2, 35, 'Onglets'),
|
||||
(2, 36, 'Caractéristiques'),(2, 37, 'Accès rapide'),(2, 38, 'Apparence'),(2, 39, 'Coordonnées'),(2, 40, 'Alias de recherche'),(2, 41, 'Import'),(2, 42, 'Factures'),
|
||||
(2, 36, 'Caractéristiques'),(2, 37, 'Accès rapide'),(2, 38, 'Apparence'),(2, 39, 'Coordonnées'),(2, 40, 'Alias'),(2, 41, 'Import'),(2, 42, 'Factures'),
|
||||
(2, 43, 'Recherche'),(2, 44, 'Localisation'),(2, 46, 'Etats'),(2, 47, 'Retours produits'),(2, 48, 'PDF'),(2, 49, 'Avoirs'),
|
||||
(2, 51, 'Configuration'),(2, 52, 'Sous domaines'),(2, 53, 'Sauvegarde BDD'),(2, 54, 'Messages prédéfinis'),(2, 55, 'Bons de livraison'),
|
||||
(2, 56, 'SEO & URLs'),(2, 57, 'CMS'),(2, 58, 'Scènes'),(2, 59, 'Messages clients'),(2, 60, 'Suivi'),(2, 61, 'Moteurs de recherche'),
|
||||
@@ -770,7 +771,7 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(3, 13, 'Estados'),(3, 14, 'Vales de descuento'),(3, 15, 'Divisas'),(3, 16, 'Impuestos'),(3, 17, 'Transportistas'),(3, 18, 'Países'),(3, 19, 'Zonas'),
|
||||
(3, 20, 'Franja de precios'),(3, 21, 'Franja de pesos'),(3, 22, 'Posiciones'),(3, 23, 'Base de datos'),(3, 24, 'Emails'),(3, 26, 'Imágenes'),
|
||||
(3, 27, 'Productos'),(3, 28, 'Contactos'),(3, 29, 'Empleados'),(3, 30, 'Perfiles'),(3, 31, 'Permisos'),(3, 32, 'Idiomas'),(3, 33, 'Traducciones'),
|
||||
(3, 34, 'Proveedores'),(3, 35, 'Pestañas'),(3, 36, 'Características'),(3, 37, 'Acceso rápido'),(3, 38, 'Aspecto'),(3, 39, 'Datos'),(3, 40, 'Alias de Investigación'),
|
||||
(3, 34, 'Proveedores'),(3, 35, 'Pestañas'),(3, 36, 'Características'),(3, 37, 'Acceso rápido'),(3, 38, 'Aspecto'),(3, 39, 'Datos'),(3, 40, 'Alias'),
|
||||
(3, 41, 'Importar'),(3, 42, 'Facturas'),(3, 43, 'Búsqueda'),(3, 44, 'Ubicación'),(3, 46, 'Estados'),(3, 47, 'Devolución productos'),(3, 48, 'PDF'),
|
||||
(3, 49, 'Vales'),(3, 51, 'Configuración'),(3, 52, 'Subcampos'),(3, 53, 'Copia de seguridad'),(3, 54, 'Mensajes de Orden'),
|
||||
(3, 55, 'Albaranes de entrega'),(3, 56, 'SEO & URLs'),(3, 57, 'CMS'),(3, 58, 'Mapeo de la imagen'),(3, 59, 'Mensajes del cliente'),(3, 60, 'Rastreo'),
|
||||
@@ -784,7 +785,7 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(4, 12, 'Adressen'),(4, 13, 'Status'),(4, 14, 'Gutscheine'),(4, 15, 'Währungen'),(4, 16, 'Steuern'),(4, 17, 'Lieferanten'),(4, 18, 'Länder'),
|
||||
(4, 19, 'Zonen'),(4, 20, 'Preislagen'),(4, 21, 'Gewichtsklassen'),(4, 22, 'Positionen'),(4, 23, 'Datenbank'),(4, 24, 'E-Mail'),(4, 26, 'Bild'),
|
||||
(4, 27, 'Produkte'),(4, 28, 'Kontakte'),(4, 29, 'Mitarbeiter'),(4, 30, 'Profile'),(4, 31, 'Berechtigungen'),(4, 32, 'Sprachen'),(4, 33, 'Übersetzungen'),
|
||||
(4, 34, 'Zulieferer'),(4, 35, 'Tabs'),(4, 36, 'Funktionen'),(4, 37, 'Schnellzugriff'),(4, 38, 'Aussehen'),(4, 39, 'Kontaktinformation'),(4, 40, 'Suchname'),
|
||||
(4, 34, 'Zulieferer'),(4, 35, 'Tabs'),(4, 36, 'Funktionen'),(4, 37, 'Schnellzugriff'),(4, 38, 'Aussehen'),(4, 39, 'Kontaktinformation'),(4, 40, 'Alias'),
|
||||
(4, 41, 'Import'),(4, 42, 'Rechnungen'),(4, 43, 'Suche'),(4, 44, 'Lokalisierung'),(4, 46, 'Staaten'),(4, 47, 'Warenrücksendungen'),(4, 48, 'PDF'),
|
||||
(4, 49, 'Gutscheine'),(4, 51, 'Einstellungen'),(4, 52, 'Subdomains'),(4, 53, 'DB-Backup'),(4, 54, 'Bestellnachrichten'),
|
||||
(4, 55, 'Lieferscheine'),(4, 56, 'SEO & URLs'),(4, 57, 'CMS'),(4, 58, 'Image Mapping'),(4, 59, 'Kundennachrichten'),(4, 60, 'Tracking'),
|
||||
@@ -799,7 +800,7 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
|
||||
(5, 12, 'Indirizzi'),(5, 13, 'Status'),(5, 14, 'Voucher'),(5, 15, 'Valute'),(5, 16, 'Tasse'),(5, 17, 'Corrieri'),(5, 18, 'Nazioni'),
|
||||
(5, 19, 'Zone'),(5, 20, 'Fasce di prezzo'),(5, 21, 'Fasce di peso'),(5, 22, 'Posizioni'),(5, 23, 'Database'),(5, 24, 'E-mail'),(5, 26, 'Immagine'),
|
||||
(5, 27, 'Prodotti'),(5, 28, 'Contatti'),(5, 29, 'Impiegati'),(5, 30, 'Profili'),(5, 31, 'Permessi'),(5, 32, 'Lingue'),(5, 33, 'Traduzioni'),
|
||||
(5, 34, 'Fornitori'),(5, 35, 'Tab'),(5, 36, 'Caratteristiche'),(5, 37, 'Accesso rapido'),(5, 38, 'Aspetto'),(5, 39, 'Informazioni di contatto'),(5, 40, 'Alias di ricerca'),
|
||||
(5, 34, 'Fornitori'),(5, 35, 'Tab'),(5, 36, 'Caratteristiche'),(5, 37, 'Accesso rapido'),(5, 38, 'Aspetto'),(5, 39, 'Informazioni di contatto'),(5, 40, 'Alias'),
|
||||
(5, 41, 'Importa'),(5, 42, 'Fatture'),(5, 43, 'Cerca'),(5, 44, 'Localizzazione'),(5, 46, 'Stati'),(5, 47, 'Resi merci'),(5, 48, 'PDF'),
|
||||
(5, 49, 'Note di credito'),(5, 51, 'Impostazioni'),(5, 52, 'Sottodomini'),(5, 53, 'DB backup'),(5, 54, 'Messaggi ordine'),
|
||||
(5, 55, 'Note di consegna'),(5, 56, 'SEO & URLs'),(5, 57, 'CMS'),(5, 58, 'Mappatura immagine'),(5, 59, 'Messaggi cliente'),(5, 60, 'Rintracciare'),
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
SET NAMES 'utf8';
|
||||
|
||||
INSERT IGNORE INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES
|
||||
('PS_RESTRICT_DELIVERED_COUNTRIES', '0', NOW(), NOW());
|
||||
|
||||
UPDATE `PREFIX_country_lang`
|
||||
SET `name` = 'United States'
|
||||
WHERE `name` = 'United State'
|
||||
AND `id_lang` = (
|
||||
SELECT `id_lang`
|
||||
FROM `PREFIX_lang`
|
||||
WHERE `iso_code` = 'en'
|
||||
LIMIT 1
|
||||
);
|
||||
@@ -126,6 +126,7 @@ h1 {font-size:24px;}
|
||||
h2 {
|
||||
padding-bottom:20px;
|
||||
font-size:18px;
|
||||
line-height:20px;
|
||||
}
|
||||
h3 {
|
||||
padding-bottom:20px;
|
||||
@@ -161,6 +162,7 @@ input.button {
|
||||
padding:0 30px;
|
||||
height:31px;
|
||||
line-height:31px;
|
||||
font-weight:bold;
|
||||
color:#fff;
|
||||
text-shadow:0 1px 0 #0d7903;
|
||||
background:#039701 url(img/bt.png) repeat-x 0 0;
|
||||
@@ -191,7 +193,7 @@ input.text {
|
||||
padding:0 6px;
|
||||
height:22px;
|
||||
width:218px;/* 230 */
|
||||
background:#fff img(img/bg-input-text.png) repeat-x 0 0;
|
||||
background:#fff url(img/bg_input_button.png) repeat-x 0 0;
|
||||
border:1px solid #ccc;
|
||||
}
|
||||
select {
|
||||
@@ -316,6 +318,7 @@ ol#tabs{
|
||||
color:#adadad;
|
||||
}
|
||||
ol#tabs li.selected{
|
||||
font-weight: bold;
|
||||
color:#000;
|
||||
background : url(img/bg-li-tabs.png) no-repeat 1px 15px;
|
||||
}
|
||||
@@ -380,6 +383,8 @@ ul#footer a:link, ul#footer a:active, ul#footer a:visited {
|
||||
}
|
||||
.sheet .contentTitle .stepList li.ok {background-position:0 -50px;}
|
||||
.sheet .contentTitle .stepList li.ko {background-position:0 -100px;}
|
||||
.sheet .contentTitle h1 {text-shadow:0 1px 0 #fff;}
|
||||
.sheet .contentTitle ul {list-style-type:none;}
|
||||
|
||||
li.title {
|
||||
margin:0;
|
||||
@@ -472,8 +477,7 @@ ul#optional {list-style-type:none;}
|
||||
|
||||
#mailPart .userInfos {
|
||||
padding-left:18px;
|
||||
font-size:11px;
|
||||
font-style:italic;
|
||||
font: 11px Georgia, Arial, Sans-serif italic;
|
||||
color:#999;
|
||||
}
|
||||
|
||||
|
||||
@@ -199,8 +199,8 @@ if (isFormValid())
|
||||
require_once(dirname(__FILE__).'/../../classes/LocalizationPack.php');
|
||||
|
||||
|
||||
$context = stream_context_create(array('http' => array('timeout' => 5)));
|
||||
$localization_file = @Tools::file_get_contents('http://www.prestashop.com/download/localization_pack.php?country='.$_GET['countryName'], false, $context);
|
||||
$stream_context = stream_context_create(array('http' => array('timeout' => 5)));
|
||||
$localization_file = @Tools::file_get_contents('http://www.prestashop.com/download/localization_pack.php?country='.$_GET['countryName'], false, $stream_context);
|
||||
if (!$localization_file AND file_exists(dirname(__FILE__).'/../../localization/'.strtolower($_GET['countryName']).'.xml'))
|
||||
$localization_file = @file_get_contents(dirname(__FILE__).'/../../localization/'.strtolower($_GET['countryName']).'.xml');
|
||||
if ($localization_file)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
global $_MODULE;
|
||||
$_MODULE = array();
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_0cec62d1bea02fbb1484d55d14f493dd'] = 'Bloque de privacidad de datos de los clientes';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_3a32ec2dbd8d955f6240d95d6004557c'] = 'Agrega un bloque para mostrar un mensaje respecto a la privacidad de los datos.';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_20015706a8cbd457cbb6ea3e7d5dc9b3'] = 'Configuración actualizada';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_b75fe4f32f17eb695f145704a8909146'] = 'Mensaje sobre la privacidad de datos de los clientes';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_03e6791c07164957bb87bfad5030f846'] = 'Mensaje que se mostrará en el formulario de creación de la cuenta.';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_2d4e74ab9c95452f5948cd959d186b6d'] = 'Sugerencias: Recuerde que si el texto es demasiado largo para ser escrito directamente en el formulario, puede añadir un enlace a una de sus páginas creadas a través de la ficha de la CMS.';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_c9cc8cce247e49bae79f15173ce97354'] = 'Guardar';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_ffeb523df77567c7fad7faf8af5f7e46'] = 'Por favor, acepte el acuerdo sobre la privacidad de los datos de los clientes marcando la casilla de abajo.';
|
||||
$_MODULE['<{blockcustomerprivacy}prestashop>blockcustomerprivacy_fb0440f9ca32a8b49eded51b09e70821'] = 'Privacidad de los datos de los clientes';
|
||||
@@ -4,32 +4,55 @@ global $_MODULE;
|
||||
$_MODULE = array();
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_84241e458cdd5162745500a59a3680f3'] = 'Bloque navegación por facetas';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_2d08fa8e157fe3f1875402cbd98aee1b'] = 'Muestra un bloque con los filtros de la navegación por facetas';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_1b90c001d668d0ec894392d8e6695054'] = 'Debe habilitar la extensión cURL en el servidor si desea utilizar un link corto.';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_7ad3f384bcf30d783b5a6f6c810b4762'] = 'La base de datos por niveles de navegación se ha iniciado con éxito';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_817c37b9c1f5cd4a450dad384e63e6c7'] = 'Su filtro';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_3185cefd67b575e582063148e4f15860'] = 'se ha actualizado correctamente.';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_7ccab4d8de5d6b9bb61e99c7bba343ab'] = 'se ha añadido correctamente.';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_6e7db02664c13dd5b517a12eafab88b1'] = 'El nombre de usuario Bit.ly está vacío';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_f5da5c32121b39bb2100b9b63ccf4c4c'] = 'Api_key Bit.ly está vacía';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_fe016d3b990c2a9dd72ab6b45892f2ae'] = 'Configuración guardada con éxito';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_bb291cb01196158549fba8f6fe636d4a'] = 'Los ajustes no se guardan';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_4ad0f0fe31d93e0d8dd7a7fc69a72784'] = 'Filtros de plantilla borrados, categorías actualizadas (modelo por defecto aplicado).';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_91e77d047f2496b7ba8c9def96d03324'] = 'Plantilla de filtros que no se encuentran';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_09da2b6f1217055bb22caa6ea08d9b80'] = 'Capas de navegación';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_382a0cf3c7ea26e9c7d0642d6d0ec07d'] = 'Este módulo se encuentra en versión beta y se mejorará';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_016d6031144c99f759b36c5e00c79e91'] = '10 mejoras futuras';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_b77ae7b3f227f97fdbfbaee819c048d6'] = 'Actualizar en tiempo real de la tabla de caché';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_3cd881c5805a5564b080022968081652'] = 'Filtros adicionales (precios, peso)';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_f67587ba40eff59a15796352c9037ddf'] = 'Capacidad de gestión de filtros por categoría en la configuración del módulo';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_559175435fec02f846564385b20b98e2'] = 'Capacidad de ocultar los grupos de filtro sin valores y los valores con 0 productos';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_abb461f7d4d8271a12ceead064d13cd0'] = 'Estadísticas y análisis';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_6af4dd46928a781eda42b940d3394ca6'] = 'Administrar tipo de productos y paginación';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_b4ecb2bd1ea5153550669329db53277d'] = 'Añadir un cheque a la tabla categoría_grupo';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d99bf479cc40101e28f1f0ba1bfb6150'] = 'Los links SEO y la construcción de URL en tiempo real (capacidad de dar la dirección a alguien)';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_27c7b93d882068a1137a9350c7f1a132'] = 'Añadir más opciones en la configuración del módulo';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_fb8082696a8d7a40fa62ea0e89b18c32'] = 'Ejecución mejoras';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_7263de0a10ad25dfdadc44791c44fb1f'] = 'Inicialización de caché';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d15ce73cbadfe1e806ee7abd08a7fe4d'] = 'Antes de usar este módulo por primera vez tiene que inicializar el caché';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_2875534393f5ef32e42d92c30e9dfda5'] = 'Advertencia: Esto puede tardar varios minutos.';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_15aa842a19af51c2cf1ec631cdf8337a'] = 'Si no lo hace, esta tabla caché podría ser cada vez más grande ( y ser menos eficaz), y sus visitantes no tendrán acceso a todas las nuevas opciones (atributos, características).';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_c64a069750ff8924b029b2206cabf3b2'] = 'Inicializar la base de datos de navegación por capas';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_a607dc3941415ecea04bb1eb8a978962'] = 'Plantillas de los filtros existentes';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_9923a3739235561cc50eb9446dc1771e'] = 'las plantillas de filtros están configuradas:';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_7dce122004969d56ae2e0245cb754d35'] = 'Editar';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d180b4e0681bba834c76b479590e1c1e'] = 'Eliminar plantilla de filtro #';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d1457b72c3fb323a2671125aef3eab5d'] = '?';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_f2a6c498fb90ee345d997f888fce3b18'] = 'Borrar';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_058eeeba77f547f8a9a295a0efd4f6cd'] = 'No se encontró plantilla de filtro.';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_cb54e4c9b7712ca15c711aeacfabf0a2'] = 'Construya su propia plantilla de filtros';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_0ce4150f57948567deeaa58d0c367412'] = 'Paso 1 / 3 - Seleccione las categorías';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_99cdd6365310333a594b16e5658eee5c'] = 'Utilice esta plantilla para:';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_62f5d708d6ad1fa1ddd9429a65cccbea'] = 'Todas las categorías';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_fe0619d5f4999e09c622e32da7e7566a'] = 'Específicas';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_b0b5ccb4a195a07fd3eed14affb8695f'] = 'categorías';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_ef7de3f485174ff47f061ad27d83d0ee'] = 'seleccionadas';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_f72c75bdf80dc88b2529162f4947edc8'] = 'Por favor, seleccione al menos una categoría específica o seleccione \"Todas las categorías\".';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_64646db703ca003a37bd1e73977a3a4d'] = 'Categorías a partir de esta plantilla';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d758a9754eb9f36db05c22ad0c77e38e'] = 'Seleccione al menos una categoría con esta plantilla de filtro';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_5965d2ce192837f00d743d8a674382c1'] = 'Pulse el botón \"Guardar esta selección\" o cerrar la ventana para guardar';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_72dd03f11489ff6f604a4eb57c957202'] = 'Guardar esta selección';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_2e527847e8c785f3fd99651f64006798'] = 'Paso 2 / 3 - Seleccione los filtros';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_3488a51eb7f723d65daeff912e69b177'] = 'Filtros seleccionados';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_cf3cd81b30d4c4fd996ae5374fe656da'] = 'No se ha elegido ningún filtro todavía.';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_8524de963f07201e5c086830d370797f'] = 'Cargando ...';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_597c70730ebddba7d845e686665f9f28'] = 'Ha seleccionado-Todas las categorías, todas las plantillas de filtro existentes se eliminarán, ¿está de acuerdo?';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_74a6a547d86659933a210680efb6e6d1'] = 'Paso 3 / 3 - de un nombre a la plantilla';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_f8263d99054a4cdb3428196f078fa212'] = 'Nombre de la plantilla:';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_b96ce93c61b856a0163c116820646b19'] = 'Mi plantilla';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_5f514b580ea1b6bdb681916bc1deb207'] = 'sólo como un recordatorio';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_ef1094d9826e98f5417e0a37f1742133'] = 'Guardar esta plantilla de filtro';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_254f642527b45bc260048e30704edb39'] = 'Configuración';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_32cd1899a36fd598df5a4e417bc6339a'] = 'Posible compartir URL';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_05ce875b6f1cb8477077f33bad5e9325'] = 'Al activar esta opción, sus visitantes comparten la dirección URL de su búsqueda';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_054b4f3ea543c990f6b125f41af6ebf7'] = 'Opción';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_689202409e48743b914713f96d93947c'] = 'Valor';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_9868c3ac0748acf3b981a96cfe163ee8'] = 'Ocultar los valores de filtro cuando no hay ningún producto en venta';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_93cba07454f06a4a960172bbd6e2a435'] = 'Sí';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_8531c73de81b9ed94322dda7cf947daa'] = 'Mostrar el número de productos que concuerden';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_8b6c3aa61f1e15caefb66e68e7e64924'] = 'Permitir a los clientes compartir URLs';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_abc07e5243a77d8bebcadd90fca23d74'] = 'Para ofrecer a sus clientes enlaces cortos, crear una cuenta en bit.ly, luego copiar y pegar usuario y API key';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d67850bd126f070221dcfd5fa6317043'] = 'Regístrate';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_68fd0151074a3dba747f94b2fd8cf5f4'] = 'Ingresar bit.ly';
|
||||
@@ -45,10 +68,22 @@ $_MODULE['<{blocklayered}prestashop>blocklayered_fcebe56087b9373f15514831184fa57
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_2d25c72c1b18e562f6654fff8e11711e'] = 'No disponible';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_c0bd7654d5b278e65f21cf4e9153fdb4'] = 'Fabricante';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_8c489d0946f66d17d73f26366a4bf620'] = 'Peso';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_308edffd52afae39cc6277e246ec5df8'] = 'Filtros disponibles';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_cfbc982f8fb7a0cc3abb3c85c795ab41'] = 'Filtro de Subcategorías ';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_cd50ff1c5332f9920acf8173c4aab425'] = 'Filtro stock del producto';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_048c1728a0a6cf36f56c9dcdd23d8a14'] = 'Filtro estado del producto';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_02ecc2cbb645a2b859deba6907334cc8'] = 'Filtro fabricante del producto';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_cc72ed9534a489b5d2e5882735bf1364'] = 'Filtro peso del producto';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d73c57be7aad115d20508215e8ea9951'] = 'Grupo de atributos';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_736b91750e516139acc13c5eb6564f92'] = 'atributos';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_d2eb444e35c0a71f0a85df8194acb5b6'] = 'atributo';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_ee59f74265cd7f85d0ad30206a1a89b0'] = 'Este grupo permitirá al usuario seleccionar un color';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_b07e7131a6007b2a1a765bdd0e1e4894'] = 'Característica:';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_f09cc7ee3a9a93273f4b80601cafb00c'] = 'valores';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_2063c1608d6e0baf80249c42e2be5804'] = 'valor';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_c32516babc5b6c47eb8ce1bfc223253c'] = 'Catálogo';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_aa3c0ac7e57fcf0e2e25d270ff502b6e'] = 'Compartir su búsqueda';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_1262d1b9fbffb3a8e85ac9e4b449e989'] = 'filtros habilitados:';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_853ae90f0351324bd73ea615e6487517'] = ':';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_ea4788705e6873b424c65e91c2846b19'] = 'Cancelar';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_87ba2ecc8b6915e8bd6f5089918229fd'] = 'Franja';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_8524de963f07201e5c086830d370797f'] = 'Cargando ...';
|
||||
$_MODULE['<{blocklayered}prestashop>blocklayered_75954a3c6f2ea54cb9dff249b6b5e8e6'] = 'Rango:';
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
<tab><![CDATA[front_office_features]]></tab>
|
||||
<confirmUninstall>Are you sure you want to delete all your links ?</confirmUninstall>
|
||||
<is_configurable>1</is_configurable>
|
||||
<need_instance>1</need_instance>
|
||||
<need_instance>0</need_instance>
|
||||
<limited_countries></limited_countries>
|
||||
</module>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<module>
|
||||
<name>canadapost</name>
|
||||
<displayName><![CDATA[Canada Post Carrier]]></displayName>
|
||||
<version><![CDATA[0.1]]></version>
|
||||
<description><![CDATA[Offer your customers, different delivery methods with Canada Post]]></description>
|
||||
<author><![CDATA[PrestaShop]]></author>
|
||||
<tab><![CDATA[shipping_logistics]]></tab>
|
||||
<is_configurable>1</is_configurable>
|
||||
<need_instance>1</need_instance>
|
||||
<limited_countries>ca</limited_countries>
|
||||
</module>
|
||||
@@ -20,7 +20,7 @@
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @version Release: $Revision: 7233 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
After Width: | Height: | Size: 1005 B |
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
// Init
|
||||
$sql = array();
|
||||
|
||||
// Create Service Table in Database
|
||||
$sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cp_rate_service_code` (
|
||||
`id_cp_rate_service_code` int(10) NOT NULL AUTO_INCREMENT,
|
||||
`id_carrier` int(10) NOT NULL,
|
||||
`id_carrier_history` text NOT NULL,
|
||||
`code` varchar(64) NOT NULL,
|
||||
`service` varchar(255) NOT NULL,
|
||||
`delay` varchar(255) NOT NULL,
|
||||
`active` tinyint(1) NOT NULL,
|
||||
UNIQUE(`code`, `service`),
|
||||
PRIMARY KEY (`id_cp_rate_service_code`)
|
||||
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;';
|
||||
|
||||
// Insert Service in database
|
||||
$sql[] = "INSERT INTO `"._DB_PREFIX_."cp_rate_service_code` (`id_carrier`, `id_carrier_history`, `code`, `service`, `delay`, `active`) VALUES
|
||||
('0', '', 'PRIORITY_COURIER', 'Priority Courier', 'Priority Courier: 2 days', '0'),
|
||||
('0', '', 'REGULAR', 'Regular', 'Regular: 4 days', '0'),
|
||||
('0', '', 'XPRESSPOST', 'Xpresspost', 'Xpresspost: 1 day', '0'),
|
||||
('0', '', 'EXPEDITED', 'Expedited', 'Expedited: 1 day', '0'),
|
||||
('0', '', 'PRIORITY_WORLDWIDE_USA', 'Priority Worldwide USA', 'Priority Worldwide USA', '0'),
|
||||
('0', '', 'Xpresspost_USA', 'Xpresspost USA', 'Xpresspost USA', '0'),
|
||||
('0', '', 'Expedited_US_Business', 'Expedited US Business', 'Expedited US Business', '0'),
|
||||
('0', '', 'Small_Packets_Air', 'Small Packets Air', 'Small Packets Air', '0'),
|
||||
('0', '', 'Small_Packets_Surface', 'Small Packets Surface', 'Small Packets Surface', '0'),
|
||||
('0', '', 'U.S.A_Letter-post', 'U.S.A Letter-post', 'U.S.A Letter-post', '0'),
|
||||
('0', '', 'Priority_Worldwide INTL', 'Priority Worldwide INTL', 'Priority Worldwide INTL', '0'),
|
||||
('0', '', 'XPressPost_International', 'XPressPost International', 'XPressPost International', '0'),
|
||||
('0', '', 'Parcel_Surface', 'Parcel Surface', 'Parcel Surface', '0'),
|
||||
('0', '', 'Small_Packets Surface', 'Small Packets Surface', 'Small Packets Surface', '0'),
|
||||
('0', '', 'INTL_Letter-post', 'INTL Letter-post', 'INTL Letter-post', '0');";
|
||||
|
||||
// Create Cache Table in Database
|
||||
$sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cp_cache` (
|
||||
`id_cp_cache` int(10) NOT NULL AUTO_INCREMENT,
|
||||
`id_cart` int(10) NOT NULL,
|
||||
`id_carrier` int(10) NOT NULL,
|
||||
`hash` varchar(32) NOT NULL,
|
||||
`id_currency` int(10) NOT NULL,
|
||||
`total_charges` double(10,2) NOT NULL,
|
||||
`is_available` tinyint(1) NOT NULL,
|
||||
`date_add` datetime NOT NULL,
|
||||
`date_upd` datetime NOT NULL,
|
||||
PRIMARY KEY (`id_cp_cache`)
|
||||
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;';
|
||||
|
||||
// Create Test Cache Table in Database
|
||||
$sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cp_cache_test` (
|
||||
`id_cp_cache_test` int(10) NOT NULL AUTO_INCREMENT,
|
||||
`hash` varchar(1024) NOT NULL,
|
||||
`result` text NOT NULL,
|
||||
`date_add` datetime NOT NULL,
|
||||
`date_upd` datetime NOT NULL,
|
||||
PRIMARY KEY (`id_cp_cache_test`)
|
||||
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;';
|
||||
|
||||
// Create Config Table in Database
|
||||
$sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cp_rate_config` (
|
||||
`id_cp_rate_config` int(10) NOT NULL AUTO_INCREMENT,
|
||||
`id_product` int(10) NOT NULL,
|
||||
`id_category` int(10) NOT NULL,
|
||||
`id_currency` int(10) NOT NULL,
|
||||
`additional_charges` double(6,2) NOT NULL,
|
||||
`date_add` datetime NOT NULL,
|
||||
`date_upd` datetime NOT NULL,
|
||||
PRIMARY KEY (`id_cp_rate_config`)
|
||||
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;';
|
||||
|
||||
// Create Config (Service) Table in Database
|
||||
$sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'cp_rate_config_service` (
|
||||
`id_cp_rate_config_service` int(10) NOT NULL AUTO_INCREMENT,
|
||||
`id_cp_rate_service_code` int(10) NOT NULL,
|
||||
`id_cp_rate_config` int(10) NOT NULL,
|
||||
`date_add` datetime NOT NULL,
|
||||
`date_upd` datetime NOT NULL,
|
||||
PRIMARY KEY (`id_cp_rate_config_service`)
|
||||
) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;';
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// Init
|
||||
$sql = array();
|
||||
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'cp_rate_service_code`;';
|
||||
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'cp_cache`;';
|
||||
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'cp_cache_test`;';
|
||||
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'cp_rate_config`;';
|
||||
$sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'cp_rate_config_service`;';
|
||||
@@ -0,0 +1,8 @@
|
||||
<item>
|
||||
<quantity>[[Quantity]]</quantity>
|
||||
<weight>[[PackageWeight]]</weight>
|
||||
<length>[[Length]]</length>
|
||||
<width>[[Width]]</width>
|
||||
<height>[[Height]]</height>
|
||||
<description>[[Name]]</description>
|
||||
</item>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" ?>
|
||||
<eparcel>
|
||||
<language>[[IsoCode]]</language>
|
||||
<ratesAndServicesRequest>
|
||||
<merchantCPCID>[[UserLogin]]</merchantCPCID>
|
||||
<fromPostalCode>[[ShipFromPostalCode]]</fromPostalCode>
|
||||
<itemsPrice>[[ItemsPrice]]</itemsPrice>
|
||||
<lineItems>
|
||||
[[PackageList]]
|
||||
</lineItems>
|
||||
<city>[[ShipToCity]]</city>
|
||||
<provOrState>[[ShipToStateCode]]</provOrState>
|
||||
<country>[[ShipToCountryCode]]</country>
|
||||
<postalCode>[[ShipToPostalCode]]</postalCode>
|
||||
</ratesAndServicesRequest>
|
||||
</eparcel>
|
||||
@@ -457,9 +457,8 @@ class Ebay extends Module
|
||||
|
||||
|
||||
// Displaying Information from Prestashop
|
||||
$context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$prestashopContent = @file_get_contents('http://www.prestashop.com/partner/modules/ebay.php?version='.$this->version.'&shop='.urlencode(Configuration::get('PS_SHOP_NAME')).'®istered='.($alert['registration'] == 1 ? 'no' : 'yes').'&url='.urlencode($_SERVER['HTTP_HOST']).'&iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$this->context->language->id.'&email='.urlencode(Configuration::get('PS_SHOP_EMAIL')).'&security='.md5(Configuration::get('PS_SHOP_EMAIL')._COOKIE_IV_), false, $context);
|
||||
|
||||
$stream_context = stream_context_create(array('http' => array('method'=>"GET", 'timeout' => 5)));
|
||||
$prestashopContent = @file_get_contents('http://www.prestashop.com/partner/modules/ebay.php?version='.$this->version.'&shop='.urlencode(Configuration::get('PS_SHOP_NAME')).'®istered='.($alert['registration'] == 1 ? 'no' : 'yes').'&url='.urlencode($_SERVER['HTTP_HOST']).'&iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)$this->context->language->id.'&email='.urlencode(Configuration::get('PS_SHOP_EMAIL')).'&security='.md5(Configuration::get('PS_SHOP_EMAIL')._COOKIE_IV_), false, $stream_context);
|
||||
|
||||
// Displaying page
|
||||
$this->_html .= '<fieldset>
|
||||
@@ -865,9 +864,9 @@ class Ebay extends Module
|
||||
<p><b>'.$this->l('Beware : Only product default categories are used for this configuration.').'</b></p><br />
|
||||
|
||||
<p align="left">
|
||||
* Certaines catégories bénéficient du nouveau format d’annonces multi-versions qui permet de publier 1 seule annonce pour plusieurs versions du même produit.<br />
|
||||
Pour les catégories ne bénéficiant pas de ce format multi-versions, une annonce sera créée pour chaque version du produit.<br />
|
||||
<a href="http://sellerupdate.ebay.fr/may2011/multi-variation-listings.html" target="_blank">Cliquez ici pour plus d’informations sur les catégories multi-versions</a>
|
||||
* Certaines catégories bénéficient du nouveau format d’annonces multi-versions qui permet de publier 1 seule annonce pour plusieurs versions du même produit.<br />
|
||||
Pour les catégories ne bénéficiant pas de ce format multi-versions, une annonce sera créée pour chaque version du produit.<br />
|
||||
<a href="http://sellerupdate.ebay.fr/may2011/multi-variation-listings.html" target="_blank">Cliquez ici pour plus d’informations sur les catégories multi-versions</a>
|
||||
</p><br /><br />
|
||||
|
||||
<script>
|
||||
@@ -1567,22 +1566,22 @@ class Ebay extends Module
|
||||
<h2>Sommaire</h2>
|
||||
<h4><u><a href="#EbayHelpPart1">Comment lancer lancer sur eBay ?</a></u></h4>
|
||||
<ol>
|
||||
<li><a href="#EbayHelpPart1-1">S’inscrire en tant que vendeur professionnel</a></li>
|
||||
<li><a href="#EbayHelpPart1-2">Vérification du statut de professionnel</a></li>
|
||||
<li><a href="#EbayHelpPart1-3">Lier son compte PayPal à son compte eBay</a></li>
|
||||
<li><a href="#EbayHelpPart1-1">S’inscrire en tant que vendeur professionnel</a></li>
|
||||
<li><a href="#EbayHelpPart1-2">Vérification du statut de professionnel</a></li>
|
||||
<li><a href="#EbayHelpPart1-3">Lier son compte PayPal à son compte eBay</a></li>
|
||||
<li><a href="#EbayHelpPart1-4">Configurer son compte vendeur et sa boutique eBay</a></li>
|
||||
</ol>
|
||||
<h4><u><a href="#EbayHelpPart2">Le Module Prestashop, comment ça marche ?</a></u></h4>
|
||||
<h4><u><a href="#EbayHelpPart2">Le Module Prestashop, comment ça marche ?</a></u></h4>
|
||||
<ul>
|
||||
<li><a href="#EbayHelpPart2-1">Onglet Paramètres</li>
|
||||
<li><a href="#EbayHelpPart2-2">Onglet Configuration des catégories</a></li>
|
||||
<li><a href="#EbayHelpPart2-1">Onglet Paramètres</li>
|
||||
<li><a href="#EbayHelpPart2-2">Onglet Configuration des catégories</a></li>
|
||||
<li><a href="#EbayHelpPart2-3">Onglet Template de la fiche produit</a></li>
|
||||
<li><a href="#EbayHelpPart2-4">Onglet Mise en ligne des produits</a></li>
|
||||
</ul>
|
||||
<h4><u><a href="#EbayHelpPart3">Conseils & Astuces pour bien vendre sur eBay</a></u></h4>
|
||||
<ul>
|
||||
<li><a href="#EbayHelpPart3-1">Conseil N°1 : Avoir une bonne fiche produit</a></li>
|
||||
<li><a href="#EbayHelpPart3-2">Conseil N°2 : Avoir un bon Profil Vendeur</a></li>
|
||||
<li><a href="#EbayHelpPart3-1">Conseil N°1 : Avoir une bonne fiche produit</a></li>
|
||||
<li><a href="#EbayHelpPart3-2">Conseil N°2 : Avoir un bon Profil Vendeur</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -1591,36 +1590,36 @@ class Ebay extends Module
|
||||
<br />
|
||||
|
||||
|
||||
<h2 id="EbayHelpPart1">Comment se lancer sur eBay ?</h2>
|
||||
<p>Plus d’infos et tous les liens sur <a href="http://www.inscriptionpro.com" target="_blank"><u>www.inscriptionpro.com</u></a></p><br />
|
||||
<h2 id="EbayHelpPart1">Comment se lancer sur eBay ?</h2>
|
||||
<p>Plus d’infos et tous les liens sur <a href="http://www.inscriptionpro.com" target="_blank"><u>www.inscriptionpro.com</u></a></p><br />
|
||||
|
||||
<h3><u>4 Etapes pour s’inscrire sur eBay</u></h3>
|
||||
<p>A noter : dès votre inscription en tant que professionnel sur eBay.fr, vous recevrez automatiquement un email (dans les 48h) de notre service dédié à l’intégration afin de vous aider dans cette démarche.<br />
|
||||
Vous pouvez contacter directement notre service “Inscription Pro” par email : <a href="mailto:inscriptionpro@ebay.com">inscriptionpro@ebay.com</a></p>
|
||||
<h3><u>4 Etapes pour s’inscrire sur eBay</u></h3>
|
||||
<p>A noter : dès votre inscription en tant que professionnel sur eBay.fr, vous recevrez automatiquement un email (dans les 48h) de notre service dédié à l’intégration afin de vous aider dans cette démarche.<br />
|
||||
Vous pouvez contacter directement notre service “Inscription Pro� par email : <a href="mailto:inscriptionpro@ebay.com">inscriptionpro@ebay.com</a></p>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart1-1"><a href="https://ebayfr.backpackit.com/pub/2214807-guide-pour-les-vendeurs-professionnels-comment-vendre-sur-la-place-de-march-ebay-france-marketplace-ouverture-du-compte-ebay-et-paramtrage-initial-page-2-5"><u>1) Inscription en tant que vendeur professionnel</u></a></h3>
|
||||
<p>L’inscription se fait directement sur eBay.fr via un <a href="https://scgi.ebay.fr/ws/eBayISAPI.dll?RegisterEnterInfo&siteid=71&bizflow=2" target="_blank"><u>formulaire</u></a>. Choisissez un pseudo, un mot de passe, saisissez vos informations personnelles (adresse, téléphone…) et le tour est joué.</p>
|
||||
<p>L’inscription se fait directement sur eBay.fr via un <a href="https://scgi.ebay.fr/ws/eBayISAPI.dll?RegisterEnterInfo&siteid=71&bizflow=2" target="_blank"><u>formulaire</u></a>. Choisissez un pseudo, un mot de passe, saisissez vos informations personnelles (adresse, téléphone…) et le tour est joué.</p>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart1-2"><a href="https://ebayfr.backpackit.com/pub/2214807-guide-pour-les-vendeurs-professionnels-comment-vendre-sur-la-place-de-march-ebay-france-marketplace-ouverture-du-compte-ebay-et-paramtrage-initial-page-2-5"><u>2) Vérification de votre statut professionnel</u></a></h3>
|
||||
<p>Envoyez à notre service clients les documents justifiant <a href="http://pages.ebay.fr/help/sell/business/existingbusinessvetting.html" target="_blank"><u>votre statut professionnel</u></a>.</p>
|
||||
<h3 id="EbayHelpPart1-2"><a href="https://ebayfr.backpackit.com/pub/2214807-guide-pour-les-vendeurs-professionnels-comment-vendre-sur-la-place-de-march-ebay-france-marketplace-ouverture-du-compte-ebay-et-paramtrage-initial-page-2-5"><u>2) Vérification de votre statut professionnel</u></a></h3>
|
||||
<p>Envoyez à notre service clients les documents justifiant <a href="http://pages.ebay.fr/help/sell/business/existingbusinessvetting.html" target="_blank"><u>votre statut professionnel</u></a>.</p>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart1-3"><a href="https://ebayfr.backpackit.com/pub/2214807-guide-pour-les-vendeurs-professionnels-comment-vendre-sur-la-place-de-march-ebay-france-marketplace-ouverture-du-compte-ebay-et-paramtrage-initial-page-2-5"><u>3) Liez votre compte PayPal à votre compte eBay</u></a></h3>
|
||||
<p>Si vous n’avez pas de compte PayPal Business, il faut d’abord vous en créer un directement sur le site de PayPal : <a href="http://altfarm.mediaplex.com/ad/ck/3484-80712-8030-7" target="_blank"><u>créez votre compte PayPal business</u></a><br />
|
||||
Si vous avez déjà un compte PayPal, liez-le à votre compte eBay pour <a href="https://signin.ebay.fr/ws/eBayISAPI.dll?SignIn&UsingSSL=1&pUserId=&co_partnerId=2&siteid=71&ru=http%3A%2F%2Fmy.ebay.fr%2Fws%2FeBayISAPI.dll%3FMyeBay%26%26guest%3D1%26CurrentPage%3DMyeBayPayPalAccounts%26guest%3D1&pageType=1883" target="_blank"><u>recevoir les paiements</u></a> des acheteurs et <a href="https://signin.ebay.fr/ws/eBayISAPI.dll?SignIn&UsingSSL=1&pUserId=&co_partnerId=2&siteid=71&ru=https%3A%2F%2Farbd.ebay.fr%2Fws%2FeBayISAPI.dll%3FPaymentSelectionShowV4%26%26guest%3D1%26guest%3D1&pp=pass&pageType=4098&i1=0" target="_blank"><u>payer automatiquement les frais eBay</u></a>.</p>
|
||||
<h3 id="EbayHelpPart1-3"><a href="https://ebayfr.backpackit.com/pub/2214807-guide-pour-les-vendeurs-professionnels-comment-vendre-sur-la-place-de-march-ebay-france-marketplace-ouverture-du-compte-ebay-et-paramtrage-initial-page-2-5"><u>3) Liez votre compte PayPal à votre compte eBay</u></a></h3>
|
||||
<p>Si vous n’avez pas de compte PayPal Business, il faut d’abord vous en créer un directement sur le site de PayPal : <a href="http://altfarm.mediaplex.com/ad/ck/3484-80712-8030-7" target="_blank"><u>créez votre compte PayPal business</u></a><br />
|
||||
Si vous avez déjà un compte PayPal, liez-le à votre compte eBay pour <a href="https://signin.ebay.fr/ws/eBayISAPI.dll?SignIn&UsingSSL=1&pUserId=&co_partnerId=2&siteid=71&ru=http%3A%2F%2Fmy.ebay.fr%2Fws%2FeBayISAPI.dll%3FMyeBay%26%26guest%3D1%26CurrentPage%3DMyeBayPayPalAccounts%26guest%3D1&pageType=1883" target="_blank"><u>recevoir les paiements</u></a> des acheteurs et <a href="https://signin.ebay.fr/ws/eBayISAPI.dll?SignIn&UsingSSL=1&pUserId=&co_partnerId=2&siteid=71&ru=https%3A%2F%2Farbd.ebay.fr%2Fws%2FeBayISAPI.dll%3FPaymentSelectionShowV4%26%26guest%3D1%26guest%3D1&pp=pass&pageType=4098&i1=0" target="_blank"><u>payer automatiquement les frais eBay</u></a>.</p>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart1-4"><a href="https://ebayfr.backpackit.com/pub/2214807-guide-pour-les-vendeurs-professionnels-comment-vendre-sur-la-place-de-march-ebay-france-marketplace-ouverture-du-compte-ebay-et-paramtrage-initial-page-2-5"><u>4) Configurez votre compte vendeur et votre Boutique eBay</u></a></h3>
|
||||
<ul>
|
||||
<li><a href="http://cgi4.ebay.fr/ws/eBayISAPI.dll?RegisterBizSellerInfo&guest=1" target="_blank"><u>Configurez votre compte</u></a> vendeur pro (coordonnées, CGV,…).</li>
|
||||
<li><a href="http://cgi3.ebay.fr/ws/eBayISAPI.dll?CreateProductSubscription&productId=3" target="_blank"><u>Ouvrez votre Boutique eBay</u></a> et <a href="http://cgi6.ebay.fr/ws/eBayISAPI.dll?StoreCategoryMgmt" target="_blank"><u>paramétrez-la</u></a> pour mettre en avant vos produits dans un espace dédié.</li>
|
||||
<li><a href="http://cgi3.ebay.fr/ws/eBayISAPI.dll?CreateProductSubscription&productId=7" target="_blank"><u>Inscrivez-vous au Gestionnaire de Ventes Pro</u></a>, tableau de bord indispensable au pilotage de votre activité.</li>
|
||||
<li><a href="http://cgi4.ebay.fr/ws/eBayISAPI.dll?RegisterBizSellerInfo&guest=1" target="_blank"><u>Configurez votre compte</u></a> vendeur pro (coordonnées, CGV,…).</li>
|
||||
<li><a href="http://cgi3.ebay.fr/ws/eBayISAPI.dll?CreateProductSubscription&productId=3" target="_blank"><u>Ouvrez votre Boutique eBay</u></a> et <a href="http://cgi6.ebay.fr/ws/eBayISAPI.dll?StoreCategoryMgmt" target="_blank"><u>paramétrez-la</u></a> pour mettre en avant vos produits dans un espace dédié.</li>
|
||||
<li><a href="http://cgi3.ebay.fr/ws/eBayISAPI.dll?CreateProductSubscription&productId=7" target="_blank"><u>Inscrivez-vous au Gestionnaire de Ventes Pro</u></a>, tableau de bord indispensable au pilotage de votre activité.</li>
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<h3 align="center">Vous n’avez plus qu’à mettre en ligne vos produits avec le module eBay de Prestashop !</h3>
|
||||
<h3 align="center">Vous n’avez plus qu’à mettre en ligne vos produits avec le module eBay de Prestashop !</h3>
|
||||
|
||||
|
||||
<br />
|
||||
@@ -1628,24 +1627,24 @@ class Ebay extends Module
|
||||
<br />
|
||||
|
||||
|
||||
<h2 id="EbayHelpPart2">Le module eBay de Prestashop : comment ça marche ?</h2>
|
||||
<h2 id="EbayHelpPart2">Le module eBay de Prestashop : comment ça marche ?</h2>
|
||||
|
||||
<h3 id="EbayHelpPart2-1">1) Onglet « Paramètres »</h3>
|
||||
<p>Cette section est à configurer lors de la première utilisation du module. <br />Vous devez définir votre <strong>compte PayPal</strong> comme <strong>moyen de paiement de produits sur eBay</strong> en renseignant l’email que vous utilisez pour votre compte PayPal. <br />Si vous n’en avez pas, vous devez <a href="https://www.paypal.com/fr/cgi-bin/webscr?cmd=_flow&SESSION=85gB6zaK7zA5l_Y0UnNe_eJTaw1Al_e4hmrEfOLhrEiojJMJZGG-Cw9amIq&dispatch=5885d80a13c0db1f8e263663d3faee8d5863a909c4bb5aeebb52c6e1151bdaa9" target="_blank"><u>souscrire à un compte PayPal Business</u></a>.<br />Vous devez définir le <strong>moyen et les frais de livraison</strong> qui seront appliqués à vos produits sur eBay.</p>
|
||||
<h3 id="EbayHelpPart2-1">1) Onglet « Paramètres »</h3>
|
||||
<p>Cette section est à configurer lors de la première utilisation du module. <br />Vous devez définir votre <strong>compte PayPal</strong> comme <strong>moyen de paiement de produits sur eBay</strong> en renseignant l’email que vous utilisez pour votre compte PayPal. <br />Si vous n’en avez pas, vous devez <a href="https://www.paypal.com/fr/cgi-bin/webscr?cmd=_flow&SESSION=85gB6zaK7zA5l_Y0UnNe_eJTaw1Al_e4hmrEfOLhrEiojJMJZGG-Cw9amIq&dispatch=5885d80a13c0db1f8e263663d3faee8d5863a909c4bb5aeebb52c6e1151bdaa9" target="_blank"><u>souscrire à un compte PayPal Business</u></a>.<br />Vous devez définir le <strong>moyen et les frais de livraison</strong> qui seront appliqués à vos produits sur eBay.</p>
|
||||
|
||||
|
||||
<h3 id="EbayHelpPart2-2">2) Onglet « Configuration des catégories »</h3>
|
||||
<p>Avant de publier vos produits sur eBay, vous devez associer les catégories de produits de votre boutique Prestashop avec celles d’eBay. Vous pouvez également choisir de vendre les produits de votre boutique Prestashop à un prix différent sur eBay. Cet impact sur le prix est défini en %.</p>
|
||||
<p><u>NB :</u> Certaines catégories bénéficient du nouveau format d’annonce multi-versions.</p>
|
||||
<h3 id="EbayHelpPart2-2">2) Onglet « Configuration des catégories »</h3>
|
||||
<p>Avant de publier vos produits sur eBay, vous devez associer les catégories de produits de votre boutique Prestashop avec celles d’eBay. Vous pouvez également choisir de vendre les produits de votre boutique Prestashop à un prix différent sur eBay. Cet impact sur le prix est défini en %.</p>
|
||||
<p><u>NB :</u> Certaines catégories bénéficient du nouveau format d’annonce multi-versions.</p>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart2-3">3) Onglet « Template de la fiche produit »</h3>
|
||||
<p>Afin d’optimiser le <strong>design de vos fiches produits</strong> sur eBay, vous pouvez <strong>personnaliser</strong> le header et le footer de vos annonces en créant un template qui s’appliquera à l’ensemble de vos produits sur eBay. En designant vos annonces selon votre charte graphique (logo, couleurs…), vous développez votre <strong>notoriété</strong> et votre <strong>visibilité</strong> sur eBay. De plus, un template d’annonce bien travaillé et présenté de manière agréable et professionnelle fait souvent la différence auprès des acheteurs.</p>
|
||||
<h3 id="EbayHelpPart2-3">3) Onglet « Template de la fiche produit »</h3>
|
||||
<p>Afin d’optimiser le <strong>design de vos fiches produits</strong> sur eBay, vous pouvez <strong>personnaliser</strong> le header et le footer de vos annonces en créant un template qui s’appliquera à l’ensemble de vos produits sur eBay. En designant vos annonces selon votre charte graphique (logo, couleurs…), vous développez votre <strong>notoriété</strong> et votre <strong>visibilité</strong> sur eBay. De plus, un template d’annonce bien travaillé et présenté de manière agréable et professionnelle fait souvent la différence auprès des acheteurs.</p>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart2-4">4) Onglet « Mise en ligne des produits »</h3>
|
||||
<p>Cette section vous permet de mettre effectivement en ligne vos produits sur eBay. Vous avez le choix de placer la totalité des produits de votre boutique Prestashop sur eBay (option recommandée) ou seulement certaines catégories.</p>
|
||||
<p><u>Rappel :</u> Si vous avez une Boutique eBay, vous ne paierez aucun frais d’insertion pour mettre vos produits en ligne sur eBay.</p>
|
||||
<h3 id="EbayHelpPart2-4">4) Onglet « Mise en ligne des produits »</h3>
|
||||
<p>Cette section vous permet de mettre effectivement en ligne vos produits sur eBay. Vous avez le choix de placer la totalité des produits de votre boutique Prestashop sur eBay (option recommandée) ou seulement certaines catégories.</p>
|
||||
<p><u>Rappel :</u> Si vous avez une Boutique eBay, vous ne paierez aucun frais d’insertion pour mettre vos produits en ligne sur eBay.</p>
|
||||
<br />
|
||||
|
||||
|
||||
@@ -1656,28 +1655,28 @@ class Ebay extends Module
|
||||
|
||||
<h2 id="EbayHelpPart3">Conseils & astuces pour bien vendre sur eBay.fr </h2>
|
||||
|
||||
<h3 id="EbayHelpPart3-1">Conseil N°1 : Avoir une bonne fiche produit</h3>
|
||||
<p>Sur eBay, comme ailleurs, il faut soigner la présentation de ses produits sous peine de ne pas atteindre le niveau de ventes attendu. Un produit mal photographié et mal décrit ne se vendra pas. Il y a donc certaines normes à respecter avant de mettre en ligne ses produits sur eBay.fr. Cela vous permettra de bénéficier d’un bon référencement de vos produits sur eBay, d’optimiser vos ventes et ainsi de développer d’une visibilité optimale.</p>
|
||||
<h3 id="EbayHelpPart3-1">Conseil N°1 : Avoir une bonne fiche produit</h3>
|
||||
<p>Sur eBay, comme ailleurs, il faut soigner la présentation de ses produits sous peine de ne pas atteindre le niveau de ventes attendu. Un produit mal photographié et mal décrit ne se vendra pas. Il y a donc certaines normes à respecter avant de mettre en ligne ses produits sur eBay.fr. Cela vous permettra de bénéficier d’un bon référencement de vos produits sur eBay, d’optimiser vos ventes et ainsi de développer d’une visibilité optimale.</p>
|
||||
<ul>
|
||||
<li><strong>Titre</strong> (champ limité à 55 caractères)<br />Un bon titre doit obligatoirement comporter ces informations : Type de produit > Modèle > Caractéristiques importantes > Marque<br />Il doit également utiliser des mots clés pertinents : déterminer préalablement les mots clés les plus recherchés par les utilisateurs<br />A EVITER : abréviations, titre coupé car dépassant 55 caractères, références techniques trop poussées, ponctuation…</li>
|
||||
<li><strong>Attributs spécifiques</strong><br />Renseigner la totalité des attributs produits car ils sont pris en compte par les filtres de recherche et peuvent, par leur absence, exclure vos produits des résultats de recherche.</li>
|
||||
<li><strong>Prix & frais de port</strong><br />Le prix de vos objets, ainsi que vos frais de port, doivent être adaptés à l’offre générale présente sur eBay sous peine de vous voir pénaliser dans l’algorithme de recherche.<br />La gratuité des frais de port (frais de port inclus) permet de bénéficier d’une visibilité privilégiée dans les pages de résultats.</li>
|
||||
<li><strong>Description / détails du produit</strong><br />La description de vos produits doit être claire et précise, elle doit mentionner les caractéristiques clés de vos produits, les garanties, indiquer clairement les conditions et modalités de livraison et de retour. Enfin une annonce doit être mise en forme de manière attractive (images, logos…) et adaptée à votre communication en tant que vendeur.</li>
|
||||
<li><strong>Qualité des photos</strong><br />3 photos minimum (1 principale + 2 dans la description), elles doivent être de bonne qualité et sur fond blanc. Photos des détails si nécessaire. Les photos en disent autant qu’une belle description et constituent un élément important dans la décision de l’acheteur.</li>
|
||||
<li><strong>Titre</strong> (champ limité à 55 caractères)<br />Un bon titre doit obligatoirement comporter ces informations : Type de produit > Modèle > Caractéristiques importantes > Marque<br />Il doit également utiliser des mots clés pertinents : déterminer préalablement les mots clés les plus recherchés par les utilisateurs<br />A EVITER : abréviations, titre coupé car dépassant 55 caractères, références techniques trop poussées, ponctuation…</li>
|
||||
<li><strong>Attributs spécifiques</strong><br />Renseigner la totalité des attributs produits car ils sont pris en compte par les filtres de recherche et peuvent, par leur absence, exclure vos produits des résultats de recherche.</li>
|
||||
<li><strong>Prix & frais de port</strong><br />Le prix de vos objets, ainsi que vos frais de port, doivent être adaptés à l’offre générale présente sur eBay sous peine de vous voir pénaliser dans l’algorithme de recherche.<br />La gratuité des frais de port (frais de port inclus) permet de bénéficier d’une visibilité privilégiée dans les pages de résultats.</li>
|
||||
<li><strong>Description / détails du produit</strong><br />La description de vos produits doit être claire et précise, elle doit mentionner les caractéristiques clés de vos produits, les garanties, indiquer clairement les conditions et modalités de livraison et de retour. Enfin une annonce doit être mise en forme de manière attractive (images, logos…) et adaptée à votre communication en tant que vendeur.</li>
|
||||
<li><strong>Qualité des photos</strong><br />3 photos minimum (1 principale + 2 dans la description), elles doivent être de bonne qualité et sur fond blanc. Photos des détails si nécessaire. Les photos en disent autant qu’une belle description et constituent un élément important dans la décision de l’acheteur.</li>
|
||||
</ul>
|
||||
<br />
|
||||
|
||||
<h3 id="EbayHelpPart3-2">Conseil N°2 : Avoir un bon profil vendeur</h3>
|
||||
<p>eBay est la seule place de marché en France à vous donner la propriété du client. Vous êtes donc responsable de la relation client avec vos acheteurs qui vous évaluent en tant que vendeur. Pour avoir donc un bon profil vendeur, de bonnes évaluations et ainsi augmentez la confiance de vos acheteurs, il vous faut évidemment remplir vos obligations de vendeur mais aussi soigner votre relation client.</p>
|
||||
<p>Vous devez avoir un <strong>objectif</strong> en taux <strong>de satisfaction</strong> (évaluations) de votre profil vendeur de minimum <strong>4.8/5</strong>.<br /><strong>Cette notation influence beaucoup le référencement de vos annonces dans eBay.</strong><br />Voici comment les <strong>4 critères</strong> sur lesquels vous devez soigner votre niveau de service client pour atteindre cet objectif de 4.8 de taux de satisfaction sur votre profil vendeur :</p>
|
||||
<h3 id="EbayHelpPart3-2">Conseil N°2 : Avoir un bon profil vendeur</h3>
|
||||
<p>eBay est la seule place de marché en France à vous donner la propriété du client. Vous êtes donc responsable de la relation client avec vos acheteurs qui vous évaluent en tant que vendeur. Pour avoir donc un bon profil vendeur, de bonnes évaluations et ainsi augmentez la confiance de vos acheteurs, il vous faut évidemment remplir vos obligations de vendeur mais aussi soigner votre relation client.</p>
|
||||
<p>Vous devez avoir un <strong>objectif</strong> en taux <strong>de satisfaction</strong> (évaluations) de votre profil vendeur de minimum <strong>4.8/5</strong>.<br /><strong>Cette notation influence beaucoup le référencement de vos annonces dans eBay.</strong><br />Voici comment les <strong>4 critères</strong> sur lesquels vous devez soigner votre niveau de service client pour atteindre cet objectif de 4.8 de taux de satisfaction sur votre profil vendeur :</p>
|
||||
<ul>
|
||||
<li><u>Objet conforme à la description de l’annonce :</u> cf. Conseil N°1 Description produit</li>
|
||||
<li><u>Communication :</u> réponse rapide aux questions pré ET post-ventes (Messages dans « Mon eBay »)</li>
|
||||
<li><u>Délai de livraison :</u> assurer un service de livraison entre 48 et 72h maximum. Attention à la gestion des stocks (délai à rallonge avec un produit indisponible)</li>
|
||||
<li><u>Frais de port :</u> la gratuité des frais de port permet d’obtenir 5/5 à ce critère</li>
|
||||
<li><u>Objet conforme à la description de l’annonce :</u> cf. Conseil N°1 Description produit</li>
|
||||
<li><u>Communication :</u> réponse rapide aux questions pré ET post-ventes (Messages dans « Mon eBay »)</li>
|
||||
<li><u>Délai de livraison :</u> assurer un service de livraison entre 48 et 72h maximum. Attention à la gestion des stocks (délai à rallonge avec un produit indisponible)</li>
|
||||
<li><u>Frais de port :</u> la gratuité des frais de port permet d’obtenir 5/5 à ce critère</li>
|
||||
</ul>
|
||||
|
||||
<p><u>NB :</u> L’outil « Gestionnaire de Ventes Pro » vous permet d’automatiser un certain nombre de ses tâches de relation client et ainsi de vous faire gagner du temps.<br /><a href="http://pages.ebay.fr/outils-vendeurs/gestionnaire-de-ventes/pro.html" target="_blank"><u>Souscrire au Gestionnaire de ventes Pro</u></a></p>';
|
||||
<p><u>NB :</u> L’outil « Gestionnaire de Ventes Pro » vous permet d’automatiser un certain nombre de ses tâches de relation client et ainsi de vous faire gagner du temps.<br /><a href="http://pages.ebay.fr/outils-vendeurs/gestionnaire-de-ventes/pro.html" target="_blank"><u>Souscrire au Gestionnaire de ventes Pro</u></a></p>';
|
||||
}
|
||||
|
||||
public function displayInfoByCart()
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
global $_MODULE;
|
||||
$_MODULE = array();
|
||||
$_MODULE['<{ebay}prestashop>ebay_282539987a2276dd5259f8e745d668a1'] = 'eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1179327c010f54ade46baea3c3b0ceec'] = 'Abra su tienda en el mercado de eBay!';
|
||||
$_MODULE['<{ebay}prestashop>ebay_6fecf5a008d74051f0e8aae985b37aa6'] = 'El módulo de eBay sólo funciona de momento para eBay.fr';
|
||||
$_MODULE['<{ebay}prestashop>ebay_8acabcc788c316f92b7850c76265b49b'] = 'Debe habilitar la extensión cURL y la opción allow_url_fopen en el servidor si desea utilizar este módulo.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_d591cbc447d01e5a6165096ebfdf804e'] = 'Debe habilitar la extensión cURL en el servidor si desea utilizar este módulo.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1b18bd5d9d85f4f667614345ee20e3b2'] = 'Debe habilitar la opción allow_url_fopen en el servidor si desea utilizar este módulo.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_8e64bc164aee46723ed2d70273c6f8ab'] = 'Debe registrar su módulo en eBay.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_98f54d8bba6523829eeb8fd7ab9a2088'] = '¿Desea continuar?';
|
||||
$_MODULE['<{ebay}prestashop>ebay_2e4f4d8b849fb72905addc231d160e8b'] = 'Estado del módulo eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_85f9d92e0551772437b934b7222d63cb'] = '¡El módulo de eBay está configurado y en línea!';
|
||||
$_MODULE['<{ebay}prestashop>ebay_090bcb46805aadf384074d380b4c78c8'] = 'El módulo de eBay no está configurado todavía, usted debe:';
|
||||
$_MODULE['<{ebay}prestashop>ebay_9a5c99bf25e84cd8fe7c500f7ec698f2'] = 'Registrar el módulo en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_f09ea5dca3d187c50a634239778a5a3c'] = 'Permitir URL fopen';
|
||||
$_MODULE['<{ebay}prestashop>ebay_c7760f2c36d4e647e8a254cef51cbae8'] = 'Activar cURL';
|
||||
$_MODULE['<{ebay}prestashop>ebay_16bfbf9c462762cf1cba4134ec53c504'] = 'Cargar';
|
||||
$_MODULE['<{ebay}prestashop>ebay_b383064f397ca4f9de45a6dadc6a07a1'] = 'Una vez que se accede desde la ventana de eBay , el módulo automáticamente terminará la instalación unos segundos más tarde';
|
||||
$_MODULE['<{ebay}prestashop>ebay_d9334a0c5b4432b2ad87fb9c90e9f44c'] = 'Debe indicar su seudónimo de eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_4285b577739883af893c3b1320690b70'] = 'Pulse en el botón de abajo';
|
||||
$_MODULE['<{ebay}prestashop>ebay_7ba7cc1dfb00eca77b600084f4ba1304'] = 'ID de usuario de eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_3225a10b07f1580f10dee4abc3779e6c'] = 'Parámetros';
|
||||
$_MODULE['<{ebay}prestashop>ebay_dc2f736ed903b4f6f72a36b763cd7717'] = 'Configuración de las categorías';
|
||||
$_MODULE['<{ebay}prestashop>ebay_0f5f872ba4c6575319e6beee6ebcc481'] = 'Plantilla de la ficha productos';
|
||||
$_MODULE['<{ebay}prestashop>ebay_47ba6504eb5b1e3a95ea3dbd960904db'] = 'eBay Sync';
|
||||
$_MODULE['<{ebay}prestashop>ebay_6a26f548831e6a8c26bfbbd9f6ec61e0'] = 'Ayuda';
|
||||
$_MODULE['<{ebay}prestashop>ebay_e5beb503fe9553f0ed5be3c324fc9cb7'] = 'Para exportar sus productos en eBay, tiene que crear una cuenta pro en eBay (ver ayuda) y configurar el módulo de eBay-Prestashop.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_230b8b5e65ef7731d72a42b1ddb0293f'] = 'Identificador de eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_ad44bf098615279532ded210754420d4'] = 'Sus productos en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_5d8ae2a94331ebbfe854eea0274e939c'] = 'Su identificador de eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_4b9f5155cc88fe352fbf202a3ba57f04'] = 'tienda eBay ';
|
||||
$_MODULE['<{ebay}prestashop>ebay_3e0fb5fcfe85cdf0f83fefe3530d13f4'] = 'Su tienda en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_97b4fc969316e8d08c1b0bb1f0b05fbd'] = 'Su nombre de la tienda eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1734acc41e3889028ca0f0d13ef5bc93'] = 'Identificador Paypal (correo electrónico)';
|
||||
$_MODULE['<{ebay}prestashop>ebay_4883ffdb0b673bdd200f3d96709c26f5'] = 'Tiene que indicar su cuenta de correo electrónico PayPal, es el único modo de pago disponible con este módulo';
|
||||
$_MODULE['<{ebay}prestashop>ebay_83d893ae1e34a74ab9a068e1d190c764'] = 'Método de envío';
|
||||
$_MODULE['<{ebay}prestashop>ebay_3d346df981cf71d3a81b57c1af58f1f4'] = 'Gastos de envío para los productos en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_552a0d8c17d95d5dbdc0c28217024f5a'] = 'Gastos de envío';
|
||||
$_MODULE['<{ebay}prestashop>ebay_ce178f4fe9684e5786aff36ab3cf81f6'] = 'Código postal';
|
||||
$_MODULE['<{ebay}prestashop>ebay_bb9a2f66fc726c85e45c8ddc93297ab9'] = 'Código postal de su tienda';
|
||||
$_MODULE['<{ebay}prestashop>ebay_c9cc8cce247e49bae79f15173ce97354'] = 'guardar';
|
||||
$_MODULE['<{ebay}prestashop>ebay_153e4104f5a42e006735dd85847760b1'] = 'Cargando categorías';
|
||||
$_MODULE['<{ebay}prestashop>ebay_123b3c98806c47a9bfa5fc7480e5327b'] = 'El identificador de su cuenta de eBay no se ha especificado o no es válido';
|
||||
$_MODULE['<{ebay}prestashop>ebay_179d471a6a534b682050411984ea1c05'] = 'Su cuenta de correo electrónico Paypal no se ha especificado o no es válida';
|
||||
$_MODULE['<{ebay}prestashop>ebay_d0f2d9c05a3140a5fc81fd0cb6b330e2'] = 'Los gastos de envío no se han especificado o no son válidos';
|
||||
$_MODULE['<{ebay}prestashop>ebay_458d329d5eb1caf63615141fb51e8329'] = 'El código postal no se ha especificado o no es válido';
|
||||
$_MODULE['<{ebay}prestashop>ebay_c888438d14855d7d96a2724ee9c306bd'] = 'Configuración actualizada';
|
||||
$_MODULE['<{ebay}prestashop>ebay_b9284bff13acffdd879ef4ac7fca5234'] = 'Configuración no actualizada';
|
||||
$_MODULE['<{ebay}prestashop>ebay_67e19ffdaa0a11e69349810403a9727e'] = 'Usted tiene que configurar \"General Settings\" antes de utilizar esta pestaña.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1fe6b0032a7882ef20d08a5386441e33'] = 'Para exportar sus productos en eBay, usted tiene que asociar cada una de las categorías de su tienda a una categoría de eBay. También puede definir un impacto de su precio en eBay.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1bffdb0b10182ea51f7baa97ee2d19a8'] = 'Usted puede utilizar el botón de abajo para asociar automáticamente las categorías que no tienen ninguna relación por el momento con una categoría sugerida por eBay.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_36be9eda23888bf12f74d6cd9d46ba1d'] = 'Sugerir categorías';
|
||||
$_MODULE['<{ebay}prestashop>ebay_3adbdb3ac060038aa0e6e6c138ef9873'] = 'Categoría';
|
||||
$_MODULE['<{ebay}prestashop>ebay_649829dea8fe9632cc51a9aa3c8826c3'] = 'Categoría eBay ';
|
||||
$_MODULE['<{ebay}prestashop>ebay_233c543a23378c4ffd0e1efb17408510'] = 'Impacto en los precios';
|
||||
$_MODULE['<{ebay}prestashop>ebay_a5612305bb46e3d0ea547f4a963a01d3'] = 'No se ha encontrado categoría.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_55ac32003f11f511412875f283f4f303'] = 'No se ha seleccionado categoría ';
|
||||
$_MODULE['<{ebay}prestashop>ebay_628b583852257bd453a9a2c38a65fd6e'] = 'Atención: Sólo se utilizan para esta configuración.las categorías por defecto del producto ';
|
||||
$_MODULE['<{ebay}prestashop>ebay_6c09b50ba3b52d0d61fb785adeed1895'] = 'Puede personalizar el tema gráfico de sus productos en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_c01f01fd2bd607cf17ddc2ee584227f8'] = 'Usted tiene que configurar \"Configuración de Categorías \" antes de utilizar esta pestaña.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1cbd8f2b57c85344f755caff03336306'] = 'Sincronización con eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_86024cad1e83101d97359d7351051156'] = 'productos';
|
||||
$_MODULE['<{ebay}prestashop>ebay_05aaf6b3c49c3aa6219a1d730ee7988c'] = 'Ya puede poner sus productos en ebay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_3205b263a1a779c2b03cdbac836346f9'] = 'Recordatorio,';
|
||||
$_MODULE['<{ebay}prestashop>ebay_0eaf4172db11a5d6e914aabe920f0455'] = 'No tendrá que pagar ningún gasto suplementario por tener una tienda en eBay.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_25740d6b53eafdd8a64299e1fe92f247'] = 'Modo de sincronización';
|
||||
$_MODULE['<{ebay}prestashop>ebay_97855df0367fedf5648d745bfb57412b'] = 'Opción A';
|
||||
$_MODULE['<{ebay}prestashop>ebay_2c53ffc482419e404cd47559e5004b2e'] = 'Sincronizar todos sus productos en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_8890755ccd5ac4f777efdd0a6c16c4ab'] = 'Opción B';
|
||||
$_MODULE['<{ebay}prestashop>ebay_4ac5ebfcb9b9d8c87e9ff03ee6bf24e5'] = 'Sincronizar solo los productos de las categorías seleccionadas';
|
||||
$_MODULE['<{ebay}prestashop>ebay_054b4f3ea543c990f6b125f41af6ebf7'] = 'Opción';
|
||||
$_MODULE['<{ebay}prestashop>ebay_892db3f832f6fe1a2d04e1e50e65d3ca'] = 'Al actualizar un producto, solo se resincronizan su precio y su cantidad';
|
||||
$_MODULE['<{ebay}prestashop>ebay_e0626222614bdee31951d84c64e5e9ff'] = 'Seleccionar';
|
||||
$_MODULE['<{ebay}prestashop>ebay_caab0e2c2f3ae0d242b0b36f22d9acc5'] = 'Va a poner en línea';
|
||||
$_MODULE['<{ebay}prestashop>ebay_70b240eb3db5174e1c9520cabe2ae781'] = 'productos en eBay. ¿Desea confirmar?';
|
||||
$_MODULE['<{ebay}prestashop>ebay_6d371302939f2bba5daf55544efb956f'] = '¡Advertencia! Si alguna de sus categorías no son compatibles con multi sku, algunos de sus productos puede crear más de una ficha producto en eBay.';
|
||||
$_MODULE['<{ebay}prestashop>ebay_547c708291fe196592dd1e4db7b206a5'] = 'producto(s) en línea en eBay';
|
||||
$_MODULE['<{ebay}prestashop>ebay_1761efb946aa43c14af989665dae691a'] = 'Producto(s) concernido(s)';
|
||||
|
||||
@@ -14,6 +14,8 @@ $_MODULE['<{fedexcarrier}prestashop>fedexcarrier_918356c887962073f010ee06e139571
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_8c2b826b79539fa093a6db05ca5ec9e0'] = 'Clave API de Fedex ';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_3ef2f9d666a37f95d963a84c46bae646'] = 'Tipo de recogida predeterminado de Fedex';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_72f18dde0a5c9f75dd487adeacb92b56'] = 'Tipo de embalaje predeterminado de Fedex';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_20449d3f0b6c6b9265a5cd2a470a6451'] = 'Peso del paquete';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_bfc00de34bc04366e7fee516adf7dca5'] = 'Gastos de gestión';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_5bb8a37c6acccadf3e28a704d59f1f8a'] = 'Business service center';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_c0b3132d2759b40e8525f2466c477d1c'] = 'Buzón de depósito';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_22db7528d7c5df8e310bf19af75e61d3'] = 'Recogida regular';
|
||||
@@ -46,6 +48,8 @@ $_MODULE['<{fedexcarrier}prestashop>fedexcarrier_a8c786474d046ba2b2b90b78a7b498c
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_ec25bbf3daf58ec08920a781e25a3f3d'] = 'Priority overnight';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_e889962a8517669ba4ac839afa6384df'] = 'Smart post';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_0a7bd01967a1874144b1b4fab2ee6a6f'] = 'Standard overnight';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_386aad80d82f8245e9ef80352a2240e8'] = 'Todos los artículos en un solo paquete';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_f35eb2a913a3fd6fd8e661012cf0ebd8'] = 'Dividir un artículo por paquete';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_d999f792aee7c730cdc95f6aff4aa436'] = 'Transportista FEDEX ';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_99e509958c21ac35438651547a7bb035'] = 'Módulo de estado Fedex ';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_d23a9177c3c7256ede85643a19335afb'] = '¡Transportista FEDEX está bien configurado y en línea!';
|
||||
@@ -64,6 +68,8 @@ $_MODULE['<{fedexcarrier}prestashop>fedexcarrier_9a8b0ebd10992bd1576eccf605a8417
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_c36a272a8778a2e85de52a01675fd521'] = 'Su contraseña fedex';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_5e2cd475470bc7b47bef8d4ecdae2a67'] = 'Su Fedex Key API';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_cdfa1b01c330bf745f776f6c6c8afffd'] = 'Pulse aquí para obtener su Fedex Key API';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_db06a2900c66a3a2cb78fe3a470f1b85'] = 'Unidad de Peso';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_0274f749472f365e7d48a501e14793e6'] = 'Gastos de gestión';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_83ad4fdaf06650e6d9d7ca18f82fb975'] = 'Configuración de localización ';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_f489118ea95c746d648d36bb50c226f0'] = 'Unidad de peso';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_659c95668841b7d6602ead454b28d4ba'] = 'La unidad de peso para su tienda (kg o libras)';
|
||||
@@ -85,6 +91,8 @@ $_MODULE['<{fedexcarrier}prestashop>fedexcarrier_f405714368454e1f9c932432693aea4
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_ce135482b30deedcc0046df41c12de79'] = 'Elija su método de recogida por defecto…';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_9a361a1f786db3dfe07aae42752d3446'] = 'Tipo de embalaje por defecto';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_4664d1ae1832bed2246e8a6850365075'] = 'Seleccione un tipo de embalaje por defecto...';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_8d6bd50f3fe3ee2f4513066c25e5fb4a'] = 'Modode cálculo';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_c5238c5f72dee585afdf4bddf6de518e'] = 'Utilizando el modo de cálculo \"Todos los artículos en un solo paquete\" utilizará automáticamente el tamaño por defecto de embalaje, tipo de embalaje y entrega. No se utilizarán las configuraciones específicas de las categorías y de los productos.';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_5cdd307ba6e260beb4801c0c10e22a3a'] = 'Servicio de entrega';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_78945de8de090e90045d299651a68a9b'] = 'Disponible';
|
||||
$_MODULE['<{fedexcarrier}prestashop>fedexcarrier_2d25c72c1b18e562f6654fff8e11711e'] = 'No disponible';
|
||||
|
||||
@@ -296,7 +296,7 @@ class Followup extends Module
|
||||
if ($voucher !== false)
|
||||
{
|
||||
$templateVars = array('{email}' => $email['email'], '{lastname}' => $email['lastname'], '{firstname}' => $email['firstname'], '{amount}' => $conf['PS_FOLLOW_UP_AMOUNT_1'], '{days}' => $conf['PS_FOLLOW_UP_DAYS_1'], '{voucher_num}' => $voucher->name);
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_1', Mail::l('Your cart and your discount'), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_1', Mail::l('Your cart and your discount', $email['id_lang']), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$this->logEmail(1, (int)($voucher->id), (int)($email['id_customer']), (int)($email['id_cart']));
|
||||
}
|
||||
}
|
||||
@@ -367,7 +367,7 @@ class Followup extends Module
|
||||
if ($voucher !== false)
|
||||
{
|
||||
$templateVars = array('{email}' => $email['email'], '{lastname}' => $email['lastname'], '{firstname}' => $email['firstname'], '{amount}' => $conf['PS_FOLLOW_UP_AMOUNT_2'], '{days}' => $conf['PS_FOLLOW_UP_DAYS_2'], '{voucher_num}' => $voucher->name);
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_2', Mail::l('Thanks for your order'), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_2', Mail::l('Thanks for your order', $email['id_lang']), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$this->logEmail(2, (int)($voucher->id), (int)($email['id_customer']), (int)($email['id_cart']));
|
||||
}
|
||||
}
|
||||
@@ -404,7 +404,7 @@ class Followup extends Module
|
||||
if ($voucher !== false)
|
||||
{
|
||||
$templateVars = array('{email}' => $email['email'], '{lastname}' => $email['lastname'], '{firstname}' => $email['firstname'], '{amount}' => $conf['PS_FOLLOW_UP_AMOUNT_3'], '{days}' => $conf['PS_FOLLOW_UP_DAYS_3'], '{voucher_num}' => $voucher->name);
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_3', Mail::l('You are one of our best customers'), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_3', Mail::l('You are one of our best customers', $email['id_lang']), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$this->logEmail(3, (int)($voucher->id), (int)($email['id_customer']), (int)($email['id_cart']));
|
||||
}
|
||||
}
|
||||
@@ -447,7 +447,7 @@ class Followup extends Module
|
||||
if ($voucher !== false)
|
||||
{
|
||||
$templateVars = array('{email}' => $email['email'], '{lastname}' => $email['lastname'], '{firstname}' => $email['firstname'], '{amount}' => $conf['PS_FOLLOW_UP_AMOUNT_4'], '{days}' => $conf['PS_FOLLOW_UP_DAYS_4'], '{days_threshold}' => (int)(Configuration::get('PS_FOLLOW_UP_DAYS_THRESHOLD_4')), '{voucher_num}' => $voucher->name);
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_4', Mail::l('We miss you'), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$result = Mail::Send((int)($email['id_lang']), 'followup_4', Mail::l('We miss you', $email['id_lang']), $templateVars, $email['email'], $email['firstname'].' '.$email['lastname'], NULL, NULL, NULL, NULL, dirname(__FILE__).'/mails/');
|
||||
$this->logEmail(4, (int)($voucher->id), (int)($email['id_customer']), (int)($email['id_cart']));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,10 +19,13 @@ $_MODULE['<{gcheckout}prestashop>gcheckout_4402acab1c8f90dcf4a31dc96833bd86'] =
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_82b8bb0d807e6d2e43a068f954c3559f'] = 'La ID del comerciante parece incorrecta';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_9dd37c2106ceacbf0a40778b2109c386'] = 'La contraseña del comerciante parece incorrecta';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_f4f70727dc34561dfde1a3c529b6205c'] = 'Ajustes';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_cd1c5e22d4513c1912be45c9ce9ddbe2'] = 'La versión de la API utilizada por este módulo es de 2,0';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_a1ffd2dc2538ea3093532029514d42ac'] = 'Primero utilice el sandbox para probar el múdulo, luego podrá utilizarlo en modo real si toda la configuración se hizo correctamente. No olvide cambiar su contraseña e identificación mercantil según el modo';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_650be61892bf690026089544abbd9d26'] = 'Modo';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_7f80fcc452c2f1ed2bb51b39d0864df1'] = 'Real';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_2652eec977dcb2a5aea85f5bec235b05'] = 'Sandbox';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_96fb435ae559f8a759f22f0823d57f7d'] = 'No se olvide de especificar la divisa utilizada en las fichas de pago en la sección de la moneda';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_386c339d37e737a436499d423a77df0c'] = 'Divisa';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_76055653a95e0a559b734ec322d89632'] = 'Puede encontrar estas claves en su cuenta de comprobación de Google > Ajustes > Integración. En Sandbox y modo real tiene las mismas claves.';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_229a7ec501323b94db7ff3157a7623c9'] = 'ID comerciante';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_795acb9a0c89791314d3032fe65eeb92'] = 'Contraseña comerciante';
|
||||
@@ -39,4 +42,3 @@ $_MODULE['<{gcheckout}prestashop>gcheckout_dba727a9adc372723baef4533a7fc9da'] =
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_0d46d15f70a7cfa670545b308c022840'] = 'Los pedidos deben pasarse con la misma moneda que la cuenta del vendedor. Los carritos en otras monedas serán convertidas si el cliente elige pagar con este módulo.';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_8dd85f4218069de952672fe3180dacdb'] = 'Pagar con GoogleCheckout';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_ba794350deb07c0c96fe73bd12239059'] = 'Embalaje ';
|
||||
$_MODULE['<{gcheckout}prestashop>gcheckout_9f06b28a40790c4c4df5739bce3c1eb0'] = 'Costos de envío';
|
||||
|
||||
@@ -40,6 +40,11 @@ $_MODULE['<{hipay}prestashop>hipay_524fefef83fd5b0b82292a5366b40cd2'] = '16 año
|
||||
$_MODULE['<{hipay}prestashop>hipay_4f47a2eb5f2af6c1419baa17794e5f03'] = '18 años y más';
|
||||
$_MODULE['<{hipay}prestashop>hipay_0d10a9cae9827e30b09913c1ec6ef2db'] = 'Nota : Compruebe, por favor, que el modo de gestión de las divisas que ha elegido en la pestaña Pago es compatible con su/sus cuenta(s) Hipay.';
|
||||
$_MODULE['<{hipay}prestashop>hipay_c80a51a60c5ee43553c3881459b8f431'] = 'Guardar las modificaciones';
|
||||
$_MODULE['<{hipay}prestashop>hipay_e13074ee37ba40a9a412a957b02e42f8'] = 'Zonas de restricciones';
|
||||
$_MODULE['<{hipay}prestashop>hipay_c6eb6bc44fbc78b79cc40f8012eb7634'] = 'Seleccionar las zonas de pago autorizadas';
|
||||
$_MODULE['<{hipay}prestashop>hipay_b718adec73e04ce3ec720dd11a06a308'] = 'Identificación';
|
||||
$_MODULE['<{hipay}prestashop>hipay_dad1f8d794ee0dd7753fe75e73b78f31'] = 'Zonas';
|
||||
$_MODULE['<{hipay}prestashop>hipay_646ac4a2df12eae08dd8e3e749fd9daa'] = 'Actualizar las zonas';
|
||||
$_MODULE['<{hipay}prestashop>payment_cb047ebd77ec02c36fbac405f8c9922c'] = 'Pagar con Hipay';
|
||||
$_MODULE['<{hipay}prestashop>payment_35d5d65e0fb908f81b8c36820ddd7cc6'] = 'Importe mínimo para pagar con Hipay:';
|
||||
$_MODULE['<{hipay}prestashop>payment_e755d43d98e3d597b4492d2e6493ffed'] = 'sandbox / modo test';
|
||||
|
||||
@@ -24,8 +24,12 @@ $_MODULE['<{loyalty}prestashop>loyalty_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No'
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_ade45d72ab6ba1ab576d8b9deb0c2438'] = 'Los Puntos se otorgan cuando el pedido sea';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_9611a682e61c503c32e2dc58fdbc8ddf'] = 'Los puntos se cancelarán cuando la pedido sea';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_2a46cccdea2f18fdfdfacf99a98b758d'] = 'Los vales descuento creados por el sistema de fidelidad pueden utilizarse en las categorías de artículos siguientes:';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_b718adec73e04ce3ec720dd11a06a308'] = 'ID';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_49ee3087348e8d44e1feda1917443987'] = 'Nombre';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_8cf04a9734132302f96da8e113e80ce5'] = 'Inicio';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_ef7de3f485174ff47f061ad27d83d0ee'] = 'seleccionado';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_b56c3bda503a8dc4be356edb0cc31793'] = 'Contraer todos';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_5ffd7a335dd836b3373f5ec570a58bdc'] = 'Desplegar todo';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_5e9df908eafa83cb51c0a3720e8348c7'] = 'Activar todo';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_9747d23c8cc358c5ef78c51e59cd6817'] = 'Desactive la opción Todo';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_c2a7db7dec4de1bdb143ccd790f5a62c'] = 'Marcar para qué categorías se utilizarán los vales descuento de fidelidad';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_30e793698766edbaaf84a74d4c377f72'] = 'Progresión de puntos de fidelidad';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_4f2a91e15af2631ff9424564b8a45fb2'] = 'Inicial';
|
||||
@@ -80,7 +84,6 @@ $_MODULE['<{loyalty}prestashop>loyalty_a16cf3ec5200cc519f4fe48e34b1df83'] = 'El
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_8e69341aca5dbf9f55c2e75a2ed5df3c'] = 'Sin vales aún';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_00d56a5e37c19c59d521530fc8e7f337'] = 'Sin recompensa de puntos todavía';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_0b3db27bc15f682e92ff250ebb167d4b'] = 'Volver a su cuenta';
|
||||
$_MODULE['<{loyalty}prestashop>loyalty_8cf04a9734132302f96da8e113e80ce5'] = 'Inicio';
|
||||
$_MODULE['<{loyalty}prestashop>my-account_c540093e64d84440025b2d8201f04336'] = 'Mis puntos de fidelidad';
|
||||
$_MODULE['<{loyalty}prestashop>product_ded9088edfbcc1041c3a642b031c8f72'] = 'Programa de fidelización';
|
||||
$_MODULE['<{loyalty}prestashop>product_08ef6b34ab8e7039ef0ee69378f0ac0b'] = 'Al comprar este producto puede obtener hasta';
|
||||
@@ -97,4 +100,5 @@ $_MODULE['<{loyalty}prestashop>shopping-cart_4cd8259257033282f11cc9bbe648dff7']
|
||||
$_MODULE['<{loyalty}prestashop>shopping-cart_2996152bb442bf98c80c515c6055de5f'] = 'puntos de fidelidad';
|
||||
$_MODULE['<{loyalty}prestashop>shopping-cart_b40d5c523ee75453134b1449dd9cd13a'] = 'punto de fidelidad';
|
||||
$_MODULE['<{loyalty}prestashop>shopping-cart_443c3e03e194c2a4cdb107808b051615'] = 'que se puede(n) transformar en un vale de descuento de';
|
||||
$_MODULE['<{loyalty}prestashop>shopping-cart_2d354f4df80bbebf309f184c3953dc1d'] = 'No está disponible para los pedidos realizados como invitado';
|
||||
$_MODULE['<{loyalty}prestashop>shopping-cart_8cec799df06a3f5a026b31fcd95e0172'] = 'Añadir más productos al carrito para obtener puntos de fidelidad.';
|
||||
|
||||
@@ -63,7 +63,7 @@ class AdminMondialRelay extends AdminTab
|
||||
<span></span>
|
||||
</div>';
|
||||
|
||||
$orders = MondialRelay::getOrders();
|
||||
$orders = MondialRelay::getOrders(array(), MondialRelay::WITHOUT_HOME_DELIVERY);
|
||||
if (empty($orders))
|
||||
$html.= '<h3 style="color:red;">' . $this->l('No orders with this state.') . '</h3>';
|
||||
else
|
||||
|
||||
@@ -35,13 +35,17 @@
|
||||
require_once(realpath(dirname(__FILE__).'/../../config/config.inc.php'));
|
||||
|
||||
if (Tools::getValue('mrtoken') != sha1('mr'._COOKIE_KEY_.'mrAgain'))
|
||||
die;
|
||||
die();
|
||||
|
||||
require_once(realpath(dirname(__FILE__).'/../../init.php'));
|
||||
require(dirname(__FILE__).'/mondialrelay.php');
|
||||
require(dirname(__FILE__).'/classes/MRCreateTickets.php');
|
||||
require(dirname(__FILE__).'/classes/MRGetTickets.php');
|
||||
require(dirname(__FILE__).'/classes/MRGetRelayPoint.php');
|
||||
require(dirname(__FILE__).'/classes/MRManagement.php');
|
||||
|
||||
global $cookie, $cart, $customer;
|
||||
|
||||
$method = Tools::getValue('method');
|
||||
$params = array();
|
||||
$result = array();
|
||||
@@ -61,12 +65,20 @@ switch($method)
|
||||
case 'DeleteHistory':
|
||||
$params['historyIdList'] = Tools::getValue('history_id_list');
|
||||
break;
|
||||
// 1.3 compatibility to add carrier info when an user select one
|
||||
case 'uninstallDetail':
|
||||
$params['action'] = Tools::getValue('action');
|
||||
break;
|
||||
case 'MRGetRelayPoint':
|
||||
$params['id_carrier'] = Tools::getValue('id_carrier');
|
||||
$params['weight'] = $cart->getTotalWeight();
|
||||
$params['id_address_delivery'] = $cart->id_address_delivery;
|
||||
break;
|
||||
case 'addSelectedCarrierToDB':
|
||||
$params['cart'] = new Cart($cookie->id_cart);
|
||||
// Sometimes the carrier id isn't set into the cart object
|
||||
if (($id_carrier = Tools::getValue('id_carrier')))
|
||||
$params['cart']->id_carrier = $id_carrier;
|
||||
$params['id_carrier'] = Tools::getValue('id_carrier');
|
||||
$params['id_cart'] = $cart->id;
|
||||
$params['id_customer'] = $cookie->id_customer;
|
||||
$params['id_mr_method'] = Tools::getValue('id_mr_method');
|
||||
$params['relayPointInfo'] = Tools::getValue('relayPointInfo');
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
@@ -0,0 +1,314 @@
|
||||
<?php
|
||||
/**
|
||||
* jsmin.php - PHP implementation of Douglas Crockford's JSMin.
|
||||
*
|
||||
* This is a direct port of jsmin.c to PHP with a few PHP performance tweaks and
|
||||
* modifications to preserve some comments (see below). Also, rather than using
|
||||
* stdin/stdout, JSMin::minify() accepts a string as input and returns another
|
||||
* string as output.
|
||||
*
|
||||
* Comments containing IE conditional compilation are preserved, as are multi-line
|
||||
* comments that begin with "/*!" (for documentation purposes). In the latter case
|
||||
* newlines are inserted around the comment to enhance readability.
|
||||
*
|
||||
* PHP 5 or higher is required.
|
||||
*
|
||||
* Permission is hereby granted to use this version of the library under the
|
||||
* same terms as jsmin.c, which has the following license:
|
||||
*
|
||||
* --
|
||||
* Copyright (c) 2002 Douglas Crockford (www.crockford.com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
* of the Software, and to permit persons to whom the Software is furnished to do
|
||||
* so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* The Software shall be used for Good, not Evil.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
* --
|
||||
*
|
||||
* @package JSMin
|
||||
* @author Ryan Grove <ryan@wonko.com> (PHP port)
|
||||
* @author Steve Clay <steve@mrclay.org> (modifications + cleanup)
|
||||
* @author Andrea Giammarchi <http://www.3site.eu> (spaceBeforeRegExp)
|
||||
* @copyright 2002 Douglas Crockford <douglas@crockford.com> (jsmin.c)
|
||||
* @copyright 2008 Ryan Grove <ryan@wonko.com> (PHP port)
|
||||
* @license http://opensource.org/licenses/mit-license.php MIT License
|
||||
* @link http://code.google.com/p/jsmin-php/
|
||||
*/
|
||||
|
||||
class JSMin {
|
||||
const ORD_LF = 10;
|
||||
const ORD_SPACE = 32;
|
||||
const ACTION_KEEP_A = 1;
|
||||
const ACTION_DELETE_A = 2;
|
||||
const ACTION_DELETE_A_B = 3;
|
||||
|
||||
protected $a = "\n";
|
||||
protected $b = '';
|
||||
protected $input = '';
|
||||
protected $inputIndex = 0;
|
||||
protected $inputLength = 0;
|
||||
protected $lookAhead = null;
|
||||
protected $output = '';
|
||||
|
||||
/**
|
||||
* Minify Javascript
|
||||
*
|
||||
* @param string $js Javascript to be minified
|
||||
* @return string
|
||||
*/
|
||||
public static function minify($js)
|
||||
{
|
||||
$jsmin = new JSMin($js);
|
||||
return $jsmin->min();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup process
|
||||
*/
|
||||
public function __construct($input)
|
||||
{
|
||||
$this->input = str_replace("\r\n", "\n", $input);
|
||||
$this->inputLength = strlen($this->input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform minification, return result
|
||||
*/
|
||||
public function min()
|
||||
{
|
||||
if ($this->output !== '') { // min already run
|
||||
return $this->output;
|
||||
}
|
||||
$this->action(self::ACTION_DELETE_A_B);
|
||||
|
||||
while ($this->a !== null) {
|
||||
// determine next command
|
||||
$command = self::ACTION_KEEP_A; // default
|
||||
if ($this->a === ' ') {
|
||||
if (! $this->isAlphaNum($this->b)) {
|
||||
$command = self::ACTION_DELETE_A;
|
||||
}
|
||||
} elseif ($this->a === "\n") {
|
||||
if ($this->b === ' ') {
|
||||
$command = self::ACTION_DELETE_A_B;
|
||||
} elseif (false === strpos('{[(+-', $this->b)
|
||||
&& ! $this->isAlphaNum($this->b)) {
|
||||
$command = self::ACTION_DELETE_A;
|
||||
}
|
||||
} elseif (! $this->isAlphaNum($this->a)) {
|
||||
if ($this->b === ' '
|
||||
|| ($this->b === "\n"
|
||||
&& (false === strpos('}])+-"\'', $this->a)))) {
|
||||
$command = self::ACTION_DELETE_A_B;
|
||||
}
|
||||
}
|
||||
$this->action($command);
|
||||
}
|
||||
$this->output = trim($this->output);
|
||||
return $this->output;
|
||||
}
|
||||
|
||||
/**
|
||||
* ACTION_KEEP_A = Output A. Copy B to A. Get the next B.
|
||||
* ACTION_DELETE_A = Copy B to A. Get the next B.
|
||||
* ACTION_DELETE_A_B = Get the next B.
|
||||
*/
|
||||
protected function action($command)
|
||||
{
|
||||
switch ($command) {
|
||||
case self::ACTION_KEEP_A:
|
||||
$this->output .= $this->a;
|
||||
// fallthrough
|
||||
case self::ACTION_DELETE_A:
|
||||
$this->a = $this->b;
|
||||
if ($this->a === "'" || $this->a === '"') { // string literal
|
||||
$str = $this->a; // in case needed for exception
|
||||
while (true) {
|
||||
$this->output .= $this->a;
|
||||
$this->a = $this->get();
|
||||
if ($this->a === $this->b) { // end quote
|
||||
break;
|
||||
}
|
||||
if (ord($this->a) <= self::ORD_LF) {
|
||||
throw new JSMin_UnterminatedStringException(
|
||||
'Unterminated String: ' . var_export($str, true));
|
||||
}
|
||||
$str .= $this->a;
|
||||
if ($this->a === '\\') {
|
||||
$this->output .= $this->a;
|
||||
$this->a = $this->get();
|
||||
$str .= $this->a;
|
||||
}
|
||||
}
|
||||
}
|
||||
// fallthrough
|
||||
case self::ACTION_DELETE_A_B:
|
||||
$this->b = $this->next();
|
||||
if ($this->b === '/' && $this->isRegexpLiteral()) { // RegExp literal
|
||||
$this->output .= $this->a . $this->b;
|
||||
$pattern = '/'; // in case needed for exception
|
||||
while (true) {
|
||||
$this->a = $this->get();
|
||||
$pattern .= $this->a;
|
||||
if ($this->a === '/') { // end pattern
|
||||
break; // while (true)
|
||||
} elseif ($this->a === '\\') {
|
||||
$this->output .= $this->a;
|
||||
$this->a = $this->get();
|
||||
$pattern .= $this->a;
|
||||
} elseif (ord($this->a) <= self::ORD_LF) {
|
||||
throw new JSMin_UnterminatedRegExpException(
|
||||
'Unterminated RegExp: '. var_export($pattern, true));
|
||||
}
|
||||
$this->output .= $this->a;
|
||||
}
|
||||
$this->b = $this->next();
|
||||
}
|
||||
// end case ACTION_DELETE_A_B
|
||||
}
|
||||
}
|
||||
|
||||
protected function isRegexpLiteral()
|
||||
{
|
||||
if (false !== strpos("\n{;(,=:[!&|?", $this->a)) { // we aren't dividing
|
||||
return true;
|
||||
}
|
||||
if (' ' === $this->a) {
|
||||
$length = strlen($this->output);
|
||||
if ($length < 2) { // weird edge case
|
||||
return true;
|
||||
}
|
||||
// you can't divide a keyword
|
||||
if (preg_match('/(?:case|else|in|return|typeof)$/', $this->output, $m)) {
|
||||
if ($this->output === $m[0]) { // odd but could happen
|
||||
return true;
|
||||
}
|
||||
// make sure it's a keyword, not end of an identifier
|
||||
$charBeforeKeyword = substr($this->output, $length - strlen($m[0]) - 1, 1);
|
||||
if (! $this->isAlphaNum($charBeforeKeyword)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get next char. Convert ctrl char to space.
|
||||
*/
|
||||
protected function get()
|
||||
{
|
||||
$c = $this->lookAhead;
|
||||
$this->lookAhead = null;
|
||||
if ($c === null) {
|
||||
if ($this->inputIndex < $this->inputLength) {
|
||||
$c = $this->input[$this->inputIndex];
|
||||
$this->inputIndex += 1;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if ($c === "\r" || $c === "\n") {
|
||||
return "\n";
|
||||
}
|
||||
if (ord($c) < self::ORD_SPACE) { // control char
|
||||
return ' ';
|
||||
}
|
||||
return $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get next char. If is ctrl character, translate to a space or newline.
|
||||
*/
|
||||
protected function peek()
|
||||
{
|
||||
$this->lookAhead = $this->get();
|
||||
return $this->lookAhead;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is $c a letter, digit, underscore, dollar sign, escape, or non-ASCII?
|
||||
*/
|
||||
protected function isAlphaNum($c)
|
||||
{
|
||||
return (preg_match('/^[0-9a-zA-Z_\\$\\\\]$/', $c) || ord($c) > 126);
|
||||
}
|
||||
|
||||
protected function singleLineComment()
|
||||
{
|
||||
$comment = '';
|
||||
while (true) {
|
||||
$get = $this->get();
|
||||
$comment .= $get;
|
||||
if (ord($get) <= self::ORD_LF) { // EOL reached
|
||||
// if IE conditional comment
|
||||
if (preg_match('/^\\/@(?:cc_on|if|elif|else|end)\\b/', $comment)) {
|
||||
return "/{$comment}";
|
||||
}
|
||||
return $get;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function multipleLineComment()
|
||||
{
|
||||
$this->get();
|
||||
$comment = '';
|
||||
while (true) {
|
||||
$get = $this->get();
|
||||
if ($get === '*') {
|
||||
if ($this->peek() === '/') { // end of comment reached
|
||||
$this->get();
|
||||
// if comment preserved by YUI Compressor
|
||||
if (0 === strpos($comment, '!')) {
|
||||
return "\n/*" . substr($comment, 1) . "*/\n";
|
||||
}
|
||||
// if IE conditional comment
|
||||
if (preg_match('/^@(?:cc_on|if|elif|else|end)\\b/', $comment)) {
|
||||
return "/*{$comment}*/";
|
||||
}
|
||||
return ' ';
|
||||
}
|
||||
} elseif ($get === null) {
|
||||
throw new JSMin_UnterminatedCommentException('Unterminated Comment: ' . var_export('/*' . $comment, true));
|
||||
}
|
||||
$comment .= $get;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the next character, skipping over comments.
|
||||
* Some comments may be preserved.
|
||||
*/
|
||||
protected function next()
|
||||
{
|
||||
$get = $this->get();
|
||||
if ($get !== '/') {
|
||||
return $get;
|
||||
}
|
||||
switch ($this->peek()) {
|
||||
case '/': return $this->singleLineComment();
|
||||
case '*': return $this->multipleLineComment();
|
||||
default: return $get;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class JSMin_UnterminatedStringException extends Exception {}
|
||||
class JSMin_UnterminatedCommentException extends Exception {}
|
||||
class JSMin_UnterminatedRegExpException extends Exception {}
|
||||
@@ -85,7 +85,8 @@ class MRCreateTickets implements IMondialRelayWSMethod
|
||||
'Expe_CP' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[0-9]{5}$#'),
|
||||
'params' => array(),
|
||||
'methodValidation' => 'checkZipcodeByCountry'),
|
||||
'Expe_Pays' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
@@ -129,7 +130,8 @@ class MRCreateTickets implements IMondialRelayWSMethod
|
||||
'Dest_CP' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[0-9]{5}$#'),
|
||||
'params' => array(),
|
||||
'methodValidation' => 'checkZipcodeByCountry'),
|
||||
'Dest_Pays' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
@@ -277,6 +279,7 @@ class MRCreateTickets implements IMondialRelayWSMethod
|
||||
$this->_fields['list']['Expe_Ad4']['value'] = Configuration::get('PS_SHOP_ADDR2');
|
||||
$this->_fields['list']['Expe_Ville']['value'] = Configuration::get('PS_SHOP_CITY');
|
||||
$this->_fields['list']['Expe_CP']['value'] = Configuration::get('PS_SHOP_CODE');
|
||||
$this->_fields['list']['Expe_CP']['params']['id_country'] = Configuration::get('PS_COUNTRY_DEFAULT');
|
||||
|
||||
if (_PS_VERSION_ >= '1.4')
|
||||
$this->_fields['list']['Expe_Pays']['value'] = Country::getIsoById(Configuration::get('PS_SHOP_COUNTRY_ID'));
|
||||
@@ -332,6 +335,7 @@ class MRCreateTickets implements IMondialRelayWSMethod
|
||||
$tmp['Dest_Ad3']['value'] = $deliveriesAddress->address1;
|
||||
$tmp['Dest_Ville']['value'] = $deliveriesAddress->city;
|
||||
$tmp['Dest_CP']['value'] = $deliveriesAddress->postcode;
|
||||
$tmp['Dest_CP']['params']['id_country'] = $deliveriesAddress->id_country;
|
||||
$tmp['Dest_Pays']['value'] = $destIsoCode;
|
||||
$tmp['Dest_Tel1']['value'] = $deliveriesAddress->phone;
|
||||
$tmp['Dest_Tel2']['value'] = $deliveriesAddress->phone_mobile;
|
||||
@@ -369,9 +373,18 @@ class MRCreateTickets implements IMondialRelayWSMethod
|
||||
foreach($rootCase['list'] as $paramName => &$valueDetailed)
|
||||
if ($paramName != 'Texte' && $paramName != 'Security')
|
||||
{
|
||||
$valueDetailed['value'] = strtoupper(MRManagement::replaceAccentedCharacters($valueDetailed['value']));
|
||||
if (preg_match($valueDetailed['regexValidation'], $valueDetailed['value'], $matches))
|
||||
$valueDetailed['value'] = strtoupper(MRTools::replaceAccentedCharacters($valueDetailed['value']));
|
||||
// Call a pointer function if exist to do different test
|
||||
if (isset($valueDetailed['methodValidation']) &&
|
||||
method_exists('MRTools', $valueDetailed['methodValidation']) &&
|
||||
isset($valueDetailed['params']) &&
|
||||
MRTools::$valueDetailed['methodValidation']($valueDetailed['value'], $valueDetailed['params']))
|
||||
$concatenationValue .= $valueDetailed['value'];
|
||||
// Use simple Regex test given by MondialRelay
|
||||
else if (isset($valueDetailed['regexValidation']) &&
|
||||
preg_match($valueDetailed['regexValidation'], $valueDetailed['value'], $matches))
|
||||
$concatenationValue .= $valueDetailed['value'];
|
||||
// If the key is required, we set an error, else it's skipped
|
||||
else if ((!strlen($valueDetailed['value']) && $valueDetailed['required']) || strlen($valueDetailed['value']))
|
||||
{
|
||||
if (empty($valueDetailed['value']))
|
||||
|
||||
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Academic Free License (AFL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/afl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 7086 $
|
||||
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Interface
|
||||
*/
|
||||
require_once(dirname(__FILE__).'/IMondialRelayWSMethod.php');
|
||||
|
||||
/*
|
||||
* Allow to fetch relay point - 'WSI2_RecherchePointRelais'
|
||||
*/
|
||||
class MRGetRelayPoint implements IMondialRelayWSMethod
|
||||
{
|
||||
// Params is required if you use a pointer function
|
||||
private $_fields = array(
|
||||
'list' => array(
|
||||
'Enseigne' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[0-9A-Z]{2}[0-9A-Z ]{6}$#'),
|
||||
'Pays' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[A-Z]{2}$#'),
|
||||
'Ville' => array(
|
||||
'required' => false,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[A-Z_\-\' ]{2,25}$#'),
|
||||
'CP' => array(
|
||||
'required' => false,
|
||||
'value' => '',
|
||||
'params' => array(),
|
||||
'methodValidation' => 'checkZipcodeByCountry'),
|
||||
'Taille' => array(
|
||||
'required' => false,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^(XS|S|M|L|XL|XXL|3XL)$#'),
|
||||
'Poids' => array(
|
||||
'required' => false,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[0-9]{1,6}$#'),
|
||||
'Action' => array(
|
||||
'required' => false,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^(REL|24R|ESP|DRI)$#'),
|
||||
'Security' => array(
|
||||
'required' => true,
|
||||
'value' => '',
|
||||
'regexValidation' => '#^[0-9A-Z]{32}$#')));
|
||||
|
||||
private $_id_address_delivery = 0;
|
||||
private $_weight = 0;
|
||||
private $_webServiceKey = '';
|
||||
private $_mondialRelay = NULL;
|
||||
private $_id_carrier = 0;
|
||||
private $_id_delivery_country = 0;
|
||||
|
||||
private $_resultList = array(
|
||||
'error' => array(),
|
||||
'success' => array());
|
||||
|
||||
private $_webserviceURL = 'http://www.mondialrelay.fr/webservice/Web_Services.asmx?WSDL';
|
||||
|
||||
public function __construct($params)
|
||||
{
|
||||
$this->_id_address_delivery = (int)($params['id_address_delivery']);
|
||||
$this->_id_carrier = (int)($params['id_carrier']);
|
||||
$this->_weight = (float)($params['weight']);
|
||||
$this->_webServiceKey = Configuration::get('MR_KEY_WEBSERVICE');
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
unset($this->_mondialRelay);
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->_mondialRelay = new MondialRelay();
|
||||
$address = new Address($this->_id_address_delivery);
|
||||
|
||||
if (!$address)
|
||||
throw new Exception($this->_mondialrelay->l('Customer address can\'t be found'));
|
||||
|
||||
$this->_fields['list']['Enseigne']['value'] = Configuration::get('MR_ENSEIGNE_WEBSERVICE');
|
||||
$this->_fields['list']['Poids']['value'] = Configuration::get('MR_WEIGHT_COEF') * $this->_weight;
|
||||
$this->_fields['list']['Pays']['value'] = Country::getIsoById($address->id_country);
|
||||
$this->_fields['list']['Ville']['value'] = $address->city;
|
||||
$this->_fields['list']['CP']['value'] = $address->postcode;
|
||||
$this->_fields['list']['CP']['params']['id_country'] = $address->id_country;
|
||||
|
||||
$this->_generateMD5SecurityKey();
|
||||
unset($address);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate the MD5 key for each param list
|
||||
*/
|
||||
private function _generateMD5SecurityKey()
|
||||
{
|
||||
$concatenationValue = '';
|
||||
foreach($this->_fields['list'] as $paramName => &$valueDetailed)
|
||||
if ($paramName != 'Texte' && $paramName != 'Security')
|
||||
{
|
||||
$valueDetailed['value'] = strtoupper($valueDetailed['value']);
|
||||
// Call a pointer function if exist to do different test
|
||||
if (isset($valueDetailed['methodValidation']) &&
|
||||
method_exists('MRTools', $valueDetailed['methodValidation']) &&
|
||||
isset($valueDetailed['params']) &&
|
||||
MRTools::$valueDetailed['methodValidation']($valueDetailed['value'], $valueDetailed['params']))
|
||||
$concatenationValue .= $valueDetailed['value'];
|
||||
// Use simple Regex test given by MondialRelay
|
||||
else if (isset($valueDetailed['regexValidation']) &&
|
||||
preg_match($valueDetailed['regexValidation'], $valueDetailed['value'], $matches))
|
||||
$concatenationValue .= $valueDetailed['value'];
|
||||
// If the key is required, we set an error, else it's skipped
|
||||
else if ((!strlen($valueDetailed['value']) && $valueDetailed['required']) || strlen($valueDetailed['value']))
|
||||
{
|
||||
$error = $this->_mondialRelay->l('This key').' ['.$paramName.'] '.
|
||||
$this->_mondialRelay->l('hasn\'t a valide value format').' : '.$valueDetailed['value'];
|
||||
$this->_resultList['error'][] = $error;
|
||||
}
|
||||
}
|
||||
$concatenationValue .= $this->_webServiceKey;
|
||||
$this->_fields['list']['Security']['value' ] = strtoupper(md5($concatenationValue));
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the values with associated fields name
|
||||
* @fields : array containing multiple values information
|
||||
*/
|
||||
private function _getSimpleParamArray($fields)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
foreach($fields as $keyName => $valueDetailed)
|
||||
$params[$keyName] = $valueDetailed['value'];
|
||||
return $params;
|
||||
}
|
||||
|
||||
/*
|
||||
* Manage the return value of the webservice, handle the errors or build the
|
||||
* succeed message
|
||||
*/
|
||||
private function _parseResult($client, $result, $params)
|
||||
{
|
||||
$errors = array();
|
||||
$success = array();
|
||||
|
||||
if ($client->fault)
|
||||
$errors[$errorTotal++] = $this->_mondialRelay->l('It seems the request isn\'t valid:').
|
||||
$result;
|
||||
|
||||
$result = $result['WSI2_RecherchePointRelaisResult'];
|
||||
if (($errorNumber = $result['STAT']) != 0)
|
||||
{
|
||||
$errors[] = $this->_mondialRelay->l('There is an error number : ').$errorNumber;
|
||||
$errors[] = $this->_mondialRelay->l('Details : ').
|
||||
$this->_mondialRelay->getErrorCodeDetail($errorNumber);
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($result['STAT']);
|
||||
|
||||
// Clean Content
|
||||
foreach($result as &$relayPoint)
|
||||
foreach ($relayPoint as $key => &$value)
|
||||
$value = trim($value);
|
||||
$success = $result;
|
||||
}
|
||||
$this->_resultList['error'] = $errors;
|
||||
$this->_resultList['success'] = $success;
|
||||
}
|
||||
|
||||
/*
|
||||
* Send one or multiple request to the webservice
|
||||
*/
|
||||
public function send()
|
||||
{
|
||||
if ($client = new nusoap_client($this->_webserviceURL, true))
|
||||
{
|
||||
$client->soap_defencoding = 'UTF-8';
|
||||
$client->decode_utf8 = false;
|
||||
|
||||
$params = $this->_getSimpleParamArray($this->_fields['list']);
|
||||
$result = $client->call(
|
||||
'WSI2_RecherchePointRelais',
|
||||
$params,
|
||||
'http://www.mondialrelay.fr/webservice/',
|
||||
'http://www.mondialrelay.fr/webservice/WSI2_RecherchePointRelais');
|
||||
|
||||
$this->_parseResult($client, $result, $params);
|
||||
unset($client);
|
||||
}
|
||||
else
|
||||
throw new Exception($this->_mondialRelay->l('The Mondial Relay webservice isn\'t currently reliable'));
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the values with associated fields name
|
||||
*/
|
||||
public function getFieldsList()
|
||||
{
|
||||
return $this->_fieldsList['list'];
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the result of one or multiple send request
|
||||
*/
|
||||
public function getResult()
|
||||
{
|
||||
return $this->_resultList;
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,6 @@ class MRGetTickets implements IMondialRelayWSMethod
|
||||
|
||||
private $_detailedExpeditionList = array();
|
||||
private $_webServiceKey = '';
|
||||
private $_markCode = '';
|
||||
private $_mondialRelay = NULL;
|
||||
|
||||
private $_resultList = array(
|
||||
@@ -69,7 +68,6 @@ class MRGetTickets implements IMondialRelayWSMethod
|
||||
{
|
||||
$this->_detailedExpeditionList = $params['detailedExpeditionList'];
|
||||
$this->_webServiceKey = Configuration::get('MR_KEY_WEBSERVICE');
|
||||
$this->_markCode = Configuration::get('MR_CODE_MARQUE');
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
|
||||
@@ -47,22 +47,85 @@ class MRManagement extends MondialRelay
|
||||
|
||||
}
|
||||
|
||||
public static function replaceAccentedCharacters($string)
|
||||
{
|
||||
$currentLocale = setlocale(LC_ALL, NULL);
|
||||
setlocale(LC_ALL, 'en_US.UTF8');
|
||||
$cleanedString = iconv('UTF-8','ASCII//TRANSLIT', $string);
|
||||
setLocale(LC_ALL, $currentLocale);
|
||||
return $cleanedString;
|
||||
}
|
||||
|
||||
/*
|
||||
** Retro compatibility for 1.3
|
||||
** This method fill the database with the selected carrier
|
||||
*/
|
||||
public function addSelectedCarrierToDB()
|
||||
{
|
||||
$this->hookProcessCarrier($this->_params, false);
|
||||
$query = 'SELECT `id_mr_selected`
|
||||
FROM `' . _DB_PREFIX_ . 'mr_selected`
|
||||
WHERE `id_cart` = '.(int)$this->_params['id_cart'];
|
||||
|
||||
// Update if Exist else add a new entry
|
||||
if (Db::getInstance()->getRow($query))
|
||||
{
|
||||
$query = 'UPDATE `'._DB_PREFIX_.'mr_selected`
|
||||
SET `id_method` = '.(int)$this->_params['id_mr_method'].', ';
|
||||
if (is_array($this->_params['relayPointInfo']))
|
||||
foreach($this->_params['relayPointInfo'] as $nameKey => $value)
|
||||
$query .= '`MR_Selected_'.$nameKey.'` = "'.$value.'", ';
|
||||
else // Clean the existing relay point data
|
||||
$query .= '
|
||||
MR_Selected_Num = NULL,
|
||||
MR_Selected_LgAdr1 = NULL,
|
||||
MR_Selected_LgAdr2 = NULL,
|
||||
MR_Selected_LgAdr3 = NULL,
|
||||
MR_Selected_LgAdr4 = NULL,
|
||||
MR_Selected_CP = NULL,
|
||||
MR_Selected_Pays = NULL,
|
||||
MR_Selected_Ville = NULL, ';
|
||||
$query = rtrim($query, ', ').' WHERE `id_cart` = '.(int)$this->_params['id_cart'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$query = 'INSERT INTO `' . _DB_PREFIX_ . 'mr_selected`
|
||||
(`id_customer`, `id_method`, `id_cart`, ';
|
||||
if (is_array($this->_params['relayPointInfo']))
|
||||
foreach($this->_params['relayPointInfo'] as $nameKey => $value)
|
||||
$query .= '`MR_Selected_'.$nameKey.'`, ';
|
||||
$query = rtrim($query, ', ').') VALUES (
|
||||
'.$this->_params['id_customer'].',
|
||||
'.$this->_params['id_mr_method'].',
|
||||
'.$this->_params['id_cart'].', ';
|
||||
if (is_array($this->_params['relayPointInfo']))
|
||||
foreach($this->_params['relayPointInfo'] as $nameKey => $value)
|
||||
$query .= '"'.$value.'", ';
|
||||
$query = rtrim($query, ', ').')';
|
||||
}
|
||||
Db::getInstance()->Execute($query);
|
||||
}
|
||||
|
||||
public function uninstallDetail()
|
||||
{
|
||||
$html = '';
|
||||
|
||||
switch($this->_params['action'])
|
||||
{
|
||||
case 'showFancy':
|
||||
$html .= '
|
||||
<div id="PS_MRAskBackupContent">
|
||||
<h2>'.$this->l('Uninstalling Mondial Relay').'</h2>
|
||||
<div>
|
||||
'.$this->l('You\'re attempt to uninstall the module, do you want to remove the database').' ?
|
||||
<p id="PS_MRUninstallListSelection">
|
||||
<input type="button" id="PS_MR_BackupAction" href="javascript:void(0)" value="'.$this->l('Keep it and uninstall').'"/>
|
||||
<br />
|
||||
<input type="button" id="PS_MR_UninstallAction" href="javascript:void(0)" value="'.$this->l('Remove and uninstall').'" />
|
||||
<br />
|
||||
<input type="button" id="PS_MR_StopUninstall" href="javascript:void(0)" value="'.$this->l('Cancel').'" />
|
||||
<br />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
';
|
||||
$this->_resultList['html'] = $html;
|
||||
break;
|
||||
case 'backupAndUninstall':
|
||||
|
||||
break;
|
||||
default:
|
||||
}
|
||||
return $this->_resultList;
|
||||
}
|
||||
|
||||
public function DeleteHistory()
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Academic Free License (AFL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/afl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6839 $
|
||||
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
/*
|
||||
** Some tools using used in the module
|
||||
*/
|
||||
class MRTools
|
||||
{
|
||||
static public function replaceAccentedCharacters($string)
|
||||
{
|
||||
$currentLocale = setlocale(LC_ALL, NULL);
|
||||
setlocale(LC_ALL, 'en_US.UTF8');
|
||||
$cleanedString = iconv('UTF-8','ASCII//TRANSLIT', $string);
|
||||
setLocale(LC_ALL, $currentLocale);
|
||||
return $cleanedString;
|
||||
}
|
||||
|
||||
static public function checkZipcodeByCountry($zipcode, $params)
|
||||
{
|
||||
$id_country = $params['id_country'];
|
||||
|
||||
$zipcodeFormat = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT `zip_code_format`
|
||||
FROM `'._DB_PREFIX_.'country`
|
||||
WHERE `id_country` = '.(int)$id_country);
|
||||
|
||||
if (!$zipcodeFormat)
|
||||
return false;
|
||||
|
||||
$regxMask = str_replace(
|
||||
array('N', 'C', 'L'),
|
||||
array(
|
||||
'[0-9]',
|
||||
Country::getIsoById((int)$id_country),
|
||||
'[a-zA-Z]'),
|
||||
$zipcodeFormat);
|
||||
if (preg_match('/'.$regxMask.'/', $zipcode))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -2,7 +2,7 @@
|
||||
<module>
|
||||
<name>mondialrelay</name>
|
||||
<displayName><![CDATA[Mondial Relay]]></displayName>
|
||||
<version><![CDATA[1.6]]></version>
|
||||
<version><![CDATA[1.7]]></version>
|
||||
<description><![CDATA[Deliver in Relay points]]></description>
|
||||
<author><![CDATA[]]></author>
|
||||
<tab><![CDATA[shipping_logistics]]></tab>
|
||||
|
||||
@@ -45,7 +45,7 @@ $params = array(
|
||||
'Langue' => 'FR'
|
||||
);
|
||||
|
||||
require_once('kit_mondialrelay/tools/nusoap/lib/nusoap.php');
|
||||
require_once(dirname(__FILE__).'/lib/nusoap/lib/nusoap.php');
|
||||
$client_mr = new nusoap_client("http://www.mondialrelay.fr/webservice/Web_Services.asmx?WSDL", true);
|
||||
$client_mr->soap_defencoding = 'UTF-8';
|
||||
$client_mr->decode_utf8 = false;
|
||||
|
||||
@@ -90,11 +90,6 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_0dbe844fb964d5eca2f51be724e4329
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_c6aefd5e2191e1210a2f50416812b517'] = 'Follow-up-URL';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_61e70b58e38fd01daa254f44c4fa264b'] = 'Nb Abholpunkt:';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_bba366864d25056c941b72f18ef79e7c'] = 'Dieser Fehler ist nicht bekannt :';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_2f84f9d5731852c4d07d52ef0badc42e'] = 'Problem beim Lesen der Adressen aus MondialRelay Webservice: Mondial Relay-Server kann abgeschaltet sein';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_016854c68c7122b18d89ff0f5e40502b'] = 'Es gibt keinen Relay Point in der Nähe Ihre eingegebenen Adresse. Ändern Sie die Adresse, oder wählen Sie eine andere Versandmethode';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_21034ae6d01a83e702839a72ba8a77b0'] = '(zzgl. MwSt.).';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_1f87346a16cf80c372065de3c54c86d9'] = '(Inkl. Mwst.)';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_e7a6ca4e744870d455a57b644f696457'] = 'Kostenlos!';
|
||||
$_MODULE['<{mondialrelay}prestashop>orderdetail_81b7b4587a2a3ea7a0d6bb1df3fbba54'] = 'Lieferung nach';
|
||||
$_MODULE['<{mondialrelay}prestashop>mrcreatetickets_a1c3470a944b9625cfb924fd15c8bdbf'] = 'Bitte mindestens eine Bestellung auswählen';
|
||||
$_MODULE['<{mondialrelay}prestashop>mrcreatetickets_e6940b76f045c8bc0aaaa5b2476cdaf7'] = 'Die Anfrage scheint ungültig zu sein';
|
||||
|
||||
@@ -109,11 +109,6 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_0dbe844fb964d5eca2f51be724e4329
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_c6aefd5e2191e1210a2f50416812b517'] = 'URL de los seguimientos';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_61e70b58e38fd01daa254f44c4fa264b'] = 'Número de puntos recogida';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_bba366864d25056c941b72f18ef79e7c'] = 'Este error no se conoce:';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_2f84f9d5731852c4d07d52ef0badc42e'] = 'Problemas para obtener las direcciones de servicio web MondialRelay: los servidores de Mondial Relay pueden estar fuera de servicio';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_016854c68c7122b18d89ff0f5e40502b'] = 'No hay Punto de entrega cerca de su domicilio, por favor cambie su dirección o utilice otro modo de transporte';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_21034ae6d01a83e702839a72ba8a77b0'] = '(sin IVA)';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_1f87346a16cf80c372065de3c54c86d9'] = '(IVA incluido)';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_e7a6ca4e744870d455a57b644f696457'] = '¡Gratis!';
|
||||
$_MODULE['<{mondialrelay}prestashop>orderdetail_81b7b4587a2a3ea7a0d6bb1df3fbba54'] = 'Entregado a';
|
||||
$_MODULE['<{mondialrelay}prestashop>mrcreatetickets_a1c3470a944b9625cfb924fd15c8bdbf'] = 'Por favor, seleccione al menos un pedido';
|
||||
$_MODULE['<{mondialrelay}prestashop>mrcreatetickets_dc41aac14af17f1d19fca5e3b9439e74'] = 'La clave';
|
||||
|
||||
@@ -109,11 +109,6 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_0dbe844fb964d5eca2f51be724e4329
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_c6aefd5e2191e1210a2f50416812b517'] = 'URL du suivi';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_61e70b58e38fd01daa254f44c4fa264b'] = 'Nombre de Points Relais';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_bba366864d25056c941b72f18ef79e7c'] = 'Cette erreur n\'est pas mentionnée:';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_2f84f9d5731852c4d07d52ef0badc42e'] = 'Mondial Relay est inaccessible';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_016854c68c7122b18d89ff0f5e40502b'] = 'Il n\'y a pas de point relais à proximité de votre adresse, veuillez changer votre adresse ou utiliser un autre transporteur';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_21034ae6d01a83e702839a72ba8a77b0'] = 'HT';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_1f87346a16cf80c372065de3c54c86d9'] = 'TTC';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_e7a6ca4e744870d455a57b644f696457'] = 'Gratuit !';
|
||||
$_MODULE['<{mondialrelay}prestashop>orderdetail_81b7b4587a2a3ea7a0d6bb1df3fbba54'] = 'Livraison à';
|
||||
$_MODULE['<{mondialrelay}prestashop>mrcreatetickets_a1c3470a944b9625cfb924fd15c8bdbf'] = 'Veuillez choisir au moins une commande';
|
||||
$_MODULE['<{mondialrelay}prestashop>mrcreatetickets_dc41aac14af17f1d19fca5e3b9439e74'] = 'Cette clé';
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
<?php
|
||||
require_once(dirname(__FILE__).'/../../config/config.inc.php');
|
||||
require_once(dirname(__FILE__).'/../../init.php');
|
||||
require_once(dirname(__FILE__).'/mondialrelay.php');
|
||||
|
||||
MondialRelay::initModuleAccess();
|
||||
echo '<script type="text/javascript" src="'.MondialRelay::$moduleURL.'jquery-1.4.4.min.js"></script>';
|
||||
?>
|
||||
|
||||
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var geocoder;
|
||||
var map;
|
||||
var infowindow = new google.maps.InfoWindow();
|
||||
var markers = [];
|
||||
var json_addresses = null;
|
||||
|
||||
function google_map_init() {
|
||||
geocoder = new google.maps.Geocoder();
|
||||
var latlng = new google.maps.LatLng(-34.397, 150.644);
|
||||
var myOptions = {
|
||||
zoom: 11,
|
||||
center: latlng,
|
||||
mapTypeId: google.maps.MapTypeId.ROADMAP
|
||||
};
|
||||
map = new google.maps.Map(document.getElementById("map"), myOptions);
|
||||
|
||||
geocoder.geocode( {'address': "<?php echo $_GET['address']; ?>"}, function(results, status)
|
||||
{
|
||||
if (status == google.maps.GeocoderStatus.OK)
|
||||
{
|
||||
map.setCenter(results[0].geometry.location);
|
||||
var marker = new google.maps.Marker({
|
||||
map: map,
|
||||
position: results[0].geometry.location
|
||||
});
|
||||
google.maps.event.addListener(marker, 'click', function() {
|
||||
infowindow.setContent("<?php echo $_GET['address']; ?>");
|
||||
infowindow.open(map,marker);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function codeAddress(address, address_google)
|
||||
{
|
||||
geocoder.geocode( {'address': address_google}, function(results, status)
|
||||
{
|
||||
if (status == google.maps.GeocoderStatus.OK)
|
||||
{
|
||||
var image = new google.maps.MarkerImage('<?php echo $_GET['relativ_base_dir']; ?>modules/mondialrelay/kit_mondialrelay/marker.gif');
|
||||
var marker = new google.maps.Marker({
|
||||
map: map,
|
||||
position: results[0].geometry.location,
|
||||
icon : image
|
||||
});
|
||||
google.maps.event.addListener(marker, 'click', function() {
|
||||
infowindow.setContent('<img src="<?php echo $_GET['relativ_base_dir']; ?>modules/mondialrelay/kit_mondialrelay/MR_small.gif" />' + ' ' + address);
|
||||
infowindow.open(map,marker);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function recherche_MR(args)
|
||||
{
|
||||
var ok = 1;
|
||||
if (ok == 1)
|
||||
{
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: 'kit_mondialrelay/RecherchePointRelais_ajax.php',
|
||||
data: args ,
|
||||
dataType: 'json',
|
||||
async : false,
|
||||
success: function(obj) {
|
||||
json_addresses = obj;
|
||||
},
|
||||
error: function(XMLHttpRequest, textStatus, errorThrown) {}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
alert('Formulaire incomplet');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="map" style="height:300px; width:500px; border:1px;" ></div>
|
||||
|
||||
<?php
|
||||
echo '<script type="text/javascript">
|
||||
|
||||
$(document).ready(function ()
|
||||
{
|
||||
recherche_MR(\'relativ_base_dir='.$_GET['relativ_base_dir'].'&Pays='.$_GET['Pays'].'&Ville='.$_GET['Ville'].'&CP='.$_GET['CP'].'&Taille=&Poids='.$_GET['Poids'].'&Action='.$_GET['Action'].'&num='.$_GET['num'].'\');
|
||||
|
||||
window.onload = function()
|
||||
{
|
||||
var cpt = 0;
|
||||
google_map_init();
|
||||
if (json_addresses && json_addresses.addresses)
|
||||
while (json_addresses.addresses[cpt])
|
||||
{
|
||||
if (json_addresses.addresses[cpt].address3.length)
|
||||
{
|
||||
address_google = json_addresses.addresses[cpt].address3+\' \'+json_addresses.addresses[cpt].postcode+\' \'+json_addresses.addresses[cpt].city+\' \'+json_addresses.addresses[cpt].iso_country;
|
||||
address = json_addresses.addresses[cpt].address1+\'<br />\'+json_addresses.addresses[cpt].address2+\' \'+json_addresses.addresses[cpt].address3+\'<br />\'+json_addresses.addresses[cpt].postcode+\' \'+json_addresses.addresses[cpt].city+\' \'+json_addresses.addresses[cpt].iso_country;
|
||||
codeAddress(address, address_google);
|
||||
}
|
||||
cpt++;
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>';
|
||||
?>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -2,11 +2,6 @@
|
||||
|
||||
global $_MODULE;
|
||||
$_MODULE = array();
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_2f84f9d5731852c4d07d52ef0badc42e'] = 'Problema per ottenere gli indirizzi da MondialRelay Webservice: i server di Mondial Relay potrebbero essere inattivi';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_016854c68c7122b18d89ff0f5e40502b'] = 'Il Relay Point non è vicino al tuo indirizzo, per favore cambia il tuo indirizzo o utilizza un altro corriere';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_21034ae6d01a83e702839a72ba8a77b0'] = '(Tasse escl.)';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_1f87346a16cf80c372065de3c54c86d9'] = '(Tasse incl.)';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_e7a6ca4e744870d455a57b644f696457'] = 'Gratis!';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_44585fcd617dce6416d8283b026714c1'] = 'Mondial Relay';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_ed4a3b96dc1f38c160775cac1f7bcd6d'] = 'Consegna nei punti Relay';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_70d70ce314f545b7c500a086f147f64b'] = 'Negozio non valido';
|
||||
@@ -33,7 +28,6 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_b962d8fb95f5a439f50502152f3bad7
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_faf1247ae6846a9955a466d4f301bbe4'] = 'Pagina corriere';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_10d78806b84b97ebc774e9f6277af6ac'] = 'Per generare le etichette, è necessario disporre di un indirizzo valido e registrato per il tuo negozio sulla tua ';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_af5efea250326c1c34d69aa9364b482c'] = 'pagina contatti';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_ddcd6a653f661fd7d219d9102528b917'] = 'Vai al front office';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_fcf5b2122da1d5a5f5c7253b96a3f9d9'] = 'URL Cron task:';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_362dff77f7403550e886db901404856c'] = 'Cancellazione riuscita';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_66661dacf33146201b60dc16520ddd68'] = 'Aggiungere un metodo di spedizione';
|
||||
@@ -62,6 +56,7 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_907eba32d950bfab68227fd7ea22999
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_0c24ec05a02c710cedd400e3680d8b81'] = 'Elenco metodo di spedizione ';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_14039af96b01e718a9c9d9c1259b6472'] = 'Nessun metodo di spedizione creato';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_8596361cec00f8d2438d264827eee737'] = 'Config di spedizione.';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_c9cc8cce247e49bae79f15173ce97354'] = 'Salva';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_f4f70727dc34561dfde1a3c529b6205c'] = 'Impostazioni';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_d02bbc3cb147c272b0445ac5ca7d1a36'] = 'Stato ordine';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_818f954f4838ecad839c5dcbd287d291'] = 'Scegli lo stato dell\'ordine per le etichette. È possibile gestire le etichette';
|
||||
@@ -72,7 +67,6 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_93cba07454f06a4a960172bbd6e2a43
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_b9f5c797ebbf55adccdd8539a65a0241'] = 'Disattivato';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_bafd7322c6e97d25b6299b5d6fe8920b'] = 'No';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_9c5c09beb32c36129b857c2a40c861b6'] = 'Visualizza una mappa di Google sul tuo operatore Mondial Relay, può rallentare il caricamento della pagina del corriere ';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_c9cc8cce247e49bae79f15173ce97354'] = 'Salva';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_1ba3935c9858ffb8e19a35ca640b8505'] = 'Impostazioni account Mondial Relay';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_12a3fbd35c1cab4b1101b91d708efd15'] = 'Insegna WebService:';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_6f0434b67007b555dfd1201f4e0d5254'] = 'Codice marchio:';
|
||||
@@ -86,5 +80,3 @@ $_MODULE['<{mondialrelay}prestashop>mondialrelay_0dbe844fb964d5eca2f51be724e4329
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_c6aefd5e2191e1210a2f50416812b517'] = 'Follow-up URL';
|
||||
$_MODULE['<{mondialrelay}prestashop>mondialrelay_61e70b58e38fd01daa254f44c4fa264b'] = 'N. Point Relay:';
|
||||
$_MODULE['<{mondialrelay}prestashop>orderdetail_81b7b4587a2a3ea7a0d6bb1df3fbba54'] = 'Consegna a';
|
||||
|
||||
?>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 797 B |
@@ -1,151 +0,0 @@
|
||||
<?php
|
||||
include(dirname(__FILE__).'/../../../config/config.inc.php');
|
||||
include(dirname(__FILE__).'/../mondialrelay.php');
|
||||
|
||||
$mondialrelay = new mondialrelay();
|
||||
|
||||
DEFINE('_Enseigne_webservice', Configuration::get('MR_ENSEIGNE_WEBSERVICE'));
|
||||
DEFINE('_Key_webservice', Configuration::get('MR_KEY_WEBSERVICE'));
|
||||
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
||||
$relativ_base_dir=$_POST['relativ_base_dir'];
|
||||
$client_Num=$_POST['Num'];
|
||||
$client_Pays=$_POST['Pays'];
|
||||
$num=$_POST['num_mode'];
|
||||
|
||||
|
||||
function mr_horaire_fr($o1,$f1,$o2,$f2)
|
||||
{
|
||||
$mondialrelay = new mondialrelay();
|
||||
|
||||
if ($o1=='' || $o1==null) {$o1='0000';};
|
||||
if ($f1=='' || $f1==null) {$f1='0000';};
|
||||
if ($o2=='' || $o2==null) {$o2='0000';};
|
||||
if ($f2=='' || $f2==null) {$f2='0000';};
|
||||
$o1=substr($o1, 0, 2).':'.substr($o1, 2, 2);
|
||||
$f1=substr($f1, 0, 2).':'.substr($f1, 2, 2);
|
||||
$o2=substr($o2, 0, 2).':'.substr($o2, 2, 2);
|
||||
$f2=substr($f2, 0, 2).':'.substr($f2, 2, 2);
|
||||
if ($o1=='00:00' && $f1=='00:00') {$p1=$mondialrelay->l('Closed');} else {$p1=$o1.' - '.$f1;};
|
||||
if ($o2=='00:00' && $f2=='00:00') {$p2=$mondialrelay->l('Closed');} else {$p2=$o2.' - '.$f2;};
|
||||
if ($p1=='Fermé' && $p2=='Fermé' ) {$p=$mondialrelay->l('Closed');} else {$p=$p1.' '.$p2;};
|
||||
return utf8_encode($p);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$k_security=strtoupper(md5(_Enseigne_webservice.$client_Num.$client_Pays._Key_webservice));
|
||||
|
||||
require_once('tools/nusoap/lib/nusoap.php');
|
||||
$client_mr = new nusoap_client("http://www.mondialrelay.fr/webservice/Web_Services.asmx?WSDL",true);
|
||||
|
||||
$client_mr->soap_defencoding = 'UTF-8';
|
||||
$client_mr->decode_utf8 = false;
|
||||
|
||||
$params = array(
|
||||
'Enseigne' => _Enseigne_webservice,
|
||||
'Num' => $client_Num,
|
||||
'Pays' => $client_Pays,
|
||||
'Security' => $k_security,
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
$result_mr = $client_mr->call('WSI2_DetailPointRelais', $params, 'http://www.mondialrelay.fr/webservice/', 'http://www.mondialrelay.fr/webservice/WSI2_DetailPointRelais');
|
||||
if ($client_mr->fault)
|
||||
{
|
||||
echo 'a|<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>';
|
||||
print_r($result);
|
||||
echo '</pre>|'.$num;
|
||||
} else
|
||||
{
|
||||
$err = $client_mr->getError();
|
||||
if ($err) { echo 'a|<h2>Error</h2><pre>' . $err . '</pre>|'.$num; }
|
||||
else
|
||||
{
|
||||
$sortie_titre="";
|
||||
$sortie_loc="";
|
||||
$sortie_info="";
|
||||
$sortie_photo="";
|
||||
$sortie_plan="";
|
||||
$sortie_horaires="";
|
||||
echo $result_mr['WSI2_DetailPointRelaisResult']['STAT'].'|';
|
||||
|
||||
|
||||
$sortie_horaires.="<tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Monday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Lundi']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Lundi']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Lundi']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Lundi']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
$sortie_horaires.="<tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Tuesday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mardi']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mardi']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mardi']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mardi']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
$sortie_horaires.="<tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Wednesday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mercredi']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mercredi']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mercredi']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Mercredi']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Thursday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Jeudi']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Jeudi']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Jeudi']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Jeudi']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Friday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Vendredi']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Vendredi']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Vendredi']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Vendredi']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Saturday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Samedi']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Samedi']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Samedi']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Samedi']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
$sortie_horaires.="<td>".$mondialrelay->l('Sunday')."</td>";
|
||||
$sortie_horaires.="<td>".mr_horaire_fr($result_mr['WSI2_DetailPointRelaisResult']['Horaires_Dimanche']['string'][0],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Dimanche']['string'][1],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Dimanche']['string'][2],$result_mr['WSI2_DetailPointRelaisResult']['Horaires_Dimanche']['string'][3])."</td>";
|
||||
$sortie_horaires.="</tr>";
|
||||
|
||||
$sortie_horaires="<table border=0>".$sortie_horaires."</table>";
|
||||
|
||||
|
||||
$sortie_titre.="<strong>".$result_mr['WSI2_DetailPointRelaisResult']['LgAdr1']."</strong>";
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['LgAdr2']!='') {$sortie_titre.="<br>".$result_mr['WSI2_DetailPointRelaisResult']['LgAdr2'];};
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['LgAdr3']!='') {$sortie_titre.="<br>".$result_mr['WSI2_DetailPointRelaisResult']['LgAdr3'];};
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['LgAdr4']!='') {$sortie_titre.="<br>".$result_mr['WSI2_DetailPointRelaisResult']['LgAdr4'];};
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['CP']!='') {$sortie_titre.="<br>".$result_mr['WSI2_DetailPointRelaisResult']['CP'];};
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['Ville']!='') {$sortie_titre.=" ".$result_mr['WSI2_DetailPointRelaisResult']['Ville'];};
|
||||
//if ($result_mr['WSI2_DetailPointRelaisResult']['Pays']!='') {$sortie_titre.=" - ".$result_mr['WSI2_DetailPointRelaisResult']['Pays'];};
|
||||
$sortie_titre="<p>".$sortie_titre."</p>";
|
||||
|
||||
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['Localisation1']!='') {$sortie_loc.=$result_mr['WSI2_DetailPointRelaisResult']['Localisation1'];};
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['Localisation2']!='') {$sortie_loc.="<br>".$result_mr['WSI2_DetailPointRelaisResult']['Localisation2'];};
|
||||
if ($sortie_loc!="") {$sortie_loc="<p>".$sortie_loc."</p>";}
|
||||
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['Information']!='') {$sortie_info="<p>".$result_mr['WSI2_DetailPointRelaisResult']['Information']."</p>";};
|
||||
|
||||
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['URL_Photo']!='') {$sortie_photo="<img src=\"".$result_mr['WSI2_DetailPointRelaisResult']['URL_Photo']."\" width=\"306\" vspace=3 hspace=3>";};
|
||||
if ($result_mr['WSI2_DetailPointRelaisResult']['URL_Plan']!='') {$sortie_plan.="<iframe src=\"".$result_mr['WSI2_DetailPointRelaisResult']['URL_Plan']."\" width=\"394\" height=\"234\" border=\"0\"></iframe>";};
|
||||
$fermer="<a href=\"javascript:void(0)\" onclick=\"masque_recherche_MR_detail('".$num."');\"><img src=\"".$relativ_base_dir."modules/mondialrelay/kit_mondialrelay/close.gif\" border=\"0\" height=\"15\" align=\"right\"></a>";
|
||||
|
||||
|
||||
echo "<div style=\"width=740px;height:15px;\">".$fermer."</div>
|
||||
<div style=\"width=716px;height:459px;padding:3px;overflow:auto;\">
|
||||
<table style='border:none;' width=100%>
|
||||
<tr style='border:none;'><td colspan=2 style='border:none;'><h1>Votre Point Relais</h1></td></tr>
|
||||
<tr style='border:none;'>
|
||||
<td valign=top style='border:none;'>
|
||||
<table style='border:none;' ><tr style='border:none;'><td style='border:none;'><img src=\"".$relativ_base_dir."modules/mondialrelay/kit_mondialrelay/MR.gif\" vspace=3 hspace=3></td><td style='border:none;'>".utf8_encode($sortie_titre.$sortie_loc.$sortie_info)."</td></tr></table><br>
|
||||
".$sortie_plan."
|
||||
</td>
|
||||
|
||||
<td valign=top style='border:none;'>
|
||||
".$sortie_horaires."<br>".$sortie_photo."
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<center><input name=\"select_MR_PR\" id=\"select_MR_PR\" value=\"".utf8_encode($mondialrelay->l('Select this Relay Point'))."\" type=\"button\" onclick=\"
|
||||
document.getElementById('MRchoixRelais".$num.'_'.$result_mr['WSI2_DetailPointRelaisResult']['Num']."').checked=true;select_PR_MR('".$result_mr['WSI2_DetailPointRelaisResult']['Num']."','".$num."');masque_recherche_MR_detail('".$num."');\"></center>
|
||||
</div>|".$num;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,101 +0,0 @@
|
||||
<?php
|
||||
|
||||
include(dirname(__FILE__).'/../../../config/config.inc.php');
|
||||
include(dirname(__FILE__).'/../../../init.php');
|
||||
include(dirname(__FILE__).'/../mondialrelay.php');
|
||||
include(dirname(__FILE__).'/../errorCode.php');
|
||||
|
||||
global $cookie;
|
||||
|
||||
$id_cart_address = Db::getInstance()->getValue('SELECT `MR_Selected_Num` FROM `'._DB_PREFIX_.'mr_selected` WHERE `id_cart` = '.$cookie->id_cart);
|
||||
|
||||
$mondialrelay = new MondialRelay();
|
||||
|
||||
DEFINE('_Enseigne_webservice', Configuration::get('MR_ENSEIGNE_WEBSERVICE'));
|
||||
DEFINE('_Key_webservice', Configuration::get('MR_KEY_WEBSERVICE'));
|
||||
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
||||
$relativ_base_dir = $_POST['relativ_base_dir'];
|
||||
$client_pays_iso = $_POST['Pays'];
|
||||
$client_ville = $_POST['Ville'];
|
||||
$client_cp = $_POST['CP'];
|
||||
$card_taille = $_POST['Taille'];
|
||||
$card_weight = $_POST['Poids'];
|
||||
$client_type_exp = $_POST['Action'];
|
||||
$num = $_POST['num'];
|
||||
|
||||
|
||||
$k_security = strtoupper(md5(_Enseigne_webservice.$client_pays_iso.$client_ville.$client_cp.$card_taille.$card_weight.$client_type_exp._Key_webservice));
|
||||
|
||||
require_once('tools/nusoap/lib/nusoap.php');
|
||||
$client_mr = new nusoap_client("http://www.mondialrelay.fr/webservice/Web_Services.asmx?WSDL", true);
|
||||
|
||||
$client_mr->soap_defencoding = 'UTF-8';
|
||||
$client_mr->decode_utf8 = false;
|
||||
|
||||
$params = array(
|
||||
'Enseigne' => _Enseigne_webservice,
|
||||
'Pays' => $client_pays_iso,
|
||||
'Ville' => $client_ville,
|
||||
'CP' => $client_cp,
|
||||
'Taille' => '',
|
||||
'Poids' => $card_weight,
|
||||
'Action' => $client_type_exp,
|
||||
'Security' => $k_security,
|
||||
);
|
||||
|
||||
$result_mr = $client_mr->call('WSI2_RecherchePointRelais', $params, 'http://www.mondialrelay.fr/webservice/', 'http://www.mondialrelay.fr/webservice/WSI2_RecherchePointRelais');
|
||||
if ($client_mr->fault)
|
||||
{
|
||||
echo 'a|<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>';
|
||||
print_r($result);
|
||||
echo '</pre>|'.$num;
|
||||
}
|
||||
else
|
||||
{
|
||||
$err = $client_mr->getError();
|
||||
if ($err)
|
||||
echo '{"error" : "'.$err.'"}';
|
||||
else if (($code = $result_mr['WSI2_RecherchePointRelaisResult']['STAT']) != 0)
|
||||
echo '{"statError": {"code": "'.$code.'", "msg": "'.
|
||||
(array_key_exists($code, $statCode)) ? $statCode[$code] : 'Unknown error'.'}}';
|
||||
else
|
||||
{
|
||||
$tr = "";
|
||||
echo '{';
|
||||
for ($i = 1; $i <= 10; $i++)
|
||||
{
|
||||
//if ($i==1) {$checked="checked=\"checked\"" ;} else {$checked="";};
|
||||
if($i < 10)
|
||||
$l = '0'.$i;
|
||||
else
|
||||
$l = '10';
|
||||
$numWSI2 = $result_mr['WSI2_RecherchePointRelaisResult']['PR'.$l]['Num'];
|
||||
}
|
||||
|
||||
echo '"base_dir" : "'.$relativ_base_dir.'", ';
|
||||
echo '"addresses" : [';
|
||||
$i = 0;
|
||||
$total = count($result_mr['WSI2_RecherchePointRelaisResult'] );
|
||||
|
||||
foreach ($result_mr['WSI2_RecherchePointRelaisResult'] as $key => $val)
|
||||
{
|
||||
if ($key != 'STAT')
|
||||
{
|
||||
echo '{"address1" : "'.addslashes($val['LgAdr1']).'",
|
||||
"address2" : "'.addslashes($val['LgAdr2']).'",
|
||||
"address3" : "'.addslashes($val['LgAdr3']).'",
|
||||
"address4" : "'.addslashes($val['LgAdr4']).'",
|
||||
"postcode" : "'.addslashes($val['CP']).'",
|
||||
"city" : "'.addslashes($val['Ville']).'",
|
||||
"iso_country" : "'.addslashes($val['Pays']).'",
|
||||
"num" : "'.$val['Num'].'",
|
||||
"checked" : '.($val['Num'] == $id_cart_address ? 1 : 0).'}'.(($i + 1) == $total ? '' : ', ');
|
||||
}
|
||||
++$i;
|
||||
}
|
||||
echo ']}';
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
require('config.MR.inc.php');
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
$var_Expedition=$_POST['Expedition'];
|
||||
$k_security=strtoupper(md5('<'._Enseigne_webservice.'>'.$var_Expedition.'<'._Key_webservice.'>'));
|
||||
echo 'http://www.mondialrelay.fr/lg_fr/espaces/url/popup_exp_details.aspx?cmrq='._Enseigne_webservice.'&nexp='.$var_Expedition.'&crc='.$k_security;
|
||||
|
Before Width: | Height: | Size: 246 B |
@@ -1,56 +0,0 @@
|
||||
var gl_base_dir;
|
||||
|
||||
function set_html_MR_recherche(obj, num, base_dir, cpt)
|
||||
{
|
||||
gl_base_dir = base_dir;
|
||||
|
||||
var html = '\
|
||||
<div style=\'z-index:9998;cursor: wait;position:absolute; top:0; left:0; height:100%; width:100%;display:none;\
|
||||
background-color:#cccccc;-moz-opacity:0.8; opacity:0.8; filter:alpha(opacity=80); -khtml-opacity:0.8;\' id=\'bg_detail_md_'+num+'\'></div>\
|
||||
<div id=\'detail_md_'+num+'\' style=\'position: absolute; background-color:#ffffff; float:left; width:740px; height:480px; border:1px solid #89a; overflow:none; text-align:left; z-index:9999; display:none;\'></div>\
|
||||
<table style=\'border:none;\'>\
|
||||
<tr style=\'border:none;\'>\
|
||||
<td valign=top style=\'border:none;\'><img src="'+base_dir+'modules/mondialrelay/kit_mondialrelay/MR_small.gif"></td>\
|
||||
<td valign=top style=\'border:none; width:500px;\'><strong><span id="MR_LgAdr1_'+obj.num+'">'+obj.address1+'</span></strong> - \
|
||||
<span id="MR_LgAdr2_'+obj.num+'">'+obj.address2+'</span>';
|
||||
if (obj.address2 != '')
|
||||
html = html + ' - ';
|
||||
html = html + '<span id="MR_LgAdr3_'+obj.num+'">'+obj.address3+'</span>';
|
||||
if (obj.address3 != '')
|
||||
html = html + ' - ';
|
||||
html = html + '<span id="MR_LgAdr4_'+obj.num+'">'+obj.address4+'</span>';
|
||||
if (obj.address4 != '')
|
||||
html = html + ' - ';
|
||||
html = html + '<span id="MR_CP_'+obj.num+'">'+obj.postcode+'</span> \
|
||||
<span id="MR_Ville_'+obj.num+'">'+obj.city+'</span> - \
|
||||
<span id="MR_Pays_'+obj.num+'">'+obj.iso_country+'</span></td>\
|
||||
<td valign=top style=\'border:none;\'><a href="#" onclick="recherche_MR_detail(\''+obj.num+'\',\''+obj.iso_country+'\',\''+num+'\'); return false;"><img src="'+base_dir+'modules/mondialrelay/kit_mondialrelay/loupe.gif" border="0"></a></td>\
|
||||
<td valign=top style=\'border:none;\'><input id="MRchoixRelais'+num+'_'+obj.num+'" name="MRchoixRelais_'+num+'" value="MR'+obj.num+'" onclick="select_PR_MR(\''+obj.num+'\',\''+num+'\')" type="radio"';
|
||||
if (obj.checked == '1' || cpt == 0)
|
||||
html = html + ' checked="checked" ';
|
||||
|
||||
html = html + '> </td>\
|
||||
</tr>\
|
||||
</table>';
|
||||
$('#mondialrelay_'+num).html($('#mondialrelay_'+num).html()+html);
|
||||
if (obj.checked == '1' || cpt == 0)
|
||||
select_PR_MR(obj.num, num);
|
||||
}
|
||||
|
||||
function include_mondialrelay(num)
|
||||
{
|
||||
$('#form_mondialrelay_'+num).html('\
|
||||
<input id="MR_Selected_Num_'+num+'" name="MR_Selected_Num_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_LgAdr1_'+num+'" name="MR_Selected_LgAdr1_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_LgAdr2_'+num+'" name="MR_Selected_LgAdr2_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_LgAdr3_'+num+'" name="MR_Selected_LgAdr3_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_LgAdr4_'+num+'" name="MR_Selected_LgAdr4_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_CP_'+num+'" name="MR_Selected_CP_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_Ville_'+num+'" name="MR_Selected_Ville_'+num+'" type="hidden" >\
|
||||
<input id="MR_Selected_Pays_'+num+'" name="MR_Selected_Pays_'+num+'" type="hidden" >\
|
||||
\
|
||||
\
|
||||
<div id="recherche_MR_form_'+num+'" >\
|
||||
</div>\
|
||||
<div id="mondialprelay_'+num+'" style="padding:3px;"></div>');
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
||||
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
header("Location: ../");
|
||||
exit;
|
||||
@@ -1,344 +0,0 @@
|
||||
var relativ_base_dir = _PS_MR_MODULE_DIR_;
|
||||
var num_mode_actif = -1;
|
||||
|
||||
img_loader = new Image;
|
||||
img_loader.src = _PS_MR_MODULE_DIR_+'images/loader.gif';
|
||||
|
||||
var google_map_general = null;
|
||||
var geocoder = null;
|
||||
var recherche = 0;
|
||||
var json_addresses = null;
|
||||
|
||||
function affiche_mydiv_mr(id_carrier, args)
|
||||
{
|
||||
if ($('#id_carrier_mr' + id_carrier).attr("checked") == true)
|
||||
{
|
||||
if ($('#mondialrelay_' + id_carrier).css('display') == 'none')
|
||||
{
|
||||
$('#mondialrelay_' + id_carrier).toggle('slow');
|
||||
$('#mondialrelay_' + id_carrier).show();
|
||||
if ($('#mondialrelay_' + id_carrier).html() == '')
|
||||
recherche_MR(id_carrier, args);
|
||||
else
|
||||
$("#all_mondialrelay_map_" + id_carrier).show();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($('#mondialrelay_' + id_carrier).css('display') == 'block')
|
||||
$('#mondialrelay_' + id_carrier).toggle('slow');
|
||||
$('#mondialrelay_' + id_carrier).hide();
|
||||
$("#all_mondialrelay_map_" + id_carrier).hide();
|
||||
}
|
||||
}
|
||||
|
||||
function recherche_MR(num, args)
|
||||
{
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: _PS_MR_MODULE_DIR_ + 'kit_mondialrelay/RecherchePointRelais_ajax.php',
|
||||
data: args ,
|
||||
dataType: 'json',
|
||||
beforeSend : function(params)
|
||||
{
|
||||
$('#loading_mr').show();
|
||||
},
|
||||
success: function(obj)
|
||||
{
|
||||
$('#loading_mr').hide();
|
||||
$('#mondialrelay_'+num).html('');
|
||||
$("#all_mondialrelay_map_" + num).show();
|
||||
var cpt = 0;
|
||||
if (obj.error)
|
||||
$('#mondialrelay_'+num).html('<div class="error"><p>'+server_error+'</p></div>');
|
||||
else
|
||||
{
|
||||
while (obj.addresses[cpt])
|
||||
{
|
||||
if (obj.addresses[cpt].num)
|
||||
set_html_MR_recherche(obj.addresses[cpt], num, obj.base_dir, cpt);
|
||||
++cpt;
|
||||
}
|
||||
if (!obj.addresses[0].num)
|
||||
$('#mondialrelay_'+num).html('<div class="error"><p>'+address_error+'</p></div>');
|
||||
}
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function masque_recherche_MR_detail(num)
|
||||
{
|
||||
document.getElementById('bg_detail_md_'+num).style.display='none';
|
||||
document.getElementById('detail_md_'+num).style.display='none';
|
||||
document.getElementById('detail_md_'+num).innerHTML=''
|
||||
}
|
||||
|
||||
function recherche_MR_detail(num, pays, num_mode)
|
||||
{
|
||||
oXmlhttpMR5.open('POST',_PS_MR_MODULE_DIR_ + 'kit_mondialrelay/RechercheDetailPointRelais_ajax.php');
|
||||
oXmlhttpMR5.onreadystatechange=function() {
|
||||
if (oXmlhttpMR5.readyState==1) {
|
||||
var arrayPageSize = getPageSize_MR();
|
||||
var arrayScroll = getPageScroll_MR();
|
||||
document.getElementById('bg_detail_md_'+num_mode).style.height = (arrayPageSize[1] + 'px');
|
||||
document.getElementById('bg_detail_md_'+num_mode).style.display='block';
|
||||
document.getElementById('detail_md_'+num_mode).style.top = (Math.round(arrayScroll[1]+(arrayPageSize[3]-480)/2)+ 'px');
|
||||
document.getElementById('detail_md_'+num_mode).style.left = (Math.round((arrayPageSize[2]-740)/2)+ 'px');
|
||||
document.getElementById('detail_md_'+num_mode).innerHTML="<table width=100%><tr height=478 style='border:none;'><td valing=middle style='border:none;'><center><img class='none' src='"+img_loader.src+"' ></center></td></tr></table>";
|
||||
document.getElementById('detail_md_'+num_mode).style.display='block';
|
||||
}
|
||||
/*if (oXmlhttpMR5.readyState==2) {
|
||||
var arrayPageSize = getPageSize_MR();
|
||||
var arrayScroll = getPageScroll_MR();
|
||||
document.getElementById('bg_detail_md').style.height = (arrayPageSize[1] + 'px');
|
||||
document.getElementById('bg_detail_md').style.display='block';
|
||||
document.getElementById('detail_md').style.top = (Math.round(arrayScroll[1]+(arrayPageSize[3]-480)/2)+ 'px');
|
||||
document.getElementById('detail_md').style.left = (Math.round((arrayPageSize[2]-740)/2)+ 'px');
|
||||
document.getElementById('detail_md').innerHTML="<table width=100%><tr height=478 style='border:none;'><td valing=middle style='border:none;'><center><img class='none' src='"+img_loader.src+"' ></center></td></tr></table>";
|
||||
document.getElementById('detail_md').style.display='block';
|
||||
}*/
|
||||
if (oXmlhttpMR5.readyState==4 && oXmlhttpMR5.status == 200) {
|
||||
var response = oXmlhttpMR5.responseText || "z|";
|
||||
res=response.split('|');
|
||||
if (res[0]!=0 && res[0]!='a' && res[0]!='z')
|
||||
{masque_recherche_MR_detail(num_mode);
|
||||
message_MR(res[0]);}
|
||||
else if (res[0]=='a') {document.getElementById('detail_md_'+res[2]).innerHTML=res[1];}
|
||||
else if (res[0]=='z') {masque_recherche_MR_detail(res[2]); alert('Requ�te sans r�ponse.');}
|
||||
else {document.getElementById('detail_md_'+res[2]).innerHTML=res[1];};};
|
||||
}
|
||||
|
||||
oXmlhttpMR5.setRequestHeader("Content-type", "application/x-www-form-urlencoded; ");
|
||||
var data = 'relativ_base_dir='+encodeURIComponent(relativ_base_dir)+'&Num='+encodeURIComponent(num)+'&Pays='+encodeURIComponent(pays)+'&num_mode='+num_mode;
|
||||
oXmlhttpMR5.send (data);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function select_PR_MR(num, id_carrier)
|
||||
{
|
||||
if (num != '')
|
||||
{
|
||||
$('#MR_Selected_Num_'+id_carrier).val(num);
|
||||
$('#MR_Selected_LgAdr1_'+id_carrier).val($('#MR_LgAdr1_'+num).html());
|
||||
$('#MR_Selected_LgAdr2_'+id_carrier).val($('#MR_LgAdr2_'+num).html());
|
||||
$('#MR_Selected_LgAdr3_'+id_carrier).val($('#MR_LgAdr3_'+num).html());
|
||||
$('#MR_Selected_LgAdr4_'+id_carrier).val($('#MR_LgAdr4_'+num).html());
|
||||
$('#MR_Selected_CP_'+id_carrier).val($('#MR_CP_'+num).html());
|
||||
$('#MR_Selected_Ville_'+id_carrier).val($('#MR_Ville_'+num).html());
|
||||
$('#MR_Selected_Pays_'+id_carrier).val($('#MR_Pays_'+num).html());
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#MR_Selected_Num_'+id_carrier).val('');
|
||||
$('#MR_Selected_LgAdr1_'+id_carrier).val('');
|
||||
$('#MR_Selected_LgAdr2_'+id_carrier).val('');
|
||||
$('#MR_Selected_LgAdr3_'+id_carrier).val('');
|
||||
$('#MR_Selected_LgAdr4_'+id_carrier).val('');
|
||||
$('#MR_Selected_CP_'+id_carrier).val('');
|
||||
$('#MR_Selected_Ville_'+id_carrier).val('');
|
||||
$('#MR_Selected_Pays_'+id_carrier).val('');
|
||||
};
|
||||
if (one_page_checkout == true)
|
||||
{
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: gl_base_dir + 'modules/mondialrelay/kit_mondialrelay/mr_opc_ajax.php',
|
||||
async: true,
|
||||
cache: false,
|
||||
data: 'Num='+$('#MR_Selected_Num_'+id_carrier).val()+'&LgAdr1='+$('#MR_Selected_LgAdr1_'+id_carrier).val()+'&LgAdr2='+$('#MR_Selected_LgAdr2_'+id_carrier).val()+'&LgAdr3='+$('#MR_Selected_LgAdr3_'+id_carrier).val()+'&LgAdr4='+$('#MR_Selected_LgAdr4_'+id_carrier).val()+'&CP='+ $('#MR_Selected_CP_'+id_carrier).val()+'&Ville='+$('#MR_Selected_Ville_'+id_carrier).val()+'&Pays='+$('#MR_Selected_Pays_'+id_carrier).val()
|
||||
});
|
||||
}
|
||||
|
||||
// 1.3 compatibility, hookProcessCarrier Missing
|
||||
// Allow to fill the database with the selected information
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: _PS_MR_MODULE_DIR_ + 'ajax.php',
|
||||
data: 'method=addSelectedCarrierToDB' +
|
||||
'&id_carrier=' + id_carrier +
|
||||
'&MR_Selected_Num_' + id_carrier + '=' + $('#MR_Selected_Num_' + id_carrier).val() +
|
||||
'&MR_Selected_LgAdr1_' + id_carrier + '=' + $('#MR_Selected_LgAdr1_' + id_carrier).val() +
|
||||
'&MR_Selected_LgAdr2_' + id_carrier + '=' + $('#MR_Selected_LgAdr2_' + id_carrier).val() +
|
||||
'&MR_Selected_LgAdr3_' + id_carrier + '=' + $('#MR_Selected_LgAdr3_' + id_carrier).val() +
|
||||
'&MR_Selected_LgAdr4_' + id_carrier + '=' + $('#MR_Selected_LgAdr4_' + id_carrier).val() +
|
||||
'&MR_Selected_CP_' + id_carrier + '=' + $('#MR_Selected_CP_' + id_carrier).val() +
|
||||
'&MR_Selected_Ville_' + id_carrier + '=' + $('#MR_Selected_Ville_' + id_carrier).val() +
|
||||
'&MR_Selected_Pays_' + id_carrier + '=' + $('#MR_Selected_Pays_' + id_carrier).val(),
|
||||
success: function(json)
|
||||
{
|
||||
//console.log(json);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
//console.log(xhr);
|
||||
//console.log(thrownError);
|
||||
//console.log(ajaxOptions);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function message_MR(etat)
|
||||
{
|
||||
if (etat == 'a') {alert("R�sultat vide");}
|
||||
if (etat == 1) {alert("Enseigne invalide");}
|
||||
if (etat == 2) {alert("Num�ro d'enseigne vide ou inexistant");}
|
||||
if (etat == 3) {alert("Num�ro de compte enseigne invalide");}
|
||||
if (etat == 5) {alert("Num�ro de dossier enseigne invalide");}
|
||||
if (etat == 7) {alert("Num�ro de client enseigne invalide");}
|
||||
if (etat == 9) {alert("Nom de ville non reconnu ou non unique");}
|
||||
if (etat == 10) {alert("Type de collecte invalide ou incorrect (1/D > Domicile -- 3/R > Relais)");}
|
||||
if (etat == 11) {alert("Num�ro de Point Relais de collecte invalide");}
|
||||
if (etat == 12) {alert("Pays du Point Relais de collecte invalide");}
|
||||
if (etat == 13) {alert("Type de livraison invalide ou incorrect (1/D > Domicile -- 3/R > Relais)");}
|
||||
if (etat == 14) {alert("Num�ro du Point Relais de livraison invalide");}
|
||||
if (etat == 15) {alert("Pays du Point Relais de livraison invalide");}
|
||||
if (etat == 16) {alert("Code pays invalide");}
|
||||
if (etat == 17) {alert("Adresse invalide");}
|
||||
if (etat == 18) {alert("Ville invalide");}
|
||||
if (etat == 19) {alert("Code postal invalide");}
|
||||
if (etat == 20) {alert("Poids du colis invalide");}
|
||||
if (etat == 21) {alert("Taille (Longueur + Hauteur) du colis invalide");}
|
||||
if (etat == 22) {alert("Taille du Colis invalide");}
|
||||
if (etat == 24) {alert("Num�ro de Colis Mondial Relay invalide");}
|
||||
if (etat == 28) {alert("Mode de collecte invalide");}
|
||||
if (etat == 29) {alert("Mode de livraison invalide");}
|
||||
if (etat == 30) {alert("Adresse (L1) de l'exp�diteur invalide");}
|
||||
if (etat == 31) {alert("Adresse (L2) de l'exp�diteur invalide");}
|
||||
if (etat == 33) {alert("Adresse (L3) de l'exp�diteur invalide");}
|
||||
if (etat == 34) {alert("Adresse (L4) de l'exp�diteur invalide");}
|
||||
if (etat == 35) {alert("Ville de l'exp�diteur invalide");}
|
||||
if (etat == 36) {alert("Code postal de l'exp�diteur invalide");}
|
||||
if (etat == 37) {alert("Pays de l'exp�diteur invalide");}
|
||||
if (etat == 38) {alert("Num�ro de t�l�phone de l'exp�diteur invalide");}
|
||||
if (etat == 39) {alert("Adresse e-mail de l'exp�diteur invalide");}
|
||||
if (etat == 40) {alert("Action impossible sans ville ni code postal");}
|
||||
if (etat == 41) {alert("Mode de livraison invalide");}
|
||||
if (etat == 42) {alert("Montant CRT invalide");}
|
||||
if (etat == 43) {alert("Devise CRT invalide");}
|
||||
if (etat == 44) {alert("Valeur du colis invalide");}
|
||||
if (etat == 45) {alert("Devise de la valeur du colis invalide");}
|
||||
if (etat == 46) {alert("Plage de num�ro d'exp�dition epuisee");}
|
||||
if (etat == 47) {alert("Nombre de colis invalide");}
|
||||
if (etat == 48) {alert("Multi-colis en Point Relais Interdit");}
|
||||
if (etat == 49) {alert("Mode de collecte ou de livraison invalide");}
|
||||
if (etat == 50) {alert("Adresse (L1) du destinataire invalide");}
|
||||
if (etat == 51) {alert("Adresse (L2) du destinataire invalide");}
|
||||
if (etat == 53) {alert("Adresse (L3) du destinataire invalide");}
|
||||
if (etat == 54) {alert("Adresse (L4) du destinataire invalide");}
|
||||
if (etat == 55) {alert("Ville du destinataire invalide");}
|
||||
if (etat == 56) {alert("Code postal du destinataire invalide");}
|
||||
if (etat == 57) {alert("Pays du destinataire invalide");}
|
||||
if (etat == 58) {alert("Num�ro de t�l�phone du destinataire invalide");}
|
||||
if (etat == 59) {alert("Adresse e-mail du destinataire invalide");}
|
||||
if (etat == 60) {alert("Champ texte libre invalide");}
|
||||
if (etat == 61) {alert("Top avisage invalide");}
|
||||
if (etat == 62) {alert("Instruction de livraison invalide");}
|
||||
if (etat == 63) {alert("Assurance invalide ou incorrecte");}
|
||||
if (etat == 64) {alert("Temps de montage invalide");}
|
||||
if (etat == 65) {alert("Top rendez-vous invalide");}
|
||||
if (etat == 66) {alert("Top reprise invalide");}
|
||||
if (etat == 70) {alert("Num�ro de Point Relais invalide");}
|
||||
if (etat == 72) {alert("Langue exp�diteur invalide");}
|
||||
if (etat == 73) {alert("Langue destinataire invalide");}
|
||||
if (etat == 74) {alert("Langue invalide");}
|
||||
if (etat == 80) {alert("Code tracing : Colis enregistre");}
|
||||
if (etat == 81) {alert("Code tracing : Colis en traitement chez Mondial Relay");}
|
||||
if (etat == 82) {alert("Code tracing : Colis livre");}
|
||||
if (etat == 83) {alert("Code tracing : Anomalie");}
|
||||
if (etat == 84) {alert("84 (R�serv� Code Tracing)");}
|
||||
if (etat == 85) {alert("85 (R�serv� Code Tracing)");}
|
||||
if (etat == 86) {alert("86 (R�serv� Code Tracing)");}
|
||||
if (etat == 87) {alert("87 (R�serv� Code Tracing)");}
|
||||
if (etat == 88) {alert("88 (R�serv� Code Tracing)");}
|
||||
if (etat == 89) {alert("89 (R�serv� Code Tracing)");}
|
||||
if (etat == 90) {alert("AS400 indisponible");}
|
||||
if (etat == 91) {alert("Num�ro d'exp�dition invalide");}
|
||||
if (etat == 93) {alert("Aucun �l�ment retourn� par le plan de tri\n\
|
||||
Si vous effectuez une collecte ou une livraison en Point Relais, v�rifiez que les\n\
|
||||
Point Relais sont bien disponibles.\n\
|
||||
Si vous effectuez une livraison � domicile, il est probable que le code postal que\n\
|
||||
vous avez indiquez n'existe pas.");}
|
||||
if (etat == 94) {alert("Colis Inexistant");}
|
||||
if (etat == 95) {alert("Compte Enseigne non active");}
|
||||
if (etat == 96) {alert("Type d'enseigne incorrect en Base");}
|
||||
if (etat == 97) {alert("Cl� de s�curit� invalide");}
|
||||
if (etat == 98) {alert("Service Indisponible");}
|
||||
if (etat == 99) {alert("Erreur g�n�rique du service\n\
|
||||
Cette erreur peut �tre d� autant � un probl�me technique du service qu'� des\n\
|
||||
donn�es incorrectes ou inexistantes dans la Base de Donn�es. Lorsque vous avez\n\
|
||||
cette erreur veuillez la notifier � Mondial Relay en pr�cisant la date et l'heure de la\n\
|
||||
connexion ainsi que les informations envoy�s au WebService afin d'effectuer une\n\
|
||||
v�rification.");}
|
||||
}
|
||||
|
||||
|
||||
function getPageScroll_MR()
|
||||
{
|
||||
|
||||
var yScroll;
|
||||
|
||||
if (self.pageYOffset) {
|
||||
yScroll = self.pageYOffset;
|
||||
} else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
|
||||
yScroll = document.documentElement.scrollTop;
|
||||
} else if (document.body) {// all other Explorers
|
||||
yScroll = document.body.scrollTop;
|
||||
}
|
||||
|
||||
arrayPageScroll = new Array('',yScroll)
|
||||
return arrayPageScroll;
|
||||
}
|
||||
|
||||
|
||||
function getPageSize_MR()
|
||||
{
|
||||
|
||||
var xScroll, yScroll;
|
||||
|
||||
if (window.innerHeight && window.scrollMaxY) {
|
||||
xScroll = document.body.scrollWidth;
|
||||
yScroll = window.innerHeight + window.scrollMaxY;
|
||||
} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
|
||||
xScroll = document.body.scrollWidth;
|
||||
yScroll = document.body.scrollHeight;
|
||||
} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
|
||||
xScroll = document.body.offsetWidth;
|
||||
yScroll = document.body.offsetHeight;
|
||||
}
|
||||
|
||||
var windowWidth, windowHeight;
|
||||
if (self.innerHeight) { // all except Explorer
|
||||
windowWidth = self.innerWidth;
|
||||
windowHeight = self.innerHeight;
|
||||
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
|
||||
windowWidth = document.documentElement.clientWidth;
|
||||
windowHeight = document.documentElement.clientHeight;
|
||||
} else if (document.body) { // other Explorers
|
||||
windowWidth = document.body.clientWidth;
|
||||
windowHeight = document.body.clientHeight;
|
||||
}
|
||||
|
||||
// for small pages with total height less then height of the viewport
|
||||
if(yScroll < windowHeight){
|
||||
pageHeight = windowHeight;
|
||||
} else {
|
||||
pageHeight = yScroll;
|
||||
}
|
||||
|
||||
// for small pages with total width less then width of the viewport
|
||||
if(xScroll < windowWidth){
|
||||
pageWidth = windowWidth;
|
||||
} else {
|
||||
pageWidth = xScroll;
|
||||
}
|
||||
|
||||
|
||||
arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
|
||||
return arrayPageSize;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
include(dirname(__FILE__).'/../../../config/config.inc.php');
|
||||
include(dirname(__FILE__).'/../../../init.php');
|
||||
include(dirname(__FILE__).'/../mondialrelay.php');
|
||||
|
||||
global $cookie;
|
||||
|
||||
$cart = new Cart($cookie->id_cart);
|
||||
$result_MR = Db::getInstance()->ExecuteS("SELECT * FROM "._DB_PREFIX_."mr_method WHERE id_carrier='".(int)($cart->id_carrier)."' ;");
|
||||
|
||||
Db::getInstance()->delete(_DB_PREFIX_.'mr_selected','id_cart = "'.(int)($cart->id).'"');
|
||||
$mrselected = new MondialRelayClass();
|
||||
$mrselected->id_customer = $cart->id_customer;
|
||||
$mrselected->id_method = $result_MR[0]['id_mr_method'];
|
||||
$mrselected->id_cart = $cart->id;
|
||||
$mrselected->MR_Selected_Num = $_POST['Num'];
|
||||
$mrselected->MR_Selected_LgAdr1 = $_POST['LgAdr1'];
|
||||
$mrselected->MR_Selected_LgAdr2 = $_POST['LgAdr2'];
|
||||
$mrselected->MR_Selected_LgAdr3 = $_POST['LgAdr3'];
|
||||
$mrselected->MR_Selected_LgAdr4 = $_POST['LgAdr4'];
|
||||
$mrselected->MR_Selected_CP = $_POST['CP'];
|
||||
$mrselected->MR_Selected_Ville = $_POST['Ville'];
|
||||
$mrselected->MR_Selected_Pays = $_POST['Pays'];
|
||||
$mrselected->save();
|
||||
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
||||
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
header("Location: ../");
|
||||
exit;
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
||||
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
header("Location: ../");
|
||||
exit;
|
||||
@@ -1,995 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
$Id: class.nusoap_base.php 7091 2011-06-16 11:34:02Z mMarinetti $
|
||||
|
||||
NuSOAP - Web Services Toolkit for PHP
|
||||
|
||||
Copyright (c) 2002 NuSphere Corporation
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
The NuSOAP project home is:
|
||||
http://sourceforge.net/projects/nusoap/
|
||||
|
||||
The primary support for NuSOAP is the Help forum on the project home page.
|
||||
|
||||
If you have any questions or comments, please email:
|
||||
|
||||
Dietrich Ayala
|
||||
dietrich@ganx4.com
|
||||
http://dietrich.ganx4.com/nusoap
|
||||
|
||||
NuSphere Corporation
|
||||
http://www.nusphere.com
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* Some of the standards implmented in whole or part by NuSOAP:
|
||||
*
|
||||
* SOAP 1.1 (http://www.w3.org/TR/2000/NOTE-SOAP-20000508/)
|
||||
* WSDL 1.1 (http://www.w3.org/TR/2001/NOTE-wsdl-20010315)
|
||||
* SOAP Messages With Attachments (http://www.w3.org/TR/SOAP-attachments)
|
||||
* XML 1.0 (http://www.w3.org/TR/2006/REC-xml-20060816/)
|
||||
* Namespaces in XML 1.0 (http://www.w3.org/TR/2006/REC-xml-names-20060816/)
|
||||
* XML Schema 1.0 (http://www.w3.org/TR/xmlschema-0/)
|
||||
* RFC 2045 Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
|
||||
* RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1
|
||||
* RFC 2617 HTTP Authentication: Basic and Digest Access Authentication
|
||||
*/
|
||||
|
||||
/* load classes
|
||||
|
||||
// necessary classes
|
||||
require_once('class.soapclient.php');
|
||||
require_once('class.soap_val.php');
|
||||
require_once('class.soap_parser.php');
|
||||
require_once('class.soap_fault.php');
|
||||
|
||||
// transport classes
|
||||
require_once('class.soap_transport_http.php');
|
||||
|
||||
// optional add-on classes
|
||||
require_once('class.xmlschema.php');
|
||||
require_once('class.wsdl.php');
|
||||
|
||||
// server class
|
||||
require_once('class.soap_server.php');*/
|
||||
|
||||
// class variable emulation
|
||||
// cf. http://www.webkreator.com/php?controller=techniques/php-static-class-variables.html
|
||||
$GLOBALS['_transient']['static']['nusoap_base']['globalDebugLevel'] = 9;
|
||||
|
||||
/**
|
||||
*
|
||||
* nusoap_base
|
||||
*
|
||||
* @author Dietrich Ayala <dietrich@ganx4.com>
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @version $Id: class.nusoap_base.php 7091 2011-06-16 11:34:02Z mMarinetti $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_base {
|
||||
/**
|
||||
* Identification for HTTP headers.
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $title = 'NuSOAP';
|
||||
/**
|
||||
* Version for HTTP headers.
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $version = '0.9.5';
|
||||
/**
|
||||
* CVS revision for HTTP headers.
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $revision = '$Revision: 7091 $';
|
||||
/**
|
||||
* Current error string (manipulated by getError/setError)
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $error_str = '';
|
||||
/**
|
||||
* Current debug string (manipulated by debug/appendDebug/clearDebug/getDebug/getDebugAsXMLComment)
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $debug_str = '';
|
||||
/**
|
||||
* toggles automatic encoding of special characters as entities
|
||||
* (should always be true, I think)
|
||||
*
|
||||
* @var boolean
|
||||
* @access private
|
||||
*/
|
||||
var $charencoding = true;
|
||||
/**
|
||||
* the debug level for this instance
|
||||
*
|
||||
* @var integer
|
||||
* @access private
|
||||
*/
|
||||
var $debugLevel;
|
||||
|
||||
/**
|
||||
* set schema version
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
var $XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema';
|
||||
|
||||
/**
|
||||
* charset encoding for outgoing messages
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
var $soap_defencoding = 'ISO-8859-1';
|
||||
//var $soap_defencoding = 'UTF-8';
|
||||
|
||||
/**
|
||||
* namespaces in an array of prefix => uri
|
||||
*
|
||||
* this is "seeded" by a set of constants, but it may be altered by code
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $namespaces = array(
|
||||
'SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
||||
'xsd' => 'http://www.w3.org/2001/XMLSchema',
|
||||
'xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
||||
'SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/'
|
||||
);
|
||||
|
||||
/**
|
||||
* namespaces used in the current context, e.g. during serialization
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
var $usedNamespaces = array();
|
||||
|
||||
/**
|
||||
* XML Schema types in an array of uri => (array of xml type => php type)
|
||||
* is this legacy yet?
|
||||
* no, this is used by the nusoap_xmlschema class to verify type => namespace mappings.
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $typemap = array(
|
||||
'http://www.w3.org/2001/XMLSchema' => array(
|
||||
'string'=>'string','boolean'=>'boolean','float'=>'double','double'=>'double','decimal'=>'double',
|
||||
'duration'=>'','dateTime'=>'string','time'=>'string','date'=>'string','gYearMonth'=>'',
|
||||
'gYear'=>'','gMonthDay'=>'','gDay'=>'','gMonth'=>'','hexBinary'=>'string','base64Binary'=>'string',
|
||||
// abstract "any" types
|
||||
'anyType'=>'string','anySimpleType'=>'string',
|
||||
// derived datatypes
|
||||
'normalizedString'=>'string','token'=>'string','language'=>'','NMTOKEN'=>'','NMTOKENS'=>'','Name'=>'','NCName'=>'','ID'=>'',
|
||||
'IDREF'=>'','IDREFS'=>'','ENTITY'=>'','ENTITIES'=>'','integer'=>'integer','nonPositiveInteger'=>'integer',
|
||||
'negativeInteger'=>'integer','long'=>'integer','int'=>'integer','short'=>'integer','byte'=>'integer','nonNegativeInteger'=>'integer',
|
||||
'unsignedLong'=>'','unsignedInt'=>'','unsignedShort'=>'','unsignedByte'=>'','positiveInteger'=>''),
|
||||
'http://www.w3.org/2000/10/XMLSchema' => array(
|
||||
'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'double',
|
||||
'float'=>'double','dateTime'=>'string',
|
||||
'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-type'=>'array'),
|
||||
'http://www.w3.org/1999/XMLSchema' => array(
|
||||
'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'double',
|
||||
'float'=>'double','dateTime'=>'string',
|
||||
'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-type'=>'array'),
|
||||
'http://soapinterop.org/xsd' => array('SOAPStruct'=>'struct'),
|
||||
'http://schemas.xmlsoap.org/soap/encoding/' => array('base64'=>'string','array'=>'array','Array'=>'array'),
|
||||
'http://xml.apache.org/xml-soap' => array('Map')
|
||||
);
|
||||
|
||||
/**
|
||||
* XML entities to convert
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
* @deprecated
|
||||
* @see expandEntities
|
||||
*/
|
||||
var $xmlEntities = array('quot' => '"','amp' => '&',
|
||||
'lt' => '<','gt' => '>','apos' => "'");
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function nusoap_base() {
|
||||
$this->debugLevel = $GLOBALS['_transient']['static']['nusoap_base']['globalDebugLevel'];
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the global debug level, which applies to future instances
|
||||
*
|
||||
* @return integer Debug level 0-9, where 0 turns off
|
||||
* @access public
|
||||
*/
|
||||
function getGlobalDebugLevel() {
|
||||
return $GLOBALS['_transient']['static']['nusoap_base']['globalDebugLevel'];
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the global debug level, which applies to future instances
|
||||
*
|
||||
* @param int $level Debug level 0-9, where 0 turns off
|
||||
* @access public
|
||||
*/
|
||||
function setGlobalDebugLevel($level) {
|
||||
$GLOBALS['_transient']['static']['nusoap_base']['globalDebugLevel'] = $level;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the debug level for this instance
|
||||
*
|
||||
* @return int Debug level 0-9, where 0 turns off
|
||||
* @access public
|
||||
*/
|
||||
function getDebugLevel() {
|
||||
return $this->debugLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the debug level for this instance
|
||||
*
|
||||
* @param int $level Debug level 0-9, where 0 turns off
|
||||
* @access public
|
||||
*/
|
||||
function setDebugLevel($level) {
|
||||
$this->debugLevel = $level;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds debug data to the instance debug string with formatting
|
||||
*
|
||||
* @param string $string debug data
|
||||
* @access private
|
||||
*/
|
||||
function debug($string){
|
||||
if ($this->debugLevel > 0) {
|
||||
$this->appendDebug($this->getmicrotime().' '.get_class($this).": $string\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* adds debug data to the instance debug string without formatting
|
||||
*
|
||||
* @param string $string debug data
|
||||
* @access public
|
||||
*/
|
||||
function appendDebug($string){
|
||||
if ($this->debugLevel > 0) {
|
||||
// it would be nice to use a memory stream here to use
|
||||
// memory more efficiently
|
||||
$this->debug_str .= $string;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clears the current debug data for this instance
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function clearDebug() {
|
||||
// it would be nice to use a memory stream here to use
|
||||
// memory more efficiently
|
||||
$this->debug_str = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the current debug data for this instance
|
||||
*
|
||||
* @return debug data
|
||||
* @access public
|
||||
*/
|
||||
function &getDebug() {
|
||||
// it would be nice to use a memory stream here to use
|
||||
// memory more efficiently
|
||||
return $this->debug_str;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the current debug data for this instance as an XML comment
|
||||
* this may change the contents of the debug data
|
||||
*
|
||||
* @return debug data as an XML comment
|
||||
* @access public
|
||||
*/
|
||||
function &getDebugAsXMLComment() {
|
||||
// it would be nice to use a memory stream here to use
|
||||
// memory more efficiently
|
||||
while (strpos($this->debug_str, '--')) {
|
||||
$this->debug_str = str_replace('--', '- -', $this->debug_str);
|
||||
}
|
||||
$ret = "<!--\n" . $this->debug_str . "\n-->";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* expands entities, e.g. changes '<' to '<'.
|
||||
*
|
||||
* @param string $val The string in which to expand entities.
|
||||
* @access private
|
||||
*/
|
||||
function expandEntities($val) {
|
||||
if ($this->charencoding) {
|
||||
$val = str_replace('&', '&', $val);
|
||||
$val = str_replace("'", ''', $val);
|
||||
$val = str_replace('"', '"', $val);
|
||||
$val = str_replace('<', '<', $val);
|
||||
$val = str_replace('>', '>', $val);
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns error string if present
|
||||
*
|
||||
* @return mixed error string or false
|
||||
* @access public
|
||||
*/
|
||||
function getError(){
|
||||
if($this->error_str != ''){
|
||||
return $this->error_str;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets error string
|
||||
*
|
||||
* @return boolean $string error string
|
||||
* @access private
|
||||
*/
|
||||
function setError($str){
|
||||
$this->error_str = $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* detect if array is a simple array or a struct (associative array)
|
||||
*
|
||||
* @param mixed $val The PHP array
|
||||
* @return string (arraySimple|arrayStruct)
|
||||
* @access private
|
||||
*/
|
||||
function isArraySimpleOrStruct($val) {
|
||||
$keyList = array_keys($val);
|
||||
foreach ($keyList as $keyListValue) {
|
||||
if (!is_int($keyListValue)) {
|
||||
return 'arrayStruct';
|
||||
}
|
||||
}
|
||||
return 'arraySimple';
|
||||
}
|
||||
|
||||
/**
|
||||
* serializes PHP values in accordance w/ section 5. Type information is
|
||||
* not serialized if $use == 'literal'.
|
||||
*
|
||||
* @param mixed $val The value to serialize
|
||||
* @param string $name The name (local part) of the XML element
|
||||
* @param string $type The XML schema type (local part) for the element
|
||||
* @param string $name_ns The namespace for the name of the XML element
|
||||
* @param string $type_ns The namespace for the type of the element
|
||||
* @param array $attributes The attributes to serialize as name=>value pairs
|
||||
* @param string $use The WSDL "use" (encoded|literal)
|
||||
* @param boolean $soapval Whether this is called from soapval.
|
||||
* @return string The serialized element, possibly with child elements
|
||||
* @access public
|
||||
*/
|
||||
function serialize_val($val,$name=false,$type=false,$name_ns=false,$type_ns=false,$attributes=false,$use='encoded',$soapval=false) {
|
||||
$this->debug("in serialize_val: name=$name, type=$type, name_ns=$name_ns, type_ns=$type_ns, use=$use, soapval=$soapval");
|
||||
$this->appendDebug('value=' . $this->varDump($val));
|
||||
$this->appendDebug('attributes=' . $this->varDump($attributes));
|
||||
|
||||
if (is_object($val) && get_class($val) == 'soapval' && (! $soapval)) {
|
||||
$this->debug("serialize_val: serialize soapval");
|
||||
$xml = $val->serialize($use);
|
||||
$this->appendDebug($val->getDebug());
|
||||
$val->clearDebug();
|
||||
$this->debug("serialize_val of soapval returning $xml");
|
||||
return $xml;
|
||||
}
|
||||
// force valid name if necessary
|
||||
if (is_numeric($name)) {
|
||||
$name = '__numeric_' . $name;
|
||||
} elseif (! $name) {
|
||||
$name = 'noname';
|
||||
}
|
||||
// if name has ns, add ns prefix to name
|
||||
$xmlns = '';
|
||||
if($name_ns){
|
||||
$prefix = 'nu'.rand(1000,9999);
|
||||
$name = $prefix.':'.$name;
|
||||
$xmlns .= " xmlns:$prefix=\"$name_ns\"";
|
||||
}
|
||||
// if type is prefixed, create type prefix
|
||||
if($type_ns != '' && $type_ns == $this->namespaces['xsd']){
|
||||
// need to fix this. shouldn't default to xsd if no ns specified
|
||||
// w/o checking against typemap
|
||||
$type_prefix = 'xsd';
|
||||
} elseif($type_ns){
|
||||
$type_prefix = 'ns'.rand(1000,9999);
|
||||
$xmlns .= " xmlns:$type_prefix=\"$type_ns\"";
|
||||
}
|
||||
// serialize attributes if present
|
||||
$atts = '';
|
||||
if($attributes){
|
||||
foreach($attributes as $k => $v){
|
||||
$atts .= " $k=\"".$this->expandEntities($v).'"';
|
||||
}
|
||||
}
|
||||
// serialize null value
|
||||
if (is_null($val)) {
|
||||
$this->debug("serialize_val: serialize null");
|
||||
if ($use == 'literal') {
|
||||
// TODO: depends on minOccurs
|
||||
$xml = "<$name$xmlns$atts/>";
|
||||
$this->debug("serialize_val returning $xml");
|
||||
return $xml;
|
||||
} else {
|
||||
if (isset($type) && isset($type_prefix)) {
|
||||
$type_str = " xsi:type=\"$type_prefix:$type\"";
|
||||
} else {
|
||||
$type_str = '';
|
||||
}
|
||||
$xml = "<$name$xmlns$type_str$atts xsi:nil=\"true\"/>";
|
||||
$this->debug("serialize_val returning $xml");
|
||||
return $xml;
|
||||
}
|
||||
}
|
||||
// serialize if an xsd built-in primitive type
|
||||
if($type != '' && isset($this->typemap[$this->XMLSchemaVersion][$type])){
|
||||
$this->debug("serialize_val: serialize xsd built-in primitive type");
|
||||
if (is_bool($val)) {
|
||||
if ($type == 'boolean') {
|
||||
$val = $val ? 'true' : 'false';
|
||||
} elseif (! $val) {
|
||||
$val = 0;
|
||||
}
|
||||
} else if (is_string($val)) {
|
||||
$val = $this->expandEntities($val);
|
||||
}
|
||||
if ($use == 'literal') {
|
||||
$xml = "<$name$xmlns$atts>$val</$name>";
|
||||
$this->debug("serialize_val returning $xml");
|
||||
return $xml;
|
||||
} else {
|
||||
$xml = "<$name$xmlns xsi:type=\"xsd:$type\"$atts>$val</$name>";
|
||||
$this->debug("serialize_val returning $xml");
|
||||
return $xml;
|
||||
}
|
||||
}
|
||||
// detect type and serialize
|
||||
$xml = '';
|
||||
switch(true) {
|
||||
case (is_bool($val) || $type == 'boolean'):
|
||||
$this->debug("serialize_val: serialize boolean");
|
||||
if ($type == 'boolean') {
|
||||
$val = $val ? 'true' : 'false';
|
||||
} elseif (! $val) {
|
||||
$val = 0;
|
||||
}
|
||||
if ($use == 'literal') {
|
||||
$xml .= "<$name$xmlns$atts>$val</$name>";
|
||||
} else {
|
||||
$xml .= "<$name$xmlns xsi:type=\"xsd:boolean\"$atts>$val</$name>";
|
||||
}
|
||||
break;
|
||||
case (is_int($val) || is_long($val) || $type == 'int'):
|
||||
$this->debug("serialize_val: serialize int");
|
||||
if ($use == 'literal') {
|
||||
$xml .= "<$name$xmlns$atts>$val</$name>";
|
||||
} else {
|
||||
$xml .= "<$name$xmlns xsi:type=\"xsd:int\"$atts>$val</$name>";
|
||||
}
|
||||
break;
|
||||
case (is_float($val)|| is_double($val) || $type == 'float'):
|
||||
$this->debug("serialize_val: serialize float");
|
||||
if ($use == 'literal') {
|
||||
$xml .= "<$name$xmlns$atts>$val</$name>";
|
||||
} else {
|
||||
$xml .= "<$name$xmlns xsi:type=\"xsd:float\"$atts>$val</$name>";
|
||||
}
|
||||
break;
|
||||
case (is_string($val) || $type == 'string'):
|
||||
$this->debug("serialize_val: serialize string");
|
||||
$val = $this->expandEntities($val);
|
||||
if ($use == 'literal') {
|
||||
$xml .= "<$name$xmlns$atts>$val</$name>";
|
||||
} else {
|
||||
$xml .= "<$name$xmlns xsi:type=\"xsd:string\"$atts>$val</$name>";
|
||||
}
|
||||
break;
|
||||
case is_object($val):
|
||||
$this->debug("serialize_val: serialize object");
|
||||
if (get_class($val) == 'soapval') {
|
||||
$this->debug("serialize_val: serialize soapval object");
|
||||
$pXml = $val->serialize($use);
|
||||
$this->appendDebug($val->getDebug());
|
||||
$val->clearDebug();
|
||||
} else {
|
||||
if (! $name) {
|
||||
$name = get_class($val);
|
||||
$this->debug("In serialize_val, used class name $name as element name");
|
||||
} else {
|
||||
$this->debug("In serialize_val, do not override name $name for element name for class " . get_class($val));
|
||||
}
|
||||
foreach(get_object_vars($val) as $k => $v){
|
||||
$pXml = isset($pXml) ? $pXml.$this->serialize_val($v,$k,false,false,false,false,$use) : $this->serialize_val($v,$k,false,false,false,false,$use);
|
||||
}
|
||||
}
|
||||
if(isset($type) && isset($type_prefix)){
|
||||
$type_str = " xsi:type=\"$type_prefix:$type\"";
|
||||
} else {
|
||||
$type_str = '';
|
||||
}
|
||||
if ($use == 'literal') {
|
||||
$xml .= "<$name$xmlns$atts>$pXml</$name>";
|
||||
} else {
|
||||
$xml .= "<$name$xmlns$type_str$atts>$pXml</$name>";
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case (is_array($val) || $type):
|
||||
// detect if struct or array
|
||||
$valueType = $this->isArraySimpleOrStruct($val);
|
||||
if($valueType=='arraySimple' || preg_match('/^ArrayOf/',$type)){
|
||||
$this->debug("serialize_val: serialize array");
|
||||
$i = 0;
|
||||
if(is_array($val) && count($val)> 0){
|
||||
foreach($val as $v){
|
||||
if(is_object($v) && get_class($v) == 'soapval'){
|
||||
$tt_ns = $v->type_ns;
|
||||
$tt = $v->type;
|
||||
} elseif (is_array($v)) {
|
||||
$tt = $this->isArraySimpleOrStruct($v);
|
||||
} else {
|
||||
$tt = gettype($v);
|
||||
}
|
||||
$array_types[$tt] = 1;
|
||||
// TODO: for literal, the name should be $name
|
||||
$xml .= $this->serialize_val($v,'item',false,false,false,false,$use);
|
||||
++$i;
|
||||
}
|
||||
if(count($array_types) > 1){
|
||||
$array_typename = 'xsd:anyType';
|
||||
} elseif(isset($tt) && isset($this->typemap[$this->XMLSchemaVersion][$tt])) {
|
||||
if ($tt == 'integer') {
|
||||
$tt = 'int';
|
||||
}
|
||||
$array_typename = 'xsd:'.$tt;
|
||||
} elseif(isset($tt) && $tt == 'arraySimple'){
|
||||
$array_typename = 'SOAP-ENC:Array';
|
||||
} elseif(isset($tt) && $tt == 'arrayStruct'){
|
||||
$array_typename = 'unnamed_struct_use_soapval';
|
||||
} else {
|
||||
// if type is prefixed, create type prefix
|
||||
if ($tt_ns != '' && $tt_ns == $this->namespaces['xsd']){
|
||||
$array_typename = 'xsd:' . $tt;
|
||||
} elseif ($tt_ns) {
|
||||
$tt_prefix = 'ns' . rand(1000, 9999);
|
||||
$array_typename = "$tt_prefix:$tt";
|
||||
$xmlns .= " xmlns:$tt_prefix=\"$tt_ns\"";
|
||||
} else {
|
||||
$array_typename = $tt;
|
||||
}
|
||||
}
|
||||
$array_type = $i;
|
||||
if ($use == 'literal') {
|
||||
$type_str = '';
|
||||
} else if (isset($type) && isset($type_prefix)) {
|
||||
$type_str = " xsi:type=\"$type_prefix:$type\"";
|
||||
} else {
|
||||
$type_str = " xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"".$array_typename."[$array_type]\"";
|
||||
}
|
||||
// empty array
|
||||
} else {
|
||||
if ($use == 'literal') {
|
||||
$type_str = '';
|
||||
} else if (isset($type) && isset($type_prefix)) {
|
||||
$type_str = " xsi:type=\"$type_prefix:$type\"";
|
||||
} else {
|
||||
$type_str = " xsi:type=\"SOAP-ENC:Array\" SOAP-ENC:arrayType=\"xsd:anyType[0]\"";
|
||||
}
|
||||
}
|
||||
// TODO: for array in literal, there is no wrapper here
|
||||
$xml = "<$name$xmlns$type_str$atts>".$xml."</$name>";
|
||||
} else {
|
||||
// got a struct
|
||||
$this->debug("serialize_val: serialize struct");
|
||||
if(isset($type) && isset($type_prefix)){
|
||||
$type_str = " xsi:type=\"$type_prefix:$type\"";
|
||||
} else {
|
||||
$type_str = '';
|
||||
}
|
||||
if ($use == 'literal') {
|
||||
$xml .= "<$name$xmlns$atts>";
|
||||
} else {
|
||||
$xml .= "<$name$xmlns$type_str$atts>";
|
||||
}
|
||||
foreach($val as $k => $v){
|
||||
// Apache Map
|
||||
if ($type == 'Map' && $type_ns == 'http://xml.apache.org/xml-soap') {
|
||||
$xml .= '<item>';
|
||||
$xml .= $this->serialize_val($k,'key',false,false,false,false,$use);
|
||||
$xml .= $this->serialize_val($v,'value',false,false,false,false,$use);
|
||||
$xml .= '</item>';
|
||||
} else {
|
||||
$xml .= $this->serialize_val($v,$k,false,false,false,false,$use);
|
||||
}
|
||||
}
|
||||
$xml .= "</$name>";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$this->debug("serialize_val: serialize unknown");
|
||||
$xml .= 'not detected, got '.gettype($val).' for '.$val;
|
||||
break;
|
||||
}
|
||||
$this->debug("serialize_val returning $xml");
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* serializes a message
|
||||
*
|
||||
* @param string $body the XML of the SOAP body
|
||||
* @param mixed $headers optional string of XML with SOAP header content, or array of soapval objects for SOAP headers, or associative array
|
||||
* @param array $namespaces optional the namespaces used in generating the body and headers
|
||||
* @param string $style optional (rpc|document)
|
||||
* @param string $use optional (encoded|literal)
|
||||
* @param string $encodingStyle optional (usually 'http://schemas.xmlsoap.org/soap/encoding/' for encoded)
|
||||
* @return string the message
|
||||
* @access public
|
||||
*/
|
||||
function serializeEnvelope($body,$headers=false,$namespaces=array(),$style='rpc',$use='encoded',$encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'){
|
||||
// TODO: add an option to automatically run utf8_encode on $body and $headers
|
||||
// if $this->soap_defencoding is UTF-8. Not doing this automatically allows
|
||||
// one to send arbitrary UTF-8 characters, not just characters that map to ISO-8859-1
|
||||
|
||||
$this->debug("In serializeEnvelope length=" . strlen($body) . " body (max 1000 characters)=" . substr($body, 0, 1000) . " style=$style use=$use encodingStyle=$encodingStyle");
|
||||
$this->debug("headers:");
|
||||
$this->appendDebug($this->varDump($headers));
|
||||
$this->debug("namespaces:");
|
||||
$this->appendDebug($this->varDump($namespaces));
|
||||
|
||||
// serialize namespaces
|
||||
$ns_string = '';
|
||||
foreach(array_merge($this->namespaces,$namespaces) as $k => $v){
|
||||
$ns_string .= " xmlns:$k=\"$v\"";
|
||||
}
|
||||
if($encodingStyle) {
|
||||
$ns_string = " SOAP-ENV:encodingStyle=\"$encodingStyle\"$ns_string";
|
||||
}
|
||||
|
||||
// serialize headers
|
||||
if($headers){
|
||||
if (is_array($headers)) {
|
||||
$xml = '';
|
||||
foreach ($headers as $k => $v) {
|
||||
if (is_object($v) && get_class($v) == 'soapval') {
|
||||
$xml .= $this->serialize_val($v, false, false, false, false, false, $use);
|
||||
} else {
|
||||
$xml .= $this->serialize_val($v, $k, false, false, false, false, $use);
|
||||
}
|
||||
}
|
||||
$headers = $xml;
|
||||
$this->debug("In serializeEnvelope, serialized array of headers to $headers");
|
||||
}
|
||||
$headers = "<SOAP-ENV:Header>".$headers."</SOAP-ENV:Header>";
|
||||
}
|
||||
// serialize envelope
|
||||
return
|
||||
'<?xml version="1.0" encoding="'.$this->soap_defencoding .'"?'.">".
|
||||
'<SOAP-ENV:Envelope'.$ns_string.">".
|
||||
$headers.
|
||||
"<SOAP-ENV:Body>".
|
||||
$body.
|
||||
"</SOAP-ENV:Body>".
|
||||
"</SOAP-ENV:Envelope>";
|
||||
}
|
||||
|
||||
/**
|
||||
* formats a string to be inserted into an HTML stream
|
||||
*
|
||||
* @param string $str The string to format
|
||||
* @return string The formatted string
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function formatDump($str){
|
||||
$str = htmlspecialchars($str);
|
||||
return nl2br($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* contracts (changes namespace to prefix) a qualified name
|
||||
*
|
||||
* @param string $qname qname
|
||||
* @return string contracted qname
|
||||
* @access private
|
||||
*/
|
||||
function contractQname($qname){
|
||||
// get element namespace
|
||||
//$this->xdebug("Contract $qname");
|
||||
if (strrpos($qname, ':')) {
|
||||
// get unqualified name
|
||||
$name = substr($qname, strrpos($qname, ':') + 1);
|
||||
// get ns
|
||||
$ns = substr($qname, 0, strrpos($qname, ':'));
|
||||
$p = $this->getPrefixFromNamespace($ns);
|
||||
if ($p) {
|
||||
return $p . ':' . $name;
|
||||
}
|
||||
return $qname;
|
||||
} else {
|
||||
return $qname;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* expands (changes prefix to namespace) a qualified name
|
||||
*
|
||||
* @param string $qname qname
|
||||
* @return string expanded qname
|
||||
* @access private
|
||||
*/
|
||||
function expandQname($qname){
|
||||
// get element prefix
|
||||
if(strpos($qname,':') && !preg_match('/^http:\/\//',$qname)){
|
||||
// get unqualified name
|
||||
$name = substr(strstr($qname,':'),1);
|
||||
// get ns prefix
|
||||
$prefix = substr($qname,0,strpos($qname,':'));
|
||||
if(isset($this->namespaces[$prefix])){
|
||||
return $this->namespaces[$prefix].':'.$name;
|
||||
} else {
|
||||
return $qname;
|
||||
}
|
||||
} else {
|
||||
return $qname;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the local part of a prefixed string
|
||||
* returns the original string, if not prefixed
|
||||
*
|
||||
* @param string $str The prefixed string
|
||||
* @return string The local part
|
||||
* @access public
|
||||
*/
|
||||
function getLocalPart($str){
|
||||
if($sstr = strrchr($str,':')){
|
||||
// get unqualified name
|
||||
return substr( $sstr, 1 );
|
||||
} else {
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the prefix part of a prefixed string
|
||||
* returns false, if not prefixed
|
||||
*
|
||||
* @param string $str The prefixed string
|
||||
* @return mixed The prefix or false if there is no prefix
|
||||
* @access public
|
||||
*/
|
||||
function getPrefix($str){
|
||||
if($pos = strrpos($str,':')){
|
||||
// get prefix
|
||||
return substr($str,0,$pos);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* pass it a prefix, it returns a namespace
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @return mixed The namespace, false if no namespace has the specified prefix
|
||||
* @access public
|
||||
*/
|
||||
function getNamespaceFromPrefix($prefix){
|
||||
if (isset($this->namespaces[$prefix])) {
|
||||
return $this->namespaces[$prefix];
|
||||
}
|
||||
//$this->setError("No namespace registered for prefix '$prefix'");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the prefix for a given namespace (or prefix)
|
||||
* or false if no prefixes registered for the given namespace
|
||||
*
|
||||
* @param string $ns The namespace
|
||||
* @return mixed The prefix, false if the namespace has no prefixes
|
||||
* @access public
|
||||
*/
|
||||
function getPrefixFromNamespace($ns) {
|
||||
foreach ($this->namespaces as $p => $n) {
|
||||
if ($ns == $n || $ns == $p) {
|
||||
$this->usedNamespaces[$p] = $n;
|
||||
return $p;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the time in ODBC canonical form with microseconds
|
||||
*
|
||||
* @return string The time in ODBC canonical form with microseconds
|
||||
* @access public
|
||||
*/
|
||||
function getmicrotime() {
|
||||
if (function_exists('gettimeofday')) {
|
||||
$tod = gettimeofday();
|
||||
$sec = $tod['sec'];
|
||||
$usec = $tod['usec'];
|
||||
} else {
|
||||
$sec = time();
|
||||
$usec = 0;
|
||||
}
|
||||
return strftime('%Y-%m-%d %H:%M:%S', $sec) . '.' . sprintf('%06d', $usec);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string with the output of var_dump
|
||||
*
|
||||
* @param mixed $data The variable to var_dump
|
||||
* @return string The output of var_dump
|
||||
* @access public
|
||||
*/
|
||||
function varDump($data) {
|
||||
ob_start();
|
||||
var_dump($data);
|
||||
$ret_val = ob_get_contents();
|
||||
ob_end_clean();
|
||||
return $ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* represents the object as a string
|
||||
*
|
||||
* @return string
|
||||
* @access public
|
||||
*/
|
||||
function __toString() {
|
||||
return $this->varDump($this);
|
||||
}
|
||||
}
|
||||
|
||||
// XML Schema Datatype Helper Functions
|
||||
|
||||
//xsd:dateTime helpers
|
||||
|
||||
/**
|
||||
* convert unix timestamp to ISO 8601 compliant date string
|
||||
*
|
||||
* @param int $timestamp Unix time stamp
|
||||
* @param boolean $utc Whether the time stamp is UTC or local
|
||||
* @return mixed ISO 8601 date string or false
|
||||
* @access public
|
||||
*/
|
||||
function timestamp_to_iso8601($timestamp,$utc=true){
|
||||
$datestr = date('Y-m-d\TH:i:sO',$timestamp);
|
||||
$pos = strrpos($datestr, "+");
|
||||
if ($pos === FALSE) {
|
||||
$pos = strrpos($datestr, "-");
|
||||
}
|
||||
if ($pos !== FALSE) {
|
||||
if (strlen($datestr) == $pos + 5) {
|
||||
$datestr = substr($datestr, 0, $pos + 3) . ':' . substr($datestr, -2);
|
||||
}
|
||||
}
|
||||
if($utc){
|
||||
$pattern = '/'.
|
||||
'([0-9]{4})-'. // centuries & years CCYY-
|
||||
'([0-9]{2})-'. // months MM-
|
||||
'([0-9]{2})'. // days DD
|
||||
'T'. // separator T
|
||||
'([0-9]{2}):'. // hours hh:
|
||||
'([0-9]{2}):'. // minutes mm:
|
||||
'([0-9]{2})(\.[0-9]*)?'. // seconds ss.ss...
|
||||
'(Z|[+\-][0-9]{2}:?[0-9]{2})?'. // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's
|
||||
'/';
|
||||
|
||||
if(preg_match($pattern,$datestr,$regs)){
|
||||
return sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ',$regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6]);
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
return $datestr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* convert ISO 8601 compliant date string to unix timestamp
|
||||
*
|
||||
* @param string $datestr ISO 8601 compliant date string
|
||||
* @return mixed Unix timestamp (int) or false
|
||||
* @access public
|
||||
*/
|
||||
function iso8601_to_timestamp($datestr){
|
||||
$pattern = '/'.
|
||||
'([0-9]{4})-'. // centuries & years CCYY-
|
||||
'([0-9]{2})-'. // months MM-
|
||||
'([0-9]{2})'. // days DD
|
||||
'T'. // separator T
|
||||
'([0-9]{2}):'. // hours hh:
|
||||
'([0-9]{2}):'. // minutes mm:
|
||||
'([0-9]{2})(\.[0-9]+)?'. // seconds ss.ss...
|
||||
'(Z|[+\-][0-9]{2}:?[0-9]{2})?'. // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's
|
||||
'/';
|
||||
if(preg_match($pattern,$datestr,$regs)){
|
||||
// not utc
|
||||
if($regs[8] != 'Z'){
|
||||
$op = substr($regs[8],0,1);
|
||||
$h = substr($regs[8],1,2);
|
||||
$m = substr($regs[8],strlen($regs[8])-2,2);
|
||||
if($op == '-'){
|
||||
$regs[4] = $regs[4] + $h;
|
||||
$regs[5] = $regs[5] + $m;
|
||||
} elseif($op == '+'){
|
||||
$regs[4] = $regs[4] - $h;
|
||||
$regs[5] = $regs[5] - $m;
|
||||
}
|
||||
}
|
||||
return gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
|
||||
// return strtotime("$regs[1]-$regs[2]-$regs[3] $regs[4]:$regs[5]:$regs[6]Z");
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* sleeps some number of microseconds
|
||||
*
|
||||
* @param string $usec the number of microseconds to sleep
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function usleepWindows($usec)
|
||||
{
|
||||
$start = gettimeofday();
|
||||
|
||||
do
|
||||
{
|
||||
$stop = gettimeofday();
|
||||
$timePassed = 1000000 * ($stop['sec'] - $start['sec'])
|
||||
+ $stop['usec'] - $start['usec'];
|
||||
}
|
||||
while ($timePassed < $usec);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Contains information for a SOAP fault.
|
||||
* Mainly used for returning faults from deployed functions
|
||||
* in a server instance.
|
||||
* @author Dietrich Ayala <dietrich@ganx4.com>
|
||||
* @version $Id: class.soap_fault.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_fault extends nusoap_base {
|
||||
/**
|
||||
* The fault code (client|server)
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $faultcode;
|
||||
/**
|
||||
* The fault actor
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $faultactor;
|
||||
/**
|
||||
* The fault string, a description of the fault
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $faultstring;
|
||||
/**
|
||||
* The fault detail, typically a string or array of string
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $faultdetail;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param string $faultcode (SOAP-ENV:Client | SOAP-ENV:Server)
|
||||
* @param string $faultactor only used when msg routed between multiple actors
|
||||
* @param string $faultstring human readable error message
|
||||
* @param mixed $faultdetail detail, typically a string or array of string
|
||||
*/
|
||||
function nusoap_fault($faultcode,$faultactor='',$faultstring='',$faultdetail=''){
|
||||
parent::nusoap_base();
|
||||
$this->faultcode = $faultcode;
|
||||
$this->faultactor = $faultactor;
|
||||
$this->faultstring = $faultstring;
|
||||
$this->faultdetail = $faultdetail;
|
||||
}
|
||||
|
||||
/**
|
||||
* serialize a fault
|
||||
*
|
||||
* @return string The serialization of the fault instance.
|
||||
* @access public
|
||||
*/
|
||||
function serialize(){
|
||||
$ns_string = '';
|
||||
foreach($this->namespaces as $k => $v){
|
||||
$ns_string .= "\n xmlns:$k=\"$v\"";
|
||||
}
|
||||
$return_msg =
|
||||
'<?xml version="1.0" encoding="'.$this->soap_defencoding.'"?>'.
|
||||
'<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'.$ns_string.">\n".
|
||||
'<SOAP-ENV:Body>'.
|
||||
'<SOAP-ENV:Fault>'.
|
||||
$this->serialize_val($this->faultcode, 'faultcode').
|
||||
$this->serialize_val($this->faultactor, 'faultactor').
|
||||
$this->serialize_val($this->faultstring, 'faultstring').
|
||||
$this->serialize_val($this->faultdetail, 'detail').
|
||||
'</SOAP-ENV:Fault>'.
|
||||
'</SOAP-ENV:Body>'.
|
||||
'</SOAP-ENV:Envelope>';
|
||||
return $return_msg;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Backward compatibility
|
||||
*/
|
||||
class soap_fault extends nusoap_fault {
|
||||
}
|
||||
|
||||
|
||||
@@ -1,642 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* nusoap_parser class parses SOAP XML messages into native PHP values
|
||||
*
|
||||
* @author Dietrich Ayala <dietrich@ganx4.com>
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @version $Id: class.soap_parser.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_parser extends nusoap_base {
|
||||
|
||||
var $xml = '';
|
||||
var $xml_encoding = '';
|
||||
var $method = '';
|
||||
var $root_struct = '';
|
||||
var $root_struct_name = '';
|
||||
var $root_struct_namespace = '';
|
||||
var $root_header = '';
|
||||
var $document = ''; // incoming SOAP body (text)
|
||||
// determines where in the message we are (envelope,header,body,method)
|
||||
var $status = '';
|
||||
var $position = 0;
|
||||
var $depth = 0;
|
||||
var $default_namespace = '';
|
||||
var $namespaces = array();
|
||||
var $message = array();
|
||||
var $parent = '';
|
||||
var $fault = false;
|
||||
var $fault_code = '';
|
||||
var $fault_str = '';
|
||||
var $fault_detail = '';
|
||||
var $depth_array = array();
|
||||
var $debug_flag = true;
|
||||
var $soapresponse = NULL; // parsed SOAP Body
|
||||
var $soapheader = NULL; // parsed SOAP Header
|
||||
var $responseHeaders = ''; // incoming SOAP headers (text)
|
||||
var $body_position = 0;
|
||||
// for multiref parsing:
|
||||
// array of id => pos
|
||||
var $ids = array();
|
||||
// array of id => hrefs => pos
|
||||
var $multirefs = array();
|
||||
// toggle for auto-decoding element content
|
||||
var $decode_utf8 = true;
|
||||
|
||||
/**
|
||||
* constructor that actually does the parsing
|
||||
*
|
||||
* @param string $xml SOAP message
|
||||
* @param string $encoding character encoding scheme of message
|
||||
* @param string $method method for which XML is parsed (unused?)
|
||||
* @param string $decode_utf8 whether to decode UTF-8 to ISO-8859-1
|
||||
* @access public
|
||||
*/
|
||||
function nusoap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){
|
||||
parent::nusoap_base();
|
||||
$this->xml = $xml;
|
||||
$this->xml_encoding = $encoding;
|
||||
$this->method = $method;
|
||||
$this->decode_utf8 = $decode_utf8;
|
||||
|
||||
// Check whether content has been read.
|
||||
if(!empty($xml)){
|
||||
// Check XML encoding
|
||||
$pos_xml = strpos($xml, '<?xml');
|
||||
if ($pos_xml !== FALSE) {
|
||||
$xml_decl = substr($xml, $pos_xml, strpos($xml, '?>', $pos_xml + 2) - $pos_xml + 1);
|
||||
if (preg_match("/encoding=[\"']([^\"']*)[\"']/", $xml_decl, $res)) {
|
||||
$xml_encoding = $res[1];
|
||||
if (strtoupper($xml_encoding) != $encoding) {
|
||||
$err = "Charset from HTTP Content-Type '" . $encoding . "' does not match encoding from XML declaration '" . $xml_encoding . "'";
|
||||
$this->debug($err);
|
||||
if ($encoding != 'ISO-8859-1' || strtoupper($xml_encoding) != 'UTF-8') {
|
||||
$this->setError($err);
|
||||
return;
|
||||
}
|
||||
// when HTTP says ISO-8859-1 (the default) and XML says UTF-8 (the typical), assume the other endpoint is just sloppy and proceed
|
||||
} else {
|
||||
$this->debug('Charset from HTTP Content-Type matches encoding from XML declaration');
|
||||
}
|
||||
} else {
|
||||
$this->debug('No encoding specified in XML declaration');
|
||||
}
|
||||
} else {
|
||||
$this->debug('No XML declaration');
|
||||
}
|
||||
$this->debug('Entering nusoap_parser(), length='.strlen($xml).', encoding='.$encoding);
|
||||
// Create an XML parser - why not xml_parser_create_ns?
|
||||
$this->parser = xml_parser_create($this->xml_encoding);
|
||||
// Set the options for parsing the XML data.
|
||||
//xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
|
||||
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
|
||||
xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->xml_encoding);
|
||||
// Set the object for the parser.
|
||||
xml_set_object($this->parser, $this);
|
||||
// Set the element handlers for the parser.
|
||||
xml_set_element_handler($this->parser, 'start_element','end_element');
|
||||
xml_set_character_data_handler($this->parser,'character_data');
|
||||
|
||||
// Parse the XML file.
|
||||
if(!xml_parse($this->parser,$xml,true)){
|
||||
// Display an error message.
|
||||
$err = sprintf('XML error parsing SOAP payload on line %d: %s',
|
||||
xml_get_current_line_number($this->parser),
|
||||
xml_error_string(xml_get_error_code($this->parser)));
|
||||
$this->debug($err);
|
||||
$this->debug("XML payload:\n" . $xml);
|
||||
$this->setError($err);
|
||||
} else {
|
||||
$this->debug('in nusoap_parser ctor, message:');
|
||||
$this->appendDebug($this->varDump($this->message));
|
||||
$this->debug('parsed successfully, found root struct: '.$this->root_struct.' of name '.$this->root_struct_name);
|
||||
// get final value
|
||||
$this->soapresponse = $this->message[$this->root_struct]['result'];
|
||||
// get header value
|
||||
if($this->root_header != '' && isset($this->message[$this->root_header]['result'])){
|
||||
$this->soapheader = $this->message[$this->root_header]['result'];
|
||||
}
|
||||
// resolve hrefs/ids
|
||||
if(sizeof($this->multirefs) > 0){
|
||||
foreach($this->multirefs as $id => $hrefs){
|
||||
$this->debug('resolving multirefs for id: '.$id);
|
||||
$idVal = $this->buildVal($this->ids[$id]);
|
||||
if (is_array($idVal) && isset($idVal['!id'])) {
|
||||
unset($idVal['!id']);
|
||||
}
|
||||
foreach($hrefs as $refPos => $ref){
|
||||
$this->debug('resolving href at pos '.$refPos);
|
||||
$this->multirefs[$id][$refPos] = $idVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
xml_parser_free($this->parser);
|
||||
} else {
|
||||
$this->debug('xml was empty, didn\'t parse!');
|
||||
$this->setError('xml was empty, didn\'t parse!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* start-element handler
|
||||
*
|
||||
* @param resource $parser XML parser object
|
||||
* @param string $name element name
|
||||
* @param array $attrs associative array of attributes
|
||||
* @access private
|
||||
*/
|
||||
function start_element($parser, $name, $attrs) {
|
||||
// position in a total number of elements, starting from 0
|
||||
// update class level pos
|
||||
$pos = $this->position++;
|
||||
// and set mine
|
||||
$this->message[$pos] = array('pos' => $pos,'children'=>'','cdata'=>'');
|
||||
// depth = how many levels removed from root?
|
||||
// set mine as current global depth and increment global depth value
|
||||
$this->message[$pos]['depth'] = $this->depth++;
|
||||
|
||||
// else add self as child to whoever the current parent is
|
||||
if($pos != 0){
|
||||
$this->message[$this->parent]['children'] .= '|'.$pos;
|
||||
}
|
||||
// set my parent
|
||||
$this->message[$pos]['parent'] = $this->parent;
|
||||
// set self as current parent
|
||||
$this->parent = $pos;
|
||||
// set self as current value for this depth
|
||||
$this->depth_array[$this->depth] = $pos;
|
||||
// get element prefix
|
||||
if(strpos($name,':')){
|
||||
// get ns prefix
|
||||
$prefix = substr($name,0,strpos($name,':'));
|
||||
// get unqualified name
|
||||
$name = substr(strstr($name,':'),1);
|
||||
}
|
||||
// set status
|
||||
if ($name == 'Envelope' && $this->status == '') {
|
||||
$this->status = 'envelope';
|
||||
} elseif ($name == 'Header' && $this->status == 'envelope') {
|
||||
$this->root_header = $pos;
|
||||
$this->status = 'header';
|
||||
} elseif ($name == 'Body' && $this->status == 'envelope'){
|
||||
$this->status = 'body';
|
||||
$this->body_position = $pos;
|
||||
// set method
|
||||
} elseif($this->status == 'body' && $pos == ($this->body_position+1)) {
|
||||
$this->status = 'method';
|
||||
$this->root_struct_name = $name;
|
||||
$this->root_struct = $pos;
|
||||
$this->message[$pos]['type'] = 'struct';
|
||||
$this->debug("found root struct $this->root_struct_name, pos $this->root_struct");
|
||||
}
|
||||
// set my status
|
||||
$this->message[$pos]['status'] = $this->status;
|
||||
// set name
|
||||
$this->message[$pos]['name'] = htmlspecialchars($name);
|
||||
// set attrs
|
||||
$this->message[$pos]['attrs'] = $attrs;
|
||||
|
||||
// loop through atts, logging ns and type declarations
|
||||
$attstr = '';
|
||||
foreach($attrs as $key => $value){
|
||||
$key_prefix = $this->getPrefix($key);
|
||||
$key_localpart = $this->getLocalPart($key);
|
||||
// if ns declarations, add to class level array of valid namespaces
|
||||
if($key_prefix == 'xmlns'){
|
||||
if(preg_match('/^http:\/\/www.w3.org\/[0-9]{4}\/XMLSchema$/',$value)){
|
||||
$this->XMLSchemaVersion = $value;
|
||||
$this->namespaces['xsd'] = $this->XMLSchemaVersion;
|
||||
$this->namespaces['xsi'] = $this->XMLSchemaVersion.'-instance';
|
||||
}
|
||||
$this->namespaces[$key_localpart] = $value;
|
||||
// set method namespace
|
||||
if($name == $this->root_struct_name){
|
||||
$this->methodNamespace = $value;
|
||||
}
|
||||
// if it's a type declaration, set type
|
||||
} elseif($key_localpart == 'type'){
|
||||
if (isset($this->message[$pos]['type']) && $this->message[$pos]['type'] == 'array') {
|
||||
// do nothing: already processed arrayType
|
||||
} else {
|
||||
$value_prefix = $this->getPrefix($value);
|
||||
$value_localpart = $this->getLocalPart($value);
|
||||
$this->message[$pos]['type'] = $value_localpart;
|
||||
$this->message[$pos]['typePrefix'] = $value_prefix;
|
||||
if(isset($this->namespaces[$value_prefix])){
|
||||
$this->message[$pos]['type_namespace'] = $this->namespaces[$value_prefix];
|
||||
} else if(isset($attrs['xmlns:'.$value_prefix])) {
|
||||
$this->message[$pos]['type_namespace'] = $attrs['xmlns:'.$value_prefix];
|
||||
}
|
||||
// should do something here with the namespace of specified type?
|
||||
}
|
||||
} elseif($key_localpart == 'arrayType'){
|
||||
$this->message[$pos]['type'] = 'array';
|
||||
/* do arrayType ereg here
|
||||
[1] arrayTypeValue ::= atype asize
|
||||
[2] atype ::= QName rank*
|
||||
[3] rank ::= '[' (',')* ']'
|
||||
[4] asize ::= '[' length~ ']'
|
||||
[5] length ::= nextDimension* Digit+
|
||||
[6] nextDimension ::= Digit+ ','
|
||||
*/
|
||||
$expr = '/([A-Za-z0-9_]+):([A-Za-z]+[A-Za-z0-9_]+)\[([0-9]+),?([0-9]*)\]/';
|
||||
if(preg_match($expr,$value,$regs)){
|
||||
$this->message[$pos]['typePrefix'] = $regs[1];
|
||||
$this->message[$pos]['arrayTypePrefix'] = $regs[1];
|
||||
if (isset($this->namespaces[$regs[1]])) {
|
||||
$this->message[$pos]['arrayTypeNamespace'] = $this->namespaces[$regs[1]];
|
||||
} else if (isset($attrs['xmlns:'.$regs[1]])) {
|
||||
$this->message[$pos]['arrayTypeNamespace'] = $attrs['xmlns:'.$regs[1]];
|
||||
}
|
||||
$this->message[$pos]['arrayType'] = $regs[2];
|
||||
$this->message[$pos]['arraySize'] = $regs[3];
|
||||
$this->message[$pos]['arrayCols'] = $regs[4];
|
||||
}
|
||||
// specifies nil value (or not)
|
||||
} elseif ($key_localpart == 'nil'){
|
||||
$this->message[$pos]['nil'] = ($value == 'true' || $value == '1');
|
||||
// some other attribute
|
||||
} elseif ($key != 'href' && $key != 'xmlns' && $key_localpart != 'encodingStyle' && $key_localpart != 'root') {
|
||||
$this->message[$pos]['xattrs']['!' . $key] = $value;
|
||||
}
|
||||
|
||||
if ($key == 'xmlns') {
|
||||
$this->default_namespace = $value;
|
||||
}
|
||||
// log id
|
||||
if($key == 'id'){
|
||||
$this->ids[$value] = $pos;
|
||||
}
|
||||
// root
|
||||
if($key_localpart == 'root' && $value == 1){
|
||||
$this->status = 'method';
|
||||
$this->root_struct_name = $name;
|
||||
$this->root_struct = $pos;
|
||||
$this->debug("found root struct $this->root_struct_name, pos $pos");
|
||||
}
|
||||
// for doclit
|
||||
$attstr .= " $key=\"$value\"";
|
||||
}
|
||||
// get namespace - must be done after namespace atts are processed
|
||||
if(isset($prefix)){
|
||||
$this->message[$pos]['namespace'] = $this->namespaces[$prefix];
|
||||
$this->default_namespace = $this->namespaces[$prefix];
|
||||
} else {
|
||||
$this->message[$pos]['namespace'] = $this->default_namespace;
|
||||
}
|
||||
if($this->status == 'header'){
|
||||
if ($this->root_header != $pos) {
|
||||
$this->responseHeaders .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
|
||||
}
|
||||
} elseif($this->root_struct_name != ''){
|
||||
$this->document .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* end-element handler
|
||||
*
|
||||
* @param resource $parser XML parser object
|
||||
* @param string $name element name
|
||||
* @access private
|
||||
*/
|
||||
function end_element($parser, $name) {
|
||||
// position of current element is equal to the last value left in depth_array for my depth
|
||||
$pos = $this->depth_array[$this->depth--];
|
||||
|
||||
// get element prefix
|
||||
if(strpos($name,':')){
|
||||
// get ns prefix
|
||||
$prefix = substr($name,0,strpos($name,':'));
|
||||
// get unqualified name
|
||||
$name = substr(strstr($name,':'),1);
|
||||
}
|
||||
|
||||
// build to native type
|
||||
if(isset($this->body_position) && $pos > $this->body_position){
|
||||
// deal w/ multirefs
|
||||
if(isset($this->message[$pos]['attrs']['href'])){
|
||||
// get id
|
||||
$id = substr($this->message[$pos]['attrs']['href'],1);
|
||||
// add placeholder to href array
|
||||
$this->multirefs[$id][$pos] = 'placeholder';
|
||||
// add set a reference to it as the result value
|
||||
$this->message[$pos]['result'] =& $this->multirefs[$id][$pos];
|
||||
// build complexType values
|
||||
} elseif($this->message[$pos]['children'] != ''){
|
||||
// if result has already been generated (struct/array)
|
||||
if(!isset($this->message[$pos]['result'])){
|
||||
$this->message[$pos]['result'] = $this->buildVal($pos);
|
||||
}
|
||||
// build complexType values of attributes and possibly simpleContent
|
||||
} elseif (isset($this->message[$pos]['xattrs'])) {
|
||||
if (isset($this->message[$pos]['nil']) && $this->message[$pos]['nil']) {
|
||||
$this->message[$pos]['xattrs']['!'] = null;
|
||||
} elseif (isset($this->message[$pos]['cdata']) && trim($this->message[$pos]['cdata']) != '') {
|
||||
if (isset($this->message[$pos]['type'])) {
|
||||
$this->message[$pos]['xattrs']['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
|
||||
} else {
|
||||
$parent = $this->message[$pos]['parent'];
|
||||
if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
|
||||
$this->message[$pos]['xattrs']['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
|
||||
} else {
|
||||
$this->message[$pos]['xattrs']['!'] = $this->message[$pos]['cdata'];
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->message[$pos]['result'] = $this->message[$pos]['xattrs'];
|
||||
// set value of simpleType (or nil complexType)
|
||||
} else {
|
||||
//$this->debug('adding data for scalar value '.$this->message[$pos]['name'].' of value '.$this->message[$pos]['cdata']);
|
||||
if (isset($this->message[$pos]['nil']) && $this->message[$pos]['nil']) {
|
||||
$this->message[$pos]['xattrs']['!'] = null;
|
||||
} elseif (isset($this->message[$pos]['type'])) {
|
||||
$this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
|
||||
} else {
|
||||
$parent = $this->message[$pos]['parent'];
|
||||
if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
|
||||
$this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
|
||||
} else {
|
||||
$this->message[$pos]['result'] = $this->message[$pos]['cdata'];
|
||||
}
|
||||
}
|
||||
|
||||
/* add value to parent's result, if parent is struct/array
|
||||
$parent = $this->message[$pos]['parent'];
|
||||
if($this->message[$parent]['type'] != 'map'){
|
||||
if(strtolower($this->message[$parent]['type']) == 'array'){
|
||||
$this->message[$parent]['result'][] = $this->message[$pos]['result'];
|
||||
} else {
|
||||
$this->message[$parent]['result'][$this->message[$pos]['name']] = $this->message[$pos]['result'];
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
// for doclit
|
||||
if($this->status == 'header'){
|
||||
if ($this->root_header != $pos) {
|
||||
$this->responseHeaders .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
|
||||
}
|
||||
} elseif($pos >= $this->root_struct){
|
||||
$this->document .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
|
||||
}
|
||||
// switch status
|
||||
if ($pos == $this->root_struct){
|
||||
$this->status = 'body';
|
||||
$this->root_struct_namespace = $this->message[$pos]['namespace'];
|
||||
} elseif ($pos == $this->root_header) {
|
||||
$this->status = 'envelope';
|
||||
} elseif ($name == 'Body' && $this->status == 'body') {
|
||||
$this->status = 'envelope';
|
||||
} elseif ($name == 'Header' && $this->status == 'header') { // will never happen
|
||||
$this->status = 'envelope';
|
||||
} elseif ($name == 'Envelope' && $this->status == 'envelope') {
|
||||
$this->status = '';
|
||||
}
|
||||
// set parent back to my parent
|
||||
$this->parent = $this->message[$pos]['parent'];
|
||||
}
|
||||
|
||||
/**
|
||||
* element content handler
|
||||
*
|
||||
* @param resource $parser XML parser object
|
||||
* @param string $data element content
|
||||
* @access private
|
||||
*/
|
||||
function character_data($parser, $data){
|
||||
$pos = $this->depth_array[$this->depth];
|
||||
if ($this->xml_encoding=='UTF-8'){
|
||||
// TODO: add an option to disable this for folks who want
|
||||
// raw UTF-8 that, e.g., might not map to iso-8859-1
|
||||
// TODO: this can also be handled with xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
|
||||
if($this->decode_utf8){
|
||||
$data = utf8_decode($data);
|
||||
}
|
||||
}
|
||||
$this->message[$pos]['cdata'] .= $data;
|
||||
// for doclit
|
||||
if($this->status == 'header'){
|
||||
$this->responseHeaders .= $data;
|
||||
} else {
|
||||
$this->document .= $data;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get the parsed message (SOAP Body)
|
||||
*
|
||||
* @return mixed
|
||||
* @access public
|
||||
* @deprecated use get_soapbody instead
|
||||
*/
|
||||
function get_response(){
|
||||
return $this->soapresponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the parsed SOAP Body (NULL if there was none)
|
||||
*
|
||||
* @return mixed
|
||||
* @access public
|
||||
*/
|
||||
function get_soapbody(){
|
||||
return $this->soapresponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the parsed SOAP Header (NULL if there was none)
|
||||
*
|
||||
* @return mixed
|
||||
* @access public
|
||||
*/
|
||||
function get_soapheader(){
|
||||
return $this->soapheader;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the unparsed SOAP Header
|
||||
*
|
||||
* @return string XML or empty if no Header
|
||||
* @access public
|
||||
*/
|
||||
function getHeaders(){
|
||||
return $this->responseHeaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* decodes simple types into PHP variables
|
||||
*
|
||||
* @param string $value value to decode
|
||||
* @param string $type XML type to decode
|
||||
* @param string $typens XML type namespace to decode
|
||||
* @return mixed PHP value
|
||||
* @access private
|
||||
*/
|
||||
function decodeSimple($value, $type, $typens) {
|
||||
// TODO: use the namespace!
|
||||
if ((!isset($type)) || $type == 'string' || $type == 'long' || $type == 'unsignedLong') {
|
||||
return (string) $value;
|
||||
}
|
||||
if ($type == 'int' || $type == 'integer' || $type == 'short' || $type == 'byte') {
|
||||
return (int) $value;
|
||||
}
|
||||
if ($type == 'float' || $type == 'double' || $type == 'decimal') {
|
||||
return (double) $value;
|
||||
}
|
||||
if ($type == 'boolean') {
|
||||
if (strtolower($value) == 'false' || strtolower($value) == 'f') {
|
||||
return false;
|
||||
}
|
||||
return (boolean) $value;
|
||||
}
|
||||
if ($type == 'base64' || $type == 'base64Binary') {
|
||||
$this->debug('Decode base64 value');
|
||||
return base64_decode($value);
|
||||
}
|
||||
// obscure numeric types
|
||||
if ($type == 'nonPositiveInteger' || $type == 'negativeInteger'
|
||||
|| $type == 'nonNegativeInteger' || $type == 'positiveInteger'
|
||||
|| $type == 'unsignedInt'
|
||||
|| $type == 'unsignedShort' || $type == 'unsignedByte') {
|
||||
return (int) $value;
|
||||
}
|
||||
// bogus: parser treats array with no elements as a simple type
|
||||
if ($type == 'array') {
|
||||
return array();
|
||||
}
|
||||
// everything else
|
||||
return (string) $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* builds response structures for compound values (arrays/structs)
|
||||
* and scalars
|
||||
*
|
||||
* @param integer $pos position in node tree
|
||||
* @return mixed PHP value
|
||||
* @access private
|
||||
*/
|
||||
function buildVal($pos){
|
||||
if(!isset($this->message[$pos]['type'])){
|
||||
$this->message[$pos]['type'] = '';
|
||||
}
|
||||
$this->debug('in buildVal() for '.$this->message[$pos]['name']."(pos $pos) of type ".$this->message[$pos]['type']);
|
||||
// if there are children...
|
||||
if($this->message[$pos]['children'] != ''){
|
||||
$this->debug('in buildVal, there are children');
|
||||
$children = explode('|',$this->message[$pos]['children']);
|
||||
array_shift($children); // knock off empty
|
||||
// md array
|
||||
if(isset($this->message[$pos]['arrayCols']) && $this->message[$pos]['arrayCols'] != ''){
|
||||
$r=0; // rowcount
|
||||
$c=0; // colcount
|
||||
foreach($children as $child_pos){
|
||||
$this->debug("in buildVal, got an MD array element: $r, $c");
|
||||
$params[$r][] = $this->message[$child_pos]['result'];
|
||||
$c++;
|
||||
if($c == $this->message[$pos]['arrayCols']){
|
||||
$c = 0;
|
||||
$r++;
|
||||
}
|
||||
}
|
||||
// array
|
||||
} elseif($this->message[$pos]['type'] == 'array' || $this->message[$pos]['type'] == 'Array'){
|
||||
$this->debug('in buildVal, adding array '.$this->message[$pos]['name']);
|
||||
foreach($children as $child_pos){
|
||||
$params[] = &$this->message[$child_pos]['result'];
|
||||
}
|
||||
// apache Map type: java hashtable
|
||||
} elseif($this->message[$pos]['type'] == 'Map' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap'){
|
||||
$this->debug('in buildVal, Java Map '.$this->message[$pos]['name']);
|
||||
foreach($children as $child_pos){
|
||||
$kv = explode("|",$this->message[$child_pos]['children']);
|
||||
$params[$this->message[$kv[1]]['result']] = &$this->message[$kv[2]]['result'];
|
||||
}
|
||||
// generic compound type
|
||||
//} elseif($this->message[$pos]['type'] == 'SOAPStruct' || $this->message[$pos]['type'] == 'struct') {
|
||||
} else {
|
||||
// Apache Vector type: treat as an array
|
||||
$this->debug('in buildVal, adding Java Vector or generic compound type '.$this->message[$pos]['name']);
|
||||
if ($this->message[$pos]['type'] == 'Vector' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap') {
|
||||
$notstruct = 1;
|
||||
} else {
|
||||
$notstruct = 0;
|
||||
}
|
||||
//
|
||||
foreach($children as $child_pos){
|
||||
if($notstruct){
|
||||
$params[] = &$this->message[$child_pos]['result'];
|
||||
} else {
|
||||
if (isset($params[$this->message[$child_pos]['name']])) {
|
||||
// de-serialize repeated element name into an array
|
||||
if ((!is_array($params[$this->message[$child_pos]['name']])) || (!isset($params[$this->message[$child_pos]['name']][0]))) {
|
||||
$params[$this->message[$child_pos]['name']] = array($params[$this->message[$child_pos]['name']]);
|
||||
}
|
||||
$params[$this->message[$child_pos]['name']][] = &$this->message[$child_pos]['result'];
|
||||
} else {
|
||||
$params[$this->message[$child_pos]['name']] = &$this->message[$child_pos]['result'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($this->message[$pos]['xattrs'])) {
|
||||
$this->debug('in buildVal, handling attributes');
|
||||
foreach ($this->message[$pos]['xattrs'] as $n => $v) {
|
||||
$params[$n] = $v;
|
||||
}
|
||||
}
|
||||
// handle simpleContent
|
||||
if (isset($this->message[$pos]['cdata']) && trim($this->message[$pos]['cdata']) != '') {
|
||||
$this->debug('in buildVal, handling simpleContent');
|
||||
if (isset($this->message[$pos]['type'])) {
|
||||
$params['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
|
||||
} else {
|
||||
$parent = $this->message[$pos]['parent'];
|
||||
if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
|
||||
$params['!'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
|
||||
} else {
|
||||
$params['!'] = $this->message[$pos]['cdata'];
|
||||
}
|
||||
}
|
||||
}
|
||||
$ret = is_array($params) ? $params : array();
|
||||
$this->debug('in buildVal, return:');
|
||||
$this->appendDebug($this->varDump($ret));
|
||||
return $ret;
|
||||
} else {
|
||||
$this->debug('in buildVal, no children, building scalar');
|
||||
$cdata = isset($this->message[$pos]['cdata']) ? $this->message[$pos]['cdata'] : '';
|
||||
if (isset($this->message[$pos]['type'])) {
|
||||
$ret = $this->decodeSimple($cdata, $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
|
||||
$this->debug("in buildVal, return: $ret");
|
||||
return $ret;
|
||||
}
|
||||
$parent = $this->message[$pos]['parent'];
|
||||
if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
|
||||
$ret = $this->decodeSimple($cdata, $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
|
||||
$this->debug("in buildVal, return: $ret");
|
||||
return $ret;
|
||||
}
|
||||
$ret = $this->message[$pos]['cdata'];
|
||||
$this->debug("in buildVal, return: $ret");
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Backward compatibility
|
||||
*/
|
||||
class soap_parser extends nusoap_parser {
|
||||
}
|
||||
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* For creating serializable abstractions of native PHP types. This class
|
||||
* allows element name/namespace, XSD type, and XML attributes to be
|
||||
* associated with a value. This is extremely useful when WSDL is not
|
||||
* used, but is also useful when WSDL is used with polymorphic types, including
|
||||
* xsd:anyType and user-defined types.
|
||||
*
|
||||
* @author Dietrich Ayala <dietrich@ganx4.com>
|
||||
* @version $Id: class.soap_val.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class soapval extends nusoap_base {
|
||||
/**
|
||||
* The XML element name
|
||||
*
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $name;
|
||||
/**
|
||||
* The XML type name (string or false)
|
||||
*
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $type;
|
||||
/**
|
||||
* The PHP value
|
||||
*
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $value;
|
||||
/**
|
||||
* The XML element namespace (string or false)
|
||||
*
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $element_ns;
|
||||
/**
|
||||
* The XML type namespace (string or false)
|
||||
*
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $type_ns;
|
||||
/**
|
||||
* The XML element attributes (array or false)
|
||||
*
|
||||
* @var mixed
|
||||
* @access private
|
||||
*/
|
||||
var $attributes;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param string $name optional name
|
||||
* @param mixed $type optional type name
|
||||
* @param mixed $value optional value
|
||||
* @param mixed $element_ns optional namespace of value
|
||||
* @param mixed $type_ns optional namespace of type
|
||||
* @param mixed $attributes associative array of attributes to add to element serialization
|
||||
* @access public
|
||||
*/
|
||||
function soapval($name='soapval',$type=false,$value=-1,$element_ns=false,$type_ns=false,$attributes=false) {
|
||||
parent::nusoap_base();
|
||||
$this->name = $name;
|
||||
$this->type = $type;
|
||||
$this->value = $value;
|
||||
$this->element_ns = $element_ns;
|
||||
$this->type_ns = $type_ns;
|
||||
$this->attributes = $attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* return serialized value
|
||||
*
|
||||
* @param string $use The WSDL use value (encoded|literal)
|
||||
* @return string XML data
|
||||
* @access public
|
||||
*/
|
||||
function serialize($use='encoded') {
|
||||
return $this->serialize_val($this->value, $this->name, $this->type, $this->element_ns, $this->type_ns, $this->attributes, $use, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* decodes a soapval object into a PHP native type
|
||||
*
|
||||
* @return mixed
|
||||
* @access public
|
||||
*/
|
||||
function decode(){
|
||||
return $this->value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,991 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* [nu]soapclient higher level class for easy usage.
|
||||
*
|
||||
* usage:
|
||||
*
|
||||
* // instantiate client with server info
|
||||
* $soapclient = new nusoap_client( string path [ ,mixed wsdl] );
|
||||
*
|
||||
* // call method, get results
|
||||
* echo $soapclient->call( string methodname [ ,array parameters] );
|
||||
*
|
||||
* // bye bye client
|
||||
* unset($soapclient);
|
||||
*
|
||||
* @author Dietrich Ayala <dietrich@ganx4.com>
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @version $Id: class.soapclient.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_client extends nusoap_base {
|
||||
|
||||
var $username = ''; // Username for HTTP authentication
|
||||
var $password = ''; // Password for HTTP authentication
|
||||
var $authtype = ''; // Type of HTTP authentication
|
||||
var $certRequest = array(); // Certificate for HTTP SSL authentication
|
||||
var $requestHeaders = false; // SOAP headers in request (text)
|
||||
var $responseHeaders = ''; // SOAP headers from response (incomplete namespace resolution) (text)
|
||||
var $responseHeader = NULL; // SOAP Header from response (parsed)
|
||||
var $document = ''; // SOAP body response portion (incomplete namespace resolution) (text)
|
||||
var $endpoint;
|
||||
var $forceEndpoint = ''; // overrides WSDL endpoint
|
||||
var $proxyhost = '';
|
||||
var $proxyport = '';
|
||||
var $proxyusername = '';
|
||||
var $proxypassword = '';
|
||||
var $portName = ''; // port name to use in WSDL
|
||||
var $xml_encoding = ''; // character set encoding of incoming (response) messages
|
||||
var $http_encoding = false;
|
||||
var $timeout = 0; // HTTP connection timeout
|
||||
var $response_timeout = 30; // HTTP response timeout
|
||||
var $endpointType = ''; // soap|wsdl, empty for WSDL initialization error
|
||||
var $persistentConnection = false;
|
||||
var $defaultRpcParams = false; // This is no longer used
|
||||
var $request = ''; // HTTP request
|
||||
var $response = ''; // HTTP response
|
||||
var $responseData = ''; // SOAP payload of response
|
||||
var $cookies = array(); // Cookies from response or for request
|
||||
var $decode_utf8 = true; // toggles whether the parser decodes element content w/ utf8_decode()
|
||||
var $operations = array(); // WSDL operations, empty for WSDL initialization error
|
||||
var $curl_options = array(); // User-specified cURL options
|
||||
var $bindingType = ''; // WSDL operation binding type
|
||||
var $use_curl = false; // whether to always try to use cURL
|
||||
|
||||
/*
|
||||
* fault related variables
|
||||
*/
|
||||
/**
|
||||
* @var fault
|
||||
* @access public
|
||||
*/
|
||||
var $fault;
|
||||
/**
|
||||
* @var faultcode
|
||||
* @access public
|
||||
*/
|
||||
var $faultcode;
|
||||
/**
|
||||
* @var faultstring
|
||||
* @access public
|
||||
*/
|
||||
var $faultstring;
|
||||
/**
|
||||
* @var faultdetail
|
||||
* @access public
|
||||
*/
|
||||
var $faultdetail;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param mixed $endpoint SOAP server or WSDL URL (string), or wsdl instance (object)
|
||||
* @param mixed $wsdl optional, set to 'wsdl' or true if using WSDL
|
||||
* @param string $proxyhost optional
|
||||
* @param string $proxyport optional
|
||||
* @param string $proxyusername optional
|
||||
* @param string $proxypassword optional
|
||||
* @param integer $timeout set the connection timeout
|
||||
* @param integer $response_timeout set the response timeout
|
||||
* @param string $portName optional portName in WSDL document
|
||||
* @access public
|
||||
*/
|
||||
function nusoap_client($endpoint,$wsdl = false,$proxyhost = false,$proxyport = false,$proxyusername = false, $proxypassword = false, $timeout = 0, $response_timeout = 30, $portName = ''){
|
||||
parent::nusoap_base();
|
||||
$this->endpoint = $endpoint;
|
||||
$this->proxyhost = $proxyhost;
|
||||
$this->proxyport = $proxyport;
|
||||
$this->proxyusername = $proxyusername;
|
||||
$this->proxypassword = $proxypassword;
|
||||
$this->timeout = $timeout;
|
||||
$this->response_timeout = $response_timeout;
|
||||
$this->portName = $portName;
|
||||
|
||||
$this->debug("ctor wsdl=$wsdl timeout=$timeout response_timeout=$response_timeout");
|
||||
$this->appendDebug('endpoint=' . $this->varDump($endpoint));
|
||||
|
||||
// make values
|
||||
if($wsdl){
|
||||
if (is_object($endpoint) && (get_class($endpoint) == 'wsdl')) {
|
||||
$this->wsdl = $endpoint;
|
||||
$this->endpoint = $this->wsdl->wsdl;
|
||||
$this->wsdlFile = $this->endpoint;
|
||||
$this->debug('existing wsdl instance created from ' . $this->endpoint);
|
||||
$this->checkWSDL();
|
||||
} else {
|
||||
$this->wsdlFile = $this->endpoint;
|
||||
$this->wsdl = null;
|
||||
$this->debug('will use lazy evaluation of wsdl from ' . $this->endpoint);
|
||||
}
|
||||
$this->endpointType = 'wsdl';
|
||||
} else {
|
||||
$this->debug("instantiate SOAP with endpoint at $endpoint");
|
||||
$this->endpointType = 'soap';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* calls method, returns PHP native type
|
||||
*
|
||||
* @param string $operation SOAP server URL or path
|
||||
* @param mixed $params An array, associative or simple, of the parameters
|
||||
* for the method call, or a string that is the XML
|
||||
* for the call. For rpc style, this call will
|
||||
* wrap the XML in a tag named after the method, as
|
||||
* well as the SOAP Envelope and Body. For document
|
||||
* style, this will only wrap with the Envelope and Body.
|
||||
* IMPORTANT: when using an array with document style,
|
||||
* in which case there
|
||||
* is really one parameter, the root of the fragment
|
||||
* used in the call, which encloses what programmers
|
||||
* normally think of parameters. A parameter array
|
||||
* *must* include the wrapper.
|
||||
* @param string $namespace optional method namespace (WSDL can override)
|
||||
* @param string $soapAction optional SOAPAction value (WSDL can override)
|
||||
* @param mixed $headers optional string of XML with SOAP header content, or array of soapval objects for SOAP headers, or associative array
|
||||
* @param boolean $rpcParams optional (no longer used)
|
||||
* @param string $style optional (rpc|document) the style to use when serializing parameters (WSDL can override)
|
||||
* @param string $use optional (encoded|literal) the use when serializing parameters (WSDL can override)
|
||||
* @return mixed response from SOAP call, normally an associative array mirroring the structure of the XML response, false for certain fatal errors
|
||||
* @access public
|
||||
*/
|
||||
function call($operation,$params=array(),$namespace='http://tempuri.org',$soapAction='',$headers=false,$rpcParams=null,$style='rpc',$use='encoded'){
|
||||
$this->operation = $operation;
|
||||
$this->fault = false;
|
||||
$this->setError('');
|
||||
$this->request = '';
|
||||
$this->response = '';
|
||||
$this->responseData = '';
|
||||
$this->faultstring = '';
|
||||
$this->faultcode = '';
|
||||
$this->opData = array();
|
||||
|
||||
$this->debug("call: operation=$operation, namespace=$namespace, soapAction=$soapAction, rpcParams=$rpcParams, style=$style, use=$use, endpointType=$this->endpointType");
|
||||
$this->appendDebug('params=' . $this->varDump($params));
|
||||
$this->appendDebug('headers=' . $this->varDump($headers));
|
||||
if ($headers) {
|
||||
$this->requestHeaders = $headers;
|
||||
}
|
||||
if ($this->endpointType == 'wsdl' && is_null($this->wsdl)) {
|
||||
$this->loadWSDL();
|
||||
if ($this->getError())
|
||||
return false;
|
||||
}
|
||||
// serialize parameters
|
||||
if($this->endpointType == 'wsdl' && $opData = $this->getOperationData($operation)){
|
||||
// use WSDL for operation
|
||||
$this->opData = $opData;
|
||||
$this->debug("found operation");
|
||||
$this->appendDebug('opData=' . $this->varDump($opData));
|
||||
if (isset($opData['soapAction'])) {
|
||||
$soapAction = $opData['soapAction'];
|
||||
}
|
||||
if (! $this->forceEndpoint) {
|
||||
$this->endpoint = $opData['endpoint'];
|
||||
} else {
|
||||
$this->endpoint = $this->forceEndpoint;
|
||||
}
|
||||
$namespace = isset($opData['input']['namespace']) ? $opData['input']['namespace'] : $namespace;
|
||||
$style = $opData['style'];
|
||||
$use = $opData['input']['use'];
|
||||
// add ns to ns array
|
||||
if($namespace != '' && !isset($this->wsdl->namespaces[$namespace])){
|
||||
$nsPrefix = 'ns' . rand(1000, 9999);
|
||||
$this->wsdl->namespaces[$nsPrefix] = $namespace;
|
||||
}
|
||||
$nsPrefix = $this->wsdl->getPrefixFromNamespace($namespace);
|
||||
// serialize payload
|
||||
if (is_string($params)) {
|
||||
$this->debug("serializing param string for WSDL operation $operation");
|
||||
$payload = $params;
|
||||
} elseif (is_array($params)) {
|
||||
$this->debug("serializing param array for WSDL operation $operation");
|
||||
$payload = $this->wsdl->serializeRPCParameters($operation,'input',$params,$this->bindingType);
|
||||
} else {
|
||||
$this->debug('params must be array or string');
|
||||
$this->setError('params must be array or string');
|
||||
return false;
|
||||
}
|
||||
$usedNamespaces = $this->wsdl->usedNamespaces;
|
||||
if (isset($opData['input']['encodingStyle'])) {
|
||||
$encodingStyle = $opData['input']['encodingStyle'];
|
||||
} else {
|
||||
$encodingStyle = '';
|
||||
}
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
if ($errstr = $this->wsdl->getError()) {
|
||||
$this->debug('got wsdl error: '.$errstr);
|
||||
$this->setError('wsdl error: '.$errstr);
|
||||
return false;
|
||||
}
|
||||
} elseif($this->endpointType == 'wsdl') {
|
||||
// operation not in WSDL
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
$this->setError('operation '.$operation.' not present in WSDL.');
|
||||
$this->debug("operation '$operation' not present in WSDL.");
|
||||
return false;
|
||||
} else {
|
||||
// no WSDL
|
||||
//$this->namespaces['ns1'] = $namespace;
|
||||
$nsPrefix = 'ns' . rand(1000, 9999);
|
||||
// serialize
|
||||
$payload = '';
|
||||
if (is_string($params)) {
|
||||
$this->debug("serializing param string for operation $operation");
|
||||
$payload = $params;
|
||||
} elseif (is_array($params)) {
|
||||
$this->debug("serializing param array for operation $operation");
|
||||
foreach($params as $k => $v){
|
||||
$payload .= $this->serialize_val($v,$k,false,false,false,false,$use);
|
||||
}
|
||||
} else {
|
||||
$this->debug('params must be array or string');
|
||||
$this->setError('params must be array or string');
|
||||
return false;
|
||||
}
|
||||
$usedNamespaces = array();
|
||||
if ($use == 'encoded') {
|
||||
$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
|
||||
} else {
|
||||
$encodingStyle = '';
|
||||
}
|
||||
}
|
||||
// wrap RPC calls with method element
|
||||
if ($style == 'rpc') {
|
||||
if ($use == 'literal') {
|
||||
$this->debug("wrapping RPC request with literal method element");
|
||||
if ($namespace) {
|
||||
// http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html R2735 says rpc/literal accessor elements should not be in a namespace
|
||||
$payload = "<$nsPrefix:$operation xmlns:$nsPrefix=\"$namespace\">" .
|
||||
$payload .
|
||||
"</$nsPrefix:$operation>";
|
||||
} else {
|
||||
$payload = "<$operation>" . $payload . "</$operation>";
|
||||
}
|
||||
} else {
|
||||
$this->debug("wrapping RPC request with encoded method element");
|
||||
if ($namespace) {
|
||||
$payload = "<$nsPrefix:$operation xmlns:$nsPrefix=\"$namespace\">" .
|
||||
$payload .
|
||||
"</$nsPrefix:$operation>";
|
||||
} else {
|
||||
$payload = "<$operation>" .
|
||||
$payload .
|
||||
"</$operation>";
|
||||
}
|
||||
}
|
||||
}
|
||||
// serialize envelope
|
||||
$soapmsg = $this->serializeEnvelope($payload,$this->requestHeaders,$usedNamespaces,$style,$use,$encodingStyle);
|
||||
$this->debug("endpoint=$this->endpoint, soapAction=$soapAction, namespace=$namespace, style=$style, use=$use, encodingStyle=$encodingStyle");
|
||||
$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents (max 1000 bytes)=' . substr($soapmsg, 0, 1000));
|
||||
// send
|
||||
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);
|
||||
if($errstr = $this->getError()){
|
||||
$this->debug('Error: '.$errstr);
|
||||
return false;
|
||||
} else {
|
||||
$this->return = $return;
|
||||
$this->debug('sent message successfully and got a(n) '.gettype($return));
|
||||
$this->appendDebug('return=' . $this->varDump($return));
|
||||
|
||||
// fault?
|
||||
if(is_array($return) && isset($return['faultcode'])){
|
||||
$this->debug('got fault');
|
||||
$this->setError($return['faultcode'].': '.$return['faultstring']);
|
||||
$this->fault = true;
|
||||
foreach($return as $k => $v){
|
||||
$this->$k = $v;
|
||||
$this->debug("$k = $v<br>");
|
||||
}
|
||||
return $return;
|
||||
} elseif ($style == 'document') {
|
||||
// NOTE: if the response is defined to have multiple parts (i.e. unwrapped),
|
||||
// we are only going to return the first part here...sorry about that
|
||||
return $return;
|
||||
} else {
|
||||
// array of return values
|
||||
if(is_array($return)){
|
||||
// multiple 'out' parameters, which we return wrapped up
|
||||
// in the array
|
||||
if(sizeof($return) > 1){
|
||||
return $return;
|
||||
}
|
||||
// single 'out' parameter (normally the return value)
|
||||
$return = array_shift($return);
|
||||
$this->debug('return shifted value: ');
|
||||
$this->appendDebug($this->varDump($return));
|
||||
return $return;
|
||||
// nothing returned (ie, echoVoid)
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check WSDL passed as an instance or pulled from an endpoint
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
function checkWSDL() {
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
$this->debug('checkWSDL');
|
||||
// catch errors
|
||||
if ($errstr = $this->wsdl->getError()) {
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
$this->debug('got wsdl error: '.$errstr);
|
||||
$this->setError('wsdl error: '.$errstr);
|
||||
} elseif ($this->operations = $this->wsdl->getOperations($this->portName, 'soap')) {
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
$this->bindingType = 'soap';
|
||||
$this->debug('got '.count($this->operations).' operations from wsdl '.$this->wsdlFile.' for binding type '.$this->bindingType);
|
||||
} elseif ($this->operations = $this->wsdl->getOperations($this->portName, 'soap12')) {
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
$this->bindingType = 'soap12';
|
||||
$this->debug('got '.count($this->operations).' operations from wsdl '.$this->wsdlFile.' for binding type '.$this->bindingType);
|
||||
$this->debug('**************** WARNING: SOAP 1.2 BINDING *****************');
|
||||
} else {
|
||||
$this->appendDebug($this->wsdl->getDebug());
|
||||
$this->wsdl->clearDebug();
|
||||
$this->debug('getOperations returned false');
|
||||
$this->setError('no operations defined in the WSDL document!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* instantiate wsdl object and parse wsdl file
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function loadWSDL() {
|
||||
$this->debug('instantiating wsdl class with doc: '.$this->wsdlFile);
|
||||
$this->wsdl = new wsdl('',$this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword,$this->timeout,$this->response_timeout,$this->curl_options,$this->use_curl);
|
||||
$this->wsdl->setCredentials($this->username, $this->password, $this->authtype, $this->certRequest);
|
||||
$this->wsdl->fetchWSDL($this->wsdlFile);
|
||||
$this->checkWSDL();
|
||||
}
|
||||
|
||||
/**
|
||||
* get available data pertaining to an operation
|
||||
*
|
||||
* @param string $operation operation name
|
||||
* @return array array of data pertaining to the operation
|
||||
* @access public
|
||||
*/
|
||||
function getOperationData($operation){
|
||||
if ($this->endpointType == 'wsdl' && is_null($this->wsdl)) {
|
||||
$this->loadWSDL();
|
||||
if ($this->getError())
|
||||
return false;
|
||||
}
|
||||
if(isset($this->operations[$operation])){
|
||||
return $this->operations[$operation];
|
||||
}
|
||||
$this->debug("No data for operation: $operation");
|
||||
}
|
||||
|
||||
/**
|
||||
* send the SOAP message
|
||||
*
|
||||
* Note: if the operation has multiple return values
|
||||
* the return value of this method will be an array
|
||||
* of those values.
|
||||
*
|
||||
* @param string $msg a SOAPx4 soapmsg object
|
||||
* @param string $soapaction SOAPAction value
|
||||
* @param integer $timeout set connection timeout in seconds
|
||||
* @param integer $response_timeout set response timeout in seconds
|
||||
* @return mixed native PHP types.
|
||||
* @access private
|
||||
*/
|
||||
function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) {
|
||||
$this->checkCookies();
|
||||
// detect transport
|
||||
switch(true){
|
||||
// http(s)
|
||||
case preg_match('/^http/',$this->endpoint):
|
||||
$this->debug('transporting via HTTP');
|
||||
if($this->persistentConnection == true && is_object($this->persistentConnection)){
|
||||
$http =& $this->persistentConnection;
|
||||
} else {
|
||||
$http = new soap_transport_http($this->endpoint, $this->curl_options, $this->use_curl);
|
||||
if ($this->persistentConnection) {
|
||||
$http->usePersistentConnection();
|
||||
}
|
||||
}
|
||||
$http->setContentType($this->getHTTPContentType(), $this->getHTTPContentTypeCharset());
|
||||
$http->setSOAPAction($soapaction);
|
||||
if($this->proxyhost && $this->proxyport){
|
||||
$http->setProxy($this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword);
|
||||
}
|
||||
if($this->authtype != '') {
|
||||
$http->setCredentials($this->username, $this->password, $this->authtype, array(), $this->certRequest);
|
||||
}
|
||||
if($this->http_encoding != ''){
|
||||
$http->setEncoding($this->http_encoding);
|
||||
}
|
||||
$this->debug('sending message, length='.strlen($msg));
|
||||
if(preg_match('/^http:/',$this->endpoint)){
|
||||
//if(strpos($this->endpoint,'http:')){
|
||||
$this->responseData = $http->send($msg,$timeout,$response_timeout,$this->cookies);
|
||||
} elseif(preg_match('/^https/',$this->endpoint)){
|
||||
//} elseif(strpos($this->endpoint,'https:')){
|
||||
//if(phpversion() == '4.3.0-dev'){
|
||||
//$response = $http->send($msg,$timeout,$response_timeout);
|
||||
//$this->request = $http->outgoing_payload;
|
||||
//$this->response = $http->incoming_payload;
|
||||
//} else
|
||||
$this->responseData = $http->sendHTTPS($msg,$timeout,$response_timeout,$this->cookies);
|
||||
} else {
|
||||
$this->setError('no http/s in endpoint url');
|
||||
}
|
||||
$this->request = $http->outgoing_payload;
|
||||
$this->response = $http->incoming_payload;
|
||||
$this->appendDebug($http->getDebug());
|
||||
$this->UpdateCookies($http->incoming_cookies);
|
||||
|
||||
// save transport object if using persistent connections
|
||||
if ($this->persistentConnection) {
|
||||
$http->clearDebug();
|
||||
if (!is_object($this->persistentConnection)) {
|
||||
$this->persistentConnection = $http;
|
||||
}
|
||||
}
|
||||
|
||||
if($err = $http->getError()){
|
||||
$this->setError('HTTP Error: '.$err);
|
||||
return false;
|
||||
} elseif($this->getError()){
|
||||
return false;
|
||||
} else {
|
||||
$this->debug('got response, length='. strlen($this->responseData).' type='.$http->incoming_headers['content-type']);
|
||||
return $this->parseResponse($http->incoming_headers, $this->responseData);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$this->setError('no transport found, or selected transport is not yet supported!');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* processes SOAP message returned from server
|
||||
*
|
||||
* @param array $headers The HTTP headers
|
||||
* @param string $data unprocessed response data from server
|
||||
* @return mixed value of the message, decoded into a PHP type
|
||||
* @access private
|
||||
*/
|
||||
function parseResponse($headers, $data) {
|
||||
$this->debug('Entering parseResponse() for data of length ' . strlen($data) . ' headers:');
|
||||
$this->appendDebug($this->varDump($headers));
|
||||
if (!isset($headers['content-type'])) {
|
||||
$this->setError('Response not of type text/xml (no content-type header)');
|
||||
return false;
|
||||
}
|
||||
if (!strstr($headers['content-type'], 'text/xml')) {
|
||||
$this->setError('Response not of type text/xml: ' . $headers['content-type']);
|
||||
return false;
|
||||
}
|
||||
if (strpos($headers['content-type'], '=')) {
|
||||
$enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));
|
||||
$this->debug('Got response encoding: ' . $enc);
|
||||
if(preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i',$enc)){
|
||||
$this->xml_encoding = strtoupper($enc);
|
||||
} else {
|
||||
$this->xml_encoding = 'US-ASCII';
|
||||
}
|
||||
} else {
|
||||
// should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
|
||||
$this->xml_encoding = 'ISO-8859-1';
|
||||
}
|
||||
$this->debug('Use encoding: ' . $this->xml_encoding . ' when creating nusoap_parser');
|
||||
$parser = new nusoap_parser($data,$this->xml_encoding,$this->operation,$this->decode_utf8);
|
||||
// add parser debug data to our debug
|
||||
$this->appendDebug($parser->getDebug());
|
||||
// if parse errors
|
||||
if($errstr = $parser->getError()){
|
||||
$this->setError( $errstr);
|
||||
// destroy the parser object
|
||||
unset($parser);
|
||||
return false;
|
||||
} else {
|
||||
// get SOAP headers
|
||||
$this->responseHeaders = $parser->getHeaders();
|
||||
// get SOAP headers
|
||||
$this->responseHeader = $parser->get_soapheader();
|
||||
// get decoded message
|
||||
$return = $parser->get_soapbody();
|
||||
// add document for doclit support
|
||||
$this->document = $parser->document;
|
||||
// destroy the parser object
|
||||
unset($parser);
|
||||
// return decode message
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* sets user-specified cURL options
|
||||
*
|
||||
* @param mixed $option The cURL option (always integer?)
|
||||
* @param mixed $value The cURL option value
|
||||
* @access public
|
||||
*/
|
||||
function setCurlOption($option, $value) {
|
||||
$this->debug("setCurlOption option=$option, value=");
|
||||
$this->appendDebug($this->varDump($value));
|
||||
$this->curl_options[$option] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the SOAP endpoint, which can override WSDL
|
||||
*
|
||||
* @param string $endpoint The endpoint URL to use, or empty string or false to prevent override
|
||||
* @access public
|
||||
*/
|
||||
function setEndpoint($endpoint) {
|
||||
$this->debug("setEndpoint(\"$endpoint\")");
|
||||
$this->forceEndpoint = $endpoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* set the SOAP headers
|
||||
*
|
||||
* @param mixed $headers String of XML with SOAP header content, or array of soapval objects for SOAP headers
|
||||
* @access public
|
||||
*/
|
||||
function setHeaders($headers){
|
||||
$this->debug("setHeaders headers=");
|
||||
$this->appendDebug($this->varDump($headers));
|
||||
$this->requestHeaders = $headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the SOAP response headers (namespace resolution incomplete)
|
||||
*
|
||||
* @return string
|
||||
* @access public
|
||||
*/
|
||||
function getHeaders(){
|
||||
return $this->responseHeaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the SOAP response Header (parsed)
|
||||
*
|
||||
* @return mixed
|
||||
* @access public
|
||||
*/
|
||||
function getHeader(){
|
||||
return $this->responseHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
* set proxy info here
|
||||
*
|
||||
* @param string $proxyhost
|
||||
* @param string $proxyport
|
||||
* @param string $proxyusername
|
||||
* @param string $proxypassword
|
||||
* @access public
|
||||
*/
|
||||
function setHTTPProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '') {
|
||||
$this->proxyhost = $proxyhost;
|
||||
$this->proxyport = $proxyport;
|
||||
$this->proxyusername = $proxyusername;
|
||||
$this->proxypassword = $proxypassword;
|
||||
}
|
||||
|
||||
/**
|
||||
* if authenticating, set user credentials here
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @param string $authtype (basic|digest|certificate|ntlm)
|
||||
* @param array $certRequest (keys must be cainfofile (optional), sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional): see corresponding options in cURL docs)
|
||||
* @access public
|
||||
*/
|
||||
function setCredentials($username, $password, $authtype = 'basic', $certRequest = array()) {
|
||||
$this->debug("setCredentials username=$username authtype=$authtype certRequest=");
|
||||
$this->appendDebug($this->varDump($certRequest));
|
||||
$this->username = $username;
|
||||
$this->password = $password;
|
||||
$this->authtype = $authtype;
|
||||
$this->certRequest = $certRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* use HTTP encoding
|
||||
*
|
||||
* @param string $enc HTTP encoding
|
||||
* @access public
|
||||
*/
|
||||
function setHTTPEncoding($enc='gzip, deflate'){
|
||||
$this->debug("setHTTPEncoding(\"$enc\")");
|
||||
$this->http_encoding = $enc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether to try to use cURL connections if possible
|
||||
*
|
||||
* @param boolean $use Whether to try to use cURL
|
||||
* @access public
|
||||
*/
|
||||
function setUseCURL($use) {
|
||||
$this->debug("setUseCURL($use)");
|
||||
$this->use_curl = $use;
|
||||
}
|
||||
|
||||
/**
|
||||
* use HTTP persistent connections if possible
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function useHTTPPersistentConnection(){
|
||||
$this->debug("useHTTPPersistentConnection");
|
||||
$this->persistentConnection = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the default RPC parameter setting.
|
||||
* If true, default is that call params are like RPC even for document style.
|
||||
* Each call() can override this value.
|
||||
*
|
||||
* This is no longer used.
|
||||
*
|
||||
* @return boolean
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function getDefaultRpcParams() {
|
||||
return $this->defaultRpcParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the default RPC parameter setting.
|
||||
* If true, default is that call params are like RPC even for document style
|
||||
* Each call() can override this value.
|
||||
*
|
||||
* This is no longer used.
|
||||
*
|
||||
* @param boolean $rpcParams
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function setDefaultRpcParams($rpcParams) {
|
||||
$this->defaultRpcParams = $rpcParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* dynamically creates an instance of a proxy class,
|
||||
* allowing user to directly call methods from wsdl
|
||||
*
|
||||
* @return object soap_proxy object
|
||||
* @access public
|
||||
*/
|
||||
function getProxy() {
|
||||
$r = rand();
|
||||
$evalStr = $this->_getProxyClassCode($r);
|
||||
//$this->debug("proxy class: $evalStr");
|
||||
if ($this->getError()) {
|
||||
$this->debug("Error from _getProxyClassCode, so return NULL");
|
||||
return null;
|
||||
}
|
||||
// eval the class
|
||||
eval($evalStr);
|
||||
// instantiate proxy object
|
||||
eval("\$proxy = new nusoap_proxy_$r('');");
|
||||
// transfer current wsdl data to the proxy thereby avoiding parsing the wsdl twice
|
||||
$proxy->endpointType = 'wsdl';
|
||||
$proxy->wsdlFile = $this->wsdlFile;
|
||||
$proxy->wsdl = $this->wsdl;
|
||||
$proxy->operations = $this->operations;
|
||||
$proxy->defaultRpcParams = $this->defaultRpcParams;
|
||||
// transfer other state
|
||||
$proxy->soap_defencoding = $this->soap_defencoding;
|
||||
$proxy->username = $this->username;
|
||||
$proxy->password = $this->password;
|
||||
$proxy->authtype = $this->authtype;
|
||||
$proxy->certRequest = $this->certRequest;
|
||||
$proxy->requestHeaders = $this->requestHeaders;
|
||||
$proxy->endpoint = $this->endpoint;
|
||||
$proxy->forceEndpoint = $this->forceEndpoint;
|
||||
$proxy->proxyhost = $this->proxyhost;
|
||||
$proxy->proxyport = $this->proxyport;
|
||||
$proxy->proxyusername = $this->proxyusername;
|
||||
$proxy->proxypassword = $this->proxypassword;
|
||||
$proxy->http_encoding = $this->http_encoding;
|
||||
$proxy->timeout = $this->timeout;
|
||||
$proxy->response_timeout = $this->response_timeout;
|
||||
$proxy->persistentConnection = &$this->persistentConnection;
|
||||
$proxy->decode_utf8 = $this->decode_utf8;
|
||||
$proxy->curl_options = $this->curl_options;
|
||||
$proxy->bindingType = $this->bindingType;
|
||||
$proxy->use_curl = $this->use_curl;
|
||||
return $proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* dynamically creates proxy class code
|
||||
*
|
||||
* @return string PHP/NuSOAP code for the proxy class
|
||||
* @access private
|
||||
*/
|
||||
function _getProxyClassCode($r) {
|
||||
$this->debug("in getProxy endpointType=$this->endpointType");
|
||||
$this->appendDebug("wsdl=" . $this->varDump($this->wsdl));
|
||||
if ($this->endpointType != 'wsdl') {
|
||||
$evalStr = 'A proxy can only be created for a WSDL client';
|
||||
$this->setError($evalStr);
|
||||
$evalStr = "echo \"$evalStr\";";
|
||||
return $evalStr;
|
||||
}
|
||||
if ($this->endpointType == 'wsdl' && is_null($this->wsdl)) {
|
||||
$this->loadWSDL();
|
||||
if ($this->getError()) {
|
||||
return "echo \"" . $this->getError() . "\";";
|
||||
}
|
||||
}
|
||||
$evalStr = '';
|
||||
foreach ($this->operations as $operation => $opData) {
|
||||
if ($operation != '') {
|
||||
// create param string and param comment string
|
||||
if (sizeof($opData['input']['parts']) > 0) {
|
||||
$paramStr = '';
|
||||
$paramArrayStr = '';
|
||||
$paramCommentStr = '';
|
||||
foreach ($opData['input']['parts'] as $name => $type) {
|
||||
$paramStr .= "\$$name, ";
|
||||
$paramArrayStr .= "'$name' => \$$name, ";
|
||||
$paramCommentStr .= "$type \$$name, ";
|
||||
}
|
||||
$paramStr = substr($paramStr, 0, strlen($paramStr)-2);
|
||||
$paramArrayStr = substr($paramArrayStr, 0, strlen($paramArrayStr)-2);
|
||||
$paramCommentStr = substr($paramCommentStr, 0, strlen($paramCommentStr)-2);
|
||||
} else {
|
||||
$paramStr = '';
|
||||
$paramArrayStr = '';
|
||||
$paramCommentStr = 'void';
|
||||
}
|
||||
$opData['namespace'] = !isset($opData['namespace']) ? 'http://testuri.com' : $opData['namespace'];
|
||||
$evalStr .= "// $paramCommentStr
|
||||
function " . str_replace('.', '__', $operation) . "($paramStr) {
|
||||
\$params = array($paramArrayStr);
|
||||
return \$this->call('$operation', \$params, '".$opData['namespace']."', '".(isset($opData['soapAction']) ? $opData['soapAction'] : '')."');
|
||||
}
|
||||
";
|
||||
unset($paramStr);
|
||||
unset($paramCommentStr);
|
||||
}
|
||||
}
|
||||
$evalStr = 'class nusoap_proxy_'.$r.' extends nusoap_client {
|
||||
'.$evalStr.'
|
||||
}';
|
||||
return $evalStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* dynamically creates proxy class code
|
||||
*
|
||||
* @return string PHP/NuSOAP code for the proxy class
|
||||
* @access public
|
||||
*/
|
||||
function getProxyClassCode() {
|
||||
$r = rand();
|
||||
return $this->_getProxyClassCode($r);
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP body for the current request.
|
||||
*
|
||||
* @param string $soapmsg The SOAP payload
|
||||
* @return string The HTTP body, which includes the SOAP payload
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPBody($soapmsg) {
|
||||
return $soapmsg;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP content type for the current request.
|
||||
*
|
||||
* Note: getHTTPBody must be called before this.
|
||||
*
|
||||
* @return string the HTTP content type for the current request.
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPContentType() {
|
||||
return 'text/xml';
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP content type charset for the current request.
|
||||
* returns false for non-text content types.
|
||||
*
|
||||
* Note: getHTTPBody must be called before this.
|
||||
*
|
||||
* @return string the HTTP content type charset for the current request.
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPContentTypeCharset() {
|
||||
return $this->soap_defencoding;
|
||||
}
|
||||
|
||||
/*
|
||||
* whether or not parser should decode utf8 element content
|
||||
*
|
||||
* @return always returns true
|
||||
* @access public
|
||||
*/
|
||||
function decodeUTF8($bool){
|
||||
$this->decode_utf8 = $bool;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a new Cookie into $this->cookies array
|
||||
*
|
||||
* @param string $name Cookie Name
|
||||
* @param string $value Cookie Value
|
||||
* @return boolean if cookie-set was successful returns true, else false
|
||||
* @access public
|
||||
*/
|
||||
function setCookie($name, $value) {
|
||||
if (strlen($name) == 0) {
|
||||
return false;
|
||||
}
|
||||
$this->cookies[] = array('name' => $name, 'value' => $value);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets all Cookies
|
||||
*
|
||||
* @return array with all internal cookies
|
||||
* @access public
|
||||
*/
|
||||
function getCookies() {
|
||||
return $this->cookies;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks all Cookies and delete those which are expired
|
||||
*
|
||||
* @return boolean always return true
|
||||
* @access private
|
||||
*/
|
||||
function checkCookies() {
|
||||
if (sizeof($this->cookies) == 0) {
|
||||
return true;
|
||||
}
|
||||
$this->debug('checkCookie: check ' . sizeof($this->cookies) . ' cookies');
|
||||
$curr_cookies = $this->cookies;
|
||||
$this->cookies = array();
|
||||
foreach ($curr_cookies as $cookie) {
|
||||
if (! is_array($cookie)) {
|
||||
$this->debug('Remove cookie that is not an array');
|
||||
continue;
|
||||
}
|
||||
if ((isset($cookie['expires'])) && (! empty($cookie['expires']))) {
|
||||
if (strtotime($cookie['expires']) > time()) {
|
||||
$this->cookies[] = $cookie;
|
||||
} else {
|
||||
$this->debug('Remove expired cookie ' . $cookie['name']);
|
||||
}
|
||||
} else {
|
||||
$this->cookies[] = $cookie;
|
||||
}
|
||||
}
|
||||
$this->debug('checkCookie: '.sizeof($this->cookies).' cookies left in array');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* updates the current cookies with a new set
|
||||
*
|
||||
* @param array $cookies new cookies with which to update current ones
|
||||
* @return boolean always return true
|
||||
* @access private
|
||||
*/
|
||||
function UpdateCookies($cookies) {
|
||||
if (sizeof($this->cookies) == 0) {
|
||||
// no existing cookies: take whatever is new
|
||||
if (sizeof($cookies) > 0) {
|
||||
$this->debug('Setting new cookie(s)');
|
||||
$this->cookies = $cookies;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (sizeof($cookies) == 0) {
|
||||
// no new cookies: keep what we've got
|
||||
return true;
|
||||
}
|
||||
// merge
|
||||
foreach ($cookies as $newCookie) {
|
||||
if (!is_array($newCookie)) {
|
||||
continue;
|
||||
}
|
||||
if ((!isset($newCookie['name'])) || (!isset($newCookie['value']))) {
|
||||
continue;
|
||||
}
|
||||
$newName = $newCookie['name'];
|
||||
|
||||
$found = false;
|
||||
for ($i = 0; $i < count($this->cookies); $i++) {
|
||||
$cookie = $this->cookies[$i];
|
||||
if (!is_array($cookie)) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($cookie['name'])) {
|
||||
continue;
|
||||
}
|
||||
if ($newName != $cookie['name']) {
|
||||
continue;
|
||||
}
|
||||
$newDomain = isset($newCookie['domain']) ? $newCookie['domain'] : 'NODOMAIN';
|
||||
$domain = isset($cookie['domain']) ? $cookie['domain'] : 'NODOMAIN';
|
||||
if ($newDomain != $domain) {
|
||||
continue;
|
||||
}
|
||||
$newPath = isset($newCookie['path']) ? $newCookie['path'] : 'NOPATH';
|
||||
$path = isset($cookie['path']) ? $cookie['path'] : 'NOPATH';
|
||||
if ($newPath != $path) {
|
||||
continue;
|
||||
}
|
||||
$this->cookies[$i] = $newCookie;
|
||||
$found = true;
|
||||
$this->debug('Update cookie ' . $newName . '=' . $newCookie['value']);
|
||||
break;
|
||||
}
|
||||
if (! $found) {
|
||||
$this->debug('Add cookie ' . $newName . '=' . $newCookie['value']);
|
||||
$this->cookies[] = $newCookie;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!extension_loaded('soap')) {
|
||||
/**
|
||||
* For backwards compatiblity, define soapclient unless the PHP SOAP extension is loaded.
|
||||
*/
|
||||
class soapclient extends nusoap_client {
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,209 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
The NuSOAP project home is:
|
||||
http://sourceforge.net/projects/nusoap/
|
||||
|
||||
The primary support for NuSOAP is the mailing list:
|
||||
nusoap-general@lists.sourceforge.net
|
||||
*/
|
||||
|
||||
/**
|
||||
* caches instances of the wsdl class
|
||||
*
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @author Ingo Fischer <ingo@apollon.de>
|
||||
* @version $Id: class.wsdlcache.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_wsdlcache {
|
||||
/**
|
||||
* @var resource
|
||||
* @access private
|
||||
*/
|
||||
var $fplock;
|
||||
/**
|
||||
* @var integer
|
||||
* @access private
|
||||
*/
|
||||
var $cache_lifetime;
|
||||
/**
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $cache_dir;
|
||||
/**
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
var $debug_str = '';
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param string $cache_dir directory for cache-files
|
||||
* @param integer $cache_lifetime lifetime for caching-files in seconds or 0 for unlimited
|
||||
* @access public
|
||||
*/
|
||||
function nusoap_wsdlcache($cache_dir='.', $cache_lifetime=0) {
|
||||
$this->fplock = array();
|
||||
$this->cache_dir = $cache_dir != '' ? $cache_dir : '.';
|
||||
$this->cache_lifetime = $cache_lifetime;
|
||||
}
|
||||
|
||||
/**
|
||||
* creates the filename used to cache a wsdl instance
|
||||
*
|
||||
* @param string $wsdl The URL of the wsdl instance
|
||||
* @return string The filename used to cache the instance
|
||||
* @access private
|
||||
*/
|
||||
function createFilename($wsdl) {
|
||||
return $this->cache_dir.'/wsdlcache-' . md5($wsdl);
|
||||
}
|
||||
|
||||
/**
|
||||
* adds debug data to the class level debug string
|
||||
*
|
||||
* @param string $string debug data
|
||||
* @access private
|
||||
*/
|
||||
function debug($string){
|
||||
$this->debug_str .= get_class($this).": $string\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* gets a wsdl instance from the cache
|
||||
*
|
||||
* @param string $wsdl The URL of the wsdl instance
|
||||
* @return object wsdl The cached wsdl instance, null if the instance is not in the cache
|
||||
* @access public
|
||||
*/
|
||||
function get($wsdl) {
|
||||
$filename = $this->createFilename($wsdl);
|
||||
if ($this->obtainMutex($filename, "r")) {
|
||||
// check for expired WSDL that must be removed from the cache
|
||||
if ($this->cache_lifetime > 0) {
|
||||
if (file_exists($filename) && (time() - filemtime($filename) > $this->cache_lifetime)) {
|
||||
unlink($filename);
|
||||
$this->debug("Expired $wsdl ($filename) from cache");
|
||||
$this->releaseMutex($filename);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// see what there is to return
|
||||
if (!file_exists($filename)) {
|
||||
$this->debug("$wsdl ($filename) not in cache (1)");
|
||||
$this->releaseMutex($filename);
|
||||
return null;
|
||||
}
|
||||
$fp = @fopen($filename, "r");
|
||||
if ($fp) {
|
||||
$s = implode("", @file($filename));
|
||||
fclose($fp);
|
||||
$this->debug("Got $wsdl ($filename) from cache");
|
||||
} else {
|
||||
$s = null;
|
||||
$this->debug("$wsdl ($filename) not in cache (2)");
|
||||
}
|
||||
$this->releaseMutex($filename);
|
||||
return (!is_null($s)) ? unserialize($s) : null;
|
||||
} else {
|
||||
$this->debug("Unable to obtain mutex for $filename in get");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* obtains the local mutex
|
||||
*
|
||||
* @param string $filename The Filename of the Cache to lock
|
||||
* @param string $mode The open-mode ("r" or "w") or the file - affects lock-mode
|
||||
* @return boolean Lock successfully obtained ?!
|
||||
* @access private
|
||||
*/
|
||||
function obtainMutex($filename, $mode) {
|
||||
if (isset($this->fplock[md5($filename)])) {
|
||||
$this->debug("Lock for $filename already exists");
|
||||
return false;
|
||||
}
|
||||
$this->fplock[md5($filename)] = fopen($filename.".lock", "w");
|
||||
if ($mode == "r") {
|
||||
return flock($this->fplock[md5($filename)], LOCK_SH);
|
||||
} else {
|
||||
return flock($this->fplock[md5($filename)], LOCK_EX);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a wsdl instance to the cache
|
||||
*
|
||||
* @param object wsdl $wsdl_instance The wsdl instance to add
|
||||
* @return boolean WSDL successfully cached
|
||||
* @access public
|
||||
*/
|
||||
function put($wsdl_instance) {
|
||||
$filename = $this->createFilename($wsdl_instance->wsdl);
|
||||
$s = serialize($wsdl_instance);
|
||||
if ($this->obtainMutex($filename, "w")) {
|
||||
$fp = fopen($filename, "w");
|
||||
if (! $fp) {
|
||||
$this->debug("Cannot write $wsdl_instance->wsdl ($filename) in cache");
|
||||
$this->releaseMutex($filename);
|
||||
return false;
|
||||
}
|
||||
fputs($fp, $s);
|
||||
fclose($fp);
|
||||
$this->debug("Put $wsdl_instance->wsdl ($filename) in cache");
|
||||
$this->releaseMutex($filename);
|
||||
return true;
|
||||
} else {
|
||||
$this->debug("Unable to obtain mutex for $filename in put");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* releases the local mutex
|
||||
*
|
||||
* @param string $filename The Filename of the Cache to lock
|
||||
* @return boolean Lock successfully released
|
||||
* @access private
|
||||
*/
|
||||
function releaseMutex($filename) {
|
||||
$ret = flock($this->fplock[md5($filename)], LOCK_UN);
|
||||
fclose($this->fplock[md5($filename)]);
|
||||
unset($this->fplock[md5($filename)]);
|
||||
if (! $ret) {
|
||||
$this->debug("Not able to release lock for $filename");
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* removes a wsdl instance from the cache
|
||||
*
|
||||
* @param string $wsdl The URL of the wsdl instance
|
||||
* @return boolean Whether there was an instance to remove
|
||||
* @access public
|
||||
*/
|
||||
function remove($wsdl) {
|
||||
$filename = $this->createFilename($wsdl);
|
||||
if (!file_exists($filename)) {
|
||||
$this->debug("$wsdl ($filename) not in cache to be removed");
|
||||
return false;
|
||||
}
|
||||
// ignore errors obtaining mutex
|
||||
$this->obtainMutex($filename, "w");
|
||||
$ret = unlink($filename);
|
||||
$this->debug("Removed ($ret) $wsdl ($filename) from cache");
|
||||
$this->releaseMutex($filename);
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility
|
||||
*/
|
||||
class wsdlcache extends nusoap_wsdlcache {
|
||||
}
|
||||
?>
|
||||
@@ -1,972 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* parses an XML Schema, allows access to it's data, other utility methods.
|
||||
* imperfect, no validation... yet, but quite functional.
|
||||
*
|
||||
* @author Dietrich Ayala <dietrich@ganx4.com>
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @version $Id: class.xmlschema.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_xmlschema extends nusoap_base {
|
||||
|
||||
// files
|
||||
var $schema = '';
|
||||
var $xml = '';
|
||||
// namespaces
|
||||
var $enclosingNamespaces;
|
||||
// schema info
|
||||
var $schemaInfo = array();
|
||||
var $schemaTargetNamespace = '';
|
||||
// types, elements, attributes defined by the schema
|
||||
var $attributes = array();
|
||||
var $complexTypes = array();
|
||||
var $complexTypeStack = array();
|
||||
var $currentComplexType = null;
|
||||
var $elements = array();
|
||||
var $elementStack = array();
|
||||
var $currentElement = null;
|
||||
var $simpleTypes = array();
|
||||
var $simpleTypeStack = array();
|
||||
var $currentSimpleType = null;
|
||||
// imports
|
||||
var $imports = array();
|
||||
// parser vars
|
||||
var $parser;
|
||||
var $position = 0;
|
||||
var $depth = 0;
|
||||
var $depth_array = array();
|
||||
var $message = array();
|
||||
var $defaultNamespace = array();
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param string $schema schema document URI
|
||||
* @param string $xml xml document URI
|
||||
* @param string $namespaces namespaces defined in enclosing XML
|
||||
* @access public
|
||||
*/
|
||||
function nusoap_xmlschema($schema='',$xml='',$namespaces=array()){
|
||||
parent::nusoap_base();
|
||||
$this->debug('nusoap_xmlschema class instantiated, inside constructor');
|
||||
// files
|
||||
$this->schema = $schema;
|
||||
$this->xml = $xml;
|
||||
|
||||
// namespaces
|
||||
$this->enclosingNamespaces = $namespaces;
|
||||
$this->namespaces = array_merge($this->namespaces, $namespaces);
|
||||
|
||||
// parse schema file
|
||||
if($schema != ''){
|
||||
$this->debug('initial schema file: '.$schema);
|
||||
$this->parseFile($schema, 'schema');
|
||||
}
|
||||
|
||||
// parse xml file
|
||||
if($xml != ''){
|
||||
$this->debug('initial xml file: '.$xml);
|
||||
$this->parseFile($xml, 'xml');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* parse an XML file
|
||||
*
|
||||
* @param string $xml path/URL to XML file
|
||||
* @param string $type (schema | xml)
|
||||
* @return boolean
|
||||
* @access public
|
||||
*/
|
||||
function parseFile($xml,$type){
|
||||
// parse xml file
|
||||
if($xml != ""){
|
||||
$xmlStr = @join("",@file($xml));
|
||||
if($xmlStr == ""){
|
||||
$msg = 'Error reading XML from '.$xml;
|
||||
$this->setError($msg);
|
||||
$this->debug($msg);
|
||||
return false;
|
||||
} else {
|
||||
$this->debug("parsing $xml");
|
||||
$this->parseString($xmlStr,$type);
|
||||
$this->debug("done parsing $xml");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse an XML string
|
||||
*
|
||||
* @param string $xml path or URL
|
||||
* @param string $type (schema|xml)
|
||||
* @access private
|
||||
*/
|
||||
function parseString($xml,$type){
|
||||
// parse xml string
|
||||
if($xml != ""){
|
||||
|
||||
// Create an XML parser.
|
||||
$this->parser = xml_parser_create();
|
||||
// Set the options for parsing the XML data.
|
||||
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
|
||||
|
||||
// Set the object for the parser.
|
||||
xml_set_object($this->parser, $this);
|
||||
|
||||
// Set the element handlers for the parser.
|
||||
if($type == "schema"){
|
||||
xml_set_element_handler($this->parser, 'schemaStartElement','schemaEndElement');
|
||||
xml_set_character_data_handler($this->parser,'schemaCharacterData');
|
||||
} elseif($type == "xml"){
|
||||
xml_set_element_handler($this->parser, 'xmlStartElement','xmlEndElement');
|
||||
xml_set_character_data_handler($this->parser,'xmlCharacterData');
|
||||
}
|
||||
|
||||
// Parse the XML file.
|
||||
if(!xml_parse($this->parser,$xml,true)){
|
||||
// Display an error message.
|
||||
$errstr = sprintf('XML error parsing XML schema on line %d: %s',
|
||||
xml_get_current_line_number($this->parser),
|
||||
xml_error_string(xml_get_error_code($this->parser))
|
||||
);
|
||||
$this->debug($errstr);
|
||||
$this->debug("XML payload:\n" . $xml);
|
||||
$this->setError($errstr);
|
||||
}
|
||||
|
||||
xml_parser_free($this->parser);
|
||||
} else{
|
||||
$this->debug('no xml passed to parseString()!!');
|
||||
$this->setError('no xml passed to parseString()!!');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gets a type name for an unnamed type
|
||||
*
|
||||
* @param string Element name
|
||||
* @return string A type name for an unnamed type
|
||||
* @access private
|
||||
*/
|
||||
function CreateTypeName($ename) {
|
||||
$scope = '';
|
||||
for ($i = 0; $i < count($this->complexTypeStack); $i++) {
|
||||
$scope .= $this->complexTypeStack[$i] . '_';
|
||||
}
|
||||
return $scope . $ename . '_ContainedType';
|
||||
}
|
||||
|
||||
/**
|
||||
* start-element handler
|
||||
*
|
||||
* @param string $parser XML parser object
|
||||
* @param string $name element name
|
||||
* @param string $attrs associative array of attributes
|
||||
* @access private
|
||||
*/
|
||||
function schemaStartElement($parser, $name, $attrs) {
|
||||
|
||||
// position in the total number of elements, starting from 0
|
||||
$pos = $this->position++;
|
||||
$depth = $this->depth++;
|
||||
// set self as current value for this depth
|
||||
$this->depth_array[$depth] = $pos;
|
||||
$this->message[$pos] = array('cdata' => '');
|
||||
if ($depth > 0) {
|
||||
$this->defaultNamespace[$pos] = $this->defaultNamespace[$this->depth_array[$depth - 1]];
|
||||
} else {
|
||||
$this->defaultNamespace[$pos] = false;
|
||||
}
|
||||
|
||||
// get element prefix
|
||||
if($prefix = $this->getPrefix($name)){
|
||||
// get unqualified name
|
||||
$name = $this->getLocalPart($name);
|
||||
} else {
|
||||
$prefix = '';
|
||||
}
|
||||
|
||||
// loop thru attributes, expanding, and registering namespace declarations
|
||||
if(count($attrs) > 0){
|
||||
foreach($attrs as $k => $v){
|
||||
// if ns declarations, add to class level array of valid namespaces
|
||||
if(preg_match('/^xmlns/',$k)){
|
||||
//$this->xdebug("$k: $v");
|
||||
//$this->xdebug('ns_prefix: '.$this->getPrefix($k));
|
||||
if($ns_prefix = substr(strrchr($k,':'),1)){
|
||||
//$this->xdebug("Add namespace[$ns_prefix] = $v");
|
||||
$this->namespaces[$ns_prefix] = $v;
|
||||
} else {
|
||||
$this->defaultNamespace[$pos] = $v;
|
||||
if (! $this->getPrefixFromNamespace($v)) {
|
||||
$this->namespaces['ns'.(count($this->namespaces)+1)] = $v;
|
||||
}
|
||||
}
|
||||
if($v == 'http://www.w3.org/2001/XMLSchema' || $v == 'http://www.w3.org/1999/XMLSchema' || $v == 'http://www.w3.org/2000/10/XMLSchema'){
|
||||
$this->XMLSchemaVersion = $v;
|
||||
$this->namespaces['xsi'] = $v.'-instance';
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($attrs as $k => $v){
|
||||
// expand each attribute
|
||||
$k = strpos($k,':') ? $this->expandQname($k) : $k;
|
||||
$v = strpos($v,':') ? $this->expandQname($v) : $v;
|
||||
$eAttrs[$k] = $v;
|
||||
}
|
||||
$attrs = $eAttrs;
|
||||
} else {
|
||||
$attrs = array();
|
||||
}
|
||||
// find status, register data
|
||||
switch($name){
|
||||
case 'all': // (optional) compositor content for a complexType
|
||||
case 'choice':
|
||||
case 'group':
|
||||
case 'sequence':
|
||||
//$this->xdebug("compositor $name for currentComplexType: $this->currentComplexType and currentElement: $this->currentElement");
|
||||
$this->complexTypes[$this->currentComplexType]['compositor'] = $name;
|
||||
//if($name == 'all' || $name == 'sequence'){
|
||||
// $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
|
||||
//}
|
||||
break;
|
||||
case 'attribute': // complexType attribute
|
||||
//$this->xdebug("parsing attribute $attrs[name] $attrs[ref] of value: ".$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']);
|
||||
$this->xdebug("parsing attribute:");
|
||||
$this->appendDebug($this->varDump($attrs));
|
||||
if (!isset($attrs['form'])) {
|
||||
// TODO: handle globals
|
||||
$attrs['form'] = $this->schemaInfo['attributeFormDefault'];
|
||||
}
|
||||
if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {
|
||||
$v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
|
||||
if (!strpos($v, ':')) {
|
||||
// no namespace in arrayType attribute value...
|
||||
if ($this->defaultNamespace[$pos]) {
|
||||
// ...so use the default
|
||||
$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'] = $this->defaultNamespace[$pos] . ':' . $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
|
||||
}
|
||||
}
|
||||
}
|
||||
if(isset($attrs['name'])){
|
||||
$this->attributes[$attrs['name']] = $attrs;
|
||||
$aname = $attrs['name'];
|
||||
} elseif(isset($attrs['ref']) && $attrs['ref'] == 'http://schemas.xmlsoap.org/soap/encoding/:arrayType'){
|
||||
if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {
|
||||
$aname = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
|
||||
} else {
|
||||
$aname = '';
|
||||
}
|
||||
} elseif(isset($attrs['ref'])){
|
||||
$aname = $attrs['ref'];
|
||||
$this->attributes[$attrs['ref']] = $attrs;
|
||||
}
|
||||
|
||||
if($this->currentComplexType){ // This should *always* be
|
||||
$this->complexTypes[$this->currentComplexType]['attrs'][$aname] = $attrs;
|
||||
}
|
||||
// arrayType attribute
|
||||
if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']) || $this->getLocalPart($aname) == 'arrayType'){
|
||||
$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
|
||||
$prefix = $this->getPrefix($aname);
|
||||
if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])){
|
||||
$v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];
|
||||
} else {
|
||||
$v = '';
|
||||
}
|
||||
if(strpos($v,'[,]')){
|
||||
$this->complexTypes[$this->currentComplexType]['multidimensional'] = true;
|
||||
}
|
||||
$v = substr($v,0,strpos($v,'[')); // clip the []
|
||||
if(!strpos($v,':') && isset($this->typemap[$this->XMLSchemaVersion][$v])){
|
||||
$v = $this->XMLSchemaVersion.':'.$v;
|
||||
}
|
||||
$this->complexTypes[$this->currentComplexType]['arrayType'] = $v;
|
||||
}
|
||||
break;
|
||||
case 'complexContent': // (optional) content for a complexType
|
||||
$this->xdebug("do nothing for element $name");
|
||||
break;
|
||||
case 'complexType':
|
||||
array_push($this->complexTypeStack, $this->currentComplexType);
|
||||
if(isset($attrs['name'])){
|
||||
// TODO: what is the scope of named complexTypes that appear
|
||||
// nested within other c complexTypes?
|
||||
$this->xdebug('processing named complexType '.$attrs['name']);
|
||||
//$this->currentElement = false;
|
||||
$this->currentComplexType = $attrs['name'];
|
||||
$this->complexTypes[$this->currentComplexType] = $attrs;
|
||||
$this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';
|
||||
// This is for constructs like
|
||||
// <complexType name="ListOfString" base="soap:Array">
|
||||
// <sequence>
|
||||
// <element name="string" type="xsd:string"
|
||||
// minOccurs="0" maxOccurs="unbounded" />
|
||||
// </sequence>
|
||||
// </complexType>
|
||||
if(isset($attrs['base']) && preg_match('/:Array$/',$attrs['base'])){
|
||||
$this->xdebug('complexType is unusual array');
|
||||
$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
|
||||
} else {
|
||||
$this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
|
||||
}
|
||||
} else {
|
||||
$name = $this->CreateTypeName($this->currentElement);
|
||||
$this->xdebug('processing unnamed complexType for element ' . $this->currentElement . ' named ' . $name);
|
||||
$this->currentComplexType = $name;
|
||||
//$this->currentElement = false;
|
||||
$this->complexTypes[$this->currentComplexType] = $attrs;
|
||||
$this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';
|
||||
// This is for constructs like
|
||||
// <complexType name="ListOfString" base="soap:Array">
|
||||
// <sequence>
|
||||
// <element name="string" type="xsd:string"
|
||||
// minOccurs="0" maxOccurs="unbounded" />
|
||||
// </sequence>
|
||||
// </complexType>
|
||||
if(isset($attrs['base']) && preg_match('/:Array$/',$attrs['base'])){
|
||||
$this->xdebug('complexType is unusual array');
|
||||
$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
|
||||
} else {
|
||||
$this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';
|
||||
}
|
||||
}
|
||||
$this->complexTypes[$this->currentComplexType]['simpleContent'] = 'false';
|
||||
break;
|
||||
case 'element':
|
||||
array_push($this->elementStack, $this->currentElement);
|
||||
if (!isset($attrs['form'])) {
|
||||
if ($this->currentComplexType) {
|
||||
$attrs['form'] = $this->schemaInfo['elementFormDefault'];
|
||||
} else {
|
||||
// global
|
||||
$attrs['form'] = 'qualified';
|
||||
}
|
||||
}
|
||||
if(isset($attrs['type'])){
|
||||
$this->xdebug("processing typed element ".$attrs['name']." of type ".$attrs['type']);
|
||||
if (! $this->getPrefix($attrs['type'])) {
|
||||
if ($this->defaultNamespace[$pos]) {
|
||||
$attrs['type'] = $this->defaultNamespace[$pos] . ':' . $attrs['type'];
|
||||
$this->xdebug('used default namespace to make type ' . $attrs['type']);
|
||||
}
|
||||
}
|
||||
// This is for constructs like
|
||||
// <complexType name="ListOfString" base="soap:Array">
|
||||
// <sequence>
|
||||
// <element name="string" type="xsd:string"
|
||||
// minOccurs="0" maxOccurs="unbounded" />
|
||||
// </sequence>
|
||||
// </complexType>
|
||||
if ($this->currentComplexType && $this->complexTypes[$this->currentComplexType]['phpType'] == 'array') {
|
||||
$this->xdebug('arrayType for unusual array is ' . $attrs['type']);
|
||||
$this->complexTypes[$this->currentComplexType]['arrayType'] = $attrs['type'];
|
||||
}
|
||||
$this->currentElement = $attrs['name'];
|
||||
$ename = $attrs['name'];
|
||||
} elseif(isset($attrs['ref'])){
|
||||
$this->xdebug("processing element as ref to ".$attrs['ref']);
|
||||
$this->currentElement = "ref to ".$attrs['ref'];
|
||||
$ename = $this->getLocalPart($attrs['ref']);
|
||||
} else {
|
||||
$type = $this->CreateTypeName($this->currentComplexType . '_' . $attrs['name']);
|
||||
$this->xdebug("processing untyped element " . $attrs['name'] . ' type ' . $type);
|
||||
$this->currentElement = $attrs['name'];
|
||||
$attrs['type'] = $this->schemaTargetNamespace . ':' . $type;
|
||||
$ename = $attrs['name'];
|
||||
}
|
||||
if (isset($ename) && $this->currentComplexType) {
|
||||
$this->xdebug("add element $ename to complexType $this->currentComplexType");
|
||||
$this->complexTypes[$this->currentComplexType]['elements'][$ename] = $attrs;
|
||||
} elseif (!isset($attrs['ref'])) {
|
||||
$this->xdebug("add element $ename to elements array");
|
||||
$this->elements[ $attrs['name'] ] = $attrs;
|
||||
$this->elements[ $attrs['name'] ]['typeClass'] = 'element';
|
||||
}
|
||||
break;
|
||||
case 'enumeration': // restriction value list member
|
||||
$this->xdebug('enumeration ' . $attrs['value']);
|
||||
if ($this->currentSimpleType) {
|
||||
$this->simpleTypes[$this->currentSimpleType]['enumeration'][] = $attrs['value'];
|
||||
} elseif ($this->currentComplexType) {
|
||||
$this->complexTypes[$this->currentComplexType]['enumeration'][] = $attrs['value'];
|
||||
}
|
||||
break;
|
||||
case 'extension': // simpleContent or complexContent type extension
|
||||
$this->xdebug('extension ' . $attrs['base']);
|
||||
if ($this->currentComplexType) {
|
||||
$ns = $this->getPrefix($attrs['base']);
|
||||
if ($ns == '') {
|
||||
$this->complexTypes[$this->currentComplexType]['extensionBase'] = $this->schemaTargetNamespace . ':' . $attrs['base'];
|
||||
} else {
|
||||
$this->complexTypes[$this->currentComplexType]['extensionBase'] = $attrs['base'];
|
||||
}
|
||||
} else {
|
||||
$this->xdebug('no current complexType to set extensionBase');
|
||||
}
|
||||
break;
|
||||
case 'import':
|
||||
if (isset($attrs['schemaLocation'])) {
|
||||
$this->xdebug('import namespace ' . $attrs['namespace'] . ' from ' . $attrs['schemaLocation']);
|
||||
$this->imports[$attrs['namespace']][] = array('location' => $attrs['schemaLocation'], 'loaded' => false);
|
||||
} else {
|
||||
$this->xdebug('import namespace ' . $attrs['namespace']);
|
||||
$this->imports[$attrs['namespace']][] = array('location' => '', 'loaded' => true);
|
||||
if (! $this->getPrefixFromNamespace($attrs['namespace'])) {
|
||||
$this->namespaces['ns'.(count($this->namespaces)+1)] = $attrs['namespace'];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'include':
|
||||
if (isset($attrs['schemaLocation'])) {
|
||||
$this->xdebug('include into namespace ' . $this->schemaTargetNamespace . ' from ' . $attrs['schemaLocation']);
|
||||
$this->imports[$this->schemaTargetNamespace][] = array('location' => $attrs['schemaLocation'], 'loaded' => false);
|
||||
} else {
|
||||
$this->xdebug('ignoring invalid XML Schema construct: include without schemaLocation attribute');
|
||||
}
|
||||
break;
|
||||
case 'list': // simpleType value list
|
||||
$this->xdebug("do nothing for element $name");
|
||||
break;
|
||||
case 'restriction': // simpleType, simpleContent or complexContent value restriction
|
||||
$this->xdebug('restriction ' . $attrs['base']);
|
||||
if($this->currentSimpleType){
|
||||
$this->simpleTypes[$this->currentSimpleType]['type'] = $attrs['base'];
|
||||
} elseif($this->currentComplexType){
|
||||
$this->complexTypes[$this->currentComplexType]['restrictionBase'] = $attrs['base'];
|
||||
if(strstr($attrs['base'],':') == ':Array'){
|
||||
$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'schema':
|
||||
$this->schemaInfo = $attrs;
|
||||
$this->schemaInfo['schemaVersion'] = $this->getNamespaceFromPrefix($prefix);
|
||||
if (isset($attrs['targetNamespace'])) {
|
||||
$this->schemaTargetNamespace = $attrs['targetNamespace'];
|
||||
}
|
||||
if (!isset($attrs['elementFormDefault'])) {
|
||||
$this->schemaInfo['elementFormDefault'] = 'unqualified';
|
||||
}
|
||||
if (!isset($attrs['attributeFormDefault'])) {
|
||||
$this->schemaInfo['attributeFormDefault'] = 'unqualified';
|
||||
}
|
||||
break;
|
||||
case 'simpleContent': // (optional) content for a complexType
|
||||
if ($this->currentComplexType) { // This should *always* be
|
||||
$this->complexTypes[$this->currentComplexType]['simpleContent'] = 'true';
|
||||
} else {
|
||||
$this->xdebug("do nothing for element $name because there is no current complexType");
|
||||
}
|
||||
break;
|
||||
case 'simpleType':
|
||||
array_push($this->simpleTypeStack, $this->currentSimpleType);
|
||||
if(isset($attrs['name'])){
|
||||
$this->xdebug("processing simpleType for name " . $attrs['name']);
|
||||
$this->currentSimpleType = $attrs['name'];
|
||||
$this->simpleTypes[ $attrs['name'] ] = $attrs;
|
||||
$this->simpleTypes[ $attrs['name'] ]['typeClass'] = 'simpleType';
|
||||
$this->simpleTypes[ $attrs['name'] ]['phpType'] = 'scalar';
|
||||
} else {
|
||||
$name = $this->CreateTypeName($this->currentComplexType . '_' . $this->currentElement);
|
||||
$this->xdebug('processing unnamed simpleType for element ' . $this->currentElement . ' named ' . $name);
|
||||
$this->currentSimpleType = $name;
|
||||
//$this->currentElement = false;
|
||||
$this->simpleTypes[$this->currentSimpleType] = $attrs;
|
||||
$this->simpleTypes[$this->currentSimpleType]['phpType'] = 'scalar';
|
||||
}
|
||||
break;
|
||||
case 'union': // simpleType type list
|
||||
$this->xdebug("do nothing for element $name");
|
||||
break;
|
||||
default:
|
||||
$this->xdebug("do not have any logic to process element $name");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* end-element handler
|
||||
*
|
||||
* @param string $parser XML parser object
|
||||
* @param string $name element name
|
||||
* @access private
|
||||
*/
|
||||
function schemaEndElement($parser, $name) {
|
||||
// bring depth down a notch
|
||||
$this->depth--;
|
||||
// position of current element is equal to the last value left in depth_array for my depth
|
||||
if(isset($this->depth_array[$this->depth])){
|
||||
$pos = $this->depth_array[$this->depth];
|
||||
}
|
||||
// get element prefix
|
||||
if ($prefix = $this->getPrefix($name)){
|
||||
// get unqualified name
|
||||
$name = $this->getLocalPart($name);
|
||||
} else {
|
||||
$prefix = '';
|
||||
}
|
||||
// move on...
|
||||
if($name == 'complexType'){
|
||||
$this->xdebug('done processing complexType ' . ($this->currentComplexType ? $this->currentComplexType : '(unknown)'));
|
||||
$this->xdebug($this->varDump($this->complexTypes[$this->currentComplexType]));
|
||||
$this->currentComplexType = array_pop($this->complexTypeStack);
|
||||
//$this->currentElement = false;
|
||||
}
|
||||
if($name == 'element'){
|
||||
$this->xdebug('done processing element ' . ($this->currentElement ? $this->currentElement : '(unknown)'));
|
||||
$this->currentElement = array_pop($this->elementStack);
|
||||
}
|
||||
if($name == 'simpleType'){
|
||||
$this->xdebug('done processing simpleType ' . ($this->currentSimpleType ? $this->currentSimpleType : '(unknown)'));
|
||||
$this->xdebug($this->varDump($this->simpleTypes[$this->currentSimpleType]));
|
||||
$this->currentSimpleType = array_pop($this->simpleTypeStack);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* element content handler
|
||||
*
|
||||
* @param string $parser XML parser object
|
||||
* @param string $data element content
|
||||
* @access private
|
||||
*/
|
||||
function schemaCharacterData($parser, $data){
|
||||
$pos = $this->depth_array[$this->depth - 1];
|
||||
$this->message[$pos]['cdata'] .= $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* serialize the schema
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function serializeSchema(){
|
||||
|
||||
$schemaPrefix = $this->getPrefixFromNamespace($this->XMLSchemaVersion);
|
||||
$xml = '';
|
||||
// imports
|
||||
if (sizeof($this->imports) > 0) {
|
||||
foreach($this->imports as $ns => $list) {
|
||||
foreach ($list as $ii) {
|
||||
if ($ii['location'] != '') {
|
||||
$xml .= " <$schemaPrefix:import location=\"" . $ii['location'] . '" namespace="' . $ns . "\" />\n";
|
||||
} else {
|
||||
$xml .= " <$schemaPrefix:import namespace=\"" . $ns . "\" />\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// complex types
|
||||
foreach($this->complexTypes as $typeName => $attrs){
|
||||
$contentStr = '';
|
||||
// serialize child elements
|
||||
if(isset($attrs['elements']) && (count($attrs['elements']) > 0)){
|
||||
foreach($attrs['elements'] as $element => $eParts){
|
||||
if(isset($eParts['ref'])){
|
||||
$contentStr .= " <$schemaPrefix:element ref=\"$element\"/>\n";
|
||||
} else {
|
||||
$contentStr .= " <$schemaPrefix:element name=\"$element\" type=\"" . $this->contractQName($eParts['type']) . "\"";
|
||||
foreach ($eParts as $aName => $aValue) {
|
||||
// handle, e.g., abstract, default, form, minOccurs, maxOccurs, nillable
|
||||
if ($aName != 'name' && $aName != 'type') {
|
||||
$contentStr .= " $aName=\"$aValue\"";
|
||||
}
|
||||
}
|
||||
$contentStr .= "/>\n";
|
||||
}
|
||||
}
|
||||
// compositor wraps elements
|
||||
if (isset($attrs['compositor']) && ($attrs['compositor'] != '')) {
|
||||
$contentStr = " <$schemaPrefix:$attrs[compositor]>\n".$contentStr." </$schemaPrefix:$attrs[compositor]>\n";
|
||||
}
|
||||
}
|
||||
// attributes
|
||||
if(isset($attrs['attrs']) && (count($attrs['attrs']) >= 1)){
|
||||
foreach($attrs['attrs'] as $attr => $aParts){
|
||||
$contentStr .= " <$schemaPrefix:attribute";
|
||||
foreach ($aParts as $a => $v) {
|
||||
if ($a == 'ref' || $a == 'type') {
|
||||
$contentStr .= " $a=\"".$this->contractQName($v).'"';
|
||||
} elseif ($a == 'http://schemas.xmlsoap.org/wsdl/:arrayType') {
|
||||
$this->usedNamespaces['wsdl'] = $this->namespaces['wsdl'];
|
||||
$contentStr .= ' wsdl:arrayType="'.$this->contractQName($v).'"';
|
||||
} else {
|
||||
$contentStr .= " $a=\"$v\"";
|
||||
}
|
||||
}
|
||||
$contentStr .= "/>\n";
|
||||
}
|
||||
}
|
||||
// if restriction
|
||||
if (isset($attrs['restrictionBase']) && $attrs['restrictionBase'] != ''){
|
||||
$contentStr = " <$schemaPrefix:restriction base=\"".$this->contractQName($attrs['restrictionBase'])."\">\n".$contentStr." </$schemaPrefix:restriction>\n";
|
||||
// complex or simple content
|
||||
if ((isset($attrs['elements']) && count($attrs['elements']) > 0) || (isset($attrs['attrs']) && count($attrs['attrs']) > 0)){
|
||||
$contentStr = " <$schemaPrefix:complexContent>\n".$contentStr." </$schemaPrefix:complexContent>\n";
|
||||
}
|
||||
}
|
||||
// finalize complex type
|
||||
if($contentStr != ''){
|
||||
$contentStr = " <$schemaPrefix:complexType name=\"$typeName\">\n".$contentStr." </$schemaPrefix:complexType>\n";
|
||||
} else {
|
||||
$contentStr = " <$schemaPrefix:complexType name=\"$typeName\"/>\n";
|
||||
}
|
||||
$xml .= $contentStr;
|
||||
}
|
||||
// simple types
|
||||
if(isset($this->simpleTypes) && count($this->simpleTypes) > 0){
|
||||
foreach($this->simpleTypes as $typeName => $eParts){
|
||||
$xml .= " <$schemaPrefix:simpleType name=\"$typeName\">\n <$schemaPrefix:restriction base=\"".$this->contractQName($eParts['type'])."\">\n";
|
||||
if (isset($eParts['enumeration'])) {
|
||||
foreach ($eParts['enumeration'] as $e) {
|
||||
$xml .= " <$schemaPrefix:enumeration value=\"$e\"/>\n";
|
||||
}
|
||||
}
|
||||
$xml .= " </$schemaPrefix:restriction>\n </$schemaPrefix:simpleType>";
|
||||
}
|
||||
}
|
||||
// elements
|
||||
if(isset($this->elements) && count($this->elements) > 0){
|
||||
foreach($this->elements as $element => $eParts){
|
||||
$xml .= " <$schemaPrefix:element name=\"$element\" type=\"".$this->contractQName($eParts['type'])."\"/>\n";
|
||||
}
|
||||
}
|
||||
// attributes
|
||||
if(isset($this->attributes) && count($this->attributes) > 0){
|
||||
foreach($this->attributes as $attr => $aParts){
|
||||
$xml .= " <$schemaPrefix:attribute name=\"$attr\" type=\"".$this->contractQName($aParts['type'])."\"\n/>";
|
||||
}
|
||||
}
|
||||
// finish 'er up
|
||||
$attr = '';
|
||||
foreach ($this->schemaInfo as $k => $v) {
|
||||
if ($k == 'elementFormDefault' || $k == 'attributeFormDefault') {
|
||||
$attr .= " $k=\"$v\"";
|
||||
}
|
||||
}
|
||||
$el = "<$schemaPrefix:schema$attr targetNamespace=\"$this->schemaTargetNamespace\"\n";
|
||||
foreach (array_diff($this->usedNamespaces, $this->enclosingNamespaces) as $nsp => $ns) {
|
||||
$el .= " xmlns:$nsp=\"$ns\"";
|
||||
}
|
||||
$xml = $el . ">\n".$xml."</$schemaPrefix:schema>\n";
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds debug data to the clas level debug string
|
||||
*
|
||||
* @param string $string debug data
|
||||
* @access private
|
||||
*/
|
||||
function xdebug($string){
|
||||
$this->debug('<' . $this->schemaTargetNamespace . '> '.$string);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the PHP type of a user defined type in the schema
|
||||
* PHP type is kind of a misnomer since it actually returns 'struct' for assoc. arrays
|
||||
* returns false if no type exists, or not w/ the given namespace
|
||||
* else returns a string that is either a native php type, or 'struct'
|
||||
*
|
||||
* @param string $type name of defined type
|
||||
* @param string $ns namespace of type
|
||||
* @return mixed
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function getPHPType($type,$ns){
|
||||
if(isset($this->typemap[$ns][$type])){
|
||||
//print "found type '$type' and ns $ns in typemap<br>";
|
||||
return $this->typemap[$ns][$type];
|
||||
} elseif(isset($this->complexTypes[$type])){
|
||||
//print "getting type '$type' and ns $ns from complexTypes array<br>";
|
||||
return $this->complexTypes[$type]['phpType'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns an associative array of information about a given type
|
||||
* returns false if no type exists by the given name
|
||||
*
|
||||
* For a complexType typeDef = array(
|
||||
* 'restrictionBase' => '',
|
||||
* 'phpType' => '',
|
||||
* 'compositor' => '(sequence|all)',
|
||||
* 'elements' => array(), // refs to elements array
|
||||
* 'attrs' => array() // refs to attributes array
|
||||
* ... and so on (see addComplexType)
|
||||
* )
|
||||
*
|
||||
* For simpleType or element, the array has different keys.
|
||||
*
|
||||
* @param string $type
|
||||
* @return mixed
|
||||
* @access public
|
||||
* @see addComplexType
|
||||
* @see addSimpleType
|
||||
* @see addElement
|
||||
*/
|
||||
function getTypeDef($type){
|
||||
//$this->debug("in getTypeDef for type $type");
|
||||
if (substr($type, -1) == '^') {
|
||||
$is_element = 1;
|
||||
$type = substr($type, 0, -1);
|
||||
} else {
|
||||
$is_element = 0;
|
||||
}
|
||||
|
||||
if((! $is_element) && isset($this->complexTypes[$type])){
|
||||
$this->xdebug("in getTypeDef, found complexType $type");
|
||||
return $this->complexTypes[$type];
|
||||
} elseif((! $is_element) && isset($this->simpleTypes[$type])){
|
||||
$this->xdebug("in getTypeDef, found simpleType $type");
|
||||
if (!isset($this->simpleTypes[$type]['phpType'])) {
|
||||
// get info for type to tack onto the simple type
|
||||
// TODO: can this ever really apply (i.e. what is a simpleType really?)
|
||||
$uqType = substr($this->simpleTypes[$type]['type'], strrpos($this->simpleTypes[$type]['type'], ':') + 1);
|
||||
$ns = substr($this->simpleTypes[$type]['type'], 0, strrpos($this->simpleTypes[$type]['type'], ':'));
|
||||
$etype = $this->getTypeDef($uqType);
|
||||
if ($etype) {
|
||||
$this->xdebug("in getTypeDef, found type for simpleType $type:");
|
||||
$this->xdebug($this->varDump($etype));
|
||||
if (isset($etype['phpType'])) {
|
||||
$this->simpleTypes[$type]['phpType'] = $etype['phpType'];
|
||||
}
|
||||
if (isset($etype['elements'])) {
|
||||
$this->simpleTypes[$type]['elements'] = $etype['elements'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->simpleTypes[$type];
|
||||
} elseif(isset($this->elements[$type])){
|
||||
$this->xdebug("in getTypeDef, found element $type");
|
||||
if (!isset($this->elements[$type]['phpType'])) {
|
||||
// get info for type to tack onto the element
|
||||
$uqType = substr($this->elements[$type]['type'], strrpos($this->elements[$type]['type'], ':') + 1);
|
||||
$ns = substr($this->elements[$type]['type'], 0, strrpos($this->elements[$type]['type'], ':'));
|
||||
$etype = $this->getTypeDef($uqType);
|
||||
if ($etype) {
|
||||
$this->xdebug("in getTypeDef, found type for element $type:");
|
||||
$this->xdebug($this->varDump($etype));
|
||||
if (isset($etype['phpType'])) {
|
||||
$this->elements[$type]['phpType'] = $etype['phpType'];
|
||||
}
|
||||
if (isset($etype['elements'])) {
|
||||
$this->elements[$type]['elements'] = $etype['elements'];
|
||||
}
|
||||
if (isset($etype['extensionBase'])) {
|
||||
$this->elements[$type]['extensionBase'] = $etype['extensionBase'];
|
||||
}
|
||||
} elseif ($ns == 'http://www.w3.org/2001/XMLSchema') {
|
||||
$this->xdebug("in getTypeDef, element $type is an XSD type");
|
||||
$this->elements[$type]['phpType'] = 'scalar';
|
||||
}
|
||||
}
|
||||
return $this->elements[$type];
|
||||
} elseif(isset($this->attributes[$type])){
|
||||
$this->xdebug("in getTypeDef, found attribute $type");
|
||||
return $this->attributes[$type];
|
||||
} elseif (preg_match('/_ContainedType$/', $type)) {
|
||||
$this->xdebug("in getTypeDef, have an untyped element $type");
|
||||
$typeDef['typeClass'] = 'simpleType';
|
||||
$typeDef['phpType'] = 'scalar';
|
||||
$typeDef['type'] = 'http://www.w3.org/2001/XMLSchema:string';
|
||||
return $typeDef;
|
||||
}
|
||||
$this->xdebug("in getTypeDef, did not find $type");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a sample serialization of a given type, or false if no type by the given name
|
||||
*
|
||||
* @param string $type name of type
|
||||
* @return mixed
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function serializeTypeDef($type){
|
||||
//print "in sTD() for type $type<br>";
|
||||
if($typeDef = $this->getTypeDef($type)){
|
||||
$str .= '<'.$type;
|
||||
if(is_array($typeDef['attrs'])){
|
||||
foreach($typeDef['attrs'] as $attName => $data){
|
||||
$str .= " $attName=\"{type = ".$data['type']."}\"";
|
||||
}
|
||||
}
|
||||
$str .= " xmlns=\"".$this->schema['targetNamespace']."\"";
|
||||
if(count($typeDef['elements']) > 0){
|
||||
$str .= ">";
|
||||
foreach($typeDef['elements'] as $element => $eData){
|
||||
$str .= $this->serializeTypeDef($element);
|
||||
}
|
||||
$str .= "</$type>";
|
||||
} elseif($typeDef['typeClass'] == 'element') {
|
||||
$str .= "></$type>";
|
||||
} else {
|
||||
$str .= "/>";
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns HTML form elements that allow a user
|
||||
* to enter values for creating an instance of the given type.
|
||||
*
|
||||
* @param string $name name for type instance
|
||||
* @param string $type name of type
|
||||
* @return string
|
||||
* @access public
|
||||
* @deprecated
|
||||
*/
|
||||
function typeToForm($name,$type){
|
||||
// get typedef
|
||||
if($typeDef = $this->getTypeDef($type)){
|
||||
// if struct
|
||||
if($typeDef['phpType'] == 'struct'){
|
||||
$buffer .= '<table>';
|
||||
foreach($typeDef['elements'] as $child => $childDef){
|
||||
$buffer .= "
|
||||
<tr><td align='right'>$childDef[name] (type: ".$this->getLocalPart($childDef['type'])."):</td>
|
||||
<td><input type='text' name='parameters[".$name."][$childDef[name]]'></td></tr>";
|
||||
}
|
||||
$buffer .= '</table>';
|
||||
// if array
|
||||
} elseif($typeDef['phpType'] == 'array'){
|
||||
$buffer .= '<table>';
|
||||
for($i=0;$i < 3; $i++){
|
||||
$buffer .= "
|
||||
<tr><td align='right'>array item (type: $typeDef[arrayType]):</td>
|
||||
<td><input type='text' name='parameters[".$name."][]'></td></tr>";
|
||||
}
|
||||
$buffer .= '</table>';
|
||||
// if scalar
|
||||
} else {
|
||||
$buffer .= "<input type='text' name='parameters[$name]'>";
|
||||
}
|
||||
} else {
|
||||
$buffer .= "<input type='text' name='parameters[$name]'>";
|
||||
}
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a complex type to the schema
|
||||
*
|
||||
* example: array
|
||||
*
|
||||
* addType(
|
||||
* 'ArrayOfstring',
|
||||
* 'complexType',
|
||||
* 'array',
|
||||
* '',
|
||||
* 'SOAP-ENC:Array',
|
||||
* array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]'),
|
||||
* 'xsd:string'
|
||||
* );
|
||||
*
|
||||
* example: PHP associative array ( SOAP Struct )
|
||||
*
|
||||
* addType(
|
||||
* 'SOAPStruct',
|
||||
* 'complexType',
|
||||
* 'struct',
|
||||
* 'all',
|
||||
* array('myVar'=> array('name'=>'myVar','type'=>'string')
|
||||
* );
|
||||
*
|
||||
* @param name
|
||||
* @param typeClass (complexType|simpleType|attribute)
|
||||
* @param phpType: currently supported are array and struct (php assoc array)
|
||||
* @param compositor (all|sequence|choice)
|
||||
* @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
|
||||
* @param elements = array ( name = array(name=>'',type=>'') )
|
||||
* @param attrs = array(
|
||||
* array(
|
||||
* 'ref' => "http://schemas.xmlsoap.org/soap/encoding/:arrayType",
|
||||
* "http://schemas.xmlsoap.org/wsdl/:arrayType" => "string[]"
|
||||
* )
|
||||
* )
|
||||
* @param arrayType: namespace:name (http://www.w3.org/2001/XMLSchema:string)
|
||||
* @access public
|
||||
* @see getTypeDef
|
||||
*/
|
||||
function addComplexType($name,$typeClass='complexType',$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),$arrayType=''){
|
||||
$this->complexTypes[$name] = array(
|
||||
'name' => $name,
|
||||
'typeClass' => $typeClass,
|
||||
'phpType' => $phpType,
|
||||
'compositor'=> $compositor,
|
||||
'restrictionBase' => $restrictionBase,
|
||||
'elements' => $elements,
|
||||
'attrs' => $attrs,
|
||||
'arrayType' => $arrayType
|
||||
);
|
||||
|
||||
$this->xdebug("addComplexType $name:");
|
||||
$this->appendDebug($this->varDump($this->complexTypes[$name]));
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a simple type to the schema
|
||||
*
|
||||
* @param string $name
|
||||
* @param string $restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
|
||||
* @param string $typeClass (should always be simpleType)
|
||||
* @param string $phpType (should always be scalar)
|
||||
* @param array $enumeration array of values
|
||||
* @access public
|
||||
* @see nusoap_xmlschema
|
||||
* @see getTypeDef
|
||||
*/
|
||||
function addSimpleType($name, $restrictionBase='', $typeClass='simpleType', $phpType='scalar', $enumeration=array()) {
|
||||
$this->simpleTypes[$name] = array(
|
||||
'name' => $name,
|
||||
'typeClass' => $typeClass,
|
||||
'phpType' => $phpType,
|
||||
'type' => $restrictionBase,
|
||||
'enumeration' => $enumeration
|
||||
);
|
||||
|
||||
$this->xdebug("addSimpleType $name:");
|
||||
$this->appendDebug($this->varDump($this->simpleTypes[$name]));
|
||||
}
|
||||
|
||||
/**
|
||||
* adds an element to the schema
|
||||
*
|
||||
* @param array $attrs attributes that must include name and type
|
||||
* @see nusoap_xmlschema
|
||||
* @access public
|
||||
*/
|
||||
function addElement($attrs) {
|
||||
if (! $this->getPrefix($attrs['type'])) {
|
||||
$attrs['type'] = $this->schemaTargetNamespace . ':' . $attrs['type'];
|
||||
}
|
||||
$this->elements[ $attrs['name'] ] = $attrs;
|
||||
$this->elements[ $attrs['name'] ]['typeClass'] = 'element';
|
||||
|
||||
$this->xdebug("addElement " . $attrs['name']);
|
||||
$this->appendDebug($this->varDump($this->elements[ $attrs['name'] ]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Backward compatibility
|
||||
*/
|
||||
class XMLSchema extends nusoap_xmlschema {
|
||||
}
|
||||
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
||||
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
header("Location: ../");
|
||||
exit;
|
||||
@@ -1,501 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
$Id: nusoapmime.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
|
||||
NuSOAP - Web Services Toolkit for PHP
|
||||
|
||||
Copyright (c) 2002 NuSphere Corporation
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
The NuSOAP project home is:
|
||||
http://sourceforge.net/projects/nusoap/
|
||||
|
||||
The primary support for NuSOAP is the mailing list:
|
||||
nusoap-general@lists.sourceforge.net
|
||||
|
||||
If you have any questions or comments, please email:
|
||||
|
||||
Dietrich Ayala
|
||||
dietrich@ganx4.com
|
||||
http://dietrich.ganx4.com/nusoap
|
||||
|
||||
NuSphere Corporation
|
||||
http://www.nusphere.com
|
||||
|
||||
*/
|
||||
|
||||
/*require_once('nusoap.php');*/
|
||||
/* PEAR Mail_MIME library */
|
||||
require_once('Mail/mimeDecode.php');
|
||||
require_once('Mail/mimePart.php');
|
||||
|
||||
/**
|
||||
* nusoap_client_mime client supporting MIME attachments defined at
|
||||
* http://www.w3.org/TR/SOAP-attachments. It depends on the PEAR Mail_MIME library.
|
||||
*
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @author Thanks to Guillaume and Henning Reich for posting great attachment code to the mail list
|
||||
* @version $Id: nusoapmime.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_client_mime extends nusoap_client {
|
||||
/**
|
||||
* @var array Each array element in the return is an associative array with keys
|
||||
* data, filename, contenttype, cid
|
||||
* @access private
|
||||
*/
|
||||
var $requestAttachments = array();
|
||||
/**
|
||||
* @var array Each array element in the return is an associative array with keys
|
||||
* data, filename, contenttype, cid
|
||||
* @access private
|
||||
*/
|
||||
var $responseAttachments;
|
||||
/**
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $mimeContentType;
|
||||
|
||||
/**
|
||||
* adds a MIME attachment to the current request.
|
||||
*
|
||||
* If the $data parameter contains an empty string, this method will read
|
||||
* the contents of the file named by the $filename parameter.
|
||||
*
|
||||
* If the $cid parameter is false, this method will generate the cid.
|
||||
*
|
||||
* @param string $data The data of the attachment
|
||||
* @param string $filename The filename of the attachment (default is empty string)
|
||||
* @param string $contenttype The MIME Content-Type of the attachment (default is application/octet-stream)
|
||||
* @param string $cid The content-id (cid) of the attachment (default is false)
|
||||
* @return string The content-id (cid) of the attachment
|
||||
* @access public
|
||||
*/
|
||||
function addAttachment($data, $filename = '', $contenttype = 'application/octet-stream', $cid = false) {
|
||||
if (! $cid) {
|
||||
$cid = md5(uniqid(time()));
|
||||
}
|
||||
|
||||
$info['data'] = $data;
|
||||
$info['filename'] = $filename;
|
||||
$info['contenttype'] = $contenttype;
|
||||
$info['cid'] = $cid;
|
||||
|
||||
$this->requestAttachments[] = $info;
|
||||
|
||||
return $cid;
|
||||
}
|
||||
|
||||
/**
|
||||
* clears the MIME attachments for the current request.
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function clearAttachments() {
|
||||
$this->requestAttachments = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the MIME attachments from the current response.
|
||||
*
|
||||
* Each array element in the return is an associative array with keys
|
||||
* data, filename, contenttype, cid. These keys correspond to the parameters
|
||||
* for addAttachment.
|
||||
*
|
||||
* @return array The attachments.
|
||||
* @access public
|
||||
*/
|
||||
function getAttachments() {
|
||||
return $this->responseAttachments;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP body for the current request.
|
||||
*
|
||||
* @param string $soapmsg The SOAP payload
|
||||
* @return string The HTTP body, which includes the SOAP payload
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPBody($soapmsg) {
|
||||
if (count($this->requestAttachments) > 0) {
|
||||
$params['content_type'] = 'multipart/related; type="text/xml"';
|
||||
$mimeMessage = new Mail_mimePart('', $params);
|
||||
unset($params);
|
||||
|
||||
$params['content_type'] = 'text/xml';
|
||||
$params['encoding'] = '8bit';
|
||||
$params['charset'] = $this->soap_defencoding;
|
||||
$mimeMessage->addSubpart($soapmsg, $params);
|
||||
|
||||
foreach ($this->requestAttachments as $att) {
|
||||
unset($params);
|
||||
|
||||
$params['content_type'] = $att['contenttype'];
|
||||
$params['encoding'] = 'base64';
|
||||
$params['disposition'] = 'attachment';
|
||||
$params['dfilename'] = $att['filename'];
|
||||
$params['cid'] = $att['cid'];
|
||||
|
||||
if ($att['data'] == '' && $att['filename'] <> '') {
|
||||
if ($fd = fopen($att['filename'], 'rb')) {
|
||||
$data = fread($fd, filesize($att['filename']));
|
||||
fclose($fd);
|
||||
} else {
|
||||
$data = '';
|
||||
}
|
||||
$mimeMessage->addSubpart($data, $params);
|
||||
} else {
|
||||
$mimeMessage->addSubpart($att['data'], $params);
|
||||
}
|
||||
}
|
||||
|
||||
$output = $mimeMessage->encode();
|
||||
$mimeHeaders = $output['headers'];
|
||||
|
||||
foreach ($mimeHeaders as $k => $v) {
|
||||
$this->debug("MIME header $k: $v");
|
||||
if (strtolower($k) == 'content-type') {
|
||||
// PHP header() seems to strip leading whitespace starting
|
||||
// the second line, so force everything to one line
|
||||
$this->mimeContentType = str_replace("\r\n", " ", $v);
|
||||
}
|
||||
}
|
||||
|
||||
return $output['body'];
|
||||
}
|
||||
|
||||
return parent::getHTTPBody($soapmsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP content type for the current request.
|
||||
*
|
||||
* Note: getHTTPBody must be called before this.
|
||||
*
|
||||
* @return string the HTTP content type for the current request.
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPContentType() {
|
||||
if (count($this->requestAttachments) > 0) {
|
||||
return $this->mimeContentType;
|
||||
}
|
||||
return parent::getHTTPContentType();
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP content type charset for the current request.
|
||||
* returns false for non-text content types.
|
||||
*
|
||||
* Note: getHTTPBody must be called before this.
|
||||
*
|
||||
* @return string the HTTP content type charset for the current request.
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPContentTypeCharset() {
|
||||
if (count($this->requestAttachments) > 0) {
|
||||
return false;
|
||||
}
|
||||
return parent::getHTTPContentTypeCharset();
|
||||
}
|
||||
|
||||
/**
|
||||
* processes SOAP message returned from server
|
||||
*
|
||||
* @param array $headers The HTTP headers
|
||||
* @param string $data unprocessed response data from server
|
||||
* @return mixed value of the message, decoded into a PHP type
|
||||
* @access private
|
||||
*/
|
||||
function parseResponse($headers, $data) {
|
||||
$this->debug('Entering parseResponse() for payload of length ' . strlen($data) . ' and type of ' . $headers['content-type']);
|
||||
$this->responseAttachments = array();
|
||||
if (strstr($headers['content-type'], 'multipart/related')) {
|
||||
$this->debug('Decode multipart/related');
|
||||
$input = '';
|
||||
foreach ($headers as $k => $v) {
|
||||
$input .= "$k: $v\r\n";
|
||||
}
|
||||
$params['input'] = $input . "\r\n" . $data;
|
||||
$params['include_bodies'] = true;
|
||||
$params['decode_bodies'] = true;
|
||||
$params['decode_headers'] = true;
|
||||
|
||||
$structure = Mail_mimeDecode::decode($params);
|
||||
|
||||
foreach ($structure->parts as $part) {
|
||||
if (!isset($part->disposition) && (strstr($part->headers['content-type'], 'text/xml'))) {
|
||||
$this->debug('Have root part of type ' . $part->headers['content-type']);
|
||||
$root = $part->body;
|
||||
$return = parent::parseResponse($part->headers, $part->body);
|
||||
} else {
|
||||
$this->debug('Have an attachment of type ' . $part->headers['content-type']);
|
||||
$info['data'] = $part->body;
|
||||
$info['filename'] = isset($part->d_parameters['filename']) ? $part->d_parameters['filename'] : '';
|
||||
$info['contenttype'] = $part->headers['content-type'];
|
||||
$info['cid'] = $part->headers['content-id'];
|
||||
$this->responseAttachments[] = $info;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($return)) {
|
||||
$this->responseData = $root;
|
||||
return $return;
|
||||
}
|
||||
|
||||
$this->setError('No root part found in multipart/related content');
|
||||
return '';
|
||||
}
|
||||
$this->debug('Not multipart/related');
|
||||
return parent::parseResponse($headers, $data);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* For backwards compatiblity, define soapclientmime unless the PHP SOAP extension is loaded.
|
||||
*/
|
||||
if (!extension_loaded('soap')) {
|
||||
class soapclientmime extends nusoap_client_mime {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* nusoap_server_mime server supporting MIME attachments defined at
|
||||
* http://www.w3.org/TR/SOAP-attachments. It depends on the PEAR Mail_MIME library.
|
||||
*
|
||||
* @author Scott Nichol <snichol@users.sourceforge.net>
|
||||
* @author Thanks to Guillaume and Henning Reich for posting great attachment code to the mail list
|
||||
* @version $Id: nusoapmime.php 6844 2011-06-03 14:46:51Z dMetzger $
|
||||
* @access public
|
||||
*/
|
||||
class nusoap_server_mime extends nusoap_server {
|
||||
/**
|
||||
* @var array Each array element in the return is an associative array with keys
|
||||
* data, filename, contenttype, cid
|
||||
* @access private
|
||||
*/
|
||||
var $requestAttachments = array();
|
||||
/**
|
||||
* @var array Each array element in the return is an associative array with keys
|
||||
* data, filename, contenttype, cid
|
||||
* @access private
|
||||
*/
|
||||
var $responseAttachments;
|
||||
/**
|
||||
* @var string
|
||||
* @access private
|
||||
*/
|
||||
var $mimeContentType;
|
||||
|
||||
/**
|
||||
* adds a MIME attachment to the current response.
|
||||
*
|
||||
* If the $data parameter contains an empty string, this method will read
|
||||
* the contents of the file named by the $filename parameter.
|
||||
*
|
||||
* If the $cid parameter is false, this method will generate the cid.
|
||||
*
|
||||
* @param string $data The data of the attachment
|
||||
* @param string $filename The filename of the attachment (default is empty string)
|
||||
* @param string $contenttype The MIME Content-Type of the attachment (default is application/octet-stream)
|
||||
* @param string $cid The content-id (cid) of the attachment (default is false)
|
||||
* @return string The content-id (cid) of the attachment
|
||||
* @access public
|
||||
*/
|
||||
function addAttachment($data, $filename = '', $contenttype = 'application/octet-stream', $cid = false) {
|
||||
if (! $cid) {
|
||||
$cid = md5(uniqid(time()));
|
||||
}
|
||||
|
||||
$info['data'] = $data;
|
||||
$info['filename'] = $filename;
|
||||
$info['contenttype'] = $contenttype;
|
||||
$info['cid'] = $cid;
|
||||
|
||||
$this->responseAttachments[] = $info;
|
||||
|
||||
return $cid;
|
||||
}
|
||||
|
||||
/**
|
||||
* clears the MIME attachments for the current response.
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
function clearAttachments() {
|
||||
$this->responseAttachments = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the MIME attachments from the current request.
|
||||
*
|
||||
* Each array element in the return is an associative array with keys
|
||||
* data, filename, contenttype, cid. These keys correspond to the parameters
|
||||
* for addAttachment.
|
||||
*
|
||||
* @return array The attachments.
|
||||
* @access public
|
||||
*/
|
||||
function getAttachments() {
|
||||
return $this->requestAttachments;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP body for the current response.
|
||||
*
|
||||
* @param string $soapmsg The SOAP payload
|
||||
* @return string The HTTP body, which includes the SOAP payload
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPBody($soapmsg) {
|
||||
if (count($this->responseAttachments) > 0) {
|
||||
$params['content_type'] = 'multipart/related; type="text/xml"';
|
||||
$mimeMessage = new Mail_mimePart('', $params);
|
||||
unset($params);
|
||||
|
||||
$params['content_type'] = 'text/xml';
|
||||
$params['encoding'] = '8bit';
|
||||
$params['charset'] = $this->soap_defencoding;
|
||||
$mimeMessage->addSubpart($soapmsg, $params);
|
||||
|
||||
foreach ($this->responseAttachments as $att) {
|
||||
unset($params);
|
||||
|
||||
$params['content_type'] = $att['contenttype'];
|
||||
$params['encoding'] = 'base64';
|
||||
$params['disposition'] = 'attachment';
|
||||
$params['dfilename'] = $att['filename'];
|
||||
$params['cid'] = $att['cid'];
|
||||
|
||||
if ($att['data'] == '' && $att['filename'] <> '') {
|
||||
if ($fd = fopen($att['filename'], 'rb')) {
|
||||
$data = fread($fd, filesize($att['filename']));
|
||||
fclose($fd);
|
||||
} else {
|
||||
$data = '';
|
||||
}
|
||||
$mimeMessage->addSubpart($data, $params);
|
||||
} else {
|
||||
$mimeMessage->addSubpart($att['data'], $params);
|
||||
}
|
||||
}
|
||||
|
||||
$output = $mimeMessage->encode();
|
||||
$mimeHeaders = $output['headers'];
|
||||
|
||||
foreach ($mimeHeaders as $k => $v) {
|
||||
$this->debug("MIME header $k: $v");
|
||||
if (strtolower($k) == 'content-type') {
|
||||
// PHP header() seems to strip leading whitespace starting
|
||||
// the second line, so force everything to one line
|
||||
$this->mimeContentType = str_replace("\r\n", " ", $v);
|
||||
}
|
||||
}
|
||||
|
||||
return $output['body'];
|
||||
}
|
||||
|
||||
return parent::getHTTPBody($soapmsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP content type for the current response.
|
||||
*
|
||||
* Note: getHTTPBody must be called before this.
|
||||
*
|
||||
* @return string the HTTP content type for the current response.
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPContentType() {
|
||||
if (count($this->responseAttachments) > 0) {
|
||||
return $this->mimeContentType;
|
||||
}
|
||||
return parent::getHTTPContentType();
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the HTTP content type charset for the current response.
|
||||
* returns false for non-text content types.
|
||||
*
|
||||
* Note: getHTTPBody must be called before this.
|
||||
*
|
||||
* @return string the HTTP content type charset for the current response.
|
||||
* @access private
|
||||
*/
|
||||
function getHTTPContentTypeCharset() {
|
||||
if (count($this->responseAttachments) > 0) {
|
||||
return false;
|
||||
}
|
||||
return parent::getHTTPContentTypeCharset();
|
||||
}
|
||||
|
||||
/**
|
||||
* processes SOAP message received from client
|
||||
*
|
||||
* @param array $headers The HTTP headers
|
||||
* @param string $data unprocessed request data from client
|
||||
* @return mixed value of the message, decoded into a PHP type
|
||||
* @access private
|
||||
*/
|
||||
function parseRequest($headers, $data) {
|
||||
$this->debug('Entering parseRequest() for payload of length ' . strlen($data) . ' and type of ' . $headers['content-type']);
|
||||
$this->requestAttachments = array();
|
||||
if (strstr($headers['content-type'], 'multipart/related')) {
|
||||
$this->debug('Decode multipart/related');
|
||||
$input = '';
|
||||
foreach ($headers as $k => $v) {
|
||||
$input .= "$k: $v\r\n";
|
||||
}
|
||||
$params['input'] = $input . "\r\n" . $data;
|
||||
$params['include_bodies'] = true;
|
||||
$params['decode_bodies'] = true;
|
||||
$params['decode_headers'] = true;
|
||||
|
||||
$structure = Mail_mimeDecode::decode($params);
|
||||
|
||||
foreach ($structure->parts as $part) {
|
||||
if (!isset($part->disposition) && (strstr($part->headers['content-type'], 'text/xml'))) {
|
||||
$this->debug('Have root part of type ' . $part->headers['content-type']);
|
||||
$return = parent::parseRequest($part->headers, $part->body);
|
||||
} else {
|
||||
$this->debug('Have an attachment of type ' . $part->headers['content-type']);
|
||||
$info['data'] = $part->body;
|
||||
$info['filename'] = isset($part->d_parameters['filename']) ? $part->d_parameters['filename'] : '';
|
||||
$info['contenttype'] = $part->headers['content-type'];
|
||||
$info['cid'] = $part->headers['content-id'];
|
||||
$this->requestAttachments[] = $info;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($return)) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
$this->setError('No root part found in multipart/related content');
|
||||
return;
|
||||
}
|
||||
$this->debug('Not multipart/related');
|
||||
return parent::parseRequest($headers, $data);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* For backwards compatiblity
|
||||
*/
|
||||
class nusoapservermime extends nusoap_server_mime {
|
||||
}
|
||||
|
||||
?>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -1,5 +1,21 @@
|
||||
var toggle_status_order_list = false;
|
||||
var toggle_history_order_list = false;
|
||||
var relay_point_max = 10;
|
||||
|
||||
// /!\ All the following list data could be store into the same variable
|
||||
// But for a better reading of the code, there are separated
|
||||
|
||||
// List of the supplier id which the user trying to fetch the relay
|
||||
var fetchingRelayPoint = new Array();
|
||||
|
||||
// List of the relay point object
|
||||
var relayPointDataContainers = new Array();
|
||||
|
||||
// List of the google map object
|
||||
var GmapList = new Object();
|
||||
|
||||
// List the marker liable to the relay pint
|
||||
var markerList = new Object();
|
||||
|
||||
function toggleOrderListSelection()
|
||||
{
|
||||
@@ -72,15 +88,14 @@ function checkOtherErrors(json)
|
||||
{
|
||||
$('#otherErrors').fadeOut('fast', function()
|
||||
{
|
||||
|
||||
if (json && json.other && json.other.error)
|
||||
for (numError in json.other.error)
|
||||
if (json.other.error[numError])
|
||||
{
|
||||
$('#otherErrors').fadeIn('slow');
|
||||
$('#otherErrors').children('span').html('');
|
||||
$('#otherErrors').children('span').append(json.other.error[numError]);
|
||||
}
|
||||
for (numError in json.other.error)
|
||||
if (json.other.error[numError])
|
||||
{
|
||||
$('#otherErrors').fadeIn('slow');
|
||||
$('#otherErrors').children('span').html('');
|
||||
$('#otherErrors').children('span').append(json.other.error[numError]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -101,7 +116,8 @@ function checkSucceedGenerateTickets(json)
|
||||
$('#successCreatingTicket_' + id_order).fadeIn('slow');
|
||||
detailedExpeditionList.push({'id_order':id_order, 'expeditionNumber':json.success[id_order].expeditionNumber});
|
||||
|
||||
if (!$('#detailHistory_' + id_order).length)
|
||||
if (!$('#detailHistory_' + id_order).length)
|
||||
{
|
||||
$('#PS_MRHistoriqueTableList').append('\
|
||||
<tr id="detailHistory_' + id_order + '">\
|
||||
<td><input type="checkbox" class="history_id_list" name="history_id_list[]" value="' + id_order + '" /></td>\
|
||||
@@ -110,8 +126,9 @@ function checkSucceedGenerateTickets(json)
|
||||
<td id="URLA4_' + id_order + '"><img src="' + _PS_MR_MODULE_DIR_ + 'images/getTickets.gif" /></td>\
|
||||
<td id="URLA5_' + id_order + '"><img src="' + _PS_MR_MODULE_DIR_ + 'images/getTickets.gif" /></td>\
|
||||
</tr>');
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#detailHistory_' + id_order).children('#URLA4_' + id_order).html('<img src="' + _PS_MR_MODULE_DIR_ + 'images/getTickets.gif" />');
|
||||
$('#detailHistory_' + id_order).children('#URLA5_' + id_order).html('<img src="' + _PS_MR_MODULE_DIR_ + 'images/getTickets.gif" />');
|
||||
$('#detailHistory_' + id_order).children('#expeditionNumber_' + id_order).html('<img src="' + _PS_MR_MODULE_DIR_ + 'images/getTickets.gif" />');
|
||||
@@ -184,9 +201,6 @@ function generateTicketsAjax()
|
||||
|
||||
function displayDeletedHistoryInformation()
|
||||
{
|
||||
:x
|
||||
|
||||
|
||||
$('input[name="history_id_list[]"]:checked').each(function()
|
||||
{
|
||||
$(this).parent().parent().css('background-color', '#FFE2E3');
|
||||
@@ -194,13 +208,16 @@ function displayDeletedHistoryInformation()
|
||||
displayBackHistoriesSubmitButton();
|
||||
}
|
||||
|
||||
/*
|
||||
** Manage the removed histories id
|
||||
*/
|
||||
function checkDeletedHistoriesId(json)
|
||||
{
|
||||
if (json && json.success)
|
||||
{
|
||||
// Allow to wait the end of the loop to manage unremoved item
|
||||
i = 0;
|
||||
for (numberHistoryId in json.success.deletedListId)
|
||||
for (numberHistoryId in json.success.deletedListId)
|
||||
{
|
||||
$('#PS_MRHistoryId_' + json.success.deletedListId[numberHistoryId]).parent().parent().fadeOut('fast', function()
|
||||
{
|
||||
@@ -218,6 +235,9 @@ function checkDeletedHistoriesId(json)
|
||||
displayBackHistoriesSubmitButton();
|
||||
}
|
||||
|
||||
/*
|
||||
** Delete the histories selected by the merchant
|
||||
*/
|
||||
function deleteSelectedHistories()
|
||||
{
|
||||
var history_id_list = new Array();
|
||||
@@ -252,6 +272,471 @@ function deleteSelectedHistories()
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
** Display a fancy box displaying details about the
|
||||
** backup of the database
|
||||
*/
|
||||
function PS_MRGetUninstallDetail()
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
type: 'POST',
|
||||
url: _PS_MR_MODULE_DIR_ + 'ajax.php',
|
||||
data: {'method' : 'uninstallDetail',
|
||||
'action' : 'showFancy',
|
||||
'href' : targetButton,
|
||||
'mrtoken' : mrtoken},
|
||||
dataType: 'json',
|
||||
success: function(json)
|
||||
{
|
||||
((json.html.length) ?
|
||||
$.fancybox(json.html,
|
||||
{
|
||||
'autoDimensions' : false,
|
||||
'width' : 450,
|
||||
'height' : 'auto',
|
||||
'transitionIn' : 'none',
|
||||
'transitionOut' : 'none',
|
||||
'onComplete' : function()
|
||||
{
|
||||
PS_MRHandleUninstallButton();
|
||||
|
||||
// Rewrite some css properties of Fancybox
|
||||
$('#fancybox-wrap').css('width', '');
|
||||
$('#fancybox-content').css('background-color', '');
|
||||
$('#fancybox-content').css('border', '');
|
||||
}
|
||||
})
|
||||
: '');
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
//console.log(thrownError);
|
||||
// Put debug to see error detail
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
** Handle the button when a user clicked on the uninstall button
|
||||
*/
|
||||
function PS_MRHandleUninstallButton()
|
||||
{
|
||||
$('#PS_MR_BackupAction').click(function()
|
||||
{
|
||||
$.fancybox.close();
|
||||
PS_MRBackupDatabase();
|
||||
});
|
||||
|
||||
$('#PS_MR_UninstallAction').click(function()
|
||||
{
|
||||
window.location.href = targetButton;
|
||||
$.fancybox.close();
|
||||
return true;
|
||||
});
|
||||
|
||||
$('#PS_MR_StopUninstall').click(function()
|
||||
{
|
||||
$.fancybox.close();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
** ajax call to keep the database of the module safe
|
||||
*/
|
||||
function PS_MRBackupDatabase()
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
type: 'POST',
|
||||
url: _PS_MR_MODULE_DIR_ + 'ajax.php',
|
||||
data: {'method' : 'uninstallDetail',
|
||||
'action' : 'backupAndUninstall',
|
||||
'mrtoken' : mrtoken},
|
||||
dataType: 'json',
|
||||
success: function(json)
|
||||
{
|
||||
targetButton += '&keepDatabase=true';
|
||||
window.location.href = targetButton;
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
//console.log(thrownError);
|
||||
// Put debug to see error detail
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
** Add / update a entry to the selected carrier to the mr_selected table
|
||||
** with the selected relay point information
|
||||
*/
|
||||
function PS_MRAddSelectedRelayPointInDB(relayPointNumber, id_carrier)
|
||||
{
|
||||
// Ajax call to add the selection in the database (compatibility for 1.3)
|
||||
// But keep this way to add a selection better that the hook
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: _PS_MR_MODULE_DIR_ + 'ajax.php',
|
||||
data: {'method' : 'addSelectedCarrierToDB',
|
||||
'relayPointInfo' : relayPointDataContainers[relayPointNumber],
|
||||
'id_carrier' : id_carrier,
|
||||
'id_mr_method' : PS_MRCarrierMethodList[id_carrier],
|
||||
'mrtoken' : mrtoken},
|
||||
success: function(json)
|
||||
{
|
||||
// console.log(json);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
//console.log(xhr);
|
||||
//console.log(thrownError);
|
||||
//console.log(ajaxOptions);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
** Add / update a entry to the selected carrier to the mr_selected table
|
||||
** Without relay point information
|
||||
*/
|
||||
function PS_MRAddSelectedCarrierInDB(id_carrier)
|
||||
{
|
||||
PS_MRHideLastRelayPointList();
|
||||
// Make the request
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: _PS_MR_MODULE_DIR_ + 'ajax.php',
|
||||
data: {'method' : 'addSelectedCarrierToDB',
|
||||
'id_carrier' : id_carrier,
|
||||
'id_mr_method' : PS_MRCarrierMethodList[id_carrier],
|
||||
'mrtoken' : mrtoken},
|
||||
success: function(json)
|
||||
{
|
||||
//console.log(json);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
//console.log(xhr);
|
||||
//console.log(thrownError);
|
||||
//console.log(ajaxOptions);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function PS_MRCarrierSelectedProcess(carrierSelected, id_carrier, MRLivraisonType)
|
||||
{
|
||||
if (MRLivraisonType != 'LD1' && MRLivraisonType != 'LDS')
|
||||
// Seek Relay point if it doesn't a home delivery mode
|
||||
PS_MRGetRelayPoint(carrierSelected);
|
||||
else
|
||||
// Simply add the selected carrier to the db, relay information will be empty
|
||||
PS_MRAddSelectedCarrierInDB(id_carrier);
|
||||
}
|
||||
|
||||
/*
|
||||
** Hide the last displayed relay point list
|
||||
*/
|
||||
function PS_MRHideLastRelayPointList()
|
||||
{
|
||||
$('.PS_MRSelectedCarrier').fadeOut('fast');
|
||||
}
|
||||
|
||||
/*
|
||||
** Link the generated relay point to an handle click
|
||||
** Allow to add the selected relay point in the database
|
||||
*/
|
||||
function PS_MRHandleSelectedRelayPoint()
|
||||
{
|
||||
// Link all new generated relay point Selected button to an action
|
||||
$('.PS_MRSelectRelayPointButton').click(function()
|
||||
{
|
||||
// Unselect all previous selection (normaly juste one)
|
||||
$('.PS_MRFloatRelayPointSelected').each(function()
|
||||
{
|
||||
$(this).attr('class', 'PS_MRFloatRelayPointSelecteIt');
|
||||
$(this).children('a').text(PS_MRTranslationList['Select']);
|
||||
});
|
||||
// Make the Selection
|
||||
$(this).text(PS_MRTranslationList['Selected']);
|
||||
$(this).parent().attr('class', 'PS_MRFloatRelayPointSelected');
|
||||
|
||||
// Get the info about the relay point (relayPoint_RelayPointNumber_IdCarrier)
|
||||
tab = $(this).parent().parent().attr('id').split('_');
|
||||
|
||||
// Store Separated data for the ajax query
|
||||
if (tab.length == 3)
|
||||
{
|
||||
relayPointNumber = tab[1];
|
||||
id_carrier = tab[2];
|
||||
PS_MRAddSelectedRelayPointInDB(relayPointNumber, id_carrier);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Display the relay point fetched
|
||||
function PS_MRDisplayRelayPoint(json, blockContent, carrier_id)
|
||||
{
|
||||
if (typeof json != 'undefined' && typeof blockContent != 'undefined')
|
||||
{
|
||||
numberDisplayed = 0;
|
||||
|
||||
PS_MRCreateGmap(carrier_id);
|
||||
blockContent.fadeOut('fast', function()
|
||||
{
|
||||
$(this).children('td').html('');
|
||||
for (relayPoint in json.success)
|
||||
{
|
||||
// Check if the the content wasn't already displayed
|
||||
contentBlockid = 'relayPoint_' + json.success[relayPoint].Num + '_' + carrier_id;
|
||||
if (!$('#' + contentBlockid).size())
|
||||
{
|
||||
$('<div class="PS_MRRelayPointInfo clearfix" id="' + contentBlockid + '"> \
|
||||
<img src="' + _PS_MR_MODULE_DIR_ + 'logo_hd.png" /> \
|
||||
<p><b>' + json.success[relayPoint].LgAdr1 + '</b><br /> ' + json.success[relayPoint].LgAdr3
|
||||
+ ' - ' + json.success[relayPoint].CP + ' - ' + json.success[relayPoint].Ville
|
||||
+ ' ' + json.success[relayPoint].Pays + '</p> \
|
||||
<div class="PS_MRFloatRelayPointSelecteIt"> \
|
||||
<a class="PS_MRSelectRelayPointButton">' + PS_MRTranslationList['Select'] + '</a> \
|
||||
</div> \
|
||||
</div>').appendTo($(this).children('td'));
|
||||
|
||||
// Store all the object content to prevent an ajax request
|
||||
relayPointDataContainers[json.success[relayPoint].Num] = json.success[relayPoint];
|
||||
++numberDisplayed;
|
||||
PS_MRAddGMapMarker(carrier_id, json.success[relayPoint].Num, contentBlockid);
|
||||
}
|
||||
}
|
||||
PS_MRHandleSelectedRelayPoint();
|
||||
$(this).fadeIn('fast');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch the relay point
|
||||
function PS_MRFetchRelayPoint(carrierSelected)
|
||||
{
|
||||
carrier_id = carrierSelected.val();
|
||||
|
||||
// Block is an input, we need the 'tr' element
|
||||
blockTR = carrierSelected.parent().parent();
|
||||
// Add a new line to the table after the clicked parent element
|
||||
blockTR.after(' \
|
||||
<tr class="PS_MRSelectedCarrier" id="PS_MRSelectedCarrier_' + carrier_id + '"> \
|
||||
<td colspan="4"><div> \
|
||||
<img src="' + _PS_MR_MODULE_DIR_ + 'images/loader.gif" /> \
|
||||
</div> \
|
||||
</td></tr>');
|
||||
|
||||
fetchingRelayPoint[carrier_id] = $('#PS_MRSelectedCarrier_' + carrier_id);
|
||||
$.ajax(
|
||||
{
|
||||
type: 'POST',
|
||||
url: _PS_MR_MODULE_DIR_ + 'ajax.php',
|
||||
data: {'method' : 'MRGetRelayPoint',
|
||||
'id_carrier' : carrier_id,
|
||||
'mrtoken' : mrtoken},
|
||||
dataType: 'json',
|
||||
success: function(json)
|
||||
{
|
||||
if (json && json.success)
|
||||
PS_MRDisplayRelayPoint(json, $('#PS_MRSelectedCarrier_' + carrier_id), carrier_id);
|
||||
},
|
||||
error: function(xhr, ajaxOptions, thrownError)
|
||||
{
|
||||
//console.log(thrownError);
|
||||
// Put debug to see error detail
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Display the relay point of a selected Carrier and keep fetched data
|
||||
// in the html page (cache)
|
||||
function PS_MRGetRelayPoint(carrierSelected)
|
||||
{
|
||||
carrier_id = carrierSelected.val();
|
||||
|
||||
// Init back the inital view, hide existing element, (keep cached)
|
||||
element = 0;
|
||||
totalElement = $('.PS_MRSelectedCarrier').size();
|
||||
|
||||
// Check if the element has already been fetched
|
||||
if (totalElement)
|
||||
// It Works like a foreach
|
||||
$('.PS_MRSelectedCarrier').fadeOut('fast', function()
|
||||
{
|
||||
if ((element + 1) >= totalElement)
|
||||
{
|
||||
// Check if the user already clicked and if the process is done
|
||||
if (typeof fetchingRelayPoint[carrier_id] != 'undefined')
|
||||
{
|
||||
fetchingRelayPoint[carrier_id].fadeIn('fast');
|
||||
return ;
|
||||
}
|
||||
// If the element isn't cached, we fetch it
|
||||
PS_MRFetchRelayPoint(carrierSelected);
|
||||
}
|
||||
++element;
|
||||
});
|
||||
else
|
||||
PS_MRFetchRelayPoint(carrierSelected);
|
||||
}
|
||||
|
||||
/*
|
||||
** Create the Gmap Block and cache the js object for the carrier
|
||||
*/
|
||||
function PS_MRCreateGmap(id_carrier)
|
||||
{
|
||||
$('body').prepend('\
|
||||
<tr id="PS_MRGmapDefaultPosition_' + id_carrier + '" class="PS_MRGmapDefaultPosition">\
|
||||
<td colspan="4"> \
|
||||
<div id="PS_MRGmap_' + id_carrier + '" class="PS_MRGmapStyle">\
|
||||
</div></td</tr>');
|
||||
$('#PS_MRGmap_' + id_carrier).gmap3(
|
||||
{
|
||||
action: 'init',
|
||||
callback: function(result)
|
||||
{
|
||||
GmapList[id_carrier] = $(this);
|
||||
// Can't set the display to none by default (bug due to
|
||||
// navigator that tell to google that content size = 0
|
||||
//$(this).toggle('fast');
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
** Resize the map when the div got changement about dimension / position and displaying
|
||||
*/
|
||||
function PS_MRGmapResizeEvent($map)
|
||||
{
|
||||
gmap = $map.gmap3({action:'get'});
|
||||
google.maps.event.trigger(gmap, 'resize');
|
||||
}
|
||||
|
||||
/*
|
||||
** Move the view of the gmap to a marker
|
||||
** liable to the relay point
|
||||
*/
|
||||
function PS_MRGmapPlaceViewOnMarker($map, marker)
|
||||
{
|
||||
$map.gmap3(
|
||||
{
|
||||
action:'panTo',
|
||||
args:[marker.position],
|
||||
callback: function()
|
||||
{
|
||||
(function(m)
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
m.setAnimation(google.maps.Animation.BOUNCE);
|
||||
}, 200);
|
||||
})(marker);
|
||||
// marker.setAnimation(google.maps.Animation.BOUNCE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
** Stop all dancing marker of the current selected carrier
|
||||
*/
|
||||
function PS_MRStopDancingMarkers(currentMarkerList)
|
||||
{
|
||||
for (markerNumber in currentMarkerList)
|
||||
if (currentMarkerList[markerNumber] != undefined)
|
||||
if (currentMarkerList[markerNumber].getAnimation() != null)
|
||||
currentMarkerList[markerNumber].setAnimation(null);
|
||||
}
|
||||
|
||||
/*
|
||||
** Display the Gmap of the selected relay point
|
||||
*/
|
||||
function PS_MRDisplayGmap(contentBlockid, $map)
|
||||
{
|
||||
tab = contentBlockid.split('_');
|
||||
relayPointNumber = tab[1];
|
||||
id_carrier = tab[2];
|
||||
|
||||
// Stop the dancing marker of the current carrier
|
||||
PS_MRStopDancingMarkers(markerList[id_carrier]);
|
||||
if ($('#PS_MRGmap_' + id_carrier).css('display') == 'none')
|
||||
{
|
||||
$('#' + contentBlockid).after($('#PS_MRGmap_' + id_carrier));
|
||||
$('#PS_MRGmap_' + id_carrier).slideDown('fast', function()
|
||||
{
|
||||
PS_MRGmapResizeEvent($map);
|
||||
PS_MRGmapPlaceViewOnMarker($map, markerList[id_carrier][relayPointNumber]);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
previousElem = $('#PS_MRGmap_' + id_carrier).prev();
|
||||
//$('#' + contentBlockid).after($('#PS_MRGmap_' + id_carrier));
|
||||
$('#PS_MRGmap_' + id_carrier).toggle('fast', function()
|
||||
{
|
||||
if (previousElem.attr('id') != contentBlockid)
|
||||
{
|
||||
$('#' + contentBlockid).after($(this));
|
||||
$('#PS_MRGmap_' + id_carrier).slideDown('fast', function()
|
||||
{
|
||||
PS_MRGmapPlaceViewOnMarker($map, markerList[id_carrier][relayPointNumber]);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Add a new Marker to a Gmap for a carrier using the
|
||||
** relay point information
|
||||
*/
|
||||
function PS_MRAddGMapMarker(id_carrier, relayPointNumber, contentBlockid)
|
||||
{
|
||||
// Check if the gmap has been properly created
|
||||
if (GmapList[id_carrier] == undefined)
|
||||
return ;
|
||||
relayInfo = relayPointDataContainers[relayPointNumber];
|
||||
|
||||
// Add Marker to the map
|
||||
fullFormatedAddress = relayInfo.LgAdr1 + ' ' + relayInfo.LgAdr3 + ' ' +
|
||||
relayInfo.CP + ' ' + relayInfo.Ville + ' ' + relayInfo.Pays;
|
||||
GmapList[id_carrier].gmap3(
|
||||
{
|
||||
action: 'addMarker',
|
||||
address: fullFormatedAddress,
|
||||
map:
|
||||
{
|
||||
center: true,
|
||||
zoom: 14
|
||||
},
|
||||
callback: function(marker)
|
||||
{
|
||||
if (marker)
|
||||
{
|
||||
// Check if the a marker list exist for the carrier,
|
||||
if (markerList[id_carrier] == undefined)
|
||||
markerList[id_carrier] = new Object();
|
||||
|
||||
// Store the marker in the markerList of the carrier
|
||||
markerList[id_carrier][relayPointNumber] = marker;
|
||||
|
||||
// Link all relay point line info to an action
|
||||
$('#' + contentBlockid).children('p').click(function()
|
||||
{
|
||||
PS_MRDisplayGmap($(this).parent().attr('id'), GmapList[id_carrier]);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
$(document).ready(function()
|
||||
{
|
||||
$('#toggleStatusOrderList').click(function()
|
||||
@@ -271,3 +756,5 @@ $(document).ready(function()
|
||||
deleteSelectedHistories();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||