diff --git a/vendor/magento/module-negotiable-quote/Controller/Quote/Order.php b/vendor/magento/module-negotiable-quote/Controller/Quote/Order.php index 50d1f27e44..45b7dd8eb5 100644 --- a/vendor/magento/module-negotiable-quote/Controller/Quote/Order.php +++ b/vendor/magento/module-negotiable-quote/Controller/Quote/Order.php @@ -29,7 +29,7 @@ class Order extends Quote implements HttpGetActionInterface /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); - $resultRedirect->setPath('checkout/onepage/success'); + $resultRedirect->setPath('checkout/onepage/success', ['negotiableQuoteId' => $quoteId]); try { $quote = $this->quoteRepository->get($quoteId); diff --git a/vendor/magento/module-negotiable-quote/Model/Plugin/Checkout/Model/SessionPlugin.php b/vendor/magento/module-negotiable-quote/Model/Plugin/Checkout/Model/SessionPlugin.php index 860b9f60b6..a090b6f63a 100644 --- a/vendor/magento/module-negotiable-quote/Model/Plugin/Checkout/Model/SessionPlugin.php +++ b/vendor/magento/module-negotiable-quote/Model/Plugin/Checkout/Model/SessionPlugin.php @@ -82,4 +82,20 @@ class SessionPlugin return $result; } + + /** + * In case of negotiable quote is active do not clear regular checkout session to keep shopping cart items + * + * @param Session $subject + * @param callable $proceed + * @return Session + */ + public function aroundClearQuote(Session $subject, callable $proceed) + { + $result = null; + if (!$this->request->getParam('negotiableQuoteId')) { + $result = $proceed(); + } + return $result ?: $subject; + } } diff --git a/app/code/Magento/PaypalNegotiableQuote/LICENSE_EE.txt b/app/code/Magento/PaypalNegotiableQuote/LICENSE_EE.txt new file mode 100644 index 0000000000..2bddf5feda --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/LICENSE_EE.txt @@ -0,0 +1,437 @@ +MAGENTO(tm) ENTERPRISE EDITION +END USER LICENSE AGREEMENT + +This End User License Agreement ("Agreement") is entered into by and between X.commerce, Inc. +through its Magento division ("Magento"), and the Licensee executing the Magento Order Form +(defined below). The parties agree as follows: + +TERMS AND CONDITIONS + +1. License + 1.1. Subject to Licensee's payment of the applicable fees and to Licensee's compliance with + other terms and conditions of this Agreement, Magento grants Licensee a non-transferable, + non-assignable, non-sublicensable, worldwide license to copy the Software for the purpose of + installing and using it on a computer and solely for internal purposes, in accordance with the + Software's technical documentation and solely during the periods and on the maximum number + of Designated Servers specified in one or more applicable Magento or Magento-authorized + reseller ordering schedules (the "Magento Order Form") executed with Licensee. + + 1.2. In the event that Licensee's actual number of Servers of a particular Software license + exceeds the licensed number of Designated Servers on such license, Licensee shall promptly + provide Magento with written notice and pay Magento the fees required to license such + additional Server(s) in accordance with the commercial terms set out in the Magento Order + Form. + + 1.3. Licensee shall implement reasonable controls to ensure that it does not exceed the + maximum number of licensed Servers of the Software. Magento reserves the right to audit + Licensee's use of the Software during normal business hours and with reasonable notice and to + include means within the Software to limit Licensee's use of the Software to the licensed + number of Servers. + + 1.4. Magento shall provide to Licensee an initial copy of the Software, including the associated + technical documentation, for use by Licensee in accordance with this Agreement. Subject to + Sections 1.1-1.3 above, Licensee is authorized to make a reasonable number of non-Server + copies of the Software, e.g., onto a local pc, as it requires for purpose of exercising its rights + under this Agreement. + + 1.5. Licensee is authorized to use the Software on a single substitute or backup Server on a + temporary basis without charge any time a Designated Server is inoperative due to a + malfunction beyond the control of Licensee. Licensee may transfer the Software on a + permanent basis to a single replacement Server without charge. Licensee agrees to provide + Magento with written notice, including the Server type and operating system, of any such + transfer to a backup or replacement Server within five (5) days thereafter. + + 1.6. Licensee acknowledges that portions of the Software are also freely available to the public + under Magento's open source version of the Software, known as Magento Community Edition, + subject to certain conditions, with limited warranties and other limited assurances, and without + service or support. As an express condition for the license granted hereunder, Licensee agrees + that any use during the term of this Agreement of such open source versions of the Software, + whether in a Production Server Instance or a Non-Production Server Instance, shall be deemed + use of the Software for purposes of the calculation of fees payable under the Agreement. + + 1.7. Magento also grants Licensee the right to modify and create derivative works of the + Software. Licensee may contribute the rights in any of those derivative works back to Magento. + Licensee may contact Magento for more information regarding contributions of derivative + works rights to Magento. Regardless of whether Licensee contributes such derivative works + rights to Magento, Licensee hereby grants Magento a perpetual and irrevocable (irrespective of + the expiration or termination of this Agreement), nonexclusive, transferable, worldwide, and + royalty-free license to reproduce, create derivative works of, distribute, perform, and display + any derivative works of the Software developed by or for Licensee, and to use, make, have + made, sell, offer to sell, import, export, and otherwise exploit any product based on any such + derivative works. + +2. License Exclusions + 2.1 Except as expressly authorized herein, Licensee shall not: + a. use or deploy the Software on any Server in excess of the number of Designated Servers + specified in the applicable Magento Order Form; + + b. distribute, sublicense, disclose, market, rent, lease, or offer remote computing services, + networking, batch processing or transfer of, the Software to any third party, or permit any + person or entity to have access to the Software by means of a time sharing, remote + computing services, networking, batch processing, service bureau or time sharing + arrangement; + + c. export the Software in violation of U.S. Department of Commerce export administration + regulations. + + 2.2. No license, right or interest in any Magento trademark, trade name or service mark is + granted hereunder. + +3. Fees and Payment Terms + Licensee agrees to the fees and payment terms that are described in each Magento Order Form + executed by Licensee. + +4. Title and Protection + 4.1. Magento (or its third party providers) retains title to all portions of the Software and other + Proprietary Materials and any copies thereof. The Proprietary Materials contain valuable + proprietary information, and Licensee shall not disclose them to anyone other than those of its + employees or consultants under written nondisclosure obligations at least as restrictive as + those contained in this Agreement, having a need to know for purposes consistent with this + Agreement. Licensee shall be responsible for the compliance of such employees or consultants. + Licensee shall affix, to each full or partial copy of the Software made by Licensee, all copyright + and proprietary information notices as were affixed to the original. The obligations set forth in + this Section shall survive termination of this Agreement. + + 4.2. Licensee acknowledges that the Software includes certain open source software which is + governed by the applicable license terms thereof. A list of such open source software, as + amended from time to time, including the links applicable to such open source software is + specified in the product software bundled within the Software, and the Software is subject to + the provisions of such license agreements, and in the event of any contradiction between the + provisions of this Agreement and the provisions of such applicable license agreement, the + provisions of the applicable open source license agreement shall prevail solely with respect to + such open source software products. + + 4.3. If the Software is acquired by or on behalf of a unit or agency of the U.S. Government (the + "Government"), the Government agrees that such Product is "commercial computer software" + or "commercial computer software documentation" and that, absent a written agreement to + the contrary, the Government's rights with respect thereto are limited by the terms of this + Agreement, pursuant to applicable FAR and/or DFARS and successor regulations. + +5. Patent and Copyright Indemnity + Subject to the limitations in Section 8, for such time as Licensee is entitled to receive Support + Services (as defined below), Magento shall indemnify and defend Licensee against any claims made + by a third party that Licensee's reproduction of the Software (which, for the purposes of this Section + 5, means the Software as delivered by Magento, excluding the open source software programs + described in Section 4.2) as permitted in this Agreement directly infringes such third party's United + States patent or copyright, provided that Licensee complies with the requirements of this Section. + Licensee will (a) provide Magento prompt written notice of any claim that the Software infringes any + intellectual property rights, (b) provide Magento with all information and assistance requested of it + with respect to any such claim, and (c) offer Magento sole and complete authority to defend and/or + settle any and all such claims. + + In the event that a court holds that the Software, or if Magento believes a court may hold that the + Software, infringes the intellectual property rights of any third party, Magento may (but is not + obligated to), in its sole discretion, do any of the following: obtain for Licensee the right to continue + using the Software, replace or modify the Software so that it becomes non-infringing while providing + substantially equivalent performance or, accept return of the Software, terminate this Agreement, + and refund Licensee an amount equal to the license fees paid to Magento multiplied by the + percentage of the term of the license for the Software that Licensee did not enjoy due to the early + termination by Magento. + + Magento shall have no liability or obligation under this Agreement to the extent the alleged + infringement is based on (i) a modification or derivative work of the Software developed by anyone + other than Magento; (ii), a combination of the Software with any product or service not provided by + Magento; (ii) use of the Software with one or more Servers not listed in a Magento Order Form; (iii) + use of the Software other than in accordance with this Agreement or the documentation; (iv) + indirect or willful infringement; or (v) any open source code, as described in Section 4.2. + + This Section 5 states Magento's entire liability and Licensee's exclusive remedy for any infringement + related to the Software. + +6. Default and Termination + 6.1. An event of default shall be deemed to occur if: (i) Licensee fails to perform any of its + obligations under the Sections entitled "License Exclusions" or "Title and Protection"; (ii) + Licensee fails to pay amounts due pursuant to its agreement to the fees and payment terms in + Section 3 of this Agreement within seven (7) days of the relevant due date; or (iii) either party + fails to perform any other material obligation under this Agreement and such failure remains + uncured for more than thirty (30) days after receipt of written notice thereof. + + 6.2. If an event of default occurs, the non-defaulting party, in addition to any other rights + available to it under the law, may terminate this Agreement and all licenses granted hereunder + by written notice to the defaulting party. + + 6.3. Within thirty (30) days after termination of the Software license or this Agreement or + expiration of the license term as specified in the Magento Order Form, Licensee shall certify in + writing to Magento that Licensee has ceased use of any and all Proprietary Materials and that + all copies or embodiments thereof in any form, including partial copies within modified + versions, have been destroyed. + +7. Warranty + 7.1. Warranty for Software. Magento warrants for a single period of ninety (90) days + commencing upon Magento's electronic delivery of the Software to Licensee that the Software, + as delivered, will in all material respects perform the functions described in the specifications + contained in the documentation provided with the Software. In the event that the Software + does not, in all material respects, perform the functions therein described, Magento or its + authorized reseller will undertake to correct any reported error in accordance with the Support + Services Terms and Conditions set forth below in Section 9, which shall be Magento's entire + liability and Licensee's exclusive remedy for breach of this warranty. Magento does not warrant + that the Software will meet Licensee's requirements, that the Software will operate in the + combinations which Licensee may select for use, that the operation of the Software will be + uninterrupted or error-free, or that all error conditions will be corrected. EXCEPT AS PROVIDED + IN THIS SECTION ALL SOFTWARE PROVIDED HEREUNDER IS PROVIDED "AS IS". + + 7.2. DISCLAIMER. THE EXPRESS WARRANTIES SET FORTH IN THIS SECTION 7 ARE THE ONLY + WARRANTIES MADE BY MAGENTO WITH RESPECT TO THE SOFTWARE PROVIDED BY MAGENTO. + MAGENTO MAKES NO OTHER WARRANTIES, EXPRESS, IMPLIED OR ARISING BY CUSTOM OR + TRADE USAGE, AND, SPECIFICALLY, MAKES NO WARRANTY OF TITLE, NON-INFRINGEMENT, + ACCURACY, QUIET ENJOYMENT, MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR + PURPOSE. MAGENTO'S EXPRESS WARRANTIES SHALL NOT BE ENLARGED, DIMINISHED OR + AFFECTED BY, AND NO OBLIGATION OR LIABILITY SHALL ARISE OUT OF, MAGENTO RENDERING + TECHNICAL OR OTHER ADVICE OR SERVICE IN CONNECTION WITH THE SOFTWARE. + +8. Limitation of Liability + 8.1. LIABILITY EXCLUSIONS. UNDER NO CIRCUMSTANCES WILL MAGENTO BE LIABLE FOR: LOSS + OF REVENUE; LOSS OF ACTUAL OR ANTICIPATED PROFITS; LOSS OF CONTRACTS; LOSS OF THE + USE OF MONEY; LOSS OF ANTICIPATED SAVINGS; LOSS OF BUSINESS; LOSS OF OPPORTUNITY; + LOSS OF GOODWILL; LOSS OF REPUTATION; LOSS OF, DAMAGE TO OR CORRUPTION OF DATA; + OR CONSEQUENTIAL OR INDIRECT LOSS OR SPECIAL, PUNITIVE, OR INCIDENTAL DAMAGES + (INCLUDING, FOR THE AVOIDANCE OF DOUBT, WHERE SUCH LOSS OR DAMAGE IS ALSO OF A + CATEGORY OF LOSS OR DAMAGE ALREADY LISTED), WHETHER FORESEEABLE OR + UNFORESEEABLE, BASED ON CLAIMS OF LICENSEE, MAGENTO OR ANY THIRD PARTY ARISING + OUT OF ANY BREACH OR FAILURE OF EXPRESS OR IMPLIED WARRANTY CONDITIONS OR OTHER + TERM, BREACH OF CONTRACT, MISREPRESENTATION, NEGLIGENCE, OTHER LIABILITY IN TORT, + FAILURE OF ANY REMEDY TO ACHIEVE ITS ESSENTIAL PURPOSE, OR OTHERWISE. + + 8.2. LIABILITY CAP. NOTWITHSTANDING THE FORM (E.G., CONTRACT, TORT, OR OTHERWISE) IN + WHICH ANY LEGAL OR EQUITABLE ACTION MAY BE BROUGHT, IN NO EVENT (INCLUDING WITH + RESPECT TO OBLIGATIONS ARISING UNDER SECTION 5) WILL MAGENTO OR ITS SUPPLIERS BE + LIABLE FOR DAMAGES, EXPENSES, COSTS, LIABILITIES, SUITS, CLAIMS, RESTITUTION OR LOSSES, + THAT EXCEED, IN THE AGGREGATE, THE AMOUNT OF FEES PAID BY LICENSEE FOR THE + SOFTWARE LICENSE IN THE FIRST TWELVE (12) MONTH PERIOD AFTER THE EFFECTIVE DATE. + +9. Support Services Terms and Conditions + For the periods specified in the Magento Order Form, Magento or its authorized reseller will provide + support services and Updates for the Software as described in Magento's standard Support Services + Terms and Conditions, which follow. Magento will have no obligation to provide support for any + modifications or derivative works of the Software developed by anyone other than Magento. + +10. Customer References + Licensee hereby grants Magento the right to display Licensee's logos as part of Magento's customer + lists and other related marketing materials. The parties shall cooperate to undertake mutually- + agreed joint marketing activities. + +11. Notices + All notices shall be in writing and sent by first class mail or overnight mail (or courier), transmitted by + facsimile (if confirmed by such mailing), or email, to the addresses indicated on the Magento Order + Form, or such other address as either party may indicate by at least ten (10) days prior written + notice to the other party. Notices to Magento shall be sent to the Contracts Administration + Department. + +12. Assignment + Licensee may not assign this Agreement without the prior written consent of Magento; provided + that such consent shall not be required for assignment to a purchaser of all or substantially all of the + assets or equity securities of Licensee who undertakes in writing to be bound by all the terms and + conditions of this Agreement. Any prohibited assignment shall be null and void. + +13. Entire Agreement + Along with Magento's standard Support Services Terms and Conditions, which follow, and the + Magento Order Form, this Agreement is the complete and exclusive agreement between the parties, + which supersedes all proposals or prior agreements, oral or written, including any online (click- + through) agreement which Licensee may have accepted in conjunction with the downloading of the + Software, and all other communications between the parties relating to the subject matter hereof. + No purchase order, other ordering document or any hand written or typewritten text which purports + to modify or supplement the printed text hereof or Magento Order Form shall add to or vary the + terms thereof and Magento hereby rejects same. Except as contained in a writing signed by both + parties, all such proposed variations or additions are objected to and shall have no force or effect. + +14. General + This Agreement is made in and shall be governed by the laws of the State of California, without + giving effect to any principles that provide for the application of the law of another jurisdiction. All + proceedings shall be conducted in English. Venue for all proceedings shall be Santa Clara County, + California, provided that Magento may seek injunctive relief in any court of competent jurisdiction. + The United Nations Convention for the International Sale of Goods shall not apply. The section + headings herein are provided for convenience only and have no substantive effect on the + construction of this Agreement. Except for Licensee's obligation to pay Magento, neither party shall + be liable for any failure to perform due to causes beyond its reasonable control. If any provision of + this Agreement is held to be unenforceable, this Agreement shall be construed without such + provision. The failure by a party to exercise any right hereunder shall not operate as a waiver of such + party's right to exercise such right or any other right in the future. This Agreement may be amended + only by a written document executed by a duly authorized representative of each of the parties. The + parties agree to receive electronic documents and accept electronic signatures (information + attached or logically associated with such document and clicked or otherwise adopted with an intent + to sign) including in counterparts which shall be valid substitutes for paper-based documents and + signatures, and the legal validity of a transaction will not be denied on the ground that it is not in + writing. + +15. Definitions + "Designated Server" shall mean the Server specified in a Magento Order Form with respect to a + particular Software license. Such Server may be that of a third-party under nondisclosure obligations + that will host the Software for the benefit of Licensee. + + "Modifications" means any code developed by Licensee or any third party, including without + limitation, configuration, integrations, implementations, or localizations to the external layer of the + core, baseline Software product. The term "Modifications" excludes Updates. + + "Proprietary Material" means the Software, related documentation, and all parts, copies and + modifications thereof, and any other information, in whatever form, received by Licensee + hereunder, provided, however, such information shall not be deemed Proprietary Material if it (a) is + or becomes a part of the public domain through no act or omission of Licensee; or (b) was in + Licensee's lawful possession prior to the disclosure and had not been obtained by Licensee from + Magento; or (c) is lawfully disclosed to Licensee by a third party without restriction on disclosure; or + (d) is independently developed by Licensee without reference to or use of Magento's Proprietary + Material. + + "Server" means each physical or virtual server from which a single instance of the Software is + accessed and used either for production purposes ("Production Server Instance") or for non- + production purposes, such as development, testing, training and other non-operational business + transactions ("Non-Production Server Instance"). For example, if one server contains two (2) + instances of the Software, i.e., one Production Server Instance and one Non-Production Server + Instance, then a Server license is required for each of such instances; development in-house and by + third-party consultants requires licenses for two Non-Production Server Instances. + + "Software" means Magento's proprietary e-commerce software solution known as the Magento(tm) + Enterprise Edition, provided solely in source code, including associated technical documentation, + and all Updates thereof furnished to Licensee as part of Support Services. Except as otherwise + specified herein, the term Software includes certain open source software programs described in + Section 4.2. "Software" does not include any Modifications. + + "Updates" means all published revisions and corrections to the printed documentation and + corrections and new releases of the Software which are generally made available to Magento's + supported customers at no additional cost or for media and handling charges only. Updates shall not + include any options or future products which Magento sells separately. + + +SUPPORT SERVICES TERMS AND CONDITIONS + +Unless otherwise defined herein, all capitalized terms will have the meanings set forth in the +Agreement. + +1. "Support Services" consists of: + a. Advice regarding the downloading, installation and configuration of the Software (including + Updates provided by Magento, but excluding for the avoidance of doubt any Modifications to + the Software), when used by Licensee on systems that meet the Software's "System + Requirements" specified on Magento's website at www.magentocommerce.com/system- + requirements. + + b. Facilities for bug tracking, escalation of problems for priority attention, and access to + community-supported FAQs and Forums relating to the Software. + + c. Assistance with troubleshooting to diagnose and fix errors in the Software. + + d. Access to Magento documentation relating to the Software, including authorization to make + copies of that documentation for internal use as specified in the Agreement. + +2. Exclusions from Support Services. + Magento shall have no obligation to support (i) versions of the + Software other than the then-current and immediately previous releases, which are operated on a + supported hardware/operating system platform specified in the release notes for the Software; (ii) + altered or modified Software; (iii) Software accessed on unlicensed Servers; (iv) problems caused by + Licensee's negligence, misuse, or hardware malfunction; or (v) use of the Software inconsistent with + Magento's instructions. Magento is not responsible for hardware changes necessitated by changes + to the Software. Support Services does not include: + a. Assistance in the development or debugging of Licensee's system, including the operating + system and support tools. + + b. Information and assistance on technical issues related to the installation, administration, and + use of enabling technologies such as databases, computer networks, and communications. + + c. Assistance with the installation and configuration of hardware including, but not limited to + computers, hard disks, networks, and printers. + +3. Subcontractors. + Magento or its authorized resellers reserve the right to subcontract any or all of + the work to be performed under these Support Terms, and Magento retains responsibility for any + work so subcontracted. + +4. Licensee Responsibilities. + Licensee shall provide commercially reasonable cooperation and full + information to Magento or its authorized resellers with respect to the furnishing of Support Services + under this Agreement. + +5. Support Contacts. + Licensee shall designate one or more support contacts that are authorized to + submit Software problems. If Licensee has purchased the license from a Magento-authorized + reseller, Licensee shall contact that party for assistance. If Licensee has purchased the license + directly from Magento, Licensee may contact Magento on the www.magentocommere.com website + or at its toll-free Support telephone number. + +6. Problem Priority. + Upon receipt of a properly submitted Software problem, as specified on + Magento's website at www.magentocommerce.com, Magento or its authorized reseller shall + prioritize it in accordance with the guidelines below: + + a. Priority 1 (P1) - A P1 is a catastrophic production problem within the Software that severely + impacts the Licensee's Production Server Instance, or because of which Licensee's Production + Server Instance is down or not functioning, or that results in a loss of production data and no + work around exists. P1 problems must be reported on Magento's toll-free support telephone + number in order to expedite resolution. Magento will use continuous efforts during its normal + hours of operation, with appropriate escalation to senior management, to provide a resolution + for any P1 problem as soon as is commercially reasonable. + + b. Priority 2 (P2) - A P2 is a problem within the Software where the Licensee's system is + functioning but in a reduced capacity, or the Problem is causing significant impact to portions of + the Licensee's business operations and productivity, or the Software is exposed to potential loss + or interruption of service. Problems existing in a non-production environment that would + otherwise qualify as a P1 if they were in a production system qualify as P2. Magento will use + reasonable efforts during its normal hours of operation to provide a resolution for any P2 + problem as soon as is commercially reasonable. + + c. Priority 3 (P3) - A P3 is a medium-to-low impact problem that involves partial and/or non- + critical loss of functionality, or that impairs some operations but allows Licensee's operations to + continue to function. Problems for which there is limited or no loss or functionality or impact to + Licensee's operation and for which there is an easy work-around qualify as P3. Magento will use + reasonable efforts during its normal hours of operation to provide a resolution for any P3 + problem in time for the next minor release of the Software. + + d. Priority 4 (P4) - A P4 is for a general usage question or issue that may be cosmetic in nature + or documentation related, but the Software works without normal hours of operation to + provide a resolution for any P4 problem in time for the next major release of the Software. + + e. Enhancement Request (ER) - An ER is a recommendation for future product enhancement or + modification to add official support and documentation for unsupported or undocumented + feature, or features that do not exist in the Software. Magento will take ERs into consideration + in the product management process, but has no obligation to deliver enhancements based on + any ER. + +7. Response Times. + Magento or its authorized reseller shall exercise commercially reasonable efforts + to meet the response times specified below for Gold Support (unless Licensee has upgraded to + Platinum Support, as provided in the Magento Order Form), following receipt of a Software problem + properly submitted by Licensee: + + Magento GOLD Support Response Times + WEB Ticket Submission 24 x 7 x 365 + WEB Ticket Response Time* 24 business hours + North American Telephone Support Hours M-F 08:00 - 17:00 (PT) + European Telephone Support Hours M-F 08:30 - 17:30 (CET) + Telephone Response Time P1 Issues* 4 business hours + Response Time P2-P4 Issues* 24 business hours + *From initial contact + + + Magento PLATINUM Support Response Times + WEB Ticket Submission 24 x 7 x 365 + WEB Ticket Response Time* 24 business hours + Telephone Support Hours 24 hours + Telephone Response Time P1 Issues* Up to 2 hours + Response Time P2-P4 Issues* 4 business hours + *From initial contact + + +8. Prohibited Use. + As a condition of Licensee's use of the Forums, Licensee will not use (and will + prohibit its customers from using) the Forums (i) to violate any applicable law, statute, ordinance or + regulation; (ii) to disseminate content that is harmful, threatening, abusive, harassing, tortuous, + defamatory, vulgar, obscene, libelous, or otherwise objectionable; (iii) to disseminate any software + viruses or any other computer code, files or programs that may interrupt, destroy or limit the + functionality of any computer software or hardware or telecommunications equipment; (iv) to + infringe the intellectual property rights or proprietary rights, or rights of publicity or privacy, of any + third party; or (v) use the Forums for any purpose other than their intended use. + +9. Term and Termination. + Magento will provide Support Services and any Updates to Licensee + during the periods identified in the Magento Order Form, subject to Licensee's payment of the + applicable fees. In the event Licensee fails to pay such fees to Magento or in the event Licensee + materially breaches the Support Services provisions and does not cure such breach within thirty (30) + days of its receipt of Magento's notice of same, Magento may suspend or cancel Support Services. + +10. General. + Magento shall not be liable for any failure or delay in performance under these Support + Terms due to causes beyond its reasonable control. Any illegal or unenforceable provision shall be + severed from these Support Terms. Licensee agrees that any information received pursuant to these + Support Terms shall be deemed to be subject to the non-disclosure obligations set forth in the + License Agreement. Licensee's obligation of payment of moneys due under these Support Terms + shall survive termination of these Support Terms or the License Agreement. These Support Terms + state the entire agreement regarding provision of Support Services to Licensee and may be amended + only by a written amendment set forth on a separate document executed by authorized + representatives of both parties. diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Payment/Block/Transparent/RedirectPlugin.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Payment/Block/Transparent/RedirectPlugin.php new file mode 100644 index 0000000000..a7871f68ca --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Payment/Block/Transparent/RedirectPlugin.php @@ -0,0 +1,54 @@ +request = $request; + } + + /** + * Add negotiable quote id param to url + * + * @param Redirect $subject + * @param string $result + */ + public function beforeGetRedirectUrl(Redirect $subject) + { + $negotiableQuoteId = $this->request->getParam($this->negotiableQuoteIdParam); + $routePathRedirect = $subject->getData($this->routePathParam); + if ($negotiableQuoteId && $routePathRedirect) { + $routePathRedirect = rtrim($routePathRedirect, '/'); + $routePathRedirect .= '/' . $this->negotiableQuoteIdParam . '/' . $negotiableQuoteId; + $subject->setData($this->routePathParam, $routePathRedirect); + } + } +} \ No newline at end of file diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Controller/Express/AbstractExpress.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Controller/Express/AbstractExpress.php new file mode 100644 index 0000000000..69e51eeb71 --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Controller/Express/AbstractExpress.php @@ -0,0 +1,86 @@ +request = $request; + $this->checkoutSession = $checkoutSession; + $this->restrictionInterfaceFactory = $restrictionInterfaceFactory; + $this->quoteRepository = $quoteRepository; + } + + /** + * Checks the negotiableQuoteId param placed via request and replace it from session if it is not set. + * See \Magento\PaypalNegotiableQuote\Plugin\Paypal\Model\Api\NvpPlugin for session-stored negotiable quote ID. + * See \Magento\NegotiableQuote\Model\Plugin\Checkout\Model\SessionPlugin where the NQ quote replaces active quote. + * + * @param \Magento\Paypal\Controller\Express\AbstractExpress $subject + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function beforeExecute( + \Magento\Paypal\Controller\Express\AbstractExpress $subject + ) { + $negotiableQuoteId = $this->request->getParam('negotiableQuoteId') + ?: $this->checkoutSession->getData('negotiableQuote_' . $this->request->getParam('token')); + if ($negotiableQuoteId) { + try { + $quote = $this->quoteRepository->get($negotiableQuoteId); + $restriction = $this->restrictionInterfaceFactory->create($quote); + if ($restriction->isOwner() && $restriction->canProceedToCheckout()) { + $this->request->setParams(['negotiableQuoteId' => $negotiableQuoteId]); + } + } catch (NoSuchEntityException $e) { + return; + } + } + } +} diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Controller/Express/AbstractExpress/Cancel.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Controller/Express/AbstractExpress/Cancel.php new file mode 100644 index 0000000000..c900fcd27c --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Controller/Express/AbstractExpress/Cancel.php @@ -0,0 +1,85 @@ +request = $request; + $this->restrictionInterfaceFactory = $restrictionInterfaceFactory; + $this->quoteRepository = $quoteRepository; + } + + /** + * Plugin which updates the redirect url for PayPal Express payment cancellations. + * + * If the cancellation occurred while checking out a negotiable quote, redirect to the negotiable quote details page + * instead of the active shopping cart. + * + * @param PaypalCancel $subject + * @param Redirect $result + * @return Redirect + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterExecute( + PaypalCancel $subject, + Redirect $result + ) { + $negotiableQuoteId = $this->request->getParam('negotiableQuoteId'); + if ($negotiableQuoteId) { + try { + $quote = $this->quoteRepository->get($negotiableQuoteId); + $restriction = $this->restrictionInterfaceFactory->create($quote); + if ($restriction->isOwner() && $restriction->canProceedToCheckout()) { + $result->setPath( + 'negotiable_quote/quote/view/quote_id/' . $negotiableQuoteId + ); + } + } catch (NoSuchEntityException $e) { + return $result; + } + } + return $result; + } +} diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/Api/NvpPlugin.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/Api/NvpPlugin.php new file mode 100644 index 0000000000..4b88587487 --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/Api/NvpPlugin.php @@ -0,0 +1,97 @@ +request = $request; + $this->checkoutSession = $checkoutSession; + $this->restrictionInterfaceFactory = $restrictionInterfaceFactory; + $this->quoteRepository = $quoteRepository; + } + + /** + * Storing negotiableQuoteId for PayPal checkout by token. + * See \Magento\PaypalNegotiableQuote\Plugin\Paypal\Controller\Express\AbstractExpress where it is used. + * + * @param \Magento\Paypal\Model\Api\Nvp $subject + * @param \Closure $proceed + * @param string $key + * @param null $index + * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function aroundGetData( + \Magento\Paypal\Model\Api\Nvp $subject, + \Closure $proceed, + string $key = '', + $index = null + ) { + if ($key === 'token') { + $token = $proceed($key, $index); + $negotiableQuoteId = $this->request->getParam('negotiableQuoteId'); + if ($negotiableQuoteId) { + try { + $quote = $this->quoteRepository->get($negotiableQuoteId); + $restriction = $this->restrictionInterfaceFactory->create($quote); + if ($restriction->isOwner() && $restriction->canProceedToCheckout()) { + $this->checkoutSession->setData('negotiableQuote_' . $token, $negotiableQuoteId); + } + } catch (NoSuchEntityException $e) { + return $token; + } + } + return $token; + } else { + return $proceed($key, $index); + } + } +} diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/ExpressConfigProvider.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/ExpressConfigProvider.php new file mode 100644 index 0000000000..bac47caa1c --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/ExpressConfigProvider.php @@ -0,0 +1,120 @@ +request = $request; + $this->restrictionInterfaceFactory = $restrictionInterfaceFactory; + $this->quoteRepository = $quoteRepository; + } + + /** + * Plugin which updates the target urls for PayPal Express relative to negotiable quotes. + * + * If a negotiableQuoteId is provided as a request parameter during checkout, pass it along to all + * configured PayPal urls. + * + * @param PaypalExpressConfigProvider $subject + * @param array $config + * @return array + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function afterGetConfig( + PaypalExpressConfigProvider $subject, + array $config + ) { + $negotiableQuoteId = $this->request->getParam('negotiableQuoteId'); + + if ($negotiableQuoteId) { + try { + $quote = $this->quoteRepository->get($negotiableQuoteId); + $restriction = $this->restrictionInterfaceFactory->create($quote); + if ($restriction->isOwner() && $restriction->canProceedToCheckout()) { + $negotiableQuoteParam = 'negotiableQuoteId/' . (int)$negotiableQuoteId; + $this->updateInContextUrls($config, $negotiableQuoteParam); + $this->updateRedirectUrls($config, $negotiableQuoteParam); + } + } catch (NoSuchEntityException $e) { + return $config; + } + } + return $config; + } + + /** + * Updates the urls for PayPal Express when in-context mode is enabled. + * + * Adds the negotiableQuoteId as a query parameter. + * + * @param array $config + * @param string $negotiableQuoteParam + */ + private function updateInContextUrls(array &$config, string $negotiableQuoteParam) + { + if (isset($config['payment']['paypalExpress']['inContextConfig']['clientConfig'])) { + $clientConfig = &$config['payment']['paypalExpress']['inContextConfig']['clientConfig']; + $clientConfig['getTokenUrl'] .= $negotiableQuoteParam; + $clientConfig['onAuthorizeUrl'] .= $negotiableQuoteParam; + $clientConfig['onCancelUrl'] .= $negotiableQuoteParam; + } + } + + /** + * Updates the PayPal Express urls when in-context mode is disabled. + * + * Adds the negotiableQuoteId as a query parameter. + * + * @param array $config + * @param string $negotiableQuoteParam + */ + private function updateRedirectUrls(array &$config, string $negotiableQuoteParam) + { + if (isset($config['payment']['paypalExpress']['redirectUrl'])) { + foreach ($config['payment']['paypalExpress']['redirectUrl'] as $code => &$redirectUrl) { + $redirectUrl .= $negotiableQuoteParam; + } + } + } +} diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/Payflow/Service/Request/SecureTokenPlugin.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/Payflow/Service/Request/SecureTokenPlugin.php new file mode 100644 index 0000000000..9c5b994277 --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/Payflow/Service/Request/SecureTokenPlugin.php @@ -0,0 +1,94 @@ +request = $request; + $this->url = $url; + $this->restrictionInterfaceFactory = $restrictionInterfaceFactory; + $this->quoteRepository = $quoteRepository; + } + + /** + * Add negotiable quote id param to url + * + * @param SecureToken $subject + * @param Quote $quote + * @param array $urls + * @return array + */ + public function beforeRequestToken(SecureToken $subject, Quote $quote, array $urls = []) + { + $negotiableQuoteId = (int) $this->request->getParam($this->negotiableQuoteIdParam); + if ($negotiableQuoteId) { + try { + $quote = $this->quoteRepository->get($negotiableQuoteId); + $restriction = $this->restrictionInterfaceFactory->create($quote); + if ($restriction->isOwner() && $restriction->canProceedToCheckout()) { + $routePath = $this->redirectRoutePath . '/' . $this->negotiableQuoteIdParam . '/' . $negotiableQuoteId; + $urls['return_url'] = $urls['return_url'] ?? $this->url->getUrl($routePath); + $urls['error_url'] = $urls['error_url'] ?? $this->url->getUrl($routePath); + $urls['cancel_url'] = $urls['cancel_url'] ?? $this->url->getUrl($routePath); + } + } catch (NoSuchEntityException $e) { + return [$quote, $urls]; + } + } + return [$quote, $urls]; + } +} \ No newline at end of file diff --git a/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/PayflowConfigPlugin.php b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/PayflowConfigPlugin.php new file mode 100644 index 0000000000..0a9947ce77 --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/Plugin/Paypal/Model/PayflowConfigPlugin.php @@ -0,0 +1,82 @@ +request = $request; + $this->restrictionInterfaceFactory = $restrictionInterfaceFactory; + $this->quoteRepository = $quoteRepository; + } + + /** + * Add negotiable quote id param to url + * + * @param PayflowConfig $subject + * @param string $result + * @param string $key + * @return string + */ + public function afterGetValue(PayflowConfig $subject, $result, $key) + { + $negotiableQuoteId = $this->request->getParam($this->negotiableQuoteIdParam); + if ($negotiableQuoteId && $key == $this->placeOrderUrlConfig) { + try { + $quote = $this->quoteRepository->get($negotiableQuoteId); + $restriction = $this->restrictionInterfaceFactory->create($quote); + if ($restriction->isOwner() && $restriction->canProceedToCheckout()) { + $result = rtrim($result, '/'); + $result .= '/' . $this->negotiableQuoteIdParam . '/' . $negotiableQuoteId; + } + } catch (NoSuchEntityException $e) { + return $result; + } + } + return $result; + } +} \ No newline at end of file diff --git a/app/code/Magento/PaypalNegotiableQuote/README.md b/app/code/Magento/PaypalNegotiableQuote/README.md new file mode 100644 index 0000000000..af0dc510ff --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/README.md @@ -0,0 +1,9 @@ +# Magento_PaypalNegotiableQuote module + +The Magento_PaypalNegotiableQuote module provides support for PayPal payment methods when using negotiable quotes. + +## Extensibility + +Extension developers can interact with the Magento_PaypalNegotiableQuote module using plugins. For more information about the Magento extension mechanism, see [Magento plug-ins](https://devdocs.magento.com/guides/v2.4/extension-dev-guide/plugins.html). + +[The Magento dependency injection mechanism](https://devdocs.magento.com/guides/v2.4/extension-dev-guide/depend-inj.html) enables you to override the functionality of the Magento_PaypalNegotiableQuote module. diff --git a/app/code/Magento/PaypalNegotiableQuote/etc/di.xml b/app/code/Magento/PaypalNegotiableQuote/etc/di.xml new file mode 100644 index 0000000000..1ef1d6c194 --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/etc/di.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/code/Magento/PaypalNegotiableQuote/etc/module.xml b/app/code/Magento/PaypalNegotiableQuote/etc/module.xml new file mode 100644 index 0000000000..92fa4fa91a --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/etc/module.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/app/code/Magento/PaypalNegotiableQuote/registration.php b/app/code/Magento/PaypalNegotiableQuote/registration.php new file mode 100644 index 0000000000..0a457e9ead --- /dev/null +++ b/app/code/Magento/PaypalNegotiableQuote/registration.php @@ -0,0 +1,9 @@ +