diff --git a/vendor/autoload.php b/vendor/autoload.php deleted file mode 100644 index aa1f4a8..0000000 --- a/vendor/autoload.php +++ /dev/null @@ -1,25 +0,0 @@ - Things are getting better every day. 🚀 - -##### [Version 3.2.13](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.12...v3.2.13) (2020-06-10) - -Adds plan logic and expiration - -##### [Version 3.2.12](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.11...v3.2.12) (2020-06-10) - -Adds key filter - -##### [Version 3.2.11](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.10...v3.2.11) (2020-06-04) - -* remove non-printable chars - -##### [Version 3.2.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.9...v3.2.10) (2020-05-28) - -* Remove extra files on export - -##### [Version 3.2.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.8...v3.2.9) (2020-05-18) - -adds new endpoints - -##### [Version 3.2.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.7...v3.2.8) (2020-03-24) - -* change license handler method access - -##### [Version 3.2.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.6...v3.2.7) (2020-03-24) - -* fix callback for license processing hook - -##### [Version 3.2.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.5...v3.2.6) (2020-03-23) - -* Fix notice on license deactivation - -##### [Version 3.2.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.4...v3.2.5) (2020-03-23) - -* always load notification manager last - -##### [Version 3.2.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.3...v3.2.4) (2020-03-21) - -* Cast version response to array for icons - -##### [Version 3.2.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.2...v3.2.3) (2020-03-21) - -* use product slug instead of the one from api - -##### [Version 3.2.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.1...v3.2.2) (2020-03-13) - -* improve notice dismiss mechanism - -##### [Version 3.2.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.2.0...v3.2.1) (2020-03-05) - -Fix rollback call for private products - -#### [Version 3.2.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.9...v3.2.0) (2020-03-04) - -* adds license activation/deactivation handlers for wp cli -* adds compatibility with the newest license API - -##### [Version 3.1.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.8...v3.1.9) (2020-02-24) - -* Add integration with GitHub actions - -## [3.1.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.7...v3.1.8) (2019-11-18) - - -### Bug Fixes - -* update developers name ([6aca63e](https://github.com/Codeinwp/themeisle-sdk/commit/6aca63e)) - -## [3.1.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.6...v3.1.7) (2019-11-07) - - -### Bug Fixes - -* license field style on wp5.3 ([0239997](https://github.com/Codeinwp/themeisle-sdk/commit/0239997)) -* license field style on wp5.3 ([86d3a1b](https://github.com/Codeinwp/themeisle-sdk/commit/86d3a1b)) - -## [3.1.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.5...v3.1.6) (2019-09-24) - - -### Bug Fixes - -* remove license related options when deactivated ([02cd6ce](https://github.com/Codeinwp/themeisle-sdk/commit/02cd6ce)) -* remove license related options when deactivated ([d3c1a1f](https://github.com/Codeinwp/themeisle-sdk/commit/d3c1a1f)) - -## [3.1.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.4...v3.1.5) (2019-09-11) - - -### Bug Fixes - -* allow unloading certain module features ([2a2559a](https://github.com/Codeinwp/themeisle-sdk/commit/2a2559a)) -* license activation workflow, show error message when failed to a… ([ade795c](https://github.com/Codeinwp/themeisle-sdk/commit/ade795c)) -* license activation workflow, show error message when failed to activate ([2f5cbae](https://github.com/Codeinwp/themeisle-sdk/commit/2f5cbae)) - -## [3.1.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.3...v3.1.4) (2019-08-23) - - -### Bug Fixes - -* license key was missing on get_version call ([365cde6](https://github.com/Codeinwp/themeisle-sdk/commit/365cde6)) -* license key was missing on get_version call ([c02f225](https://github.com/Codeinwp/themeisle-sdk/commit/c02f225)) - -## [3.1.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.2...v3.1.3) (2019-08-20) - - -### Bug Fixes - -* license deactivation behaviour https://github.com/Codeinwp/visua… ([59c4afe](https://github.com/Codeinwp/themeisle-sdk/commit/59c4afe)) -* license deactivation behaviour https://github.com/Codeinwp/visualizer-pro/issues/192 ([f641e18](https://github.com/Codeinwp/themeisle-sdk/commit/f641e18)) - -## [3.1.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.1...v3.1.2) (2019-08-12) - - -### Bug Fixes - -* phpunit test case ([efe851c](https://github.com/Codeinwp/themeisle-sdk/commit/efe851c)) -* url format for license endpoint, improve changelog handling and license checks ([a492c68](https://github.com/Codeinwp/themeisle-sdk/commit/a492c68)) - -## [3.1.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.0...v3.1.1) (2019-08-08) - - -### Bug Fixes - -* adds is_file for file existence check ([d1205c4](https://github.com/Codeinwp/themeisle-sdk/commit/d1205c4)) -* adds is_file for file existence check ([be119c1](https://github.com/Codeinwp/themeisle-sdk/commit/be119c1)) - -# [3.1.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.10...v3.1.0) (2019-08-05) - - -### Bug Fixes - -* adds extra comments for rest of the options, fix [#64](https://github.com/Codeinwp/themeisle-sdk/issues/64) ([018b22f](https://github.com/Codeinwp/themeisle-sdk/commit/018b22f)) -* hide license key when active under a password mask, fix [#67](https://github.com/Codeinwp/themeisle-sdk/issues/67) ([c0633c2](https://github.com/Codeinwp/themeisle-sdk/commit/c0633c2)) -* new uninstall feedback popup issues ([5bda4bd](https://github.com/Codeinwp/themeisle-sdk/commit/5bda4bd)) -* phpcs indentation errors ([d59ed4f](https://github.com/Codeinwp/themeisle-sdk/commit/d59ed4f)) -* undefined notices on license check, fix [#60](https://github.com/Codeinwp/themeisle-sdk/issues/60) ([7f56a97](https://github.com/Codeinwp/themeisle-sdk/commit/7f56a97)) -* uninstall feedback popup placement [[#61](https://github.com/Codeinwp/themeisle-sdk/issues/61)] ([1102d6c](https://github.com/Codeinwp/themeisle-sdk/commit/1102d6c)) - - -### Features - -* new product feedback popup ([f0dbab3](https://github.com/Codeinwp/themeisle-sdk/commit/f0dbab3)) -* new uninstall feedback form for themes ([8a29f21](https://github.com/Codeinwp/themeisle-sdk/commit/8a29f21)) - -## [3.0.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.9...v3.0.10) (2019-07-16) - - -### Bug Fixes - -* compatibility with lower PHP versions ([065ac8e](https://github.com/Codeinwp/themeisle-sdk/commit/065ac8e)) -* not loading licenser when SDK comes from theme [[#62](https://github.com/Codeinwp/themeisle-sdk/issues/62)] ([b706ca7](https://github.com/Codeinwp/themeisle-sdk/commit/b706ca7)) -* not loading licenser when SDK comes from theme [[#65](https://github.com/Codeinwp/themeisle-sdk/issues/65) ([419d8e6](https://github.com/Codeinwp/themeisle-sdk/commit/419d8e6)) -* preserve loaded when adding the licenser one ([cd50434](https://github.com/Codeinwp/themeisle-sdk/commit/cd50434)) - -## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26) - - -### Bug Fixes - -* adds new icon for dashboard widget ([de78068](https://github.com/Codeinwp/themeisle-sdk/commit/de78068)) -* anchor element on license activation message which should link to the license field, fix [#57](https://github.com/Codeinwp/themeisle-sdk/issues/57) ([2e78856](https://github.com/Codeinwp/themeisle-sdk/commit/2e78856)) -* change uninstall feedback logo with new version, fix [#58](https://github.com/Codeinwp/themeisle-sdk/issues/58) ([2554a4f](https://github.com/Codeinwp/themeisle-sdk/commit/2554a4f)) -* remove soon to expire notice, fix https://github.com/Codeinwp/themeisle/issues/752 ([a126225](https://github.com/Codeinwp/themeisle-sdk/commit/a126225)) - -## [3.0.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.7...v3.0.8) (2019-05-28) - - -### Bug Fixes - -* undefined class on diff module which should check the class on global namespace ([df6bb12](https://github.com/Codeinwp/themeisle-sdk/commit/df6bb12)) - -## [3.0.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.6...v3.0.7) (2019-05-27) - - -### Bug Fixes - -* change store url with the new domain ([6bdbe1e](https://github.com/Codeinwp/themeisle-sdk/commit/6bdbe1e)) - -## [3.0.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.5...v3.0.6) (2019-05-21) - - -### Bug Fixes - -* build php version for deployment stage ([a785699](https://github.com/Codeinwp/themeisle-sdk/commit/a785699)) -* uninstall feedback should load only on the proper pages ([259e78f](https://github.com/Codeinwp/themeisle-sdk/commit/259e78f)) - -## [3.0.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.4...v3.0.5) (2019-03-07) - - -### Bug Fixes - -* dashboard widget issues and recommended module inconsistency fix [#50](https://github.com/Codeinwp/themeisle-sdk/issues/50), [#49](https://github.com/Codeinwp/themeisle-sdk/issues/49), [#47](https://github.com/Codeinwp/themeisle-sdk/issues/47) ([757eb02](https://github.com/Codeinwp/themeisle-sdk/commit/757eb02)) - -## [3.0.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.3...v3.0.4) (2019-01-28) - - -### Bug Fixes - -* uninstall feedback disclosure issues when one of the feedback fields is open ([4631eef](https://github.com/Codeinwp/themeisle-sdk/commit/4631eef)) - -## [3.0.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.2...v3.0.3) (2019-01-07) - - -### Bug Fixes - -* **build:** fix exit code when is running outside wordpress context ([d298bb5](https://github.com/Codeinwp/themeisle-sdk/commit/d298bb5)) - -## [3.0.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.1...v3.0.2) (2018-12-28) - - -### Bug Fixes - -* remove composer/installers from package requirements ([a0ad543](https://github.com/Codeinwp/themeisle-sdk/commit/a0ad543)) - -## [3.0.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.0...v3.0.1) (2018-12-24) - - -### Bug Fixes - -* notifications setup triggers after all products register their n… ([999a944](https://github.com/Codeinwp/themeisle-sdk/commit/999a944)) -* notifications setup triggers after all products register their notices ([ec3cacc](https://github.com/Codeinwp/themeisle-sdk/commit/ec3cacc)) - -# 1.0.0 (2018-12-21) - - -### Features - -* adds uninstall feedback privacy policy info ([ed17943](https://github.com/Codeinwp/themeisle-sdk/commit/ed17943)) diff --git a/vendor/codeinwp/themeisle-sdk/LICENSE b/vendor/codeinwp/themeisle-sdk/LICENSE deleted file mode 100644 index 9cecc1d..0000000 --- a/vendor/codeinwp/themeisle-sdk/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg deleted file mode 100644 index 0ba12f6..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/animation.jpg and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg deleted file mode 100644 index f74b6f2..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/conditions.jpg and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/css.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/css.jpg deleted file mode 100644 index 7b1356b..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/css.jpg and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/neve.png b/vendor/codeinwp/themeisle-sdk/assets/images/neve.png deleted file mode 100644 index 3006122..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/neve.png and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/optimole-logo.svg b/vendor/codeinwp/themeisle-sdk/assets/images/optimole-logo.svg deleted file mode 100644 index 6510cf1..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/images/optimole-logo.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-builder.png b/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-builder.png deleted file mode 100644 index 9b1b790..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-builder.png and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-library.png b/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-library.png deleted file mode 100644 index 48b38fb..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-library.png and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.png b/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.png deleted file mode 100644 index 4c73528..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/otter/otter-patterns.png and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/sparks.png b/vendor/codeinwp/themeisle-sdk/assets/images/sparks.png deleted file mode 100644 index 7224af0..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/sparks.png and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/team.jpg b/vendor/codeinwp/themeisle-sdk/assets/images/team.jpg deleted file mode 100644 index 3bcf2ab..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/team.jpg and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/themeisle-logo.svg b/vendor/codeinwp/themeisle-sdk/assets/images/themeisle-logo.svg deleted file mode 100644 index 4f1ab4f..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/images/themeisle-logo.svg +++ /dev/null @@ -1,519 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/codeinwp/themeisle-sdk/assets/images/wplk.png b/vendor/codeinwp/themeisle-sdk/assets/images/wplk.png deleted file mode 100644 index 3b19a7f..0000000 Binary files a/vendor/codeinwp/themeisle-sdk/assets/images/wplk.png and /dev/null differ diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.asset.php deleted file mode 100644 index 6aa2c6c..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.asset.php +++ /dev/null @@ -1 +0,0 @@ - array('wp-components', 'wp-element'), 'version' => '35f2cdc94ec1bd5b9745'); diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.css b/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.css deleted file mode 100644 index 90d7370..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.css +++ /dev/null @@ -1 +0,0 @@ -#wpcontent{padding-left:0 !important}.ti-about{--border: 1px solid #ccc;--link-color: var(--wp-admin-theme-color);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:normal;display:grid;gap:30px}.ti-about .container{margin:0 auto;max-width:960px;padding:0 15px}.ti-about p{font-size:14px;line-height:1.6}.ti-about button{font-weight:600}.ti-about .spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-about .head{background:#fff;border-bottom:var(--border);padding:18px 0}.ti-about .head .container{padding:0 15px;display:flex;flex-wrap:wrap;align-items:center}.ti-about .head img{max-height:55px}.ti-about .head p{margin-left:10px}.ti-about .head a{font-style:italic;font-weight:bold}.ti-about .nav{border-bottom:var(--border);display:flex;flex-wrap:wrap;font-size:16px;margin:0;font-weight:600;-moz-column-gap:20px;column-gap:20px}.ti-about .nav a{border-bottom:4px solid rgba(0,0,0,0);color:#868686;padding:20px 10px;text-decoration:none;margin-bottom:-1px;box-sizing:border-box}.ti-about .nav a:hover{color:#313233}.ti-about .nav li{display:flex;margin:0}.ti-about .nav li.active a{border-color:var(--link-color);color:#313233}.ti-about .story-card .footer,.ti-about .story-card .body{display:grid;grid-template-columns:var(--grid, 1fr);align-items:center}.ti-about .story-card{border:var(--border);border-radius:0 0 10px 10px}.ti-about .story-card .body{background:#fff;padding:35px 35px 10px 35px}.ti-about .story-card .body h2{font-size:30px;margin:0 0 30px;color:#1f1d1d}.ti-about .story-card .body p{color:#1e1e1e}.ti-about .story-card .body figure{order:0;margin:0}.ti-about .story-card .body figcaption{margin:10px 0;color:#797979;font-size:12px}.ti-about .story-card .body img{border-radius:8px;max-width:100%}.ti-about .story-card .footer{border-top:var(--border);padding:30px 40px}.ti-about .story-card .footer h2{margin:0 0 20px;text-align:center;font-size:21px}.ti-about .story-card form{display:flex;align-items:center}.ti-about .story-card form .dashicons-yes-alt{color:#609952}.ti-about .story-card input{height:36px;flex-grow:1;border:var(--border);border-radius:2px;font-size:12px;margin-right:15px}.ti-about .product-cards{display:grid;gap:30px}.ti-about .product-card{background:#fff;display:grid;border:var(--border)}.ti-about .product-card h2{font-size:21px;margin:0}.ti-about .product-card p{margin:0;color:#6c6c6c}.ti-about .product-card .header{padding:20px 15px 0;display:flex;align-items:center}.ti-about .product-card .body{padding:20px 15px}.ti-about .product-card img{max-width:50px;margin-right:15px;border-radius:6px}.ti-about .product-card .footer{border-top:var(--border);display:flex;align-items:center;padding:15px;align-self:flex-end;justify-content:space-between}.ti-about .product-card .footer p{margin:8px 0;font-weight:600;font-size:13px;color:#313233}.ti-about .product-card .footer .not-installed{color:#7e7e7e}.ti-about .product-card .footer .active{color:#609952}.ti-about .product-card button,.ti-about .product-card a,.ti-about .product-card .spin{margin-left:auto;text-decoration:none}.ti-about .product-page{margin:0 auto;padding:0;width:100%;max-width:960px;border:1px solid #ccc;border-radius:8px;background-color:#fff}.ti-about .product-page .hero{display:flex;flex-direction:column;align-items:center;padding:64px;border-bottom:1px solid #ccc}.ti-about .product-page .hero h1{font-size:30px;line-height:42px;max-width:500px;text-align:center}.ti-about .product-page .hero p{font-size:14px;line-height:24px;max-width:500px;text-align:center}.ti-about .product-page .hero .logo{width:64px;margin-bottom:24px}.ti-about .product-page .hero .label{font-size:10px;line-height:12px;color:#ed6f57;background-color:rgba(237,111,87,.1803921569);padding:8px 16px;border-radius:4px}.ti-about .product-page .col-3-highlights{display:flex;flex-direction:column;justify-content:space-evenly;padding:24px 0;border-bottom:1px solid #ccc;align-items:center;text-align:center}.ti-about .product-page .col-3-highlights .col{max-width:360px}.ti-about .product-page .col-3-highlights .col h3{font-size:21px;line-height:32px;margin-bottom:8px}.ti-about .product-page .col-3-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .col-2-highlights{display:flex;flex-direction:column;justify-content:space-evenly;align-items:center;padding:24px 0;border-bottom:1px solid #ccc}.ti-about .product-page .col-2-highlights .col{width:90%}.ti-about .product-page .col-2-highlights .col img{max-width:450px;width:100%}.ti-about .product-page .col-2-highlights .col h2{font-size:24px;line-height:35px;margin-bottom:8px}.ti-about .product-page .col-2-highlights .col p{font-size:14px;line-height:24px}.ti-about .product-page .button-row{display:flex;gap:12px;margin-top:48px}.ti-about .otter-blocks .testimonial-nav{display:flex;gap:8px}.ti-about .otter-blocks .testimonial-nav .testimonial-button{width:10px;height:10px;background-color:#d9d9d9;margin:0;padding:0;border-radius:50%}.ti-about .otter-blocks .testimonial-nav .testimonial-button.active{background-color:#ed6f57}.ti-about .otter-blocks .testimonial-container{width:100%;max-width:450px;display:flex;overflow-x:scroll;scroll-behavior:smooth;margin:0;padding:0}.ti-about .otter-blocks .testimonial-container::-webkit-scrollbar{display:none}.ti-about .otter-blocks .testimonial-container .testimonial{width:100%;flex:1 0 100%;display:flex;flex-wrap:wrap;justify-content:left;gap:14px;align-items:center}.ti-about .otter-blocks .testimonial-container .testimonial p{width:100%;font-size:14px;line-height:24px}.ti-about .otter-blocks .testimonial-container .testimonial h3{font-size:16px;line-height:20px;font-weight:700;color:#1c1c1c}.ti-about .otter-blocks .testimonial-container .testimonial img{width:36px;height:36px;border-radius:50%}.ti-about .otter-blocks .otter-button.is-primary{background-color:#ed6f57}.ti-about .otter-blocks .otter-button.is-secondary{color:#ed6f57;box-shadow:inset 0 0 0 1px #ed6f57}.ti-about .otter-blocks .otter-button.is-loading{background-color:#6c6c6c;color:#fff}@media (min-width: 660px){.ti-about .product-cards{grid-template-columns:1fr 1fr}.ti-about .product-page .col-3-highlights,.ti-about .product-page .col-2-highlights{flex-direction:row;padding:64px 0}.ti-about .product-page .col-3-highlights{text-align:left}.ti-about .product-page .col-3-highlights .col{max-width:200px}.ti-about .product-page .col-2-highlights .col{width:45%}}@media (min-width: 992px){.ti-about .story-card .footer,.ti-about .story-card .body{gap:60px}.ti-about .story-card{--grid: 1.1fr 1fr}.ti-about .story-card .footer h2{margin:0;text-align:left}.ti-about .product-cards{grid-template-columns:1fr 1fr 1fr}} diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.js deleted file mode 100644 index 2e341ff..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/about/about.js +++ /dev/null @@ -1 +0,0 @@ -!function(){"use strict";var e=window.wp.element;function t(t){let{pages:a=[],selected:n=""}=t;const{currentProduct:l,logoUrl:s,strings:c,links:i}=window.tiSDKAboutData,r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e===n?"active":""};return(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"head"},(0,e.createElement)("div",{className:"container"},(0,e.createElement)("img",{src:s,alt:l.name}),(0,e.createElement)("p",null,"by ",(0,e.createElement)("a",{href:"https://themeisle.com"},"Themeisle")))),(i.length>0||a.length>0)&&(0,e.createElement)("div",{className:"container"},(0,e.createElement)("ul",{className:"nav"},(0,e.createElement)("li",{className:r()},(0,e.createElement)("a",{href:window.location},c.aboutUs)),a.map(((t,a)=>(0,e.createElement)("li",{className:r(t.hash),key:a},(0,e.createElement)("a",{href:t.hash},t.name)))),i.map(((t,a)=>(0,e.createElement)("li",{key:a},(0,e.createElement)("a",{href:t.url},t.text)))))))}var a=window.wp.components;function n(){const{strings:t,teamImage:n,homeUrl:l,pageSlug:s}=window.tiSDKAboutData,{heroHeader:c,heroTextFirst:i,heroTextSecond:r,teamImageCaption:o,newsHeading:m,emailPlaceholder:d,signMeUp:u}=t,[E,p]=(0,e.useState)(""),[h,g]=(0,e.useState)(!1),[v,N]=(0,e.useState)(!1);return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"story-card"},(0,e.createElement)("div",{className:"body"},(0,e.createElement)("div",null,(0,e.createElement)("h2",null,c),(0,e.createElement)("p",null,i),(0,e.createElement)("p",null,r)),(0,e.createElement)("figure",null,(0,e.createElement)("img",{src:n,alt:o}),(0,e.createElement)("figcaption",null,o))),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("h2",null,m),(0,e.createElement)("form",{onSubmit:e=>{var t;e.preventDefault(),g(!0),null===(t=fetch("https://api.themeisle.com/tracking/subscribe",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, */*;q=0.1","Cache-Control":"no-cache"},body:JSON.stringify({slug:"about-us",site:l,from:s,email:E})}).then((e=>e.json())).then((e=>{g(!1),"success"===e.code&&N(!0)})))||void 0===t||t.catch((e=>{g(!1)}))}},(0,e.createElement)("input",{disabled:h||v,type:"email",value:E,onChange:e=>{p(e.target.value)},placeholder:d}),!h&&!v&&(0,e.createElement)(a.Button,{isPrimary:!0,type:"submit"},u),h&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),v&&(0,e.createElement)("span",{className:"dashicons dashicons-yes-alt"})))))}const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((a=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:()=>{a({success:!0})},error:e=>{a({success:!1,code:e.errorCode})}})}))};function s(t){let{product:n,slug:s}=t;const{icon:c,name:i,description:r,status:o,premiumUrl:m,activationLink:d}=n,{strings:u,canInstallPlugins:E,canActivatePlugins:p}=window.tiSDKAboutData,{installNow:h,installed:g,notInstalled:v,active:N,activate:b,learnMore:f}=u,w=!!m,[y,k]=(0,e.useState)(o),[S,T]=(0,e.useState)(!1),D=async()=>{T(!0),await l(s,"neve"===s).then((e=>{e.success&&k("installed")})),T(!1)},x=async()=>{T(!0),window.location.href=d},_=()=>"not-installed"===y&&w?(0,e.createElement)(a.Button,{isLink:!0,icon:"external",href:m,target:"_blank"},f):"not-installed"!==y||w?"installed"===y?(0,e.createElement)(a.Button,{isSecondary:!0,onClick:x,disabled:S||!p},b):null:(0,e.createElement)(a.Button,{isPrimary:!0,onClick:D,disabled:S||!E},h),C=!E&&"not-installed"===y||!p&&"installed"===y?(0,e.createElement)(a.Tooltip,{text:`Ask your admin to enable ${i} on your site`,position:"top center"},_()):_();return(0,e.createElement)("div",{className:"product-card"},(0,e.createElement)("div",{className:"header"},c&&(0,e.createElement)("img",{src:c,alt:i}),(0,e.createElement)("h2",null,i)),(0,e.createElement)("div",{className:"body"},(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:r}})),(0,e.createElement)("div",{className:"footer"},(0,e.createElement)("p",null,"Status:"," ",(0,e.createElement)("span",{className:y},"installed"===y&&g,"not-installed"===y&&v,"active"===y&&N)),"active"!==y&&!S&&C,S&&(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})))}function c(){const{products:t}=window.tiSDKAboutData;return(0,e.createElement)("div",{className:"container"},(0,e.createElement)("div",{className:"product-cards"},Object.keys(t).map(((a,n)=>(0,e.createElement)(s,{key:a,slug:a,product:t[a]})))))}const i={"otter-page":function(t){let{page:n={}}=t;const{products:s,canInstallPlugins:c,canActivatePlugins:i}=window.tiSDKAboutData,{strings:r,plugin:o}=n,m=n&&n.product?n.product:"",d=m&&s[m]&&s[m].icon?s[m].icon:null,[u,E]=(0,e.useState)(r.testimonials.users[0]),[p,h]=(0,e.useState)(o.status),[g,v]=(0,e.useState)(!1),N="In Progress",b=async()=>{v(!0),await l(m,!1).then((e=>{e.success&&(h("installed"),f())}))},f=async()=>{v(!0),window.location.href=o.activationLink},w=(0,e.createElement)(a.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:f},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"})," ",N):r.buttons.install_otter_free),y=(0,e.createElement)(a.Button,{variant:"primary",disabled:g||("not-installed"===p?!c:!i),className:"otter-button"+(g?" is-loading":""),onClick:"not-installed"===p?b:f},g?(0,e.createElement)("span",null,(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),N):r.buttons.install_now),k=!c&&"not-installed"===p||!i&&"installed"===p||!1,S=t=>k?(0,e.createElement)(a.Tooltip,{text:"Ask your admin to enable Otter on your site",position:"top center"},t):t;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"hero"},d&&(0,e.createElement)("img",{className:"logo",src:d,alt:n.name||""}),(0,e.createElement)("span",{className:"label"},"Neve + Otter = New Possibilities 🤝"),(0,e.createElement)("h1",null,r.heading),(0,e.createElement)("p",null,r.text),("not-installed"===p||"installed"===p)&&S(w)),(0,e.createElement)("div",{className:"col-3-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.advancedTitle),(0,e.createElement)("p",null,r.features.advancedDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.fastTitle),(0,e.createElement)("p",null,r.features.fastDesc)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h3",null,r.features.mobileTitle),(0,e.createElement)("p",null,r.features.mobileDesc))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s1Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s1Title),(0,e.createElement)("p",null,r.details.s1Text))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s2Title),(0,e.createElement)("p",null,r.details.s2Text)),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s2Image,alt:r.details.s1Title}))),(0,e.createElement)("div",{className:"col-2-highlights"},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("img",{src:r.details.s3Image,alt:r.details.s1Title})),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.details.s3Title),(0,e.createElement)("p",null,r.details.s3Text))),(0,e.createElement)("div",{className:"col-2-highlights",style:{backgroundColor:"#F7F7F7",borderBottom:"none",borderBottomRightRadius:"8px",borderBottomLeftRadius:"8px"}},(0,e.createElement)("div",{className:"col"},(0,e.createElement)("h2",null,r.testimonials.heading),(0,e.createElement)("div",{className:"button-row"},("not-installed"===p||"installed"===p)&&S(y),(0,e.createElement)("a",{className:"components-button otter-button is-secondary",href:r.buttons.learn_more_link,target:"_blank",rel:"external noreferrer noopener"},r.buttons.learn_more))),(0,e.createElement)("div",{className:"col"},(0,e.createElement)("div",{className:"testimonials"},(0,e.createElement)("ul",{id:"testimonial-container",className:"testimonial-container"},r.testimonials.users.map(((t,a)=>(0,e.createElement)("li",{className:"testimonial",id:"ts_"+a,key:"ts_"+a},(0,e.createElement)("p",null,'"',t.text,'"'),(0,e.createElement)("img",{src:t.avatar,alt:t.name}),(0,e.createElement)("h3",null,t.name))))),(0,e.createElement)("div",{className:"testimonial-nav"},r.testimonials.users.map(((t,n)=>(0,e.createElement)(a.Button,{className:"testimonial-button"+(t.name===u.name?" active":""),key:"button_"+n,onClick:()=>(e=>{const t=r.testimonials.users[e];document.getElementById("ts_"+e).scrollIntoView({behavior:"smooth"}),E(t)})(n)}))))))))}};function r(t){const a=i[t.id];return(0,e.createElement)(a,{page:t.page})}function o(t){let{page:a={}}=t;return(0,e.createElement)("div",{className:"product-page"+(a&&a.product?" "+a.product:"")},(0,e.createElement)(r,{id:a.id,page:a}))}const m=()=>{let e=window.location.hash;return"string"!=typeof window.location.hash?null:e};function d(){const{productPages:a}=window.tiSDKAboutData,l=a?Object.keys(a).map((e=>{const t=a[e];return t.id=e,t})):[],[s,i]=(0,e.useState)(m()),r=()=>{const e=m();null!==e&&i(e)};(0,e.useEffect)((()=>(r(),window.addEventListener("hashchange",r),()=>{window.removeEventListener("hashchange",r)})),[]);const d=l.filter((e=>e.hash===s));return d.length>0?(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(t,{pages:l,selected:s}),(0,e.createElement)(o,{page:d[0]})):(0,e.createElement)("div",{className:"ti-about"},(0,e.createElement)(t,{pages:l}),(0,e.createElement)(n,null),(0,e.createElement)(c,null))}document.addEventListener("DOMContentLoaded",(()=>{const t=document.querySelector("#ti-sdk-about");t&&(0,e.render)((0,e.createElement)(d,null),t)}))}(); \ No newline at end of file diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.php deleted file mode 100644 index 77c2d47..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.asset.php +++ /dev/null @@ -1 +0,0 @@ - array('wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-plugins'), 'version' => 'bae1a40c3811e093a7be'); diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.js deleted file mode 100644 index b85c491..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/promos/index.js +++ /dev/null @@ -1 +0,0 @@ -!function(){"use strict";var e,t={165:function(){var e=window.wp.element,t=window.wp.blockEditor,o=window.wp.components,n=window.wp.compose,i=window.wp.data,s=window.wp.hooks,r=()=>{const{createNotice:t}=(0,i.dispatch)("core/notices"),[o,n]=(0,e.useState)({}),[s,r]=(0,e.useState)("loading");return(0,i.useSelect)((e=>{if(Object.keys(o).length)return;const{getEntityRecord:t}=e("core"),i=t("root","site");i&&(r("loaded"),n(i))}),[]),[e=>null==o?void 0:o[e],async function(e,o){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Settings saved.";const s={[e]:o};try{const e=await fetch("/wp-json/wp/v2/settings",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":wpApiSettings.nonce},body:JSON.stringify(s)});e.ok||(r("error"),t("error","Could not save the settings.",{isDismissible:!0,type:"snackbar"}));const o=await e.json();r("loaded"),t("success",i,{isDismissible:!0,type:"snackbar"}),n(o)}catch(e){console.error("Error updating option:",e)}},s]};const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((o=>{wp.updates.ajax(!0===t?"install-theme":"install-plugin",{slug:e,success:()=>{o({success:!0})},error:e=>{o({success:!1,code:e.errorCode})}})}))},l=e=>new Promise((t=>{jQuery.get(e).done((()=>{t({success:!0})})).fail((()=>{t({success:!1})}))})),m=(e,t)=>{const o={};return Object.keys(t).forEach((function(e){"innerBlocks"!==e&&(o[e]=t[e])})),e.push(o),Array.isArray(t.innerBlocks)?(o.innerBlocks=t.innerBlocks.map((e=>e.id)),t.innerBlocks.reduce(m,e)):e},c={button:{display:"flex",justifyContent:"center",width:"100%"},image:{padding:"20px 0"},skip:{container:{display:"flex",flexDirection:"column",alignItems:"center"},button:{fontSize:"9px"},poweredby:{fontSize:"9px",textTransform:"uppercase"}}},d={"blocks-css":{title:"Custom CSS",description:"Enable Otter Blocks to add Custom CSS for this block.",image:"css.jpg"},"blocks-animation":{title:"Animations",description:"Enable Otter Blocks to add Animations for this block.",image:"animation.jpg"},"blocks-conditions":{title:"Visibility Conditions",description:"Enable Otter Blocks to add Visibility Conditions for this block.",image:"conditions.jpg"}},u=t=>{let{onClick:n}=t;return(0,e.createElement)("div",{style:c.skip.container},(0,e.createElement)(o.Button,{style:c.skip.button,variant:"tertiary",onClick:n},"Skip for now"),(0,e.createElement)("span",{style:c.skip.poweredby},"Recommended by ",window.themeisleSDKPromotions.product))},p=(0,n.createHigherOrderComponent)((n=>i=>{if(i.isSelected&&Boolean(window.themeisleSDKPromotions.showPromotion)){const[s,m]=(0,e.useState)(!1),[p,h]=(0,e.useState)("default"),[w,g]=(0,e.useState)(!1),[f,E,y]=r(),k=async()=>{m(!0),await a("otter-blocks"),E("themeisle_sdk_promotions_otter_installed",!Boolean(f("themeisle_sdk_promotions_otter_installed"))),await l(window.themeisleSDKPromotions.otterActivationUrl),m(!1),h("installed")},S=()=>"installed"===p?(0,e.createElement)("p",null,(0,e.createElement)("strong",null,"Awesome! Refresh the page to see Otter Blocks in action.")):(0,e.createElement)(o.Button,{variant:"secondary",onClick:k,isBusy:s,style:c.button},"Install & Activate Otter Blocks"),P=()=>{const e={...window.themeisleSDKPromotions.option};e[window.themeisleSDKPromotions.showPromotion]=(new Date).getTime()/1e3|0,E("themeisle_sdk_promotions",JSON.stringify(e)),window.themeisleSDKPromotions.showPromotion=!1};return(0,e.useEffect)((()=>{w&&P()}),[w]),w?(0,e.createElement)(n,i):(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n,i),(0,e.createElement)(t.InspectorControls,null,Object.keys(d).map((t=>{if(t===window.themeisleSDKPromotions.showPromotion){const n=d[t];return(0,e.createElement)(o.PanelBody,{key:t,title:n.title,initialOpen:!1},(0,e.createElement)("p",null,n.description),(0,e.createElement)(S,null),(0,e.createElement)("img",{style:c.image,src:window.themeisleSDKPromotions.assets+n.image}),(0,e.createElement)(u,{onClick:()=>g(!0)}))}}))))}return(0,e.createElement)(n,i)}),"withInspectorControl");(0,i.select)("core/edit-site")||(0,s.addFilter)("editor.BlockEdit","themeisle-sdk/with-inspector-controls",p);var h=window.wp.plugins,w=window.wp.editPost;function g(t){let{stacked:n=!1,noImage:i=!1,type:s,onDismiss:m,onSuccess:c,initialStatus:d=null}=t;const{assets:u,title:p,email:h,option:w,optionKey:g,optimoleActivationUrl:f,optimoleApi:E,optimoleDash:y,nonce:k}=window.themeisleSDKPromotions,[S,P]=(0,e.useState)(!1),[v,b]=(0,e.useState)(h||""),[D,B]=(0,e.useState)(!1),[O,N]=(0,e.useState)(d),[_,K]=r(),A=async()=>{B(!0);const e={...w};e[s]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await K(g,JSON.stringify(e)),m&&m()},C=()=>{P(!S)},x=e=>{b(e.target.value)},I=async e=>{e.preventDefault(),N("installing"),await a("optimole-wp"),N("activating"),await l(f),K("themeisle_sdk_promotions_optimole_installed",!Boolean(_("themeisle_sdk_promotions_optimole_installed"))),N("connecting");try{await fetch(E,{method:"POST",headers:{"X-WP-Nonce":k,"Content-Type":"application/json"},body:JSON.stringify({email:v})}),c&&c(),N("done")}catch(e){N("done")}};if(D)return null;const j=()=>"done"===O?(0,e.createElement)("div",{className:"done"},(0,e.createElement)("p",null,"Awesome! You are all set!"),(0,e.createElement)(o.Button,{icon:"external",isPrimary:!0,href:y,target:"_blank"},"Go to Optimole dashboard")):O?(0,e.createElement)("p",{className:"om-progress"},(0,e.createElement)("span",{className:"dashicons dashicons-update spin"}),(0,e.createElement)("span",null,"installing"===O&&"Installing","activating"===O&&"Activating","connecting"===O&&"Connecting to API","…")):(0,e.createElement)(e.Fragment,null,(0,e.createElement)("span",null,"Enter your email address to create & connect your account"),(0,e.createElement)("form",{onSubmit:I},(0,e.createElement)("input",{defaultValue:v,type:"email",onChange:x,placeholder:"Email address"}),(0,e.createElement)(o.Button,{isPrimary:!0,type:"submit"},"Start using Optimole"))),F=()=>(0,e.createElement)(o.Button,{disabled:O&&"done"!==O,onClick:A,isLink:!0,className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice."));return n?(0,e.createElement)("div",{className:"ti-om-stack-wrap"},(0,e.createElement)("div",{className:"om-stack-notice"},F(),(0,e.createElement)("img",{src:u+"/optimole-logo.svg",alt:"Optimole logo"}),(0,e.createElement)("h2",null,"Get more with Optimole"),(0,e.createElement)("p",null,"om-editor"===s||"om-image-block"===s?"Increase this page speed and SEO ranking by optimizing images with Optimole.":"Leverage Optimole's full integration with Elementor to automatically lazyload, resize, compress to AVIF/WebP and deliver from 400 locations around the globe!"),!S&&"done"!==O&&(0,e.createElement)(o.Button,{isPrimary:!0,onClick:C,className:"cta"},"Get Started Free"),(S||"done"===O)&&j(),(0,e.createElement)("i",null,p))):(0,e.createElement)(e.Fragment,null,F(),(0,e.createElement)("div",{className:"content"},!i&&(0,e.createElement)("img",{src:u+"/optimole-logo.svg",alt:"Optimole logo"}),(0,e.createElement)("div",null,(0,e.createElement)("p",null,p),(0,e.createElement)("p",{className:"description"},"om-media"===s?"Save your server space by storing images to Optimole and deliver them optimized from 400 locations around the globe. Unlimited images, Unlimited traffic.":"This image looks to be too large and would affect your site speed, we recommend you to install Optimole to optimize your images."),!S&&(0,e.createElement)("div",{className:"actions"},(0,e.createElement)(o.Button,{isPrimary:!0,onClick:C},"Get Started Free"),(0,e.createElement)(o.Button,{isLink:!0,target:"_blank",href:"https://wordpress.org/plugins/optimole-wp"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))),S&&(0,e.createElement)("div",{className:"form-wrap"},j()))))}const f=()=>{const[t,o]=(0,e.useState)(!0),{getBlocks:n}=(0,i.useSelect)((e=>{const{getBlocks:t}=e("core/block-editor");return{getBlocks:t}}));var s;if((s=n(),"core/image",s.reduce(m,[]).filter((e=>"core/image"===e.name))).length<2)return null;const r="ti-sdk-optimole-post-publish "+(t?"":"hidden");return(0,e.createElement)(w.PluginPostPublishPanel,{className:r},(0,e.createElement)(g,{stacked:!0,type:"om-editor",onDismiss:()=>{o(!1)}}))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(this.debug)this.runAll();else switch(this.promo){case"om-attachment":this.runAttachmentPromo();break;case"om-media":this.runMediaPromo();break;case"om-editor":this.runEditorPromo();break;case"om-image-block":this.runImageBlockPromo();break;case"om-elementor":this.runElementorPromo()}}runAttachmentPromo(){wp.media.view.Attachment.Details.prototype.on("ready",(()=>{setTimeout((()=>{this.removeAttachmentPromo(),this.addAttachmentPromo()}),100)})),wp.media.view.Modal.prototype.on("close",(()=>{setTimeout(this.removeAttachmentPromo,100)}))}runMediaPromo(){if(window.themeisleSDKPromotions.option["om-media"])return;const t=document.querySelector("#ti-optml-notice");t&&(0,e.render)((0,e.createElement)(g,{type:"om-media",onDismiss:()=>{t.style.opacity=0}}),t)}runImageBlockPromo(){if(window.themeisleSDKPromotions.option["om-image-block"])return;let o=!0,i=null;const r=(0,n.createHigherOrderComponent)((n=>s=>"core/image"===s.name&&o?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(n,s),(0,e.createElement)(t.InspectorControls,null,(0,e.createElement)(g,{stacked:!0,type:"om-image-block",initialStatus:i,onDismiss:()=>{o=!1},onSuccess:()=>{i="done"}}))):(0,e.createElement)(n,s)),"withImagePromo");(0,s.addFilter)("editor.BlockEdit","optimole-promo/image-promo",r,99)}runEditorPromo(){window.themeisleSDKPromotions.option["om-editor"]||(0,h.registerPlugin)("optimole-promo",{render:f})}runElementorPromo(){if(!window.elementor)return;const t=this;elementor.on("preview:loaded",(()=>{elementor.panel.currentView.on("set:page:editor",(o=>{t.domRef&&(0,e.unmountComponentAtNode)(t.domRef),o.activeSection&&"section_image"===o.activeSection&&t.runElementorActions(t)}))}))}addAttachmentPromo(){if(this.domRef&&(0,e.unmountComponentAtNode)(this.domRef),window.themeisleSDKPromotions.option["om-attachment"])return;const t=document.querySelector("#ti-optml-notice-helper");t&&(this.domRef=t,(0,e.render)((0,e.createElement)("div",{className:"notice notice-info ti-sdk-om-notice",style:{margin:0}},(0,e.createElement)(g,{noImage:!0,type:"om-attachment",onDismiss:()=>{t.style.opacity=0}})),t))}removeAttachmentPromo(){const t=document.querySelector("#ti-optml-notice-helper");t&&(0,e.unmountComponentAtNode)(t)}runElementorActions(t){if(window.themeisleSDKPromotions.option["om-elementor"])return;const o=document.querySelector("#elementor-panel__editor__help"),n=document.createElement("div");n.id="ti-optml-notice",t.domRef=n,o&&(o.parentNode.insertBefore(n,o),(0,e.render)((0,e.createElement)(g,{stacked:!0,type:"om-elementor",onDismiss:()=>{n.style.opacity=0}}),n))}runAll(){this.runAttachmentPromo(),this.runMediaPromo(),this.runEditorPromo(),this.runImageBlockPromo(),this.runElementorPromo()}};const E=t=>{let{onDismiss:n=(()=>{})}=t;const[i,s]=(0,e.useState)(""),[m,c]=r();return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.Button,{disabled:"installing"===i,onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["rop-posts"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await c(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),n&&n()},variant:"link",className:"om-notice-dismiss"},(0,e.createElement)("span",{className:"dashicons-no-alt dashicons"}),(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Boost your content's reach effortlessly! Introducing ",(0,e.createElement)("b",null,"Revive Old Posts"),", a cutting-edge plugin from the makers of ",window.themeisleSDKPromotions.product,". Seamlessly auto-share old & new content across social media, driving traffic like never before."),(0,e.createElement)("div",{className:"rop-notice-actions"},"installed"!==i?(0,e.createElement)(o.Button,{variant:"primary",isBusy:"installing"===i,onClick:async()=>{s("installing"),await a("tweet-old-post"),await l(window.themeisleSDKPromotions.ropActivationUrl),c("themeisle_sdk_promotions_rop_installed",!Boolean(m("themeisle_sdk_promotions_rop_installed"))),s("installed")}},"Install & Activate"):(0,e.createElement)(o.Button,{variant:"primary",href:window.themeisleSDKPromotions.ropDash},"Visit Dashboard"),(0,e.createElement)(o.Button,{variant:"link",target:"_blank",href:"https://wordpress.org/plugins/tweet-old-post/"},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["rop-posts"])return;const t=document.querySelector("#ti-rop-notice");t&&(0,e.render)((0,e.createElement)(E,{onDismiss:()=>{t.style.display="none"}}),t)}};const y=t=>{let{onDismiss:n=(()=>{})}=t;const[i,s]=r(),{neveFSEMoreUrl:a}=window.themeisleSDKPromotions;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(o.Button,{onClick:async()=>{const e={...window.themeisleSDKPromotions.option};e["neve-fse-themes-popular"]=(new Date).getTime()/1e3|0,window.themeisleSDKPromotions.option=e,await s(window.themeisleSDKPromotions.optionKey,JSON.stringify(e)),n&&n()},className:"notice-dismiss"},(0,e.createElement)("span",{className:"screen-reader-text"},"Dismiss this notice.")),(0,e.createElement)("p",null,"Meet ",(0,e.createElement)("b",null,"Neve FSE")," from the makers of ",window.themeisleSDKPromotions.product,". A theme that makes full site editing on WordPress straightforward and user-friendly."),(0,e.createElement)("div",{className:"neve-fse-notice-actions"},(0,e.createElement)(o.Button,{variant:"link",target:"_blank",href:a},(0,e.createElement)("span",{className:"dashicons dashicons-external"}),(0,e.createElement)("span",null,"Learn more"))))};new class{constructor(){const{showPromotion:e,debug:t}=window.themeisleSDKPromotions;this.promo=e,this.debug="1"===t,this.domRef=null,this.run()}run(){if(window.themeisleSDKPromotions.option["neve-fse-themes-popular"])return;const t=document.querySelector("#ti-neve-fse-notice");t&&(0,e.render)((0,e.createElement)(y,{onDismiss:()=>{t.style.display="none"}}),t)}}}},o={};function n(e){var i=o[e];if(void 0!==i)return i.exports;var s=o[e]={exports:{}};return t[e](s,s.exports,n),s.exports}n.m=t,e=[],n.O=function(t,o,i,s){if(!o){var r=1/0;for(c=0;c=s)&&Object.keys(n.O).every((function(e){return n.O[e](o[l])}))?o.splice(l--,1):(a=!1,s0&&e[c-1][2]>s;c--)e[c]=e[c-1];e[c]=[o,i,s]},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={826:0,431:0};n.O.j=function(t){return 0===e[t]};var t=function(t,o){var i,s,r=o[0],a=o[1],l=o[2],m=0;if(r.some((function(t){return 0!==e[t]}))){for(i in a)n.o(a,i)&&(n.m[i]=a[i]);if(l)var c=l(n)}for(t&&t(o);mspan{display:none}.ti-om-stack-wrap .om-stack-notice img{max-width:90px !important}.ti-om-stack-wrap .om-stack-notice h2{font-size:18px;margin:30px auto 10px;font-weight:600}.ti-om-stack-wrap .om-stack-notice p{font-size:13px;max-width:250px;margin:0 auto;line-height:17px}.ti-om-stack-wrap .om-stack-notice i{margin-top:10px;font-size:12px;color:#757575}.ti-om-stack-wrap .om-stack-notice .cta{margin:20px auto 0;padding:10px 25px !important}.ti-om-stack-wrap .om-stack-notice .om-notice-dismiss{color:inherit}.ti-om-stack-wrap .om-stack-notice input{border-radius:0}.ti-om-stack-wrap .om-stack-notice form{place-items:center;width:75%;display:grid;margin-top:10px;gap:10px}.ti-om-stack-wrap .om-stack-notice .done{margin-top:15px;display:grid;gap:10px}.ti-om-stack-wrap .om-stack-notice .done p{font-size:15px;font-weight:500}.ti-om-stack-wrap .om-stack-notice .om-progress{margin:20px 0}.block-editor-block-inspector .ti-om-stack-wrap{border-top:1px solid #e0e0e0}.om-progress{gap:5px;font-size:14px;display:flex;align-items:center}.om-progress .spin{animation:om-rotation 2s infinite linear}@keyframes om-rotation{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.ti-sdk-om-promo.hidden{display:none}.media-sidebar .ti-sdk-om-notice input{min-width:unset;flex-grow:1}.media-sidebar .ti-sdk-om-notice .description{margin-bottom:10px}.media-sidebar .ti-sdk-om-notice .content{padding:15px 10px}.media-sidebar .ti-sdk-om-notice .actions{gap:10px}.media-sidebar .ti-sdk-om-notice form{flex-wrap:wrap;justify-content:center}.attachment-info .ti-sdk-om-notice input{min-width:unset;flex-grow:1}.attachment-info .ti-sdk-om-notice form{flex-wrap:wrap;justify-content:center}.ti-sdk-rop-notice{position:relative;padding:10px}.ti-sdk-rop-notice .rop-notice-actions{display:flex;gap:10px}.ti-sdk-rop-notice p{padding:0 10px 0 0}.ti-sdk-neve-fse-notice{position:relative;padding:10px}.ti-sdk-neve-fse-notice .neve-fse-notice-actions{display:flex;gap:10px}.ti-sdk-neve-fse-notice .neve-fse-notice-actions a{text-decoration:none}.ti-sdk-neve-fse-notice .neve-fse-notice-actions a span:not(.dashicons){text-decoration:underline}.ti-sdk-neve-fse-notice p{padding:0 10px 0 0;font-size:14px}@media screen and (min-width: 768px){.ti-sdk-om-notice img{display:block}}@media screen and (min-width: 1200px){.attachment-info .ti-sdk-om-notice form{flex-wrap:unset}} diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.asset.php deleted file mode 100644 index 266568d..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.asset.php +++ /dev/null @@ -1 +0,0 @@ - array(), 'version' => '7eac74bcd8abf2e43780'); diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.js deleted file mode 100644 index 9025518..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/survey/survey_deps.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e=Object.defineProperty,t=(t,n,s)=>(((t,n,s)=>{n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[n]=s})(t,"symbol"!=typeof n?n+"":n,s),s);const n=e=>({ok:!1,error:e});async function s(e,t,s,i){const r=new URL(t,e),o=JSON.stringify(i),a=(d=fetch,(...e)=>{try{return{ok:!0,data:d(...e)}}catch(e){return{ok:!1,error:e}}})(r.toString(),{method:s,headers:{"Content-Type":"application/json"},body:o});var d;if(!1===a.ok)return n(a.error);const c=await a.data,{data:u}=await c.json();return c.ok?(e=>({ok:!0,data:e}))(u):n({code:"network_error",message:c.statusText,status:c.status,url:r})}class i{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/actions`,"POST",e)}}class r{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/displays`,"POST",e)}async update(e,t){return s(this.apiHost,`/api/v1/client/${this.environmentId}/displays/${e}`,"PUT",t)}}class o{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/people`,"POST",{environmentId:this.environmentId,userId:e})}async update(e,t){return s(this.apiHost,`/api/v1/client/${this.environmentId}/people/${e}`,"POST",t)}}class a{constructor(e,t){this.apiHost=e,this.environmentId=t}async create(e){return s(this.apiHost,`/api/v1/client/${this.environmentId}/responses`,"POST",e)}async update({responseId:e,finished:t,data:n,ttc:i}){return s(this.apiHost,`/api/v1/client/${this.environmentId}/responses/${e}`,"PUT",{finished:t,data:n,ttc:i})}}class d{constructor(e,t){this.apiHost=e,this.environmentId=t}async uploadFile(e,{allowedFileExtensions:t,surveyId:n}={}){if(!(e instanceof Blob&&e instanceof File))throw new Error("Invalid file type. Expected Blob or File, but received "+typeof e);const s={fileName:e.name,fileType:e.type,allowedFileExtensions:t,surveyId:n},i=await fetch(`${this.apiHost}/api/v1/client/${this.environmentId}/storage`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok)throw new Error(`Upload failed with status: ${i.status}`);const r=await i.json(),{data:o}=r,{signedUrl:a,fileUrl:d,signingData:c,presignedFields:u,updatedFileName:l}=o;let g={};if(c){const{signature:t,timestamp:s,uuid:i}=c;g={"X-File-Type":e.type,"X-File-Name":encodeURIComponent(l),"X-Survey-ID":n??"","X-Signature":t,"X-Timestamp":String(s),"X-UUID":i}}const p=new FormData;u&&Object.keys(u).forEach((e=>{p.append(e,u[e])})),p.append("file",e);const h=await fetch(a,{method:"POST",...c?{headers:g}:{},body:p});if(!h.ok){if(c){const e=await h.json(),t=new Error(e.message);throw t.name="FileTooLargeError",t}const e=await h.text();if(u&&e&&e.includes("EntityTooLarge")){const e=new Error("File size exceeds the size limit for your plan");throw e.name="FileTooLargeError",e}throw new Error(`Upload failed with status: ${h.status}`)}return d}}class c{constructor(e){const{apiHost:t,environmentId:n}=e;this.response=new a(t,n),this.display=new r(t,n),this.action=new i(t,n),this.people=new o(t,n),this.storage=new d(t,n)}}class u{constructor(e){this.client=new c(e)}}class l{constructor(){this.logLevel="error"}static getInstance(){return l.instance||(l.instance=new l),l.instance}configure(e){e&&void 0!==e.logLevel&&(this.logLevel=e.logLevel)}logger(e,t){if("debug"===t&&"debug"!==this.logLevel)return;const n=`🧱 Formbricks - ${(new Date).toISOString()} [${t.toUpperCase()}] - ${e}`;"error"===t?console.error(n):console.log(n)}debug(e){this.logger(e,"debug")}error(e){this.logger(e,"error")}}const g=e=>({ok:!0,value:e}),p=e=>({ok:!1,error:e}),h=e=>(...t)=>{try{return{ok:!0,value:e(...t)}}catch(e){return{ok:!1,error:e}}},v=l.getInstance(),f=class e{constructor(e){this.customized=!1,e?(this.handleError=e,this.customized=!0):this.handleError=e=>l.getInstance().error(JSON.stringify(e))}static getInstance(){return e.instance||(e.instance=new e),e.instance}static init(t){this.initialized=!0,e.instance=new e(t)}printStatus(){v.debug("Custom error handler: "+(this.customized?"yes":"no"))}handle(e){console.warn("🧱 Formbricks - Global error: ",e),this.handleError(e)}};f.initialized=!1;let w=f;const y="formbricks-js";class m{constructor(){this.config=null;const e=this.loadFromLocalStorage();e.ok&&(this.config=e.value)}static getInstance(){return m.instance||(m.instance=new m),m.instance}update(e){if(e){const t=new Date((new Date).getTime()+12e4);this.config={...this.config,...e,expiresAt:t},this.saveToLocalStorage()}}get(){if(!this.config)throw new Error("config is null, maybe the init function was not called?");return this.config}loadFromLocalStorage(){if("undefined"!=typeof window){const e=localStorage.getItem(y);if(e){const t=JSON.parse(e);return t.expiresAt&&new Date(t.expiresAt)<=new Date?p(new Error("Config in local storage has expired")):g(JSON.parse(e))}}return p(new Error("No or invalid config in local storage"))}saveToLocalStorage(){return h((()=>localStorage.setItem(y,JSON.stringify(this.config))))()}resetConfig(){return this.config=null,h((()=>localStorage.removeItem(y)))()}}const I=(e,t)=>{const n=Math.abs(t.getTime()-e.getTime());return Math.floor(n/864e5)},b=()=>window.location.search.includes("formbricksDebug=true"),k=m.getInstance(),S=l.getInstance();let E=null;const H=async(e,t=!1)=>{var n;try{const s=await(async({apiHost:e,environmentId:t,userId:n},s)=>{const i=`${e}/api/v1/client/${t}/in-app/sync`,r="?version=1.6.0";let o={};if((s||b())&&(o.cache="no-cache",S.debug("No cache option set for sync")),!n){const e=i+r,t=await fetch(e,o);if(!t.ok){const n=await t.json();return p({code:"network_error",status:t.status,message:"Error syncing with backend",url:e,responseMessage:n.message})}return g((await t.json()).data)}const a=`${i}/${n}${r}`,d=await fetch(a,o);if(!d.ok){const e=await d.json();return p({code:"network_error",status:d.status,message:"Error syncing with backend",url:a,responseMessage:e.message})}const c=await d.json(),{data:u}=c;return g(u)})(e,t);if(!0!==(null==s?void 0:s.ok))throw S.error(`Sync failed: ${JSON.stringify(s.error)}`),s.error;let i;try{i=k.get().state}catch(e){}let r={surveys:s.value.surveys,noCodeActionClasses:s.value.noCodeActionClasses,product:s.value.product,attributes:(null==(n=s.value.person)?void 0:n.attributes)||{}};if(e.userId){const e=r.surveys.map((e=>e.name));S.debug("Fetched "+e.length+" surveys during sync: "+e.join(", "))}else{r={...r,displays:(null==i?void 0:i.displays)||[]},r=C(r);const e=r.surveys.map((e=>e.name));S.debug("Fetched "+e.length+" surveys during sync: "+e.join(", "))}k.update({apiHost:e.apiHost,environmentId:e.environmentId,userId:e.userId,state:r})}catch(e){throw S.error(`Error during sync: ${e}`),e}},C=e=>{const{displays:t,product:n}=e;let{surveys:s}=e;if(!t)return e;let i=s.filter((e=>{if("respondMultiple"===e.displayOption)return!0;if("displayOnce"===e.displayOption)return 0===t.filter((t=>t.surveyId===e.id)).length;if("displayMultiple"===e.displayOption)return 0===t.filter((t=>t.surveyId===e.id&&t.responded)).length;throw Error("Invalid displayOption")}));const r=t.length>0?t[t.length-1]:void 0;return i=i.filter((e=>{if(r){if(null!==e.recontactDays){const n=t.filter((t=>t.surveyId===e.id))[0];return!n||I(new Date,new Date(n.createdAt))>=e.recontactDays}return null===n.recontactDays||I(new Date,new Date(r.createdAt))>=n.recontactDays}return!0})),{...e,surveys:i}},$=()=>{"undefined"!=typeof window&&null!==E&&(window.clearInterval(E),E=null)},A=e=>new Promise((t=>setTimeout(t,e)));class L{constructor(e,n){t(this,"queue",[]),t(this,"config"),t(this,"surveyState"),t(this,"isRequestInProgress",!1),t(this,"api"),this.config=e,this.surveyState=n,this.api=new u({apiHost:e.apiHost,environmentId:e.environmentId})}add(e){this.surveyState.accumulateResponse(e),this.config.setSurveyState&&this.config.setSurveyState(this.surveyState),this.queue.push(e),this.processQueue()}async processQueue(){if(this.isRequestInProgress)return;if(0===this.queue.length)return;this.isRequestInProgress=!0;const e=this.queue[0];let t=0;for(;t=this.config.retryAttempts?(console.error("Failed to send response after 2 attempts."),this.config.onResponseSendingFailed&&this.config.onResponseSendingFailed(e),this.isRequestInProgress=!1):(this.isRequestInProgress=!1,this.processQueue())}async sendResponse(e){try{if(null!==this.surveyState.responseId)await this.api.client.response.update({...e,responseId:this.surveyState.responseId});else{const t=await this.api.client.response.create({...e,surveyId:this.surveyState.surveyId,userId:this.surveyState.userId||null,singleUseId:this.surveyState.singleUseId||null});if(!t.ok)throw new Error("Could not create response");if(this.surveyState.displayId)try{await this.api.client.display.update(this.surveyState.displayId,{responseId:t.data.id})}catch(e){console.error("Failed to update display, proceeding with the response.",e)}this.surveyState.updateResponseId(t.data.id),this.config.setSurveyState&&this.config.setSurveyState(this.surveyState)}return!0}catch(e){return console.error(e),!1}}updateSurveyState(e){this.surveyState=e}}class F{constructor(e,n,s,i){t(this,"responseId",null),t(this,"displayId",null),t(this,"userId",null),t(this,"surveyId"),t(this,"responseAcc",{finished:!1,data:{},ttc:{}}),t(this,"singleUseId"),this.surveyId=e,this.userId=i??null,this.singleUseId=n??null,this.responseId=s??null}setSurveyId(e){this.surveyId=e,this.clear()}copy(){const e=new F(this.surveyId,this.singleUseId??void 0,this.responseId??void 0,this.userId??void 0);return e.responseId=this.responseId,e.responseAcc=this.responseAcc,e}updateResponseId(e){this.responseId=e}updateDisplayId(e){this.displayId=e}updateUserId(e){this.userId=e}accumulateResponse(e){this.responseAcc={finished:e.finished,ttc:e.ttc,data:{...this.responseAcc.data,...e.data}}}isResponseFinished(){return this.responseAcc.finished}clear(){this.responseId=null,this.responseAcc={finished:!1,data:{},ttc:{}}}}const O=F,U="formbricks-web-container",D=m.getInstance(),P=l.getInstance(),T=w.getInstance();let x=!1,N=e=>{};const R=async e=>{if(x)return void P.debug("A survey is already running. Skipping.");x=!0,e.delay&&P.debug(`Delaying survey by ${e.delay} seconds.`);const t=D.get().state.product,n=new O(e.id,null,null,D.get().userId),s=new L({apiHost:D.get().apiHost,environmentId:D.get().environmentId,retryAttempts:2,onResponseSendingFailed:()=>{N(!0)}},n),i=e.productOverwrites??{},r=i.brandColor??t.brandColor,o=i.highlightBorderColor??t.highlightBorderColor,a=i.clickOutsideClose??t.clickOutsideClose,d=i.darkOverlay??t.darkOverlay,c=i.placement??t.placement,l=t.inAppSurveyBranding,g=await M();setTimeout((()=>{g.renderSurveyModal({survey:e,brandColor:r,isBrandingEnabled:l,clickOutside:a,darkOverlay:d,highlightBorderColor:o,placement:c,getSetIsError:e=>{N=e},onDisplay:async()=>{const{userId:t}=D.get();if(!t){const t={createdAt:new Date,surveyId:e.id,responded:!1},n=D.get().state.displays,s=n?[...n,t]:[t],i=D.get();let r=C({...i.state,displays:s});D.update({...i,state:r})}const i=new u({apiHost:D.get().apiHost,environmentId:D.get().environmentId}),r=await i.client.display.create({surveyId:e.id,userId:t});if(!r.ok)throw new Error("Could not create display");const{id:o}=r.data;n.updateDisplayId(o),s.updateSurveyState(n)},onResponse:e=>{const{userId:t}=D.get();if(!t){const e=D.get().state.displays,t=e&&e[e.length-1];if(!t)throw new Error("No lastDisplay found");if(!t.responded){t.responded=!0;const n=D.get();let s=C({...n.state,displays:e});D.update({...n,state:s})}}t&&n.updateUserId(t),s.updateSurveyState(n),s.add({data:e.data,ttc:e.ttc,finished:e.finished})},onClose:z,onFileUpload:async(e,t)=>{const n=new u({apiHost:D.get().apiHost,environmentId:D.get().environmentId});return await n.client.storage.uploadFile(e,t)},onRetry:()=>{N(!1),s.processQueue()}})}),1e3*e.delay)},z=async()=>{var e;if(null==(e=document.getElementById(U))||e.remove(),j(),!D.get().userId){const e=D.get().state,t=C(e);return D.update({...D.get(),state:t}),void(x=!1)}try{await H({apiHost:D.get().apiHost,environmentId:D.get().environmentId,userId:D.get().userId},!0),x=!1}catch(e){T.handle(e)}},j=()=>{const e=document.createElement("div");e.id=U,document.body.appendChild(e)},M=()=>new Promise(((e,t)=>{if(window.formbricksSurveys)e(window.formbricksSurveys);else{const n=document.createElement("script");n.src="https://unpkg.com/@formbricks/surveys@^1.6.0/dist/index.umd.js",n.async=!0,n.onload=()=>e(window.formbricksSurveys),n.onerror=e=>{console.error("Failed to load Formbricks Surveys library:",e),t(e)},document.head.appendChild(n)}})),q=l.getInstance(),_=m.getInstance(),B=["Exit Intent (Desktop)","50% Scroll"],J=async e=>{var t;const{userId:n,state:{surveys:s=[]}}=_.get();s.forEach((async t=>{const{inlineTriggers:n}=t,{codeConfig:s}=n??{};e!==(null==s?void 0:s.identifier)||await R(t)}));const i={environmentId:_.get().environmentId,userId:n,name:e};if(n&&!B.includes(e)){q.debug(`Sending action "${e}" to backend`);const t=new u({apiHost:_.get().apiHost,environmentId:_.get().environmentId}),s=await t.client.action.create({...i,userId:n});if(!s.ok)return p({code:"network_error",message:`Error tracking action ${e}`,status:500,url:`${_.get().apiHost}/api/v1/client/${_.get().environmentId}/actions`,responseMessage:s.error.message});b()&&await H({environmentId:_.get().environmentId,apiHost:_.get().apiHost,userId:n},!0)}q.debug(`Formbricks: Action "${e}" tracked`);const r=null==(t=_.get().state)?void 0:t.surveys;return r&&r.length>0?await X(e,r):q.debug("No active surveys to display"),{ok:!0,value:void 0}},X=async(e,t)=>{for(const s of t)if(!s.displayPercentage||(n=s.displayPercentage,Math.floor(100*Math.random())+1<=n)){for(const t of s.triggers)if(t===e)return q.debug(`Formbricks: survey ${s.id} triggered by action "${e}"`),void await R(s)}else q.debug("Survey display skipped based on displayPercentage.");var n},Q=e=>async(...t)=>{try{return{ok:!0,data:await e(...t)}}catch(e){return{ok:!1,error:e}}};let W=!1,Y=async function(e){if(e.clientY<=0){const e=await J("Exit Intent (Desktop)");if(!0!==e.ok)return p(e.error)}};const G=()=>{W&&(document.removeEventListener("mouseleave",Y),W=!1)};let K=!1,V=!1,Z=async()=>{const e=window.scrollY,t=window.innerHeight,n=document.documentElement.scrollHeight;if(0===e&&(V=!1),!V&&e/(n-t)>=.5){V=!0;const e=await J("50% Scroll");if(!0!==e.ok)return p(e.error)}};const ee=()=>{K&&(window.removeEventListener("scroll",Z),K=!1)},te=m.getInstance(),ne=l.getInstance(),se=w.getInstance(),ie=async()=>{var e;ne.debug(`Checking page url: ${window.location.href}`);const{state:t}=te.get(),{noCodeActionClasses:n=[],surveys:s=[]}=t??{},i=n.filter((e=>{const{innerHtml:t,cssSelector:n,pageUrl:s}=e.noCodeConfig||{};return s&&!t&&!n})),r=s.filter((e=>{var t;const{pageUrl:n,cssSelector:s,innerHtml:i}=(null==(t=e.inlineTriggers)?void 0:t.noCodeConfig)||{};return n&&!s&&!i}));if(i.length>0)for(const t of i){if(!(null==(e=t.noCodeConfig)?void 0:e.pageUrl))continue;const{noCodeConfig:{pageUrl:n}}=t,s=de(window.location.href,n.value,n.rule);if(!0!==s.ok)return p(s.error);if(!1===s.value)continue;const i=await J(t.name);if(!0!==i.ok)return p(i.error)}return r.length>0&&r.forEach((e=>{const{noCodeConfig:t}=e.inlineTriggers??{},{pageUrl:n}=t??{};if(n){const t=de(window.location.href,n.value,n.rule);if(!0!==t.ok)return p(t.error);R(e)}})),{ok:!0,value:void 0}};let re=!1;const oe=()=>ie(),ae=()=>{"undefined"!=typeof window&&re&&(window.removeEventListener("hashchange",oe),window.removeEventListener("popstate",oe),window.removeEventListener("pushstate",oe),window.removeEventListener("replacestate",oe),window.removeEventListener("load",oe),re=!1)};function de(e,t,n){switch(n){case"exactMatch":return g(e===t);case"contains":return g(e.includes(t));case"startsWith":return g(e.startsWith(t));case"endsWith":return g(e.endsWith(t));case"notMatch":return g(e!==t);case"notContains":return g(!e.includes(t));default:return p({code:"invalid_match_type",message:"Invalid match type"})}}const ce=(e,t)=>{var n,s,i,r,o,a,d,c;const u=null==(s=null==(n=t.noCodeConfig)?void 0:n.innerHtml)?void 0:s.value,l=null==(r=null==(i=t.noCodeConfig)?void 0:i.cssSelector)?void 0:r.value,g=null==(a=null==(o=t.noCodeConfig)?void 0:o.pageUrl)?void 0:a.value,p=null==(c=null==(d=t.noCodeConfig)?void 0:d.pageUrl)?void 0:c.rule;if(!u&&!l&&!g)return!1;if(u&&e.innerHTML!==u)return!1;if(l){const t=l.split(/\s*(?=[.#])/);for(let n of t)if(!e.matches(n))return!1}if(g&&p){const e=de(window.location.href,g,p);if(!e.ok||!e.value)return!1}return!0};let ue=!1;const le=e=>(e=>{const{state:t}=te.get();if(!t)return;const{noCodeActionClasses:n}=t;if(!n)return;const s=e.target;n.forEach((e=>{ce(s,e)&&J(e.name).then((e=>{var t,n;n=e=>{se.handle(e)},!0===(t=e).ok?t.value:n(t.error)}))}));const i=t.surveys;i&&0!==i.length&&i.forEach((e=>{const{inlineTriggers:t}=e;t&&ce(s,t)&&R(e)}))})(e),ge=()=>{ue&&(document.removeEventListener("click",le),ue=!1)};let pe=!1;const he=m.getInstance(),ve=l.getInstance(),fe=async()=>(ve.error("'setUserId' is no longer supported. Please set the userId in the init call instead."),{ok:!0,value:void 0}),we=async(e,t)=>{if(ve.debug("Setting attribute: "+e+" to value: "+t),((e,t)=>he.get().state.attributes[e]===t)(e,t.toString()))return ve.debug("Attribute already set to this value. Skipping update."),{ok:!0,value:void 0};const n=await(async(e,t)=>{const{apiHost:n,environmentId:s,userId:i}=he.get();if(!i)return p({code:"missing_person",message:"Unable to update attribute. User identification deactivated. No userId set."});const r={attributes:{[e]:t}},o=new u({apiHost:n,environmentId:s}),a=await o.client.people.update(i,r);return a.ok?(a.data.changed&&(ve.debug("Attribute updated. Syncing..."),await H({environmentId:s,apiHost:n,userId:i},!0)),{ok:!0,value:void 0}):p({code:"network_error",status:500,message:`Error updating person with userId ${i}`,url:`${he.get().apiHost}/api/v1/client/${s}/people/${i}`,responseMessage:a.error.message})})(e,t.toString());return n.ok?(he.update({environmentId:he.get().environmentId,apiHost:he.get().apiHost,userId:he.get().userId,state:{...he.get().state,attributes:{...he.get().state.attributes,[e]:t.toString()}}}),{ok:!0,value:void 0}):p(n.error)},ye=async()=>{Ee()},me=async()=>{ve.debug("Resetting state & getting new state from backend"),z();const e={environmentId:he.get().environmentId,apiHost:he.get().apiHost,userId:he.get().userId};await ye();try{return await Se(e),{ok:!0,value:void 0}}catch(e){return p(e)}},Ie=m.getInstance(),be=l.getInstance();let ke=!1;const Se=async e=>{if(ke)return be.debug("Already initialized, skipping initialization."),{ok:!0,value:void 0};if(b()&&be.configure({logLevel:"debug"}),w.getInstance().printStatus(),be.debug("Start initialize"),!e.environmentId)return be.debug("No environmentId provided"),p({code:"missing_field",field:"environmentId"});if(!e.apiHost)return be.debug("No apiHost provided"),p({code:"missing_field",field:"apiHost"});if(be.debug("Adding widget container to DOM"),j(),!e.userId&&e.attributes)return be.error("No userId provided but attributes. Cannot update attributes without userId."),p({code:"missing_field",field:"userId"});let t,n=null;if(e.userId&&e.attributes){const t=await(async(e,t,n,s)=>{var i,r;if(!n)return p({code:"missing_person",message:"Unable to update attribute. User identification deactivated. No userId set."});const o={...s};try{const e=null==(r=null==(i=he.get())?void 0:i.state)?void 0:r.attributes;if(e)for(const[t,n]of Object.entries(e))o[t]===n&&delete o[t]}catch(e){ve.debug("config not set; sending all attributes to backend")}if(0===Object.keys(o).length)return ve.debug("No attributes to update. Skipping update."),g(o);ve.debug("Updating attributes: "+JSON.stringify(o));const a={attributes:o},d=new u({apiHost:e,environmentId:t}),c=await d.client.people.update(n,a);return c.ok?g(o):p({code:"network_error",status:500,message:`Error updating person with userId ${n}`,url:`${e}/api/v1/client/${t}/people/${n}`,responseMessage:c.error.message})})(e.apiHost,e.environmentId,e.userId,e.attributes);if(!0!==t.ok)return p(t.error);n=t.value}try{t=Ie.get()}catch(e){be.debug("No existing configuration found.")}return t&&t.state&&t.environmentId===e.environmentId&&t.apiHost===e.apiHost&&t.userId===e.userId&&t.expiresAt?(be.debug("Found existing configuration."),t.expiresAt0&&Ie.update({environmentId:Ie.get().environmentId,apiHost:Ie.get().apiHost,userId:Ie.get().userId,state:{...Ie.get().state,attributes:{...Ie.get().state.attributes,...e.attributes}}}),be.debug("Adding event listeners"),"undefined"!=typeof window&&null===E&&(E=window.setInterval((async()=>{k.get().expiresAt&&new Date(k.get().expiresAt)>=new Date||(S.debug("Config has expired. Starting sync."),await H({apiHost:k.get().apiHost,environmentId:k.get().environmentId,userId:k.get().userId}))}),3e4)),"undefined"==typeof window||re||(window.addEventListener("hashchange",oe),window.addEventListener("popstate",oe),window.addEventListener("pushstate",oe),window.addEventListener("replacestate",oe),window.addEventListener("load",oe),re=!0),"undefined"==typeof window||ue||(document.addEventListener("click",le),ue=!0),"undefined"==typeof document||W||(document.querySelector("body").addEventListener("mouseleave",Y),W=!0),"undefined"==typeof window||K||(window.addEventListener("load",(()=>{window.addEventListener("scroll",Z)})),K=!0),pe||(window.addEventListener("beforeunload",(()=>{$(),ae(),ge(),G(),ee()})),pe=!0),ke=!0,be.debug("Initialized"),ie(),{ok:!0,value:void 0}},Ee=()=>{be.debug("Deinitializing"),z(),$(),ae(),ge(),G(),ee(),pe&&(window.removeEventListener("beforeunload",(()=>{$(),ae(),ge(),G(),ee()})),pe=!1),Ie.resetConfig(),ke=!1};l.getInstance().debug("Create command queue");const He=new class{constructor(){this.queue=[],this.running=!1,this.resolvePromise=null,this.commandPromise=null}add(e=!0,t,...n){this.queue.push({command:t,checkInitialized:e,commandArgs:n}),this.running||(this.commandPromise=new Promise((e=>{this.resolvePromise=e,this.run()})))}async wait(){this.running&&await this.commandPromise}async run(){for(this.running=!0;this.queue.length>0;){const e=w.getInstance(),t=this.queue.shift();if(!t)continue;if(t.checkInitialized){const t=(be.debug("Check if initialized"),ke&&w.initialized?{ok:!0,value:void 0}:p({code:"not_initialized",message:"Formbricks not initialized. Call initialize() first."}));t&&!0!==t.ok&&e.handle(t.error)}const n=async()=>await(null==t?void 0:t.command.apply(null,null==t?void 0:t.commandArgs)),s=await Q(n)();s&&(s.ok&&s.data&&!s.data.ok&&e.handle(s.data.error),!0!==s.ok&&e.handle(s.error))}this.running=!1,this.resolvePromise&&(this.resolvePromise(),this.resolvePromise=null,this.commandPromise=null)}},Ce=async(e,t)=>{He.add(!0,we,e,t),await He.wait()},$e={init:async e=>{w.init(e.errorHandler),He.add(!1,Se,e),await He.wait()},setUserId:async()=>{He.add(!0,fe),await He.wait()},setEmail:async e=>{Ce("email",e),await He.wait()},setAttribute:Ce,track:async(e,t={})=>{He.add(!0,J,e,t),await He.wait()},logout:async()=>{He.add(!0,ye),await He.wait()},reset:async()=>{He.add(!0,me),await He.wait()},registerRouteChange:async()=>{He.add(!0,ie),await He.wait()},getApi:()=>{const e=m.getInstance(),{environmentId:t,apiHost:n}=e.get();if(!t||!n)throw new Error("formbricks.init() must be called before getApi()");return new u({apiHost:n,environmentId:t})}};document.addEventListener("DOMContentLoaded",(()=>{window.tsdk_formbricks=$e,window.dispatchEvent(new Event("themeisle:survey:loaded"))}))})(); \ No newline at end of file diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.php b/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.php deleted file mode 100644 index 2138744..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.asset.php +++ /dev/null @@ -1 +0,0 @@ - array(), 'version' => 'bacc1f000efc9f479fc0'); diff --git a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.js b/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.js deleted file mode 100644 index 6fd9153..0000000 --- a/vendor/codeinwp/themeisle-sdk/assets/js/build/tracking/tracking.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var e={705:function(e){e.exports=function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){if(i)return i(s,!0);throw new Error("Cannot find module '"+s+"'")}u=n[s]={exports:{}},t[s][0].call(u.exports,(function(e){return o(t[s][1][e]||e)}),u,u.exports,e,t,n,r)}return n[s].exports}for(var i=void 0,s=0;s>16),a((65280&r)>>8),a(255&r);return 2==o?a(255&(r=f(e.charAt(n))<<2|f(e.charAt(n+1))>>4)):1==o&&(a((r=f(e.charAt(n))<<10|f(e.charAt(n+1))<<4|f(e.charAt(n+2))>>2)>>8&255),a(255&r)),i},e.fromByteArray=function(e){var t,n,r,o,i=e.length%3,s="";function u(e){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e)}for(t=0,r=e.length-i;t>18&63)+u(o>>12&63)+u(o>>6&63)+u(63&o);switch(i){case 1:s=(s+=u((n=e[e.length-1])>>2))+u(n<<4&63)+"==";break;case 2:s=(s=(s+=u((n=(e[e.length-2]<<8)+e[e.length-1])>>10))+u(n>>4&63))+u(n<<2&63)+"="}return s}}(void 0===n?this.base64js={}:n)}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js","/node_modules/gulp-browserify/node_modules/base64-js/lib")},{buffer:3,lYpoI2:11}],3:[function(e,t,n){(function(t,r,o,i,s,u,a,f,l){var c=e("base64-js"),d=e("ieee754");function o(e,t,n){if(!(this instanceof o))return new o(e,t,n);var r,i,s,u,a=typeof e;if("base64"===t&&"string"==a)for(e=(u=e).trim?u.trim():u.replace(/^\s+|\s+$/g,"");e.length%4!=0;)e+="=";if("number"==a)r=x(e);else if("string"==a)r=o.byteLength(e,t);else{if("object"!=a)throw new Error("First argument needs to be a number, array or string.");r=x(e.length)}if(o._useTypedArrays?i=o._augment(new Uint8Array(r)):((i=this).length=r,i._isBuffer=!0),o._useTypedArrays&&"number"==typeof e.byteLength)i._set(e);else if(S(u=e)||o.isBuffer(u)||u&&"object"==typeof u&&"number"==typeof u.length)for(s=0;s>>0)):(t+1>>0),o}function g(e,t,n,r){if(r||(Y("boolean"==typeof n,"missing or invalid endian"),Y(null!=t,"missing offset"),Y(t+1>>8*(r?i:1-i)}function m(e,t,n,r,o){if(o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+3>>8*(r?i:3-i)&255}function _(e,t,n,r,o){o||(Y(null!=t,"missing value"),Y("boolean"==typeof r,"missing or invalid endian"),Y(null!=n,"missing offset"),Y(n+1>8,n%=256,r.push(n),r.push(t);return r}(t),e,n,r)}(this,e,t,n);break;default:throw new Error("Unknown encoding")}return i},o.prototype.toString=function(e,t,n){var r,o,i,s,u=this;if(e=String(e||"utf8").toLowerCase(),t=Number(t)||0,(n=void 0!==n?Number(n):u.length)===t)return"";switch(e){case"hex":r=function(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||rthis.length&&(r=this.length);var i=(r=e.length-t=this.length))return this[e]},o.prototype.readUInt16LE=function(e,t){return h(this,e,!0,t)},o.prototype.readUInt16BE=function(e,t){return h(this,e,!1,t)},o.prototype.readUInt32LE=function(e,t){return p(this,e,!0,t)},o.prototype.readUInt32BE=function(e,t){return p(this,e,!1,t)},o.prototype.readInt8=function(e,t){if(t||(Y(null!=e,"missing offset"),Y(e=this.length))return 128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){return g(this,e,!0,t)},o.prototype.readInt16BE=function(e,t){return g(this,e,!1,t)},o.prototype.readInt32LE=function(e,t){return y(this,e,!0,t)},o.prototype.readInt32BE=function(e,t){return y(this,e,!1,t)},o.prototype.readFloatLE=function(e,t){return w(this,e,!0,t)},o.prototype.readFloatBE=function(e,t){return w(this,e,!1,t)},o.prototype.readDoubleLE=function(e,t){return b(this,e,!0,t)},o.prototype.readDoubleBE=function(e,t){return b(this,e,!1,t)},o.prototype.writeUInt8=function(e,t,n){n||(Y(null!=e,"missing value"),Y(null!=t,"missing offset"),Y(t=this.length||(this[t]=e)},o.prototype.writeUInt16LE=function(e,t,n){v(this,e,t,!0,n)},o.prototype.writeUInt16BE=function(e,t,n){v(this,e,t,!1,n)},o.prototype.writeUInt32LE=function(e,t,n){m(this,e,t,!0,n)},o.prototype.writeUInt32BE=function(e,t,n){m(this,e,t,!1,n)},o.prototype.writeInt8=function(e,t,n){n||(Y(null!=e,"missing value"),Y(null!=t,"missing offset"),Y(t=this.length||(0<=e?this.writeUInt8(e,t,n):this.writeUInt8(255+e+1,t,n))},o.prototype.writeInt16LE=function(e,t,n){_(this,e,t,!0,n)},o.prototype.writeInt16BE=function(e,t,n){_(this,e,t,!1,n)},o.prototype.writeInt32LE=function(e,t,n){E(this,e,t,!0,n)},o.prototype.writeInt32BE=function(e,t,n){E(this,e,t,!1,n)},o.prototype.writeFloatLE=function(e,t,n){I(this,e,t,!0,n)},o.prototype.writeFloatBE=function(e,t,n){I(this,e,t,!1,n)},o.prototype.writeDoubleLE=function(e,t,n){A(this,e,t,!0,n)},o.prototype.writeDoubleBE=function(e,t,n){A(this,e,t,!1,n)},o.prototype.fill=function(e,t,n){if(t=t||0,n=n||this.length,Y("number"==typeof(e="string"==typeof(e=e||0)?e.charCodeAt(0):e)&&!isNaN(e),"value is not a number"),Y(t<=n,"end < start"),n!==t&&0!==this.length){Y(0<=t&&t"},o.prototype.toArrayBuffer=function(){if("undefined"==typeof Uint8Array)throw new Error("Buffer.toArrayBuffer not supported in this browser");if(o._useTypedArrays)return new o(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;t=t.length||o>=e.length);o++)t[o+n]=e[o];return o}function C(e){try{return decodeURIComponent(e)}catch(e){return String.fromCharCode(65533)}}function M(e,t){Y("number"==typeof e,"cannot write a non-number as a number"),Y(0<=e,"specified a negative value for writing an unsigned value"),Y(e<=t,"value is larger than maximum value for type"),Y(Math.floor(e)===e,"value has a fractional component")}function N(e,t,n){Y("number"==typeof e,"cannot write a non-number as a number"),Y(e<=t,"value larger than maximum allowed value"),Y(n<=e,"value smaller than minimum allowed value"),Y(Math.floor(e)===e,"value has a fractional component")}function F(e,t,n){Y("number"==typeof e,"cannot write a non-number as a number"),Y(e<=t,"value larger than maximum allowed value"),Y(n<=e,"value smaller than minimum allowed value")}function Y(e,t){if(!e)throw new Error(t||"Failed assertion")}o._augment=function(e){return e._isBuffer=!0,e._get=e.get,e._set=e.set,e.get=B.get,e.set=B.set,e.write=B.write,e.toString=B.toString,e.toLocaleString=B.toString,e.toJSON=B.toJSON,e.copy=B.copy,e.slice=B.slice,e.readUInt8=B.readUInt8,e.readUInt16LE=B.readUInt16LE,e.readUInt16BE=B.readUInt16BE,e.readUInt32LE=B.readUInt32LE,e.readUInt32BE=B.readUInt32BE,e.readInt8=B.readInt8,e.readInt16LE=B.readInt16LE,e.readInt16BE=B.readInt16BE,e.readInt32LE=B.readInt32LE,e.readInt32BE=B.readInt32BE,e.readFloatLE=B.readFloatLE,e.readFloatBE=B.readFloatBE,e.readDoubleLE=B.readDoubleLE,e.readDoubleBE=B.readDoubleBE,e.writeUInt8=B.writeUInt8,e.writeUInt16LE=B.writeUInt16LE,e.writeUInt16BE=B.writeUInt16BE,e.writeUInt32LE=B.writeUInt32LE,e.writeUInt32BE=B.writeUInt32BE,e.writeInt8=B.writeInt8,e.writeInt16LE=B.writeInt16LE,e.writeInt16BE=B.writeInt16BE,e.writeInt32LE=B.writeInt32LE,e.writeInt32BE=B.writeInt32BE,e.writeFloatLE=B.writeFloatLE,e.writeFloatBE=B.writeFloatBE,e.writeDoubleLE=B.writeDoubleLE,e.writeDoubleBE=B.writeDoubleBE,e.fill=B.fill,e.inspect=B.inspect,e.toArrayBuffer=B.toArrayBuffer,e}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/buffer/index.js","/node_modules/gulp-browserify/node_modules/buffer")},{"base64-js":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){o=e("buffer").Buffer;var c=new o(4);c.fill(0),t.exports={hash:function(e,t,n,r){for(var i=t(function(e,t){e.length%4!=0&&(n=e.length+(4-e.length%4),e=o.concat([e,c],n));for(var n,r=[],i=t?e.readInt32BE:e.readInt32LE,s=0;sg?t=e(t):t.length>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,o=-1732584194,i=271733878,s=0;s>>32-o,n)}function p(e,t,n,r,o,i,s){return h(t&n|~t&r,e,t,o,i,s)}function g(e,t,n,r,o,i,s){return h(t&r|n&~r,e,t,o,i,s)}function y(e,t,n,r,o,i,s){return h(t^n^r,e,t,o,i,s)}function w(e,t,n,r,o,i,s){return h(n^(t|~r),e,t,o,i,s)}function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}t.exports=function(e){return c.hash(e,d,16)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],7:[function(e,t,n){(function(e,n,r,o,i,s,u,a,f){t.exports=function(e){for(var t,n=new Array(e),r=0;r>>((3&r)<<3)&255;return n}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{buffer:3,lYpoI2:11}],8:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){var c=e("./helpers");function d(e,t){e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var n,r,o,i=Array(80),s=1732584193,u=-271733879,a=-1732584194,f=271733878,l=-1009589776,c=0;c>16)+(t>>16)+(n>>16)<<16|65535&n}function p(e,t){return e<>>32-t}t.exports=function(e){return c.hash(e,d,20,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],9:[function(e,t,n){(function(n,r,o,i,s,u,a,f,l){function c(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function d(e,t){var n,r=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),o=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),i=new Array(64);e[t>>5]|=128<<24-t%32,e[15+(t+64>>9<<4)]=t;for(var s,u,a=0;a>>t|e<<32-t},g=function(e,t){return e>>>t};t.exports=function(e){return h.hash(e,d,32,!0)}}).call(this,e("lYpoI2"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js","/node_modules/gulp-browserify/node_modules/crypto-browserify")},{"./helpers":4,buffer:3,lYpoI2:11}],10:[function(e,t,n){(function(e,t,r,o,i,s,u,a,f){n.read=function(e,t,n,r,o){var i,s,u=8*o-r-1,a=(1<>1,l=-7,c=n?o-1:0,d=n?-1:1;for(o=e[t+c],c+=d,i=o&(1<<-l)-1,o>>=-l,l+=u;0>=-l,l+=r;0>1,c=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:i-1,h=r?1:-1;for(i=t<0||0===t&&1/t<0?1:0,t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-s))<1&&(s--,r*=2),2<=(t+=1<=s+l?c/r:c*Math.pow(2,1-l))*r&&(s++,r/=2),f<=s+l?(u=0,s=f):1<=s+l?(u=(t*r-1)*Math.pow(2,o),s+=l):(u=t*Math.pow(2,l-1)*Math.pow(2,o),s=0));8<=o;e[n+d]=255&u,d+=h,u/=256,o-=8);for(s=s<{var t,n;const r=null==e||null===(t=e.filter((e=>null==e?void 0:e[0])))||void 0===t?void 0:t[0];return null!==(n=null==r?void 0:r[1])&&void 0!==n?n:null==r?void 0:r[0]};class a{constructor(){var t,n;e(this,"_set",((e,t,n)=>{if(!this.hasProduct(t.slug))return;if(!(null!=n&&n.consent||this.getProductConsent(t.slug)))return;if(!this.validate(t))return;const r=null!=n&&n.directSave?t:this.trkMetadata(t);this.events.set(e,r),null!=n&&n.refreshTimer&&this.refreshTimer(),null!=n&&n.sendNow?this.uploadEvents():null!=n&&n.ignoreLimit||this.sendIfLimitReached()})),e(this,"_add",((e,t)=>{const n=s()(e);return this._set(n.toString(),e,t),n.toString()})),e(this,"with",(e=>{const t={slug:e,...this.envInfo()};return{add:(e,n)=>this._add({...t,...e},n),set:(e,n,r)=>this._set(e,{...t,...n},r),base:this}})),e(this,"envInfo",(()=>({site:window.location.hostname}))),e(this,"uploadEvents",(async()=>{if(0!==this.events.size)try{const e=Array.from(this.events.values());this.events.clear();const t=await this.sendBulkTracking(e.map((e=>{let{slug:t,site:n,license:r,...o}=e;return{slug:t,site:n,license:r,data:o}})));t.ok||this.listeners.forEach((e=>e({success:!1,error:"Failed to send tracking events"})));const n=await t.json();this.listeners.forEach((e=>e({success:!0,response:n})))}catch(e){console.error(e)}})),e(this,"sendIfLimitReached",(()=>{if(this.events.size>=this.eventsLimit)return this.uploadEvents()})),e(this,"subscribe",(e=>(this.listeners.push(e),()=>{this.listeners=this.listeners.filter((t=>t!==e))}))),e(this,"hasConsent",(()=>this.consent)),e(this,"sendBulkTracking",(e=>fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}))),e(this,"trkMetadata",(e=>({env:u([[window.location.href.includes("customize.php"),"customizer"],[window.location.href.includes("site-editor.php"),"site-editor"],[window.location.href.includes("widgets.php"),"widgets"],[window.location.href.includes("admin.php"),"admin"],["post-editor"]]),license:this.getProductTackHash(e.slug),...null!=e?e:{}}))),e(this,"hasProduct",(e=>this.products.some((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))),e(this,"getProductTackHash",(e=>{var t;return null===(t=this.products.find((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))||void 0===t?void 0:t.trackHash})),e(this,"getProductConsent",(e=>{var t;return null===(t=this.products.find((t=>{var n;return null==t||null===(n=t.slug)||void 0===n?void 0:n.includes(e)})))||void 0===t?void 0:t.consent})),e(this,"start",(()=>{this.interval||(this.interval=window.setInterval((()=>{this.uploadEvents()}),this.autoSendIntervalTime))})),e(this,"stop",(()=>{this.interval&&(window.clearInterval(this.interval),this.interval=null)})),e(this,"refreshTimer",(()=>{this.stop(),this.start()})),e(this,"validate",(e=>"object"==typeof e?0!==Object.keys(e).length&&Object.values(e).every(this.validate):void 0!==e)),e(this,"clone",(()=>{const e=new a;return e.events=new Map(this.events),e.listeners=[...this.listeners],e.interval=this.interval,e.consent=this.consent,e.endpoint=this.endpoint,e})),this.events=new Map,this.eventsLimit=50,this.listeners=[],this.interval=null,this.consent=!1,this.endpoint=null===(t=tiTelemetry)||void 0===t?void 0:t.endpoint,this.products=null===(n=tiTelemetry)||void 0===n?void 0:n.products,this.autoSendIntervalTime=3e5}}window.tiTrk=new a,null===(t=window)||void 0===t||null===(r=t.wp)||void 0===r||null===(o=r.customize)||void 0===o||o.bind("save",(()=>{var e,t;null===(e=window)||void 0===e||null===(t=e.tiTrk)||void 0===t||t.uploadEvents()})),window.addEventListener("beforeunload",(async()=>{var e,t;null===(e=window)||void 0===e||null===(t=e.tiTrk)||void 0===t||t.uploadEvents()}))}()}(); \ No newline at end of file diff --git a/vendor/codeinwp/themeisle-sdk/index.php b/vendor/codeinwp/themeisle-sdk/index.php deleted file mode 100644 index bedf179..0000000 --- a/vendor/codeinwp/themeisle-sdk/index.php +++ /dev/null @@ -1,3 +0,0 @@ - 0 ) { - $themeisle_sdk_max_version = $themeisle_sdk_version; - $themeisle_sdk_max_path = $themeisle_sdk_path; -} - -// load the latest sdk version from the active Themeisle products. -if ( ! function_exists( 'themeisle_sdk_load_licenser_if_present' ) ) : - /** - * Always load the licenser, if present. - * - * @param array $to_load Previously files to load. - */ - function themeisle_sdk_load_licenser_if_present( $to_load ) { - global $themeisle_sdk_abs_licenser_path; - $to_load[] = $themeisle_sdk_abs_licenser_path; - - return $to_load; - } -endif; - -// load the latest sdk version from the active Themeisle products. -if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) : - /** - * Always load the latest sdk version. - */ - function themeisle_sdk_load_latest() { - /** - * Don't load the library if we are on < 5.4. - */ - if ( version_compare( PHP_VERSION, '5.4.32', '<' ) ) { - return; - } - global $themeisle_sdk_max_path; - require_once $themeisle_sdk_max_path . '/start.php'; - } -endif; -add_action( 'init', 'themeisle_sdk_load_latest' ); - -if ( ! function_exists( 'tsdk_utmify' ) ) { - /** - * Utmify a link. - * - * @param string $url URL to add utms. - * @param string $area Area in page where this is used ( CTA, image, section name). - * @param string $location Location, such as customizer, about page. - * - * @return string - */ - function tsdk_utmify( $url, $area, $location = null ) { - static $current_page = null; - if ( $location === null && $current_page === null ) { - global $pagenow; - $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : $pagenow; - $current_page = isset( $screen->id ) ? $screen->id : ( ( $screen === null ) ? 'non-admin' : $screen ); - $current_page = sanitize_key( str_replace( '.php', '', $current_page ) ); - } - $location = $location === null ? $current_page : $location; - $content = sanitize_key( - trim( - str_replace( - [ - 'https://', - 'themeisle.com', - '/themes/', - '/plugins/', - '/upgrade', - ], - '', - $url - ), - '/' - ) - ); - $filter_key = sanitize_key( $content ); - $url_args = [ - 'utm_source' => 'wpadmin', - 'utm_medium' => $location, - 'utm_campaign' => $area, - 'utm_content' => $content, - ]; - $query_arguments = apply_filters( 'tsdk_utmify_' . $filter_key, $url_args, $url ); - $utmify_url = esc_url_raw( - add_query_arg( - $query_arguments, - $url - ) - ); - return apply_filters( 'tsdk_utmify_url_' . $filter_key, $utmify_url, $url ); - } - - add_filter( 'tsdk_utmify', 'tsdk_utmify', 10, 3 ); -} - - -if ( ! function_exists( 'tsdk_lstatus' ) ) { - /** - * Check license status. - * - * @param string $file Product basefile. - * - * @return string Status. - */ - function tsdk_lstatus( $file ) { - return \ThemeisleSDK\Modules\Licenser::status( $file ); - } -} -if ( ! function_exists( 'tsdk_lis_valid' ) ) { - /** - * Check if license is valid. - * - * @param string $file Product basefile. - * - * @return bool Validness. - */ - function tsdk_lis_valid( $file ) { - return \ThemeisleSDK\Modules\Licenser::is_valid( $file ); - } -} -if ( ! function_exists( 'tsdk_lplan' ) ) { - /** - * Get license plan. - * - * @param string $file Product basefile. - * - * @return string Plan. - */ - function tsdk_lplan( $file ) { - return \ThemeisleSDK\Modules\Licenser::plan( $file ); - } -} - -if ( ! function_exists( 'tsdk_lkey' ) ) { - /** - * Get license key. - * - * @param string $file Product basefile. - * - * @return string Key. - */ - function tsdk_lkey( $file ) { - return \ThemeisleSDK\Modules\Licenser::key( $file ); - } -} -if ( ! function_exists( 'tsdk_support_link' ) ) { - - /** - * Get Themeisle Support URL. - * - * @param string $file Product basefile. - * - * @return false|string Return support URL or false if no license is active. - */ - function tsdk_support_link( $file ) { - - if ( ! did_action( 'init' ) ) { - _doing_it_wrong( __FUNCTION__, 'tsdk_support_link() should not be called before the init action.', '3.2.39' ); - } - $params = []; - if ( ! tsdk_lis_valid( $file ) ) { - return false; - } - $product = \ThemeisleSDK\Product::get( $file ); - if ( ! $product->requires_license() ) { - return false; - } - static $site_params = null; - if ( $site_params === null ) { - if ( is_user_logged_in() && function_exists( 'wp_get_current_user' ) ) { - $current_user = wp_get_current_user(); - $site_params['semail'] = urlencode( $current_user->user_email ); - } - $site_params['swb'] = urlencode( home_url() ); - global $wp_version; - $site_params['snv'] = urlencode( sprintf( 'WP-%s-PHP-%s', $wp_version, ( PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION ) ) ); - } - $params['slkey'] = tsdk_lkey( $file ); - $params['sprd'] = urlencode( $product->get_name() ); - $params['svrs'] = urlencode( $product->get_version() ); - - - return add_query_arg( - array_merge( $site_params, $params ), - 'https://store.themeisle.com/direct-support/' - ); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/postcss.config.js b/vendor/codeinwp/themeisle-sdk/postcss.config.js deleted file mode 100644 index fc52856..0000000 --- a/vendor/codeinwp/themeisle-sdk/postcss.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const wpPreset = require( '@wordpress/postcss-plugins-preset' ); - -module.exports = { - plugins: [ - ...wpPreset, - require( 'postcss-custom-media' )(), // Custom media queries: https://www.npmjs.com/package/postcss-custom-media - require( 'postcss-combine-media-query' )(), // Combine media queries: https://www.npmjs.com/package/postcss-combine-media-query - require( 'postcss-sort-media-queries' )() // Sort media queries: https://www.npmjs.com/package/postcss-sort-media-queries - ] -}; diff --git a/vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php b/vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php deleted file mode 100644 index bb172c1..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Common/Abstract_module.php +++ /dev/null @@ -1,221 +0,0 @@ - 'otter-blocks/otter-blocks.php', - 'optimole-wp' => 'optimole-wp/optimole-wp.php', - 'tweet-old-post' => 'tweet-old-post/tweet-old-post.php', - 'feedzy-rss-feeds' => 'feedzy-rss-feeds/feedzy-rss-feed.php', - 'woocommerce-product-addon' => 'woocommerce-product-addon/woocommerce-product-addon.php', - 'visualizer' => 'visualizer/index.php', - 'wp-landing-kit' => 'wp-landing-kit/wp-landing-kit.php', - 'multiple-pages-generator-by-porthas' => 'multiple-pages-generator-by-porthas/porthas-multi-pages-generator.php', - 'sparks-for-woocommerce' => 'sparks-for-woocommerce/sparks-for-woocommerce.php', - 'templates-patterns-collection' => 'templates-patterns-collection/templates-patterns-collection.php', - ]; - - /** - * Product which use the module. - * - * @var Product $product Product object. - */ - protected $product = null; - - /** - * Can load the module for the selected product. - * - * @param Product $product Product data. - * - * @return bool Should load module? - */ - abstract public function can_load( $product ); - - /** - * Bootstrap the module. - * - * @param Product $product Product object. - */ - abstract public function load( $product ); - - /** - * Check if the product is from partner. - * - * @param Product $product Product data. - * - * @return bool Is product from partner. - */ - public function is_from_partner( $product ) { - foreach ( Module_Factory::$domains as $partner_domain ) { - if ( strpos( $product->get_store_url(), $partner_domain ) !== false ) { - return true; - } - } - - return array_key_exists( $product->get_slug(), Module_Factory::$slugs ); - } - - /** - * Wrapper for wp_remote_get on VIP environments. - * - * @param string $url Url to check. - * @param array $args Option params. - * - * @return array|\WP_Error - */ - public function safe_get( $url, $args = array() ) { - return function_exists( 'vip_safe_wp_remote_get' ) - ? vip_safe_wp_remote_get( $url ) - : wp_remote_get( //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get, Already used. - $url, - $args - ); - } - - /** - * Get the SDK base url. - * - * @return string - */ - public function get_sdk_uri() { - global $themeisle_sdk_max_path; - - /** - * $themeisle_sdk_max_path can point to the theme when the theme version is higher. - * hence we also need to check that the path does not point to the theme else this will break the URL. - * References: https://github.com/Codeinwp/neve-pro-addon/issues/2403 - */ - if ( $this->product->is_plugin() && false === strpos( $themeisle_sdk_max_path, get_template_directory() ) ) { - return plugins_url( '/', $themeisle_sdk_max_path . '/themeisle-sdk/' ); - }; - - return get_template_directory_uri() . '/vendor/codeinwp/themeisle-sdk/'; - } - - /** - * Call plugin api - * - * @param string $slug plugin slug. - * - * @return array|mixed|object - */ - public function call_plugin_api( $slug ) { - include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; - - $call_api = get_transient( 'ti_plugin_info_' . $slug ); - - if ( false === $call_api ) { - $call_api = plugins_api( - 'plugin_information', - array( - 'slug' => $slug, - 'fields' => array( - 'downloaded' => false, - 'rating' => false, - 'description' => false, - 'short_description' => true, - 'donate_link' => false, - 'tags' => false, - 'sections' => true, - 'homepage' => true, - 'added' => false, - 'last_updated' => false, - 'compatibility' => false, - 'tested' => false, - 'requires' => false, - 'downloadlink' => false, - 'icons' => true, - 'banners' => true, - ), - ) - ); - set_transient( 'ti_plugin_info_' . $slug, $call_api, 30 * MINUTE_IN_SECONDS ); - } - - return $call_api; - } - - /** - * Get the plugin status. - * - * @param string $plugin Plugin slug. - * - * @return bool - */ - public function is_plugin_installed( $plugin ) { - if ( ! isset( $this->plugin_paths[ $plugin ] ) ) { - return false; - } - - if ( file_exists( WP_CONTENT_DIR . '/plugins/' . $this->plugin_paths[ $plugin ] ) ) { - return true; - } - - return false; - } - - /** - * Get plugin activation link. - * - * @param string $slug The plugin slug. - * - * @return string - */ - public function get_plugin_activation_link( $slug ) { - $reference_key = $slug === 'otter-blocks' ? 'reference_key' : 'optimole_reference_key'; - $plugin = isset( $this->plugin_paths[ $slug ] ) ? $this->plugin_paths[ $slug ] : $slug . '/' . $slug . '.php'; - - return add_query_arg( - array( - 'plugin_status' => 'all', - 'paged' => '1', - 'action' => 'activate', - $reference_key => $this->product->get_key(), - 'plugin' => rawurlencode( $plugin ), - '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $plugin ), - ), - admin_url( 'plugins.php' ) - ); - } - - /** - * Checks if a plugin is active. - * - * @param string $plugin plugin slug. - * - * @return bool - */ - public function is_plugin_active( $plugin ) { - include_once ABSPATH . 'wp-admin/includes/plugin.php'; - - $plugin = isset( $this->plugin_paths[ $plugin ] ) ? $this->plugin_paths[ $plugin ] : $plugin . '/' . $plugin . '.php'; - - return is_plugin_active( $plugin ); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php b/vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php deleted file mode 100644 index 29313e9..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Common/Module_factory.php +++ /dev/null @@ -1,108 +0,0 @@ - true, - 'neto' => true, - 'olsen' => true, - 'benson' => true, - 'romero' => true, - 'carmack' => true, - 'puzzle' => true, - 'broadsheet' => true, - 'girlywp' => true, - 'veggie' => true, - 'zeko' => true, - 'maishawp' => true, - 'didi' => true, - 'liber' => true, - 'medicpress-pt' => true, - 'adrenaline-pt' => true, - 'consultpress-pt' => true, - 'legalpress-pt' => true, - 'gympress-pt' => true, - 'readable-pt' => true, - 'bolts-pt' => true, - ]; - /** - * Partners domains. - * - * @var array $DOMAINS Partners domains. - */ - public static $domains = [ - 'proteusthemes.com', - 'anarieldesign.com', - 'prothemedesign.com', - 'cssigniter.com', - ]; - /** - * Map which contains all the modules loaded for each product. - * - * @var array Mapping array. - */ - private static $modules_attached = []; - - /** - * Load availabe modules for the selected product. - * - * @param Product $product Loaded product. - * @param array $modules List of modules. - */ - public static function attach( $product, $modules ) { - - if ( ! isset( self::$modules_attached[ $product->get_slug() ] ) ) { - self::$modules_attached[ $product->get_slug() ] = []; - } - - foreach ( $modules as $module ) { - $class = 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' ); - /** - * Module object. - * - * @var Abstract_Module $module_object Module instance. - */ - $module_object = new $class( $product ); - - if ( ! $module_object->can_load( $product ) ) { - continue; - } - self::$modules_attached[ $product->get_slug() ][ $module ] = $module_object->load( $product ); - } - } - - /** - * Products/Modules loaded map. - * - * @return array Modules map. - */ - public static function get_modules_map() { - return self::$modules_attached; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Loader.php b/vendor/codeinwp/themeisle-sdk/src/Loader.php deleted file mode 100644 index 2464690..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Loader.php +++ /dev/null @@ -1,151 +0,0 @@ - $module ) { - if ( ! class_exists( 'ThemeisleSDK\\Modules\\' . ucwords( $module, '_' ) ) ) { - unset( $modules[ $key ] ); - } - } - self::$available_modules = $modules; - } - } - - /** - * Get cache token used in API requests. - * - * @return string Cache token. - */ - public static function get_cache_token() { - $cache_token = get_transient( 'themeisle_sdk_cache_token' ); - if ( false === $cache_token ) { - $cache_token = wp_generate_password( 6, false ); - set_transient( $cache_token, WEEK_IN_SECONDS ); - } - - return $cache_token; - } - - /** - * Clear cache token. - */ - public static function clear_cache_token() { - delete_transient( 'themeisle_sdk_cache_token' ); - } - - /** - * Register product into SDK. - * - * @param string $base_file The product base file. - * - * @return Loader The singleton object. - */ - public static function add_product( $base_file ) { - - if ( ! is_file( $base_file ) ) { - return self::$instance; - } - $product = new Product( $base_file ); - - Module_Factory::attach( $product, self::get_modules() ); - - self::$products[ $product->get_slug() ] = $product; - - return self::$instance; - } - - /** - * Get all registered modules by the SDK. - * - * @return array Modules available. - */ - public static function get_modules() { - return self::$available_modules; - } - - /** - * Get all products using the SDK. - * - * @return array Products available. - */ - public static function get_products() { - return self::$products; - } - - /** - * Get the version of the SDK. - * - * @return string The version. - */ - public static function get_version() { - return self::$version; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php b/vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php deleted file mode 100644 index 291ac38..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/About_us.php +++ /dev/null @@ -1,412 +0,0 @@ -_about_us_metadata', 'add_about_meta' ); - * - * function add_about_meta($data) { - * return [ - * 'location' => , - * 'logo' => , - * 'page_menu' => [['text' => '', 'url' => '']], // optional - * 'has_upgrade_menu' => , - * 'upgrade_link' => , - * 'upgrade_text' => 'Get Pro Version', - * ] - * } - * - * @package ThemeIsleSDK - * @subpackage Modules - * @copyright Copyright (c) 2023, Andrei Baicus - * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License - * @since 3.2.42 - */ - -namespace ThemeisleSDK\Modules; - -use ThemeisleSDK\Common\Abstract_Module; -use ThemeisleSDK\Product; - -// Exit if accessed directly. -if ( ! defined( 'ABSPATH' ) ) { - exit; -} - -/** - * Promotions module for ThemeIsle SDK. - */ -class About_Us extends Abstract_Module { - /** - * About data. - * - * @var array $about_data About page data, received from the filter. - * - * Shape of the $about_data property array: - * [ - * 'location' => 'top level page', - * 'logo' => 'logo path', - * 'page_menu' => [['text' => '', 'url' => '']], // Optional - * 'has_upgrade_menu' => !defined('NEVE_PRO_VERSION'), - * 'upgrade_link' => 'upgrade url', - * 'upgrade_text' => 'Get Pro Version', - * ] - */ - private $about_data = array(); - - /** - * Should we load this module. - * - * @param Product $product Product object. - * - * @return bool - */ - public function can_load( $product ) { - if ( $this->is_from_partner( $product ) ) { - return false; - } - - $this->about_data = apply_filters( $product->get_key() . '_about_us_metadata', array() ); - - return ! empty( $this->about_data ); - } - - /** - * Registers the hooks. - * - * @param Product $product Product to load. - */ - public function load( $product ) { - $this->product = $product; - - add_action( 'admin_menu', [ $this, 'add_submenu_pages' ] ); - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_about_page_script' ] ); - } - - /** - * Adds submenu pages. - * - * @return void - */ - public function add_submenu_pages() { - if ( ! isset( $this->about_data['location'] ) ) { - return; - } - - add_submenu_page( - $this->about_data['location'], - __( 'About Us', 'textdomain' ), - __( 'About Us', 'textdomain' ), - 'manage_options', - $this->get_about_page_slug(), - array( $this, 'render_about_us_page' ), - 100 - ); - - if ( ! isset( $this->about_data['has_upgrade_menu'] ) ) { - return; - } - - if ( $this->about_data['has_upgrade_menu'] !== true ) { - return; - } - - if ( ! isset( $this->about_data['upgrade_link'] ) ) { - return; - } - - if ( ! isset( $this->about_data['upgrade_text'] ) ) { - return; - } - - add_submenu_page( - $this->about_data['location'], - $this->about_data['upgrade_text'], - $this->about_data['upgrade_text'], - 'manage_options', - $this->about_data['upgrade_link'], - '', - 101 - ); - } - - /** - * Render page content. - * - * @return void - */ - public function render_about_us_page() { - echo '
'; - } - - /** - * Enqueue scripts & styles. - * - * @return void - */ - public function enqueue_about_page_script() { - $current_screen = get_current_screen(); - - if ( ! isset( $current_screen->id ) ) { - return; - } - - if ( strpos( $current_screen->id, $this->get_about_page_slug() ) === false ) { - return; - } - global $themeisle_sdk_max_path; - $handle = 'ti-sdk-about-' . $this->product->get_key(); - $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/about/about.asset.php'; - $deps = array_merge( $asset_file['dependencies'], [ 'updates' ] ); - - wp_register_script( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.js', $deps, $asset_file['version'], true ); - wp_localize_script( $handle, 'tiSDKAboutData', $this->get_about_localization_data() ); - - wp_enqueue_script( $handle ); - wp_enqueue_style( $handle, $this->get_sdk_uri() . 'assets/js/build/about/about.css', [ 'wp-components' ], $asset_file['version'] ); - } - - /** - * Get localized data. - * - * @return array - */ - private function get_about_localization_data() { - $links = isset( $this->about_data['page_menu'] ) ? $this->about_data['page_menu'] : []; - $product_pages = isset( $this->about_data['product_pages'] ) ? $this->about_data['product_pages'] : []; - return [ - 'links' => $links, - 'logoUrl' => $this->about_data['logo'], - 'productPages' => $this->get_product_pages_data( $product_pages ), - 'products' => $this->get_other_products_data(), - 'homeUrl' => esc_url( home_url() ), - 'pageSlug' => $this->get_about_page_slug(), - 'currentProduct' => [ - 'slug' => $this->product->get_key(), - 'name' => $this->product->get_name(), - ], - 'teamImage' => $this->get_sdk_uri() . 'assets/images/team.jpg', - 'strings' => [ - 'aboutUs' => __( 'About us', 'textdomain' ), - 'heroHeader' => __( 'Our Story', 'textdomain' ), - 'heroTextFirst' => __( 'Themeisle was founded in 2012 by a group of passionate developers who wanted to create beautiful and functional WordPress themes and plugins. Since then, we have grown into a team of over 20 dedicated professionals who are committed to delivering the best possible products to our customers.', 'textdomain' ), - 'heroTextSecond' => __( 'At Themeisle, we offer a wide range of WordPress themes and plugins that are designed to meet the needs of both beginners and advanced users. Our products are feature-rich, easy to use, and are designed to help you create beautiful and functional websites.', 'textdomain' ), - 'teamImageCaption' => __( 'Our team in WCEU2022 in Portugal', 'textdomain' ), - 'newsHeading' => __( 'Stay connected for news & updates!', 'textdomain' ), - 'emailPlaceholder' => __( 'Your email address', 'textdomain' ), - 'signMeUp' => __( 'Sign me up', 'textdomain' ), - 'installNow' => __( 'Install Now', 'textdomain' ), - 'activate' => __( 'Activate', 'textdomain' ), - 'learnMore' => __( 'Learn More', 'textdomain' ), - 'installed' => __( 'Installed', 'textdomain' ), - 'notInstalled' => __( 'Not Installed', 'textdomain' ), - 'active' => __( 'Active', 'textdomain' ), - ], - 'canInstallPlugins' => current_user_can( 'install_plugins' ), - 'canActivatePlugins' => current_user_can( 'activate_plugins' ), - ]; - } - - /** - * Get product pages data. - * - * @param array $product_pages Product pages. - * - * @return array - */ - private function get_product_pages_data( $product_pages ) { - - $otter_slug = 'otter-blocks'; - $otter_plugin = [ - 'status' => 'not-installed', - ]; - $otter_plugin['status'] = $this->is_plugin_installed( $otter_slug ) ? 'installed' : 'not-installed'; - $otter_plugin['status'] = $this->is_plugin_active( $otter_slug ) ? 'active' : $otter_plugin['status']; - $otter_plugin['activationLink'] = $this->get_plugin_activation_link( $otter_slug ); - - $pages = [ - 'otter-page' => [ - 'name' => 'Otter Blocks', - 'hash' => '#otter-page', - 'product' => $otter_slug, - 'plugin' => $otter_plugin, - 'strings' => [ - 'heading' => __( 'Build innovative layouts with Otter Blocks and Gutenberg', 'textdomain' ), - 'text' => __( 'Otter is a lightweight, dynamic collection of page building blocks and templates for the WordPress block editor.', 'textdomain' ), - 'buttons' => [ - 'install_otter_free' => __( "Install Otter - It's free!", 'textdomain' ), - 'install_now' => __( 'Install Now', 'textdomain' ), - 'learn_more' => __( 'Learn More', 'textdomain' ), - 'learn_more_link' => tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/', 'otter-page', 'about-us' ), - ], - 'features' => [ - 'advancedTitle' => __( 'Advanced Features', 'textdomain' ), - 'advancedDesc' => __( 'Add features such as Custom CSS, Animations & Visibility Conditions to all blocks.', 'textdomain' ), - 'fastTitle' => __( 'Lightweight and Fast', 'textdomain' ), - 'fastDesc' => __( 'Otter enhances WordPress site building experience without impacting site speed.', 'textdomain' ), - 'mobileTitle' => __( 'Mobile-Friendly', 'textdomain' ), - 'mobileDesc' => __( 'Each block can be tweaked to provide a consistent experience across all devices.', 'textdomain' ), - ], - 'details' => [ - 's1Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-builder.png', - 's1Title' => __( 'A Better Page Building Experience', 'textdomain' ), - 's1Text' => __( 'Otter can be used to build everything from a personal blog to an e-commerce site without losing the personal touch. Otter’s ease of use transforms basic blocks into expressive layouts in seconds.', 'textdomain' ), - 's2Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-patterns.png', - 's2Title' => __( 'A New Collection of Patterns', 'textdomain' ), - 's2Text' => __( 'A New Patterns Library, containing a range of different elements in a variety of styles to help you build great pages. All of your website’s most important areas are covered: headers, testimonials, pricing tables, sections and more.', 'textdomain' ), - 's3Image' => $this->get_sdk_uri() . 'assets/images/otter/otter-library.png', - 's3Title' => __( 'Advanced Blocks', 'textdomain' ), - 's3Text' => __( 'Enhance your website’s design with powerful blocks, like the Add to Cart, Business Hours, Review Comparison, and dozens of WooCommerce blocks.', 'textdomain' ), - ], - 'testimonials' => [ - 'heading' => __( 'Trusted by more than 300K website owners', 'textdomain' ), - 'users' => [ - [ - 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2021/05/avatar-03.png', - 'name' => 'Michael Burry', - 'text' => 'Loved the collection of blocks. If you want to create nice Gutenberg Pages, this plugin will be very handy and useful.', - ], - [ - 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-04.png', - 'name' => 'Maria Gonzales', - 'text' => 'I am very satisfied with Otter – a fantastic collection of blocks. And the plugin is perfectly integrated with Gutenberg and complete enough for my needs. ', - ], - [ - 'avatar' => 'https://mllj2j8xvfl0.i.optimole.com/cb:3970~373ad/w:80/h:80/q:mauto/https://themeisle.com/wp-content/uploads/2022/04/avatar-05.png', - 'name' => 'Florian Henckel', - 'text' => 'Otter Blocks work really well and I like the customization options. Easy to use and format to fit in with my site theme – and I’ve not encountered any compatibility or speed issues.', - ], - ], - ], - ], - ], - ]; - - return array_filter( - $pages, - function ( $page_data, $page_key ) use ( $product_pages ) { - return in_array( $page_key, $product_pages, true ) && - isset( $page_data['plugin']['status'] ) && - $page_data['plugin']['status'] === 'not-installed'; - }, - ARRAY_FILTER_USE_BOTH - ); - } - - /** - * Get products data. - * - * @return array - */ - private function get_other_products_data() { - $products = [ - 'optimole-wp' => [ - 'name' => 'Optimole', - 'description' => 'Optimole is an image optimization service that automatically optimizes your images and serves them to your visitors via a global CDN, making your website lighter, faster and helping you reduce your bandwidth usage.', - ], - 'neve' => [ - 'skip_api' => true, - 'name' => 'Neve', - 'description' => __( 'A fast, lightweight, customizable WordPress theme offering responsive design, speed, and flexibility for various website types.', 'textdomain' ), - 'icon' => $this->get_sdk_uri() . 'assets/images/neve.png', - ], - 'otter-blocks' => [ - 'name' => 'Otter', - ], - 'tweet-old-post' => [ - 'name' => 'Revive Old Post', - ], - 'feedzy-rss-feeds' => [ - 'name' => 'Feedzy', - ], - 'woocommerce-product-addon' => [ - 'name' => 'PPOM', - 'condition' => class_exists( 'WooCommerce', false ), - ], - 'visualizer' => [ - 'name' => 'Visualizer', - ], - 'wp-landing-kit' => [ - 'skip_api' => true, - 'premiumUrl' => tsdk_utmify( 'https://themeisle.com/plugins/wp-landing-kit', $this->get_about_page_slug() ), - 'name' => 'WP Landing Kit', - 'description' => __( 'Turn WordPress into a landing page powerhouse with Landing Kit, map domains to pages or any other published resource.', 'textdomain' ), - 'icon' => $this->get_sdk_uri() . 'assets/images/wplk.png', - ], - 'multiple-pages-generator-by-porthas' => [ - 'name' => 'MPG', - ], - 'sparks-for-woocommerce' => [ - 'skip_api' => true, - 'premiumUrl' => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce', $this->get_about_page_slug() ), - 'name' => 'Sparks', - 'description' => __( 'Extend your store functionality with 8 ultra-performant features like product comparisons, variation swatches, wishlist, and more.', 'textdomain' ), - 'icon' => $this->get_sdk_uri() . 'assets/images/sparks.png', - 'condition' => class_exists( 'WooCommerce', false ), - ], - 'templates-patterns-collection' => [ - 'name' => 'Templates Cloud', - 'description' => __( 'Design, save, and revisit your templates anytime with your personal vault on Templates Cloud.', 'textdomain' ), - ], - ]; - - foreach ( $products as $slug => $product ) { - if ( isset( $product['condition'] ) && ! $product['condition'] ) { - unset( $products[ $slug ] ); - continue; - } - - if ( $slug === 'neve' ) { - $theme = get_template(); - $themes = wp_get_themes(); - - $products[ $slug ]['status'] = isset( $themes['neve'] ) ? 'installed' : 'not-installed'; - $products[ $slug ]['status'] = $theme === 'neve' ? 'active' : $products[ $slug ]['status']; - - $products[ $slug ]['activationLink'] = add_query_arg( - [ - 'stylesheet' => 'neve', - 'action' => 'activate', - '_wpnonce' => wp_create_nonce( 'switch-theme_neve' ), - ], - admin_url( 'themes.php' ) - ); - - continue; - } - - $products[ $slug ]['status'] = $this->is_plugin_installed( $slug ) ? 'installed' : 'not-installed'; - $products[ $slug ]['status'] = $this->is_plugin_active( $slug ) ? 'active' : $products[ $slug ]['status']; - $products[ $slug ]['activationLink'] = $this->get_plugin_activation_link( $slug ); - - - if ( isset( $product['skip_api'] ) ) { - continue; - } - - $api_data = $this->call_plugin_api( $slug ); - - if ( ! isset( $product['icon'] ) ) { - $products[ $slug ]['icon'] = isset( $api_data->icons['2x'] ) ? $api_data->icons['2x'] : $api_data->icons['1x']; - } - if ( ! isset( $product['description'] ) ) { - $products[ $slug ]['description'] = $api_data->short_description; - } - if ( ! isset( $product['name'] ) ) { - $products[ $slug ]['name'] = $api_data->name; - } - } - - return $products; - } - - /** - * Get the page slug. - * - * @return string - */ - private function get_about_page_slug() { - return 'ti-about-' . $this->product->get_key(); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php deleted file mode 100644 index e75a9b9..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Announcements.php +++ /dev/null @@ -1,379 +0,0 @@ - array( - 'start' => '2024-11-25 00:00:00', - 'end' => '2024-12-03 23:59:59', - 'rendered' => false, - ), - ); - - /** - * Holds the option prefix for the announcements. - * - * This is used to store the dismiss date for each announcement. - * - * @var string - */ - public $option_prefix = 'themeisle_sdk_announcement_'; - - /** - * Holds the time for the current request. - * - * @var string - */ - public $time = ''; - - /** - * Check if the module can be loaded. - * - * @param Product $product Product data. - * - * @return bool - */ - public function can_load( $product ) { - if ( $this->is_from_partner( $product ) ) { - return false; - } - - return true; - } - - /** - * Load the module for the selected product. - * - * @param Product $product Product data. - * - * @return void - */ - public function load( $product ) { - if ( ! current_user_can( 'install_plugins' ) ) { - return; - } - - $this->product = $product; - - add_action( 'admin_init', array( $this, 'load_announcements' ) ); - add_filter( 'themeisle_sdk_active_announcements', array( $this, 'get_active_announcements' ) ); - add_filter( 'themeisle_sdk_announcements', array( $this, 'get_announcements_for_plugins' ) ); - } - - /** - * Load all valid announcements. - * - * @return void - */ - public function load_announcements() { - $active = $this->get_active_announcements(); - - if ( empty( $active ) ) { - return; - } - - foreach ( $active as $announcement ) { - - $method = $announcement . '_notice_render'; - - if ( method_exists( $this, $method ) ) { - add_action( 'admin_notices', array( $this, $method ) ); - } - } - - // Load the ajax handler. - add_action( 'wp_ajax_themeisle_sdk_dismiss_announcement', array( $this, 'disable_notification_ajax' ) ); - } - - /** - * Get all active announcements. - * - * @return array List of active announcements. - */ - public function get_active_announcements() { - $active = array(); - - foreach ( self::$timeline as $announcement_slug => $dates ) { - if ( $this->is_active( $dates ) && $this->can_show( $announcement_slug, $dates ) ) { - $active[] = $announcement_slug; - } - } - - return $active; - } - - /** - * Get all announcements along with plugin specific data. - * - * @return array List of announcements. - */ - public function get_announcements_for_plugins() { - - $announcements = array(); - - foreach ( self::$timeline as $announcement => $dates ) { - $announcements[ $announcement ] = $dates; - - if ( false !== strpos( $announcement, 'black_friday' ) ) { - $announcements[ $announcement ]['active'] = $this->is_active( $dates ); - - // Dashboard banners URLs. - $announcements[ $announcement ]['feedzy_dashboard_url'] = tsdk_utmify( 'https://themeisle.com/plugins/feedzy-rss-feeds/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['neve_dashboard_url'] = tsdk_utmify( 'https://themeisle.com/themes/neve/blackfriday/', 'bfcm24', 'dashboard' ); - $announcements[ $announcement ]['otter_dashboard_url'] = tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/blackfriday/', 'bfcm24', 'dashboard' ); - - // Customizer banners URLs. - $announcements[ $announcement ]['hestia_customizer_url'] = tsdk_utmify( 'https://themeisle.com/black-friday/', 'bfcm24', 'hestiacustomizer' ); - $announcements[ $announcement ]['neve_customizer_url'] = tsdk_utmify( 'https://themeisle.com/black-friday/', 'bfcm24', 'nevecustomizer' ); - - // Banners urgency text. - $remaining_time = $this->get_remaining_time_for_event( $dates['end'] ); - $announcements[ $announcement ]['remaining_time'] = $remaining_time; - $announcements[ $announcement ]['urgency_text'] = ! empty( $remaining_time ) ? 'Hurry up! Only ' . $remaining_time . ' left.' : ''; - } - } - - return apply_filters( 'themeisle_sdk_announcements_data', $announcements ); - } - - /** - * Get the announcement data. - * - * @param string $announcement The announcement to get the data for. - * - * @return array - */ - public function get_announcement_data( $announcement ) { - return ! empty( $announcement ) && is_string( $announcement ) && isset( self::$timeline[ $announcement ] ) ? self::$timeline[ $announcement ] : array(); - } - - /** - * Check if the announcement has an active timeline. - * - * @param array $dates The announcement to check. - * - * @return bool - */ - public function is_active( $dates ) { - - if ( empty( $this->time ) ) { - $this->time = current_time( 'Y-m-d' ); - } - - $start = isset( $dates['start'] ) ? $dates['start'] : null; - $end = isset( $dates['end'] ) ? $dates['end'] : null; - - if ( $start && $end ) { - return $start <= $this->time && $this->time <= $end; - } elseif ( $start ) { - return $this->time >= $start; - } elseif ( $end ) { - return $this->time <= $end; - } - - return false; - } - - /** - * Get the remaining time for the event in a human readable format. - * - * @param string $end_date The end date for event. - * @return string Remaining time for the event. - */ - public function get_remaining_time_for_event( $end_date ) { - if ( empty( $end_date ) || ! is_string( $end_date ) ) { - return ''; - } - - try { - $end_date = new \DateTime( $end_date, new \DateTimeZone( 'GMT' ) ); - $current_date = new \DateTime( 'now', new \DateTimeZone( 'GMT' ) ); - $diff = $end_date->diff( $current_date ); - - if ( $diff->days > 0 ) { - return $diff->days === 1 ? $diff->format( '%a day' ) : $diff->format( '%a days' ); - } - - if ( $diff->h > 0 ) { - return $diff->h === 1 ? $diff->format( '%h hour' ) : $diff->format( '%h hours' ); - } - - if ( $diff->i > 0 ) { - return $diff->i === 1 ? $diff->format( '%i minute' ) : $diff->format( '%i minutes' ); - } - - return $diff->s === 1 ? $diff->format( '%s second' ) : $diff->format( '%s seconds' ); - } catch ( \Exception $e ) { - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { - error_log( $e->getMessage() ); // phpcs:ignore - } - } - - return ''; - } - - /** - * Check if the announcement can be shown. - * - * @param string $announcement_slug The announcement to check. - * @param array $dates The announcement to check. - * - * @return bool - */ - public function can_show( $announcement_slug, $dates ) { - $dismiss_date = get_option( $this->option_prefix . $announcement_slug, false ); - - if ( false === $dismiss_date ) { - return true; - } - - // If the start date is after the dismiss date, show the notice. - $start = isset( $dates['start'] ) ? $dates['start'] : null; - if ( $start && $dismiss_date < $start ) { - return true; - } - - return false; - } - - /** - * Disable the notification via ajax. - * - * @return void - */ - public function disable_notification_ajax() { - if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'dismiss_themeisle_event_notice' ) ) { - wp_die( 'Invalid nonce! Refresh the page and try again.' ); - } - - if ( ! isset( $_POST['announcement'] ) || ! is_string( $_POST['announcement'] ) ) { - wp_die( 'Invalid announcement! Refresh the page and try again.' ); - } - - $announcement = sanitize_key( $_POST['announcement'] ); - - update_option( $this->option_prefix . $announcement, current_time( 'Y-m-d' ) ); - wp_die( 'success' ); - } - - /** - * Render the Black Friday notice. - * - * @return void - */ - public function black_friday_notice_render() { - - // Prevent the notice from being rendered twice. - if ( self::$timeline['black_friday']['rendered'] ) { - return; - } - self::$timeline['black_friday']['rendered'] = true; - - $product_names = array(); - - foreach ( Loader::get_products() as $product ) { - $slug = $product->get_slug(); - - // Do not add if the contains the string 'pro'. - if ( strpos( $slug, 'pro' ) !== false ) { - continue; - } - - $product_names[] = $product->get_name(); - } - - // Randomize the products and get only 4. - shuffle( $product_names ); - $product_names = array_slice( $product_names, 0, 4 ); - - ?> - -
- -

- Themeisle Black Friday Sale is Live! - Enjoy Maximum Savings on . - Learn more - -

-
- - is_from_partner( $product ) ) { - return false; - } - if ( $product->is_theme() && ! current_user_can( 'switch_themes' ) ) { - return false; - } - - if ( $product->is_plugin() && ! current_user_can( 'install_plugins' ) ) { - return false; - } - - return true; - } - - /** - * Registers the hooks. - * - * @param Product $product Product to load. - * - * @throws \Exception If the configuration is invalid. - * - * @return Compatibilities Module instance. - */ - public function load( $product ) { - - - $this->product = $product; - - $compatibilities = apply_filters( 'themeisle_sdk_compatibilities/' . $this->product->get_slug(), [] ); - if ( empty( $compatibilities ) ) { - return $this; - } - $requirement = null; - $check_type = null; - foreach ( $compatibilities as $compatibility ) { - - if ( empty( $compatibility['basefile'] ) ) { - return $this; - } - $requirement = new Product( $compatibility['basefile'] ); - $tested_up = isset( $compatibility[ self::TESTED_UP ] ) ? $compatibility[ self::TESTED_UP ] : '999'; - $required = $compatibility[ self::REQUIRED ]; - if ( ! version_compare( $required, $tested_up, '<' ) ) { - throw new \Exception( sprintf( 'Invalid required/tested_up configuration. Required version %s should be lower than tested_up %s.', $required, $tested_up ) ); - } - $check_type = self::REQUIRED; - if ( ! version_compare( $requirement->get_version(), $required, '<' ) ) { - $check_type = self::TESTED_UP; - if ( version_compare( $requirement->get_version(), $tested_up . '.9999', '<' ) ) { - return $this; - } - } - - break; - } - if ( empty( $requirement ) ) { - return $this; - } - if ( $check_type === self::REQUIRED ) { - $this->mark_required( $product, $requirement ); - } - if ( $check_type === self::TESTED_UP ) { - $this->mark_testedup( $product, $requirement ); - } - - return $this; - } - - /** - * Mark the product tested up. - * - * @param Product $product Product object. - * @param Product $requirement Requirement object. - * - * @return void - */ - public function mark_testedup( $product, $requirement ) { - add_action( - 'admin_head', - function () use ( $product, $requirement ) { - $screen = function_exists( 'get_current_screen' ) ? get_current_screen() : ''; - - if ( empty( $screen ) || ! isset( $screen->id ) ) { - return; - } - if ( $requirement->is_theme() && $screen->id === 'themes' ) { - ?> - - is_plugin() && $screen->id === 'plugins' ) { - ?> - - is_theme() - && property_exists( $upgrader, 'skin' ) - && property_exists( $upgrader->skin, 'theme_info' ) - && $upgrader->skin->theme_info->template === $product->get_slug() ) { - $should_block = true; - - } - if ( ! $should_block && $product->is_plugin() - && property_exists( $upgrader, 'skin' ) - && property_exists( $upgrader->skin, 'plugin_info' ) - && $upgrader->skin->plugin_info['Name'] === $product->get_name() ) { - $should_block = true; - } - if ( $should_block ) { - echo( sprintf( - '%s update requires a newer version of %s. Please %supdate%s %s %s.', - esc_attr( $product->get_friendly_name() ), - esc_attr( $requirement->get_friendly_name() ), - '', - '', - esc_attr( $requirement->get_friendly_name() ), - esc_attr( $requirement->is_theme() ? 'theme' : 'plugin' ) - ) ); - $upgrader->maintenance_mode( false ); - die(); - } - - return $return; - }, - 10, - 3 - ); - - add_action( - 'admin_notices', - function () use ( $product, $requirement ) { - echo '

'; - echo( sprintf( - '%s requires a newer version of %s. Please %supdate%s %s %s to the latest version.', - '' . esc_attr( $product->get_friendly_name() ) . '', - '' . esc_attr( $requirement->get_friendly_name() ) . '', - '', - '', - '' . esc_attr( $requirement->get_friendly_name() ) . '', - esc_attr( $requirement->is_theme() ? 'theme' : 'plugin' ) - ) ); - echo '

'; - } - ); - - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php deleted file mode 100644 index 89eb28c..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php +++ /dev/null @@ -1,504 +0,0 @@ -is_from_partner( $product ) ) { - return false; - } - - if ( ! apply_filters( $product->get_slug() . '_load_dashboard_widget', true ) ) { - return false; - } - - return true; - } - - /** - * Registers the hooks. - * - * @param Product $product Product to load. - * - * @return Dashboard_Widget Module instance. - */ - public function load( $product ) { - if ( apply_filters( 'themeisle_sdk_hide_dashboard_widget', false ) ) { - return; - } - $this->product = $product; - $this->dashboard_name = apply_filters( 'themeisle_sdk_dashboard_widget_name', 'WordPress Guides/Tutorials' ); - $this->feeds = apply_filters( - 'themeisle_sdk_dashboard_widget_feeds', - [ - 'https://themeisle.com/blog/feed', - 'https://www.codeinwp.com/blog/feed', - 'https://wpshout.com/feed', - ] - ); - add_action( 'wp_dashboard_setup', array( &$this, 'add_widget' ) ); - add_action( 'wp_network_dashboard_setup', array( &$this, 'add_widget' ) ); - add_filter( 'themeisle_sdk_recommend_plugin_or_theme', array( &$this, 'recommend_plugin_or_theme' ) ); - - return $this; - } - - - /** - * Add widget to the dashboard - * - * @return string|void - */ - public function add_widget() { - global $wp_meta_boxes; - if ( isset( $wp_meta_boxes['dashboard']['normal']['core']['themeisle'] ) ) { - return; - } - wp_add_dashboard_widget( - 'themeisle', - $this->dashboard_name, - [ - $this, - 'render_dashboard_widget', - ] - ); - } - - /** - * Render widget content - */ - public function render_dashboard_widget() { - $this->setup_feeds(); - if ( empty( $this->items ) || ! is_array( $this->items ) ) { - return; - } - ?> - - product ); ?> - -
    - items as $item ) { - ?> -
  • - - - -
  • - -
- $recommend['slug'], - ], - network_admin_url( 'theme-install.php' ) - ); - - if ( 'plugin' === $type ) { - - $url = add_query_arg( - array( - 'tab' => 'plugin-information', - 'plugin' => $recommend['slug'], - ), - network_admin_url( 'plugin-install.php' ) - ); - } - ?> - - - feeds; - add_action( - 'wp_feed_options', - function ( $feed, $url ) use ( $sdk_feeds ) { - if ( defined( 'TI_SDK_PHPUNIT' ) && true === TI_SDK_PHPUNIT ) { - return; - } - - if ( ! is_string( $url ) && in_array( $url, $sdk_feeds, true ) ) { - $feed->force_feed( false ); - return; - } - if ( is_array( $url ) ) { - foreach ( $url as $feed_url ) { - if ( in_array( $feed_url, $sdk_feeds, true ) ) { - $feed->force_feed( false ); - return; - } - } - } - }, - PHP_INT_MAX, - 2 - ); - // Load SimplePie Instance. - $feed = fetch_feed( $sdk_feeds ); - // TODO report error when is an error loading the feed. - if ( is_wp_error( $feed ) ) { - return; - } - - $items = $feed->get_items( 0, 5 ); - $items = is_array( $items ) ? $items : []; - - $items_normalized = []; - - foreach ( $items as $item ) { - $items_normalized[] = array( - 'title' => $item->get_title(), - 'date' => $item->get_date( 'U' ), - 'link' => $item->get_permalink(), - ); - } - set_transient( 'themeisle_sdk_feed_items', $items_normalized, 48 * HOUR_IN_SECONDS ); - } - $this->items = $items_normalized; - } - - /** - * Either the current product is installed or not. - * - * @param array $val The current recommended product. - * - * @return bool Either we should exclude the plugin or not. - */ - public function remove_current_products( $val ) { - if ( 'theme' === $val['type'] ) { - $exist = wp_get_theme( $val['slug'] ); - - return ! $exist->exists(); - } else { - $all_plugins = array_keys( get_plugins() ); - foreach ( $all_plugins as $slug ) { - if ( strpos( $slug, $val['slug'] ) !== false ) { - return false; - } - } - - return true; - } - } - - /** - * Contact the API and fetch the recommended plugins/themes - */ - public function recommend_plugin_or_theme() { - $products = $this->get_product_from_api(); - if ( ! is_array( $products ) ) { - $products = array(); - } - $products = array_filter( $products, array( $this, 'remove_current_products' ) ); - $products = array_merge( $products ); - if ( count( $products ) > 1 ) { - shuffle( $products ); - $products = array_slice( $products, 0, 1 ); - } - $to_recommend = isset( $products[0] ) ? $products[0] : $products; - - return $to_recommend; - } - - /** - * Fetch products from the recomended section. - * - * @return array|mixed The list of products to use in recomended section. - */ - public function get_product_from_api() { - if ( false === ( $products = get_transient( 'themeisle_sdk_products' ) ) ) { //phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure - $products = array(); - $all_themes = $this->get_themes_from_wporg( 'themeisle' ); - $all_plugins = $this->get_plugins_from_wporg( 'themeisle' ); - static $allowed_products = [ - 'hestia' => true, - 'neve' => true, - 'visualizer' => true, - 'feedzy-rss-feeds' => true, - 'wp-product-review' => true, - 'otter-blocks' => true, - 'themeisle-companion' => true, - ]; - foreach ( $all_themes as $theme ) { - if ( $theme->active_installs < 4999 ) { - continue; - } - if ( ! isset( $allowed_products[ $theme->slug ] ) ) { - continue; - } - $products[] = array( - 'name' => $theme->name, - 'type' => 'theme', - 'slug' => $theme->slug, - 'installs' => $theme->active_installs, - ); - } - foreach ( $all_plugins as $plugin ) { - if ( $plugin->active_installs < 4999 ) { - continue; - } - if ( ! isset( $allowed_products[ $plugin->slug ] ) ) { - continue; - } - $products[] = array( - 'name' => $plugin->name, - 'type' => 'plugin', - 'slug' => $plugin->slug, - 'installs' => $plugin->active_installs, - ); - } - set_transient( 'themeisle_sdk_products', $products, 6 * HOUR_IN_SECONDS ); - } - - return $products; - } - - /** - * Fetch themes from wporg api. - * - * @param string $author The author name. - * - * @return array The list of themes. - */ - public function get_themes_from_wporg( $author ) { - $products = $this->safe_get( - 'https://api.wordpress.org/themes/info/1.1/?action=query_themes&request[author]=' . $author . '&request[per_page]=30&request[fields][active_installs]=true' - ); - $products = json_decode( wp_remote_retrieve_body( $products ) ); - if ( is_object( $products ) ) { - $products = isset( $products->themes ) ? $products->themes : array(); - } else { - $products = array(); - } - - return (array) $products; - } - - /** - * Fetch plugin from wporg api. - * - * @param string $author The author slug. - * - * @return array The list of plugins for the selected author. - */ - public function get_plugins_from_wporg( $author ) { - $products = $this->safe_get( - 'https://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[author]=' . $author . '&request[per_page]=40&request[fields][active_installs]=true' - ); - $products = json_decode( wp_remote_retrieve_body( $products ) ); - if ( is_object( $products ) ) { - $products = isset( $products->plugins ) ? $products->plugins : array(); - } else { - $products = array(); - } - - return (array) $products; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php deleted file mode 100644 index d5ed07d..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php +++ /dev/null @@ -1,1172 +0,0 @@ -themes->{$this->product->get_slug()} ); - - // Encode the updated JSON response. - $r['body']['themes'] = wp_json_encode( $themes ); - - return $r; - } - - /** - * Register the setting for the license of the product. - * - * @return bool - */ - public function register_settings() { - if ( ! is_admin() ) { - return false; - } - if ( apply_filters( $this->product->get_key() . '_hide_license_field', false ) ) { - return; - } - add_settings_field( - $this->product->get_key() . '_license', - $this->product->get_name() . ' license', - array( $this, 'license_view' ), - 'general' - ); - } - - /** - * The license view field. - */ - public function license_view() { - $status = $this->get_license_status(); - $value = $this->license_key; - - $activate_string = apply_filters( $this->product->get_key() . '_lc_activate_string', 'Activate' ); - $deactivate_string = apply_filters( $this->product->get_key() . '_lc_deactivate_string', 'Deactivate' ); - $valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' ); - $invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' ); - $license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' ); - $error_message = $this->get_error(); - ?> - - %s%s   

%s

%s', - ( ( 'valid' === $status ) ? sprintf( '', esc_attr( $value ), esc_attr( $this->product->get_key() ) ) : '' ), - ( ( 'valid' === $status ) ? 'themeisle-sdk-text-input-valid' : '' ), - esc_attr( $this->product->get_key() ), - esc_attr( ( ( 'valid' === $status ) ? $this->product->get_key() . '_mask' : $this->product->get_key() ) ), - esc_attr( ( ( 'valid' === $status ) ? ( str_repeat( '*', 30 ) . substr( $value, - 5 ) ) : $value ) ), - esc_attr( ( 'valid' === $status ? 'themeisle-sdk-license-deactivate-cta' : 'themeisle-sdk-license-activate-cta' ) ), - esc_attr( 'valid' === $status ? $valid_string : $invalid_string ), - esc_attr( $this->product->get_key() ), - esc_attr( 'valid' === $status ? $deactivate_string : $activate_string ), - sprintf( wp_kses_data( $license_message ), '' . esc_attr( $this->get_distributor_name() ) . ' ', esc_attr( $this->product->get_type() ) ), - wp_kses_data( empty( $error_message ) ? '' : sprintf( '

%s

', ( $error_message ) ) ) - ) . wp_nonce_field( $this->product->get_key() . 'nonce', $this->product->get_key() . 'nonce_field', false, false );//phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - - } - - /** - * Return the license status. - * - * @param bool $check_expiration Should check if license is valid, but expired. - * - * @return string The License status. - */ - public function get_license_status( $check_expiration = false ) { - - $license_data = get_option( $this->product->get_key() . '_license_data', '' ); - - if ( '' === $license_data ) { - return get_option( $this->product->get_key() . '_license_status', 'not_active' ); - } - $status = isset( $license_data->license ) ? $license_data->license : get_option( $this->product->get_key() . '_license_status', 'not_active' ); - if ( false === $check_expiration ) { - return $status; - } - - return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status; - } - - /** - * Check status. - * - * @param string $product_file Product basefile. - * - * @return string Status license. - */ - public static function status( $product_file ) { - $product = Product::get( $product_file ); - if ( ! $product->requires_license() ) { - return self::STATUS_VALID; - } - $license_data = self::get_license_data( $product->get_key() ); - - $status = isset( $license_data->license ) ? $license_data->license : self::STATUS_NOT_ACTIVE; - - return ( 'valid' === $status && isset( $license_data->is_expired ) && 'yes' === $license_data->is_expired ) ? 'active_expired' : $status; - } - - /** - * Product license data. - * - * @param string $key Product key. - * - * @return false|mixed|null - */ - private static function get_license_data( $key ) { - $license_data = get_option( $key . '_license_data', '' ); - - return isset( $license_data->license ) ? $license_data : false; - } - - /** - * Get license hash. - * - * @param string $key Product key. - * - * @return bool|string - */ - public static function create_license_hash( $key ) { - $data = self::get_license_data( $key ); - - if ( ! $data ) { - return false; - } - - return isset( $data->key ) ? wp_hash( $data->key ) : false; - } - - /** - * Check if license is valid. - * - * @param string $product_file Product basefile. - * - * @return bool Is valid? - */ - public static function is_valid( $product_file ) { - return self::status( $product_file ) === self::STATUS_VALID; - } - - /** - * Get product plan. - * - * @param string $product_file Product file. - * - * @return int Plan id. - */ - public static function plan( $product_file ) { - $product = Product::get( $product_file ); - $data = self::get_license_data( $product->get_key() ); - - return isset( $data->price_id ) ? (int) $data->price_id : - 1; - } - - /** - * Get product license key. - * - * @param string $product_file Product file. - * - * @return string - */ - public static function key( $product_file ) { - $product = Product::get( $product_file ); - - return $product->get_license(); - } - - /** - * Return the last error message. - * - * @return mixed Error message. - */ - public function get_error() { - return get_transient( $this->product->get_key() . 'act_err' ); - } - - /** - * Get remote api url. - * - * @return string Remote api url. - */ - public function get_api_url() { - if ( $this->is_from_partner( $this->product ) ) { - return 'https://themeisle.com'; - } - - return $this->product->get_store_url(); - } - - /** - * Get remote api url. - * - * @return string Remote api url. - */ - public function get_distributor_name() { - if ( $this->is_from_partner( $this->product ) ) { - return 'Themeisle'; - } - - return $this->product->get_store_name(); - } - - /** - * License price id. - * - * @return int License plan. - */ - public function get_plan() { - return self::plan( $this->product->get_basefile() ); - } - - /** - * Show the admin notice regarding the license status. - * - * @return bool Should we show the notice ? - */ - public function show_notice() { - if ( ! is_admin() ) { - return false; - } - - if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) { - return false; - } - - $status = $this->get_license_status( true ); - $no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No more activations left for %s. You need to upgrade your plan in order to use %s on more websites. If you need assistance, please get in touch with %s staff.' ); - $no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your purchase history and validate it here. ' ); - $expired_license_string = apply_filters( $this->product->get_key() . '_lc_expired_string', 'Your %s\'s License Key has expired. In order to continue receiving support and software updates you must renew your license key.' ); - // No activations left for this license. - if ( 'valid' != $status && $this->check_activation() ) { - ?> -
-

- product->get_name() ), - esc_attr( $this->product->get_name() ), - '' . esc_attr( $this->get_distributor_name() ) . '' - ); - ?> - -

-
- -
-

- product->get_name() . ' ' . $this->product->get_type() ), esc_url( $this->get_api_url() . '?license=' . $this->license_key ) ); ?> -

-
- -
-

- product->get_name() . ' ' . $this->product->get_type() ), esc_url( $this->get_api_url() ), esc_url( admin_url( 'options-general.php' ) . '#' . $this->product->get_key() . '_license' ) ); ?> -

-
- product->get_key() . '_license_data', '' ); - if ( '' === $license_data ) { - return false; - } - - return isset( $license_data->license ) ? ( 'no_activations_left' == $license_data->license ) : false; - - } - - /** - * Check if the license is about to expire in the next month. - * - * @return bool - */ - public function check_expiration() { - $license_data = get_option( $this->product->get_key() . '_license_data', '' ); - if ( '' === $license_data ) { - return false; - } - if ( ! isset( $license_data->expires ) ) { - return false; - } - if ( strtotime( $license_data->expires ) - time() > 30 * 24 * 3600 ) { - return false; - } - - return true; - } - - /** - * Return the renew url from the store used. - * - * @return string The renew url. - */ - public function renew_url() { - $license_data = get_option( $this->product->get_key() . '_license_data', '' ); - if ( '' === $license_data ) { - return $this->get_api_url(); - } - if ( ! isset( $license_data->download_id ) || ! isset( $license_data->key ) ) { - return $this->get_api_url(); - } - - return trim( $this->get_api_url(), '/' ) . '/checkout/?edd_license_key=' . $license_data->key . '&download_id=' . $license_data->download_id; - } - - /** - * Run the license check call. - */ - public function product_valid() { - if ( false !== ( $license = get_transient( $this->product->get_key() . '_license_data' ) ) ) { //phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure - return; - } - $license = $this->check_license(); - set_transient( $this->product->get_key() . '_license_data', $license, 12 * HOUR_IN_SECONDS ); - update_option( $this->product->get_key() . '_license_data', $license ); - } - - /** - * Check the license status. - * - * @return object The license data. - */ - public function check_license() { - $status = $this->get_license_status(); - if ( 'not_active' === $status ) { - $license_data = new \stdClass(); - $license_data->license = 'not_active'; - - return $license_data; - } - $license = trim( $this->license_key ); - - $response = $this->do_license_process( $license, 'check' ); - - if ( is_wp_error( $response ) ) { - $license_data = new \stdClass(); - $license_data->license = 'invalid'; - } else { - $license_data = $response; - } - - $license_old = get_option( $this->product->get_key() . '_license_data', '' ); - if ( 'valid' === $license_old->license && ( $license_data->license !== $license_old->license ) && $this->failed_checks <= self::$max_failed ) { - $this->increment_failed_checks(); - - return $license_old; - } - - if ( ! isset( $license_data->key ) ) { - $license_data->key = isset( $license_old->key ) ? $license_old->key : ''; - } - $this->reset_failed_checks(); - - return $license_data; - - } - - /** - * Do license activation/deactivation. - * - * @param string $license License key. - * @param string $action What do to. - * - * @return bool|\WP_Error - */ - public function do_license_process( $license, $action = 'toggle' ) { - if ( strlen( $license ) < 10 ) { - return new \WP_Error( 'themeisle-license-invalid-format', 'Invalid license.' ); - } - $status = $this->get_license_status(); - - if ( 'valid' === $status && 'activate' === $action ) { - return new \WP_Error( 'themeisle-license-already-active', 'License is already active.' ); - } - if ( 'valid' !== $status && 'deactivate' === $action ) { - return new \WP_Error( 'themeisle-license-already-deactivate', 'License not active.' ); - } - - if ( 'toggle' === $action ) { - $action = ( 'valid' !== $status ? ( 'activate' ) : ( 'deactivate' ) ); - } - - // Call the custom API. - if ( 'check' === $action ) { - $response = $this->safe_get( sprintf( '%slicense/check/%s/%s/%s/%s', Product::API_URL, rawurlencode( $this->product->get_name() ), $license, rawurlencode( home_url() ), Loader::get_cache_token() ) ); - } else { - $response = wp_remote_post( - sprintf( '%slicense/%s/%s/%s', Product::API_URL, $action, rawurlencode( $this->product->get_name() ), $license ), - array( - 'body' => wp_json_encode( - array( - 'url' => rawurlencode( home_url() ), - ) - ), - 'headers' => array( - 'Content-Type' => 'application/json', - ), - ) - ); - } - - // make sure the response came back okay. - if ( is_wp_error( $response ) ) { - return new \WP_Error( 'themeisle-license-500', sprintf( 'ERROR: Failed to connect to the license service. Please try again later. Reason: %s', $response->get_error_message() ) ); - } - - $license_data = json_decode( wp_remote_retrieve_body( $response ) ); - - if ( ! is_object( $license_data ) ) { - return new \WP_Error( 'themeisle-license-404', 'ERROR: Failed to validate license. Please try again in one minute.' ); - } - if ( 'check' === $action ) { - return $license_data; - } - - Loader::clear_cache_token(); - - if ( ! isset( $license_data->license ) ) { - $license_data->license = 'invalid'; - } - - if ( ! isset( $license_data->key ) ) { - $license_data->key = $license; - } - if ( 'valid' === $license_data->license ) { - $this->reset_failed_checks(); - } - - if ( 'deactivate' === $action ) { - - delete_option( $this->product->get_key() . '_license_data' ); - delete_option( $this->product->get_key() . '_license_plan' ); - delete_transient( $this->product->get_key() . '_license_data' ); - - return true; - } - if ( isset( $license_data->plan ) ) { - update_option( $this->product->get_key() . '_license_plan', $license_data->plan ); - } - update_option( $this->product->get_key() . '_license_data', $license_data ); - set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS ); - if ( 'activate' === $action && 'valid' !== $license_data->license ) { - return new \WP_Error( 'themeisle-license-invalid', 'ERROR: Invalid license provided.' ); - } - - // Remove the versions transient upon activation so that newer version for rollback can be acquired. - $versions_cache = $this->product->get_cache_key(); - delete_transient( $versions_cache ); - - return true; - } - - /** - * Reset the failed checks - */ - private function reset_failed_checks() { - $this->failed_checks = 1; - update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks ); - } - - /** - * Increment the failed checks. - */ - private function increment_failed_checks() { - $this->failed_checks ++; - update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks ); - } - - /** - * Activate the license remotely. - */ - public function process_license() { - // listen for our activate button to be clicked. - if ( ! isset( $_POST[ $this->product->get_key() . '_btn_trigger' ] ) ) { - return; - } - if ( ! isset( $_POST[ $this->product->get_key() . 'nonce_field' ] ) - || ! wp_verify_nonce( $_POST[ $this->product->get_key() . 'nonce_field' ], $this->product->get_key() . 'nonce' ) //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized - ) { - return; - } - if ( ! current_user_can( 'manage_options' ) ) { - return; - } - $license = isset( $_POST[ $this->product->get_key() . '_license' ] ) - ? sanitize_text_field( $_POST[ $this->product->get_key() . '_license' ] ) - : ''; - - $response = $this->do_license_process( $license, 'toggle' ); - if ( is_wp_error( $response ) ) { - $this->set_error( $response->get_error_message() ); - - return; - } - if ( true === $response ) { - $this->set_error( '' ); - } - } - - /** - * Set license validation error message. - * - * @param string $message Error message. - */ - public function set_error( $message = '' ) { - set_transient( $this->product->get_key() . 'act_err', $message, MINUTE_IN_SECONDS ); - - } - - /** - * Load the Themes screen. - */ - public function load_themes_screen() { - add_thickbox(); - add_action( 'admin_notices', array( &$this, 'update_nag' ) ); - } - - /** - * Alter the nag for themes update. - */ - public function update_nag() { - $theme = wp_get_theme( $this->product->get_slug() ); - $api_response = get_transient( $this->product_key ); - if ( false === $api_response || ! isset( $api_response->new_version ) ) { - return; - } - $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() ); - $update_message = apply_filters( 'themeisle_sdk_license_update_message', 'Updating this theme will lose any customizations you have made. Cancel to stop, OK to update.' ); - $update_onclick = ' onclick="if ( confirm(\'' . esc_js( $update_message ) . '\') ) {return true;}return false;"'; - if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) { - echo '
'; - printf( - '%1$s %2$s is available. Check out what\'s new or update now.', - esc_attr( $theme->get( 'Name' ) ), - esc_attr( $api_response->new_version ), - esc_url( sprintf( '%s&TB_iframe=true&width=1024&height=800', $this->product->get_changelog() ) ), - esc_attr( $theme->get( 'Name' ) ), - esc_url( $update_url ), - $update_onclick // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, Already escaped. - ); - echo '
'; - echo ''; - } - } - - /** - * Alter update transient. - * - * @param mixed $value The transient data. - * - * @return mixed - */ - public function theme_update_transient( $value ) { - $update_data = $this->check_for_update(); - if ( empty( $value ) ) { - return $value; - } - - if ( ! isset( $value->response ) ) { - return $value; - } - - if ( ! $update_data ) { - return $value; - } - - $value->response[ $this->product->get_slug() ] = $update_data; - return $value; - } - - /** - * Check for updates - * - * @return array|bool Either the update data or false in case of failure. - */ - public function check_for_update() { - $update_data = get_transient( $this->product_key ); - - if ( false === $update_data ) { - $failed = false; - $update_data = $this->get_version_data(); - if ( empty( $update_data ) ) { - $failed = true; - } - // If the response failed, try again in 30 minutes. - if ( $failed ) { - $data = new \stdClass(); - $data->new_version = $this->product->get_version(); - set_transient( $this->product_key, $data, 30 * MINUTE_IN_SECONDS ); - - return false; - } - $update_data->sections = isset( $update_data->sections ) ? maybe_unserialize( $update_data->sections ) : null; - - set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS ); - } - if ( ! isset( $update_data->new_version ) ) { - return false; - } - if ( version_compare( $this->product->get_version(), $update_data->new_version, '>=' ) ) { - return false; - } - - return (array) $update_data; - } - - /** - * Check remote api for latest version. - * - * @return bool|mixed Update api response. - */ - private function get_version_data() { - - $response = $this->safe_get( - sprintf( - '%slicense/version/%s/%s/%s/%s', - Product::API_URL, - rawurlencode( $this->product->get_name() ), - ( empty( $this->license_key ) ? 'free' : $this->license_key ), - $this->product->get_version(), - rawurlencode( home_url() ) - ), - array( - 'timeout' => 15, //phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout, Inherited by wp_remote_get only, for vip environment we use defaults. - 'sslverify' => false, - ) - ); - if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { - return false; - } - $update_data = json_decode( wp_remote_retrieve_body( $response ) ); - if ( ! is_object( $update_data ) ) { - return false; - } - if ( isset( $update_data->slug ) ) { - $update_data->slug = $this->product->get_slug(); - } - if ( isset( $update_data->icons ) ) { - $update_data->icons = (array) $update_data->icons; - } - if ( isset( $update_data->banners ) ) { - $update_data->banners = (array) $update_data->banners; - } - - return $update_data; - } - - /** - * Delete the update transient - */ - public function delete_theme_update_transient() { - return delete_transient( $this->product_key ); - } - - /** - * Check for Updates at the defined API endpoint and modify the update array. - * - * @param array $_transient_data Update array build by WordPress. - * - * @return mixed Modified update array with custom plugin data. - */ - public function pre_set_site_transient_update_plugins_filter( $_transient_data ) { - if ( empty( $_transient_data ) || ! $this->do_check ) { - $this->do_check = true; - - return $_transient_data; - } - $api_response = $this->api_request(); - if ( false !== $api_response && is_object( $api_response ) && isset( $api_response->new_version ) ) { - if ( ! isset( $api_response->plugin ) ) { - $api_response->plugin = $this->product->get_slug() . '/' . $this->product->get_file(); - } - if ( version_compare( $this->product->get_version(), $api_response->new_version, '<' ) ) { - $_transient_data->response[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response; - } else { - $_transient_data->no_update[ $this->product->get_slug() . '/' . $this->product->get_file() ] = $api_response; - } - } - - return $_transient_data; - } - - /** - * Calls the API and, if successfull, returns the object delivered by the API. - * - * @param string $_action The requested action. - * @param array $_data Parameters for the API action. - * - * @return false||object - */ - private function api_request( $_action = '', $_data = '' ) { - $update_data = $this->get_version_data(); - if ( empty( $update_data ) ) { - return false; - } - if ( $update_data && isset( $update_data->sections ) ) { - $update_data->sections = maybe_unserialize( $update_data->sections ); - } - - return $update_data; - } - - /** - * Updates information on the "View version x.x details" page with custom data. - * - * @param mixed $_data Plugin data. - * @param string $_action Action to send. - * @param object $_args Arguments to use. - * - * @return object $_data - */ - public function plugins_api_filter( $_data, $_action = '', $_args = null ) { - if ( ( 'plugin_information' !== $_action ) || ! isset( $_args->slug ) || ( $_args->slug !== $this->product->get_slug() ) ) { - return $_data; - } - $api_response = $this->api_request(); - if ( false !== $api_response ) { - $_data = $api_response; - } - - return $_data; - } - - /** - * Disable SSL verification in order to prevent download update failures. - * - * @param array $args Http args. - * @param string $url Url to check. - * - * @return array $array - */ - public function http_request_args( $args, $url ) { - // If it is an https request and we are performing a package download, disable ssl verification. - if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) { - $args['sslverify'] = false; - } - - return $args; - } - - /** - * Check if we should load the module for this product. - * - * @param Product $product Product data. - * - * @return bool Should we load the module? - */ - public function can_load( $product ) { - - if ( $product->is_wordpress_available() ) { - return false; - } - - return ( apply_filters( $product->get_key() . '_enable_licenser', true ) === true ); - - } - - /** - * Load module logic. - * - * @param Product $product Product to load the module for. - * - * @return Licenser Module object. - */ - public function load( $product ) { - $this->product = $product; - - $this->product_key = $this->product->get_key() . '-update-response'; - - $this->license_key = $this->product->get_license(); - if ( $this->product->requires_license() ) { - $this->failed_checks = intval( get_option( $this->product->get_key() . '_failed_checks', 0 ) ); - $this->register_license_hooks(); - } - if ( ! self::$globals_loaded ) { - add_filter( 'themeisle_sdk_license/status', [ __CLASS__, 'status' ], 999, 1 ); - add_filter( 'themeisle_sdk_license/is-valid', [ __CLASS__, 'is_valid' ], 999, 1 ); - add_filter( 'themeisle_sdk_license/plan', [ __CLASS__, 'plan' ], 999, 1 ); - add_filter( 'themeisle_sdk_license/key', [ __CLASS__, 'key' ], 999, 1 ); - $globals_loaded = true; - } - $namespace = apply_filters( 'themesle_sdk_namespace_' . md5( $product->get_basefile() ), false ); - - if ( false !== $namespace ) { - $this->namespace = $namespace; - add_filter( 'themeisle_sdk_license_process_' . $namespace, [ $this, 'do_license_process' ], 10, 2 ); - add_filter( 'product_' . $namespace . '_license_status', [ $this, 'get_license_status' ], PHP_INT_MAX ); - add_filter( 'product_' . $namespace . '_license_key', [ $this->product, 'get_license' ] ); - add_filter( 'product_' . $namespace . '_license_plan', [ $this, 'get_plan' ], PHP_INT_MAX ); - if ( defined( 'WP_CLI' ) && WP_CLI ) { - \WP_CLI::add_command( $namespace . ' activate', [ $this, 'cli_activate' ] ); - \WP_CLI::add_command( $namespace . ' deactivate', [ $this, 'cli_deactivate' ] ); - \WP_CLI::add_command( $namespace . ' is-active', [ $this, 'cli_is_active' ] ); - } - } - - add_action( 'admin_head', [ $this, 'auto_activate' ] ); - if ( $this->product->is_plugin() ) { - add_filter( - 'pre_set_site_transient_update_plugins', - [ - $this, - 'pre_set_site_transient_update_plugins_filter', - ] - ); - add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 ); - add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 ); //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args - if ( ! self::is_valid( $product->get_basefile() ) ) { - add_filter( - 'plugin_action_links_' . plugin_basename( $product->get_basefile() ), - function ( $actions ) { - if ( $this->get_license_status( true ) !== self::STATUS_ACTIVE_EXPIRED ) { - return $actions; - } - $new_actions['deactivate'] = $actions['deactivate']; - $new_actions['renew_link'] = 'Renew license to update'; - - return $new_actions; - } - ); - } - - return $this; - } - if ( $this->product->is_theme() ) { - add_filter( 'site_transient_update_themes', array( &$this, 'theme_update_transient' ) ); - add_action( 'delete_site_transient_update_themes', array( &$this, 'delete_theme_update_transient' ) ); - add_action( 'load-update-core.php', array( &$this, 'delete_theme_update_transient' ) ); - add_action( 'load-themes.php', array( &$this, 'delete_theme_update_transient' ) ); - add_action( 'load-themes.php', array( &$this, 'load_themes_screen' ) ); - add_filter( 'http_request_args', array( $this, 'disable_wporg_update' ), 5, 2 ); //phpcs:ignore WordPressVIPMinimum.Hooks.RestrictedHooks.http_request_args - - return $this; - - } - - return $this; - } - - /** - * Register license fields for the products. - */ - public function register_license_hooks() { - add_action( 'admin_init', array( $this, 'register_settings' ) ); - add_action( 'admin_init', array( $this, 'process_license' ) ); - add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 ); - add_action( 'admin_notices', array( $this, 'show_notice' ) ); - add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) ); - } - - /** - * Check license on filesystem. - * - * @return mixed License key. - */ - public function get_file_license() { - - $license_file = dirname( $this->product->get_basefile() ) . '/license.json'; - - global $wp_filesystem; - if ( ! is_file( $license_file ) ) { - return false; - } - - require_once ABSPATH . '/wp-admin/includes/file.php'; - \WP_Filesystem(); - $content = json_decode( $wp_filesystem->get_contents( $license_file ) ); - if ( ! is_object( $content ) ) { - return false; - } - if ( ! isset( $content->key ) ) { - return false; - } - return $content->key; - } - /** - * Run license activation on plugin activate. - */ - public function auto_activate() { - $status = $this->get_license_status(); - if ( 'not_active' !== $status ) { - return false; - } - - if ( ! empty( $this->namespace ) ) { - $license_key = apply_filters( 'product_' . $this->namespace . '_license_key_constant', '' ); - } - - if ( empty( $license_key ) ) { - $license_key = $this->get_file_license(); - } - if ( empty( $license_key ) ) { - return; - } - - - $this->license_local = $license_key; - $lock_key = $this->product->get_key() . '_autoactivated'; - - if ( 'yes' === get_option( $lock_key, '' ) ) { - return; - } - if ( 'yes' === get_transient( $lock_key ) ) { - return; - } - $response = $this->do_license_process( $license_key, 'activate' ); - - set_transient( $lock_key, 'yes', 6 * HOUR_IN_SECONDS ); - - if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) { - return; - } - - if ( true === $response ) { - add_action( 'admin_notices', [ $this, 'autoactivate_notice' ] ); - } - } - - /** - * Show auto-activate notice. - */ - public function autoactivate_notice() { - ?> -
-

%s has been successfully activated using %s license !', esc_attr( $this->product->get_name() ), esc_attr( str_repeat( '*', 20 ) . substr( $this->license_local, - 10 ) ) ); ?>

-
- ] - * : Product license key. - */ - public function cli_activate( $args ) { - $license_key = isset( $args[0] ) ? trim( $args[0] ) : ''; - $response = $this->do_license_process( $license_key, 'activate' ); - if ( true !== $response ) { - \WP_CLI::error( $response->get_error_message() ); - - return; - } - - \WP_CLI::success( 'Product successfully activated.' ); - } - - /** - * Deactivate product license on this site. - * - * @param array $args Command args. - * - * ## OPTIONS - * - * [] - * : Product license key. - */ - public function cli_deactivate( $args ) { - $license_key = isset( $args[0] ) ? trim( $args[0] ) : ''; - $response = $this->do_license_process( $license_key, 'deactivate' ); - if ( true !== $response ) { - \WP_CLI::error( $response->get_error_message() ); - - return; - } - - \WP_CLI::success( 'Product successfully deactivated.' ); - } - - /** - * Checks if product has license activated. - * - * @param array $args Command args. - * - * @subcommand is-active - */ - public function cli_is_active( $args ) { - - $status = $this->get_license_status(); - if ( 'valid' === $status ) { - \WP_CLI::halt( 0 ); - - return; - } - - \WP_CLI::halt( 1 ); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Logger.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Logger.php deleted file mode 100644 index 919cd4f..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Logger.php +++ /dev/null @@ -1,279 +0,0 @@ -get_slug() . '_sdk_enable_logger', true ); - } - - /** - * Load module logic. - * - * @param Product $product Product to load. - * - * @return Logger Module object. - */ - public function load( $product ) { - $this->product = $product; - $this->setup_notification(); - $this->setup_actions(); - return $this; - } - - /** - * Setup notification on admin. - */ - public function setup_notification() { - if ( ! $this->product->is_wordpress_available() ) { - return; - } - - add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] ); - - } - - /** - * Setup tracking actions. - */ - public function setup_actions() { - if ( ! $this->is_logger_active() ) { - return; - } - - $can_load_telemetry = apply_filters( 'themeisle_sdk_enable_telemetry', false ); - - if ( $can_load_telemetry ) { - add_action( 'admin_enqueue_scripts', array( $this, 'load_telemetry' ) ); - } - - $action_key = $this->product->get_key() . '_log_activity'; - if ( ! wp_next_scheduled( $action_key ) ) { - wp_schedule_single_event( time() + ( wp_rand( 1, 24 ) * 3600 ), $action_key ); - } - add_action( $action_key, array( $this, 'send_log' ) ); - } - - /** - * Check if the logger is active. - * - * @return bool Is logger active? - */ - private function is_logger_active() { - $default = 'no'; - - if ( ! $this->product->is_wordpress_available() ) { - $default = 'yes'; - } else { - $pro_slug = $this->product->get_pro_slug(); - - if ( ! empty( $pro_slug ) ) { - $all_products = Loader::get_products(); - if ( isset( $all_products[ $pro_slug ] ) ) { - $default = 'yes'; - } - } - } - - return ( get_option( $this->product->get_key() . '_logger_flag', $default ) === 'yes' ); - } - - /** - * Add notification to queue. - * - * @param array $all_notifications Previous notification. - * - * @return array All notifications. - */ - public function add_notification( $all_notifications ) { - - $message = apply_filters( $this->product->get_key() . '_logger_heading', 'Do you enjoy {product}? Become a contributor by opting in to our anonymous data tracking. We guarantee no sensitive data is collected.' ); - - $message = str_replace( - array( '{product}' ), - $this->product->get_friendly_name(), - $message - ); - $button_submit = apply_filters( $this->product->get_key() . '_logger_button_submit', 'Sure, I would love to help.' ); - $button_cancel = apply_filters( $this->product->get_key() . '_logger_button_cancel', 'No, thanks.' ); - - $all_notifications[] = [ - 'id' => $this->product->get_key() . '_logger_flag', - 'message' => $message, - 'ctas' => [ - 'confirm' => [ - 'link' => '#', - 'text' => $button_submit, - ], - 'cancel' => [ - 'link' => '#', - 'text' => $button_cancel, - ], - ], - ]; - - return $all_notifications; - } - - /** - * Send the statistics to the api endpoint. - */ - public function send_log() { - $environment = array(); - $theme = wp_get_theme(); - $environment['theme'] = array(); - $environment['theme']['name'] = $theme->get( 'Name' ); - $environment['theme']['author'] = $theme->get( 'Author' ); - $environment['theme']['parent'] = $theme->parent() !== false ? $theme->parent()->get( 'Name' ) : $theme->get( 'Name' ); - $environment['plugins'] = get_option( 'active_plugins' ); - global $wp_version; - wp_remote_post( - self::TRACKING_ENDPOINT, - array( - 'method' => 'POST', - 'timeout' => 3, - 'redirection' => 5, - 'body' => array( - 'site' => get_site_url(), - 'slug' => $this->product->get_slug(), - 'version' => $this->product->get_version(), - 'wp_version' => $wp_version, - 'locale' => get_locale(), - 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ), - 'environment' => $environment, - 'license' => apply_filters( $this->product->get_key() . '_license_status', '' ), - ), - ) - ); - } - - /** - * Load telemetry. - * - * @return void - */ - public function load_telemetry() { - // See which products have telemetry enabled. - try { - $products_with_telemetry = array(); - $all_products = Loader::get_products(); - $all_products[ $this->product->get_slug() ] = $this->product; // Add current product to the list of products to check for telemetry. - - foreach ( $all_products as $product_slug => $product ) { - - // Ignore pro products. - if ( false !== strstr( $product_slug, 'pro' ) ) { - continue; - } - - $default = 'no'; - - if ( ! $product->is_wordpress_available() ) { - $default = 'yes'; - } else { - $pro_slug = $product->get_pro_slug(); - - if ( ! empty( $pro_slug ) && isset( $all_products[ $pro_slug ] ) ) { - $default = 'yes'; - } - } - - if ( 'yes' === get_option( $product->get_key() . '_logger_flag', $default ) ) { - - $main_slug = explode( '-', $product_slug ); - $main_slug = $main_slug[0]; - $pro_slug = $product->get_pro_slug(); - $track_hash = Licenser::create_license_hash( str_replace( '-', '_', ! empty( $pro_slug ) ? $pro_slug : $product_slug ) ); - - // Check if product was already tracked. - $active_telemetry = false; - foreach ( $products_with_telemetry as &$product_with_telemetry ) { - if ( $product_with_telemetry['slug'] === $main_slug ) { - $active_telemetry = true; - break; - } - } - - if ( $active_telemetry ) { - continue; - } - - $products_with_telemetry[] = array( - 'slug' => $main_slug, - 'trackHash' => $track_hash ? $track_hash : 'free', - 'consent' => true, - ); - } - } - - $products_with_telemetry = apply_filters( 'themeisle_sdk_telemetry_products', $products_with_telemetry ); - - if ( 0 === count( $products_with_telemetry ) ) { - return; - } - - - $tracking_handler = apply_filters( 'themeisle_sdk_dependency_script_handler', 'tracking' ); - if ( ! empty( $tracking_handler ) ) { - do_action( 'themeisle_sdk_dependency_enqueue_script', 'tracking' ); - wp_localize_script( - $tracking_handler, - 'tiTelemetry', - array( - 'products' => $products_with_telemetry, - 'endpoint' => self::TELEMETRY_ENDPOINT, - ) - ); - } - } catch ( \Exception $e ) { - if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { - error_log( $e->getMessage() ); // phpcs:ignore - } - } catch ( \Error $e ) { - if ( defined( 'WP_DEBUG' ) && WP_DEBUG && defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { - error_log( $e->getMessage() ); // phpcs:ignore - } - } finally { - return; - } - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php deleted file mode 100644 index 6a43e79..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php +++ /dev/null @@ -1,515 +0,0 @@ - $notification_details['id'], - 'display_at' => time(), - ] - ); - } - if ( empty( $notification_details ) ) { - return; - } - $notification_html = self::get_notification_html( $notification_details ); - do_action( $notification_details['id'] . '_before_render' ); - - echo $notification_html; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped, already escaped internally. - - do_action( $notification_details['id'] . '_after_render' ); - self::render_snippets(); - } - - /** - * Get last notification details. - * - * @return array Last notification details. - */ - private static function get_last_notification() { - $notification = self::get_notifications_metadata(); - - return isset( $notification['last_notification'] ) ? $notification['last_notification'] : []; - } - - /** - * Get notification center details. - * - * @return array Notification center details. - */ - private static function get_notifications_metadata() { - - $data = get_option( - 'themeisle_sdk_notifications', - [ - 'last_notification' => [], - 'last_notification_active' => 0, - ] - ); - - return $data; - - } - - /** - * Check if the notification is still possible. - * - * @param array $notification Notification to check. - * - * @return array Either is still active or not. - */ - private static function get_notification_details( $notification ) { - $notifications = array_filter( - self::$notifications, - function ( $value ) use ( $notification ) { - if ( isset( $value['id'] ) && isset( $notification['id'] ) && $value['id'] === $notification['id'] ) { - return true; - } - - return false; - } - ); - - return ! empty( $notifications ) ? reset( $notifications ) : []; - } - - /** - * Check if the notification is expired. - * - * @param array $notification Notification to check. - * - * @return bool Either the notification is due. - */ - private static function is_notification_expired( $notification ) { - if ( ! isset( $notification['display_at'] ) ) { - return true; - } - - $notifications = array_filter( - self::$notifications, - function ( $value ) use ( $notification ) { - if ( isset( $value['id'] ) && isset( $notification['id'] ) && $value['id'] === $notification['id'] ) { - return true; - } - - return false; - } - ); - - if ( empty( $notifications ) ) { - return true; - } - $notification_definition = reset( $notifications ); - - $when_to_expire = isset( $notification_definition['expires_at'] ) - ? $notification_definition['expires_at'] : - ( isset( $notification_definition['expires'] ) - ? ( $notification['display_at'] + $notification_definition['expires'] ) : - ( $notification['display_at'] + self::MAX_TIME_TO_LIVE * DAY_IN_SECONDS ) - ); - - return ( $when_to_expire - time() ) < 0; - } - - /** - * Set last notification details. - */ - private static function set_last_active_notification_timestamp() { - $metadata = self::get_notifications_metadata(); - $metadata['last_notification_active'] = time(); - update_option( 'themeisle_sdk_notifications', $metadata ); - } - - /** - * Return notification to show. - * - * @return array Notification data. - */ - public static function get_random_notification() { - if ( ( time() - self::get_last_active_notification_timestamp() ) < self::TIME_BETWEEN_NOTIFICATIONS * DAY_IN_SECONDS ) { - return []; - } - - $notifications = self::$notifications; - $notifications = array_filter( - $notifications, - function ( $value ) { - if ( isset( $value['sticky'] ) && true === $value['sticky'] ) { - return true; - } - - return false; - } - ); - // No priority notifications, use all. - if ( empty( $notifications ) ) { - $notifications = self::$notifications; - } - if ( empty( $notifications ) ) { - return []; - } - $notifications = array_values( $notifications ); - - return $notifications[ array_rand( $notifications, 1 ) ]; - - } - - /** - * Get last notification details. - * - * @return int Last notification details. - */ - private static function get_last_active_notification_timestamp() { - $notification = self::get_notifications_metadata(); - - return isset( $notification['last_notification_active'] ) ? $notification['last_notification_active'] : 0; - } - - /** - * Get last notification details. - * - * @param array $notification Notification data. - */ - private static function set_active_notification( $notification ) { - $metadata = self::get_notifications_metadata(); - $metadata['last_notification'] = $notification; - update_option( 'themeisle_sdk_notifications', $metadata ); - } - - /** - * Get notification html. - * - * @param array $notification_details Notification details. - * - * @return string Html for notice. - */ - public static function get_notification_html( $notification_details ) { - $default = [ - 'id' => '', - 'heading' => '', - 'img_src' => '', - 'message' => '', - 'ctas' => [ - 'confirm' => [ - 'link' => '#', - 'text' => '', - ], - 'cancel' => [ - 'link' => '#', - 'text' => '', - ], - ], - 'type' => 'success', - ]; - $notification_details = wp_parse_args( $notification_details, $default ); - global $pagenow; - $type = in_array( $notification_details['type'], [ 'success', 'info', 'warning', 'error' ], true ) ? $notification_details['type'] : 'success'; - $notification_details['ctas']['cancel']['link'] = wp_nonce_url( add_query_arg( [ 'nid' => $notification_details['id'] ], admin_url( $pagenow ) ), $notification_details['id'], 'tsdk_dismiss_nonce' ); - $notification_html = '
'; - - if ( ! empty( $notification_details['heading'] ) ) { - $notification_html .= sprintf( '

%s

', wp_kses_post( $notification_details['heading'] ) ); - } - if ( ! empty( $notification_details['img_src'] ) ) { - $notification_html .= '
'; - $notification_html .= sprintf( '%s', esc_attr( $notification_details['img_src'] ), esc_attr( $notification_details['heading'] ) ); - } - if ( ! empty( $notification_details['message'] ) ) { - $notification_html .= wp_kses_post( $notification_details['message'] ); - if ( ! empty( $notification_details['img_src'] ) ) { - $notification_html .= '
'; - } - } - $notification_html .= '
'; - - if ( ! empty( $notification_details['ctas']['confirm']['text'] ) ) { - $notification_html .= sprintf( - '%s', - esc_url( $notification_details['ctas']['confirm']['link'] ), - esc_attr( $notification_details['id'] . '_confirm' ), - wp_kses_post( $notification_details['ctas']['confirm']['text'] ) - ); - } - - if ( ! empty( $notification_details['ctas']['cancel']['text'] ) ) { - $notification_html .= sprintf( - '%s', - esc_url( $notification_details['ctas']['cancel']['link'] ), - esc_attr( $notification_details['id'] ) . '_cancel', - wp_kses_post( $notification_details['ctas']['cancel']['text'] ) - ); - } - - $notification_html .= '
'; - $notification_html .= '
'; - $notification_html .= '
'; - - return $notification_html; - } - - /** - * Adds js snippet for hiding the notice. - */ - public static function render_snippets() { - - ?> - - - is_from_partner( $product ) ) { - return false; - } - if ( ! current_user_can( 'manage_options' ) ) { - return false; - } - if ( ( time() - $product->get_install_time() ) < ( self::MIN_INSTALL_TIME * HOUR_IN_SECONDS ) ) { - return false; - } - - return true; - } - - /** - * Setup notifications queue. - */ - public static function setup_notifications() { - $notifications = apply_filters( 'themeisle_sdk_registered_notifications', [] ); - $notifications = array_filter( - $notifications, - function ( $value ) { - if ( ! isset( $value['id'] ) ) { - return false; - } - if ( get_option( $value['id'], '' ) !== '' ) { - return false; - } - - return apply_filters( $value['id'] . '_should_show', true ); - } - ); - self::$notifications = $notifications; - } - /** - * Load the module logic. - * - * @param Product $product Product to load the module for. - * - * @return Notification Module instance. - */ - public function load( $product ) { - if ( apply_filters( 'themeisle_sdk_hide_notifications', false ) ) { - return; - } - $this->product = $product; - - $notifications = apply_filters( 'themeisle_sdk_registered_notifications', [] ); - $notifications = array_filter( - $notifications, - function ( $value ) { - if ( ! isset( $value['id'] ) ) { - return false; - } - if ( get_option( $value['id'], '' ) !== '' ) { - return false; - } - - return apply_filters( $value['id'] . '_should_show', true ); - } - ); - self::$notifications = $notifications; - add_action( 'admin_notices', array( __CLASS__, 'show_notification' ) ); - add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( __CLASS__, 'dismiss' ) ); - add_action( 'admin_head', array( __CLASS__, 'dismiss_get' ) ); - add_action( 'admin_head', array( __CLASS__, 'setup_notifications' ) ); - - return $this; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Promotions.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Promotions.php deleted file mode 100644 index 05079a8..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Promotions.php +++ /dev/null @@ -1,1042 +0,0 @@ -is_from_partner( $product ) ) { - return false; - } - - $this->debug = apply_filters( 'themeisle_sdk_promo_debug', $this->debug ); - $promotions_to_load = apply_filters( $product->get_key() . '_load_promotions', array() ); - $promotions_to_load[] = 'optimole'; - $promotions_to_load[] = 'rop'; - $promotions_to_load[] = 'woo_plugins'; - $promotions_to_load[] = 'neve-fse'; - - $this->promotions = $this->get_promotions(); - - foreach ( $this->promotions as $slug => $data ) { - if ( ! in_array( $slug, $promotions_to_load, true ) ) { - unset( $this->promotions[ $slug ] ); - } - } - - add_action( 'init', array( $this, 'register_settings' ), 99 ); - add_action( 'admin_init', array( $this, 'register_reference' ), 99 ); - - return ! empty( $this->promotions ); - } - - /** - * Registers the hooks. - * - * @param Product $product Product to load. - */ - public function load( $product ) { - if ( ! $this->is_writeable() || ! current_user_can( 'install_plugins' ) ) { - return; - } - - $this->product = $product; - - $last_dismiss = $this->get_last_dismiss_time(); - - if ( ! $this->debug && $last_dismiss && ( time() - $last_dismiss ) < 7 * DAY_IN_SECONDS ) { - return; - } - - add_filter( 'attachment_fields_to_edit', array( $this, 'add_attachment_field' ), 10, 2 ); - add_action( 'current_screen', [ $this, 'load_available' ] ); - add_action( 'elementor/editor/after_enqueue_scripts', array( $this, 'enqueue' ) ); - add_action( 'wp_ajax_tisdk_update_option', array( $this, 'dismiss_promotion' ) ); - add_filter( 'themeisle_sdk_ran_promos', '__return_true' ); - - if ( get_option( $this->option_neve_fse, false ) !== true ) { - add_action( 'wp_ajax_themeisle_sdk_dismiss_notice', 'ThemeisleSDK\Modules\Notification::regular_dismiss' ); - } - } - - /** - * Load available promotions. - */ - public function load_available() { - $this->promotions = $this->filter_by_screen_and_merge(); - if ( empty( $this->promotions ) ) { - return; - } - - $this->load_promotion( $this->promotions[ array_rand( $this->promotions ) ] ); - } - - - /** - * Register plugin reference. - * - * @return void - */ - public function register_reference() { - if ( ! current_user_can( 'activate_plugins' ) ) { - return; - } - - if ( ! isset( $_GET['plugin'] ) || ! isset( $_GET['_wpnonce'] ) ) { - return; - } - - $plugin = rawurldecode( $_GET['plugin'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized - if ( wp_verify_nonce( $_GET['_wpnonce'], 'activate-plugin_' . $plugin ) === false ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized - return; - } - - if ( isset( $_GET['reference_key'] ) ) { - update_option( 'otter_reference_key', sanitize_key( $_GET['reference_key'] ) ); - } - - if ( isset( $_GET['optimole_reference_key'] ) ) { - update_option( 'optimole_reference_key', sanitize_key( $_GET['optimole_reference_key'] ) ); - } - - if ( isset( $_GET['rop_reference_key'] ) ) { - update_option( 'rop_reference_key', sanitize_key( $_GET['rop_reference_key'] ) ); - } - - if ( isset( $_GET['neve_fse_reference_key'] ) ) { - update_option( 'neve_fse_reference_key', sanitize_key( $_GET['neve_fse_reference_key'] ) ); - } - } - - /** - * Register Settings - */ - public function register_settings() { - $default = get_option( 'themeisle_sdk_promotions_otter', '{}' ); - - register_setting( - 'themeisle_sdk_settings', - $this->option_main, - array( - 'type' => 'string', - 'sanitize_callback' => 'sanitize_text_field', - 'show_in_rest' => true, - 'default' => $default, - ) - ); - - register_setting( - 'themeisle_sdk_settings', - $this->option_otter, - array( - 'type' => 'boolean', - 'sanitize_callback' => 'rest_sanitize_boolean', - 'show_in_rest' => true, - 'default' => false, - ) - ); - register_setting( - 'themeisle_sdk_settings', - $this->option_optimole, - array( - 'type' => 'boolean', - 'sanitize_callback' => 'rest_sanitize_boolean', - 'show_in_rest' => true, - 'default' => false, - ) - ); - register_setting( - 'themeisle_sdk_settings', - $this->option_rop, - array( - 'type' => 'boolean', - 'sanitize_callback' => 'rest_sanitize_boolean', - 'show_in_rest' => true, - 'default' => false, - ) - ); - register_setting( - 'themeisle_sdk_settings', - $this->option_neve_fse, - array( - 'type' => 'boolean', - 'sanitize_callback' => 'rest_sanitize_boolean', - 'show_in_rest' => true, - 'default' => false, - ) - ); - } - - /** - * Check if the path is writable. - * - * @return boolean - * @access public - */ - public function is_writeable() { - - include_once ABSPATH . 'wp-admin/includes/file.php'; - $filesystem_method = get_filesystem_method(); - - if ( 'direct' === $filesystem_method ) { - return true; - } - - return false; - } - - /** - * Third-party compatibility. - * - * @return boolean - */ - private function has_conflicts() { - global $pagenow; - - // Editor notices aren't compatible with Enfold theme. - if ( defined( 'AV_FRAMEWORK_VERSION' ) && in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) { - return true; - } - - return false; - } - - /** - * Get promotions. - * - * @return array - */ - private function get_promotions() { - $has_otter = defined( 'OTTER_BLOCKS_VERSION' ) || $this->is_plugin_installed( 'otter-blocks' ); - $had_otter_from_promo = get_option( $this->option_otter, false ); - $has_optimole = defined( 'OPTIMOLE_VERSION' ) || $this->is_plugin_installed( 'optimole-wp' ); - $had_optimole_from_promo = get_option( $this->option_optimole, false ); - $has_rop = defined( 'ROP_LITE_VERSION' ) || $this->is_plugin_installed( 'tweet-old-post' ); - $had_rop_from_promo = get_option( $this->option_rop, false ); - $has_woocommerce = class_exists( 'WooCommerce' ); - $has_sparks = defined( 'SPARKS_WC_VERSION' ) || $this->is_plugin_installed( 'sparks-for-woocommerce' ); - $has_ppom = defined( 'PPOM_VERSION' ) || $this->is_plugin_installed( 'woocommerce-product-addon' ); - $is_min_req_v = version_compare( get_bloginfo( 'version' ), '5.8', '>=' ); - $is_min_fse_v = version_compare( get_bloginfo( 'version' ), '6.2', '>=' ); - $current_theme = wp_get_theme(); - $has_neve_fse = $current_theme->template === 'neve-fse' || $current_theme->parent() === 'neve-fse'; - $has_enough_attachments = $this->has_min_media_attachments(); - $has_enough_old_posts = $this->has_old_posts(); - - $all = [ - 'optimole' => [ - 'om-editor' => [ - 'env' => ! $has_optimole && $is_min_req_v && ! $had_optimole_from_promo, - 'screen' => 'editor', - ], - 'om-image-block' => [ - 'env' => ! $has_optimole && $is_min_req_v && ! $had_optimole_from_promo, - 'screen' => 'editor', - ], - 'om-attachment' => [ - 'env' => ! $has_optimole && ! $had_optimole_from_promo, - 'screen' => 'media-editor', - ], - 'om-media' => [ - 'env' => ! $has_optimole && ! $had_optimole_from_promo && $has_enough_attachments, - 'screen' => 'media', - ], - 'om-elementor' => [ - 'env' => ! $has_optimole && ! $had_optimole_from_promo && defined( 'ELEMENTOR_VERSION' ), - 'screen' => 'elementor', - ], - ], - 'otter' => [ - 'blocks-css' => [ - 'env' => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo, - 'screen' => 'editor', - ], - 'blocks-animation' => [ - 'env' => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo, - 'screen' => 'editor', - ], - 'blocks-conditions' => [ - 'env' => ! $has_otter && $is_min_req_v && ! $had_otter_from_promo, - 'screen' => 'editor', - ], - ], - 'rop' => [ - 'rop-posts' => [ - 'env' => ! $has_rop && ! $had_rop_from_promo && $has_enough_old_posts, - 'screen' => 'edit-post', - ], - ], - 'woo_plugins' => [ - 'ppom' => [ - 'env' => ! $has_ppom && $has_woocommerce, - 'screen' => 'edit-product', - ], - 'sparks-wishlist' => [ - 'env' => ! $has_sparks && $has_woocommerce, - 'screen' => 'edit-product', - ], - 'sparks-announcement' => [ - 'env' => ! $has_sparks && $has_woocommerce, - 'screen' => 'edit-product', - ], - 'sparks-product-review' => [ - 'env' => ! $has_sparks && $has_woocommerce, - 'screen' => 'edit-product', - ], - ], - 'neve-fse' => [ - 'neve-fse-themes-popular' => [ - 'env' => ! $has_neve_fse && $is_min_fse_v, - 'screen' => 'themes-install-popular', - ], - ], - ]; - - foreach ( $all as $slug => $data ) { - foreach ( $data as $key => $conditions ) { - if ( ! $conditions['env'] || $this->has_conflicts() ) { - unset( $all[ $slug ][ $key ] ); - - continue; - } - - if ( $this->get_upsells_dismiss_time( $key ) ) { - unset( $all[ $slug ][ $key ] ); - } - } - - if ( empty( $all[ $slug ] ) ) { - unset( $all[ $slug ] ); - } - } - - return $all; - } - - /** - * Get the upsell dismiss time. - * - * @param string $key The upsell key. If empty will return all dismiss times. - * - * @return false | string | array - */ - private function get_upsells_dismiss_time( $key = '' ) { - $old = get_option( 'themeisle_sdk_promotions_otter', '{}' ); - $data = get_option( $this->option_main, $old ); - - $data = json_decode( $data, true ); - - if ( empty( $key ) ) { - return $data; - } - - return isset( $data[ $key ] ) ? $data[ $key ] : false; - } - - /** - * Get the last dismiss time of a promotion. - * - * @return int The timestamp of last dismiss, or install time - 4 days. - */ - private function get_last_dismiss_time() { - $dismissed = $this->get_upsells_dismiss_time(); - - if ( empty( $dismissed ) ) { - // we return the product install time - 4 days because we want to show the upsell after 3 days, - // and we move the product install time 4 days in the past. - return $this->product->get_install_time() - 4 * DAY_IN_SECONDS; - } - - return max( array_values( $dismissed ) ); - } - - /** - * Filter by screen & merge into single array of keys. - * - * @return array - */ - private function filter_by_screen_and_merge() { - $current_screen = get_current_screen(); - - $is_elementor = isset( $_GET['action'] ) && $_GET['action'] === 'elementor'; - $is_media = isset( $current_screen->id ) && $current_screen->id === 'upload'; - $is_posts = isset( $current_screen->id ) && $current_screen->id === 'edit-post'; - $is_editor = method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor(); - $is_theme_install = isset( $current_screen->id ) && ( $current_screen->id === 'theme-install' || $current_screen->id === 'themes' ); - $is_product = isset( $current_screen->id ) && $current_screen->id === 'product'; - - $return = []; - - foreach ( $this->promotions as $slug => $promos ) { - foreach ( $promos as $key => $data ) { - switch ( $data['screen'] ) { - case 'media-editor': - if ( ! $is_media && ! $is_editor ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - case 'media': - if ( ! $is_media ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - case 'editor': - if ( ! $is_editor || $is_elementor ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - case 'elementor': - if ( ! $is_elementor ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - case 'edit-post': - if ( ! $is_posts ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - case 'edit-product': - if ( ! $is_product ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - case 'themes-install-popular': - if ( ! $is_theme_install ) { - unset( $this->promotions[ $slug ][ $key ] ); - } - break; - } - } - - $return = array_merge( $return, $this->promotions[ $slug ] ); - } - - return array_keys( $return ); - } - - /** - * Load single promotion. - * - * @param string $slug slug of the promotion. - */ - private function load_promotion( $slug ) { - $this->loaded_promo = $slug; - - if ( $this->debug ) { - add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue' ] ); - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); - if ( $this->get_upsells_dismiss_time( 'om-media' ) === false ) { - add_action( 'admin_notices', [ $this, 'render_optimole_dash_notice' ] ); - } - if ( $this->get_upsells_dismiss_time( 'rop-posts' ) === false ) { - add_action( 'admin_notices', [ $this, 'render_rop_dash_notice' ] ); - } - if ( $this->get_upsells_dismiss_time( 'neve-fse-themes-popular' ) === false ) { - add_action( 'admin_notices', [ $this, 'render_neve_fse_themes_notice' ] ); - } - - $this->load_woo_promos(); - return; - } - - switch ( $slug ) { - case 'om-editor': - case 'om-image-block': - case 'blocks-css': - case 'blocks-animation': - case 'blocks-conditions': - add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue' ] ); - break; - case 'om-attachment': - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); - break; - case 'om-media': - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); - add_action( 'admin_notices', [ $this, 'render_optimole_dash_notice' ] ); - break; - case 'rop-posts': - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); - add_action( 'admin_notices', [ $this, 'render_rop_dash_notice' ] ); - break; - case 'ppom': - case 'sparks-wishlist': - case 'sparks-announcement': - case 'sparks-product-reviews': - $this->load_woo_promos(); - break; - case 'neve-fse-themes-popular': - // Remove any other notifications if Neve FSE promotion is showing - remove_action( 'admin_notices', array( 'ThemeisleSDK\Modules\Notification', 'show_notification' ) ); - remove_action( 'wp_ajax_themeisle_sdk_dismiss_notice', array( 'ThemeisleSDK\Modules\Notification', 'dismiss' ) ); - remove_action( 'admin_head', array( 'ThemeisleSDK\Modules\Notification', 'dismiss_get' ) ); - remove_action( 'admin_head', array( 'ThemeisleSDK\Modules\Notification', 'setup_notifications' ) ); - // Add required actions to display this notification - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] ); - add_action( 'admin_notices', [ $this, 'render_neve_fse_themes_notice' ] ); - break; - } - } - - /** - * Render dashboard notice. - */ - public function render_optimole_dash_notice() { - $screen = get_current_screen(); - - if ( ! isset( $screen->id ) || $screen->id !== 'upload' ) { - return; - } - - echo '
'; - } - - /** - * Enqueue the assets. - */ - public function enqueue() { - global $themeisle_sdk_max_path; - $handle = 'ti-sdk-promo'; - $saved = $this->get_upsells_dismiss_time(); - $themeisle_sdk_src = $this->get_sdk_uri(); - $user = wp_get_current_user(); - $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/promos/index.asset.php'; - $deps = array_merge( $asset_file['dependencies'], [ 'updates' ] ); - - wp_register_script( $handle, $themeisle_sdk_src . 'assets/js/build/promos/index.js', $deps, $asset_file['version'], true ); - wp_localize_script( - $handle, - 'themeisleSDKPromotions', - [ - 'debug' => $this->debug, - 'email' => $user->user_email, - 'showPromotion' => $this->loaded_promo, - 'optionKey' => $this->option_main, - 'product' => $this->product->get_name(), - 'option' => empty( $saved ) ? new \stdClass() : $saved, - 'nonce' => wp_create_nonce( 'wp_rest' ), - 'assets' => $themeisle_sdk_src . 'assets/images/', - 'optimoleApi' => esc_url( rest_url( 'optml/v1/register_service' ) ), - 'optimoleActivationUrl' => $this->get_plugin_activation_link( 'optimole-wp' ), - 'otterActivationUrl' => $this->get_plugin_activation_link( 'otter-blocks' ), - 'ropActivationUrl' => $this->get_plugin_activation_link( 'tweet-old-post' ), - 'optimoleDash' => esc_url( add_query_arg( [ 'page' => 'optimole' ], admin_url( 'upload.php' ) ) ), - 'ropDash' => esc_url( add_query_arg( [ 'page' => 'TweetOldPost' ], admin_url( 'admin.php' ) ) ), - 'neveFSEMoreUrl' => tsdk_utmify( 'https://themeisle.com/themes/neve-fse/', 'neve-fse-themes-popular', 'theme-install' ), - // translators: %s is the product name. - 'title' => esc_html( sprintf( __( 'Recommended by %s', 'textdomain' ), $this->product->get_name() ) ), - ] - ); - wp_enqueue_script( $handle ); - wp_enqueue_style( $handle, $themeisle_sdk_src . 'assets/js/build/promos/style-index.css', [ 'wp-components' ], $asset_file['version'] ); - } - - /** - * Render rop notice. - */ - public function render_rop_dash_notice() { - $screen = get_current_screen(); - - if ( ! isset( $screen->id ) || $screen->id !== 'edit-post' ) { - return; - } - - echo '
'; - } - - /** - * Render Neve FSE Themes notice. - */ - public function render_neve_fse_themes_notice() { - echo '
'; - } - - /** - * Add promo to attachment modal. - * - * @param array $fields Fields array. - * @param \WP_Post $post Post object. - * - * @return array - */ - public function add_attachment_field( $fields, $post ) { - if ( $post->post_type !== 'attachment' ) { - return $fields; - } - - if ( ! isset( $post->post_mime_type ) || strpos( $post->post_mime_type, 'image' ) === false ) { - return $fields; - } - - $meta = wp_get_attachment_metadata( $post->ID ); - - if ( isset( $meta['filesize'] ) && $meta['filesize'] < 200000 ) { - return $fields; - } - - $fields['optimole'] = array( - 'input' => 'html', - 'html' => '
', - 'label' => '', - ); - - if ( count( $fields ) < 2 ) { - add_filter( 'wp_required_field_message', '__return_empty_string' ); - } - - return $fields; - } - - /** - * Check if has 50 image media items. - * - * @return bool - */ - private function has_min_media_attachments() { - if ( $this->debug ) { - return true; - } - $attachment_count = get_transient( 'tsk_attachment_count' ); - if ( false === $attachment_count ) { - $args = array( - 'post_type' => 'attachment', - 'posts_per_page' => 51, - 'fields' => 'ids', - 'post_status' => 'inherit', - 'no_found_rows' => true, - ); - - $query = new \WP_Query( $args ); - $attachment_count = $query->post_count; - - - set_transient( 'tsk_attachment_count', $attachment_count, DAY_IN_SECONDS ); - } - return $attachment_count > 50; - } - - /** - * Check if the website has more than 100 posts and over 10 are over a year old. - * - * @return bool - */ - private function has_old_posts() { - if ( $this->debug ) { - return true; - } - - $posts_count = get_transient( 'tsk_posts_count' ); - - // Create a new WP_Query object to get all posts - $args = array( - 'post_type' => 'post', - 'posts_per_page' => 101, //phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page - 'fields' => 'ids', - 'no_found_rows' => true, - ); - - if ( false === $posts_count ) { - $query = new \WP_Query( $args ); - $total_posts = $query->post_count; - wp_reset_postdata(); - - // Count the number of posts older than 1 year - $one_year_ago = gmdate( 'Y-m-d H:i:s', strtotime( '-1 year' ) ); - $args['date_query'] = array( - array( - 'before' => $one_year_ago, - 'inclusive' => true, - ), - ); - - $query = new \WP_Query( $args ); - $old_posts = $query->post_count; - wp_reset_postdata(); - - $posts_count = array( - 'total_posts' => $total_posts, - 'old_posts' => $old_posts, - ); - - set_transient( 'tsk_posts_count', $posts_count, DAY_IN_SECONDS ); - } - - // Check if there are more than 100 posts and more than 10 old posts - return $posts_count['total_posts'] > 100 && $posts_count['old_posts'] > 10; - } - - /** - * Check if should load Woo promos. - * - * @return bool - */ - private function load_woo_promos() { - $this->woo_promos = array( - 'ppom' => array( - 'title' => 'Product Add-Ons', - 'description' => 'Add extra custom fields & add-ons on your product pages, like sizes, colors & more.', - 'icon' => '', - 'has_install' => true, - 'link' => wp_nonce_url( - add_query_arg( - array( - 'action' => 'install-plugin', - 'plugin' => 'woocommerce-product-addon', - ), - admin_url( 'update.php' ) - ), - 'install-plugin_woocommerce-product-addon' - ), - ), - 'sparks-wishlist' => array( - 'title' => 'Wishlist', - 'description' => 'Loyalize your customers by allowing them to save their favorite products.', - 'icon' => '', - 'link' => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce/', 'promo', 'products-tabs' ), - ), - 'sparks-announcement' => array( - 'title' => 'Multi-Announcement Bars', - 'description' => 'Add a top notification bar on your website to highlight the latest products, offers, or upcoming events.', - 'icon' => '', - 'link' => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce/', 'promo', 'products-tabs' ), - ), - 'sparks-product-review' => array( - 'title' => 'Advanced Product Review', - 'description' => 'Enable an advanced review section, enlarging the basic review options with lots of capabilities.', - 'icon' => '', - 'link' => tsdk_utmify( 'https://themeisle.com/plugins/sparks-for-woocommerce/', 'promo', 'products-tabs' ), - ), - ); - - // Check if $this-promotions isn't empty and has one of the items to load. - $can_load = ! empty( $this->promotions ) && count( array_intersect( $this->promotions, array_keys( $this->woo_promos ) ) ) > 0; - - if ( ! $can_load && ! $this->debug ) { - return; - } - - add_action( - 'woocommerce_product_data_tabs', - function( $tabs ) { - $tabs['tisdk-suggestions'] = array( - 'label' => 'More extensions from Themeisle', - 'target' => 'tisdk_suggestions', - 'class' => array(), - 'priority' => 1000, - ); - - return $tabs; - } - ); - - add_action( 'woocommerce_product_data_panels', array( $this, 'woocommerce_tab_content' ) ); - } - - /** - * WooCommerce Tab Content. - */ - public function woocommerce_tab_content() { - // Filter content based on if the key exists in $this->promotions array. - $content = array_filter( - $this->woo_promos, - function( $key ) { - return in_array( $key, $this->promotions, true ); - }, - ARRAY_FILTER_USE_KEY - ); - - // Display CSS - self::render_woo_tabs_css(); - - self::render_notice_dismiss_ajax(); - ?> - - - - - - - false, - 'message' => 'Missing nonce or value.', - ); - wp_send_json( $response ); - wp_die(); - } - - $nonce = sanitize_text_field( $_POST['nonce'] ); - $value = sanitize_text_field( $_POST['value'] ); - - if ( ! wp_verify_nonce( $nonce, 'tisdk_update_option' ) ) { - $response = array( - 'success' => false, - 'message' => 'Invalid nonce.', - ); - wp_send_json( $response ); - wp_die(); - } - - $options = get_option( $this->option_main ); - $options = json_decode( $options, true ); - - $options[ $value ] = time(); - - update_option( $this->option_main, wp_json_encode( $options ) ); - - $response = array( - 'success' => true, - ); - - wp_send_json( $response ); - wp_die(); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Recommendation.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Recommendation.php deleted file mode 100644 index 1800925..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Recommendation.php +++ /dev/null @@ -1,334 +0,0 @@ -product = $product; - $this->setup_hooks(); - - return $this; - } - - /** - * Setup endpoints. - */ - private function setup_hooks() { - add_action( $this->product->get_key() . '_recommend_products', array( $this, 'render_products_box' ), 10, 4 ); - add_action( 'admin_head', array( $this, 'enqueue' ) ); - } - - /** - * Check if we should load the module for this product. - * - * @param Product $product Product data. - * - * @return bool Should we load the module? - */ - public function can_load( $product ) { - return true; - } - - /** - * Render products box content. - * - * @param array $plugins_list - list of useful plugins (in slug => nicename format). - * @param array $themes_list - list of useful themes (in slug => nicename format). - * @param array $strings - list of translated strings. - * @param array $preferences - list of preferences. - */ - public function render_products_box( $plugins_list, $themes_list, $strings, $preferences = array() ) { - - if ( empty( $plugins_list ) && empty( $themes_list ) ) { - return; - } - - if ( ! empty( $plugins_list ) && ! current_user_can( 'install_plugins' ) ) { - return; - } - - if ( ! empty( $themes_list ) && ! current_user_can( 'install_themes' ) ) { - return; - } - - add_thickbox(); - - if ( ! empty( $themes_list ) ) { - $list = $this->get_themes( $themes_list, $preferences ); - - if ( has_action( $this->product->get_key() . '_recommend_products_theme_template' ) ) { - do_action( $this->product->get_key() . '_recommend_products_theme_template', $list, $strings, $preferences ); - } else { - echo '
'; - - foreach ( $list as $theme ) { - echo '
'; - echo ' '; - echo '
'; - echo ' ' . esc_html( $theme->custom_name ) . ''; - if ( ! isset( $preferences['description'] ) || ( isset( $preferences['description'] ) && $preferences['description'] ) ) { - echo '' . esc_html( substr( $theme->description, 0, strpos( $theme->description, '.' ) ) ) . '.'; - } - echo '
'; - echo ''; - echo '
'; - } - - echo '
'; - } - } - if ( ! empty( $plugins_list ) ) { - $list = $this->get_plugins( $plugins_list, $preferences ); - - if ( has_action( $this->product->get_key() . '_recommend_products_plugin_template' ) ) { - do_action( $this->product->get_key() . '_recommend_products_plugin_template', $list, $strings, $preferences ); - } else { - echo '
'; - - foreach ( $list as $current_plugin ) { - echo '
'; - echo ' '; - echo '
'; - echo ' ' . esc_html( $current_plugin->custom_name ) . ''; - if ( ! isset( $preferences['description'] ) || ( isset( $preferences['description'] ) && $preferences['description'] ) ) { - echo '' . esc_html( substr( $current_plugin->short_description, 0, strpos( $current_plugin->short_description, '.' ) ) ) . '. '; - } - echo '
'; - echo ' '; - echo '
'; - } - - echo '
'; - } - } - - } - - /** - * Collect all the information for the themes list. - * - * @param array $themes_list - list of useful themes (in slug => nicename format). - * @param array $preferences - list of preferences. - * - * @return array - */ - private function get_themes( $themes_list, $preferences ) { - $list = array(); - foreach ( $themes_list as $slug => $nicename ) { - $theme = $this->call_theme_api( $slug ); - if ( ! $theme ) { - continue; - } - - $url = add_query_arg( - array( - 'theme' => $theme->slug, - ), - network_admin_url( 'theme-install.php' ) - ); - - $name = empty( $nicename ) ? $theme->name : $nicename; - - $theme->custom_url = $url; - $theme->custom_name = $name; - - $list[] = $theme; - } - - return $list; - } - - /** - * Call theme api - * - * @param string $slug theme slug. - * - * @return array|mixed|object - */ - private function call_theme_api( $slug ) { - $theme = get_transient( 'ti_theme_info_' . $slug ); - - if ( false !== $theme ) { - return $theme; - } - - $products = $this->safe_get( - 'https://api.wordpress.org/themes/info/1.1/?action=query_themes&request[theme]=' . $slug . '&request[per_page]=1' - ); - $products = json_decode( wp_remote_retrieve_body( $products ) ); - if ( is_object( $products ) ) { - $theme = $products->themes[0]; - set_transient( 'ti_theme_info_' . $slug, $theme, 6 * HOUR_IN_SECONDS ); - } - - return $theme; - } - - /** - * Collect all the information for the plugins list. - * - * @param array $plugins_list - list of useful plugins (in slug => nicename format). - * @param array $preferences - list of preferences. - * - * @return array - */ - private function get_plugins( $plugins_list, $preferences ) { - $list = array(); - foreach ( $plugins_list as $plugin => $nicename ) { - $current_plugin = $this->call_plugin_api( $plugin ); - - $name = empty( $nicename ) ? $current_plugin->name : $nicename; - - $image = $current_plugin->banners['low']; - if ( isset( $preferences['image'] ) && 'icon' === $preferences['image'] ) { - $image = $current_plugin->icons['1x']; - } - - $url = add_query_arg( - array( - 'tab' => 'plugin-information', - 'plugin' => $current_plugin->slug, - 'TB_iframe' => true, - 'width' => 800, - 'height' => 800, - ), - network_admin_url( 'plugin-install.php' ) - ); - - $current_plugin->custom_url = $url; - $current_plugin->custom_name = $name; - $current_plugin->custom_image = $image; - - $list[] = $current_plugin; - } - - return $list; - } - - /** - * Load css and scripts for the plugin recommend page. - */ - public function enqueue() { - $screen = get_current_screen(); - - if ( ! isset( $screen->id ) ) { - return; - } - if ( false === apply_filters( $this->product->get_key() . '_enqueue_recommend', false, $screen->id ) ) { - return; - } - - ?> - - is_from_partner( $product ) ) { - return false; - } - if ( ! $product->is_wordpress_available() ) { - return false; - } - - return apply_filters( $product->get_slug() . '_sdk_should_review', true ); - } - - - /** - * Add notification to queue. - * - * @param array $all_notifications Previous notification. - * - * @return array All notifications. - */ - public function add_notification( $all_notifications ) { - - $developers = [ - 'Bogdan', - 'Marius', - 'Hardeep', - 'Rodica', - 'Stefan', - 'Uriahs', - 'Madalin', - 'Cristi', - 'Silviu', - 'Andrei', - ]; - - $link = 'https://wordpress.org/support/' . $this->product->get_type() . '/' . $this->product->get_slug() . '/reviews/#wporg-footer'; - - $message = apply_filters( $this->product->get_key() . '_feedback_review_message', '

Hey, it\'s great to see you have {product} active for a few days now. How is everything going? If you can spare a few moments to rate it on WordPress.org it would help us a lot (and boost my motivation). Cheers!

~ {developer}, developer of {product}

' ); - - $button_submit = apply_filters( $this->product->get_key() . '_feedback_review_button_do', 'Ok, I will gladly help.' ); - $button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', 'No, thanks.' ); - $message = str_replace( - [ '{product}', '{developer}' ], - [ - $this->product->get_friendly_name(), - $developers[ strlen( get_site_url() ) % 10 ], - ], - $message - ); - - $all_notifications[] = [ - 'id' => $this->product->get_key() . '_review_flag', - 'message' => $message, - 'ctas' => [ - 'confirm' => [ - 'link' => $link, - 'text' => $button_submit, - ], - 'cancel' => [ - 'link' => '#', - 'text' => $button_cancel, - ], - ], - ]; - - return $all_notifications; - } - - - /** - * Load module logic. - * - * @param Product $product Product to load. - * - * @return Review Module instance. - */ - public function load( $product ) { - - $this->product = $product; - - add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] ); - - return $this; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php deleted file mode 100644 index 7b28d6d..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Rollback.php +++ /dev/null @@ -1,400 +0,0 @@ -parent_file ) ) { - return; - } - if ( 'themes.php' !== $screen->parent_file ) { - return; - } - if ( ! $this->product->is_theme() ) { - return; - } - $version = $this->get_rollback(); - if ( empty( $version ) ) { - return; - } - ?> - - get_api_versions(); - $versions = apply_filters( $this->product->get_key() . '_rollbacks', $versions ); - if ( empty( $versions ) ) { - return $rollback; - } - if ( $versions ) { - usort( $versions, array( $this, 'sort_rollback_array' ) ); - foreach ( $versions as $version ) { - if ( isset( $version['version'] ) && isset( $version['url'] ) && version_compare( $this->product->get_version(), $version['version'], '>' ) ) { - $rollback = $version; - break; - } - } - } - - return $rollback; - } - - /** - * Get versions array from wp.org - * - * @return array Array of versions. - */ - private function get_api_versions() { - - $cache_key = $this->product->get_cache_key(); - $cache_versions = get_transient( $cache_key ); - if ( false === $cache_versions ) { - $versions = $this->get_remote_versions(); - set_transient( $cache_key, $versions, 5 * DAY_IN_SECONDS ); - } else { - $versions = is_array( $cache_versions ) ? $cache_versions : array(); - } - - return $versions; - } - - /** - * Get remote versions zips. - * - * @return array Array of available versions. - */ - private function get_remote_versions() { - $url = $this->get_versions_api_url(); - if ( empty( $url ) ) { - return []; - } - $response = function_exists( 'wp_remote_get_wp_remote_get' ) - ? wp_remote_get_wp_remote_get( $url ) - : wp_remote_get( $url ); //phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get - if ( is_wp_error( $response ) ) { - return array(); - } - $response = wp_remote_retrieve_body( $response ); - - if ( is_serialized( $response ) ) { - $response = maybe_unserialize( $response ); - } else { - $response = json_decode( $response ); - } - - if ( ! is_object( $response ) ) { - return array(); - } - if ( ! isset( $response->versions ) ) { - return array(); - } - - $versions = array(); - foreach ( $response->versions as $key => $value ) { - $versions[] = array( - 'version' => is_object( $value ) ? $value->version : $key, - 'url' => is_object( $value ) ? $value->file : $value, - ); - } - - return $versions; - } - - /** - * Return url where to check for versions. - * - * @return string Url where to check for versions. - */ - private function get_versions_api_url() { - if ( $this->product->is_wordpress_available() && $this->product->is_plugin() ) { - return sprintf( 'https://api.wordpress.org/plugins/info/1.0/%s', $this->product->get_slug() ); - } - if ( $this->product->is_wordpress_available() && $this->product->is_theme() ) { - return sprintf( 'https://api.wordpress.org/themes/info/1.1/?action=theme_information&request[slug]=%s&request[fields][versions]=true', $this->product->get_slug() ); - } - $license = $this->product->get_license(); - if ( $this->product->requires_license() && strlen( $license ) < 10 ) { - return ''; - } - - return sprintf( '%slicense/versions/%s/%s/%s/%s', Product::API_URL, rawurlencode( $this->product->get_name() ), $license, urlencode( get_site_url() ), $this->product->get_version() ); - } - - /** - * Show the rollback links in the plugin page. - * - * @param array $links Plugin links. - * - * @return array $links Altered links. - */ - public function add_rollback_link( $links ) { - $version = $this->get_rollback(); - if ( empty( $version ) ) { - return $links; - } - $links[] = '' . sprintf( apply_filters( $this->product->get_key() . '_rollback_label', 'Rollback to v%s' ), $version['version'] ) . ''; - - return $links; - } - - /** - * Start the rollback operation. - */ - public function start_rollback() { - if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], $this->product->get_key() . '_rollback' ) ) { //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized - wp_nonce_ays( '' ); - } - - if ( $this->product->is_plugin() ) { - $this->start_rollback_plugin(); - - return; - } - if ( $this->product->is_theme() ) { - $this->start_rollback_theme(); - - return; - } - } - - /** - * Start the rollback operation for the plugin. - */ - private function start_rollback_plugin() { - $rollback = $this->get_rollback(); - $plugin_transient = get_site_transient( 'update_plugins' ); - $plugin_folder = $this->product->get_slug(); - $plugin_file = $this->product->get_file(); - $version = $rollback['version']; - $temp_array = array( - 'slug' => $plugin_folder, - 'new_version' => $version, - 'package' => $rollback['url'], - ); - - $temp_object = (object) $temp_array; - $plugin_transient->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object; - set_site_transient( 'update_plugins', $plugin_transient ); - - $transient = get_transient( $this->product->get_key() . '_warning_rollback' ); - - // Style fix for the api link that gets outside the content. - echo ''; - - if ( false === $transient ) { - set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 ); - require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; - $title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version ); - $plugin = $plugin_folder . '/' . $plugin_file; - $nonce = 'upgrade-plugin_' . $plugin; - $url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin ); - $upgrader_skin = new \Plugin_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'plugin' ) ); - $upgrader = new \Plugin_Upgrader( $upgrader_skin ); - $upgrader->upgrade( $plugin ); - delete_transient( $this->product->get_key() . '_warning_rollback' ); - wp_die( - '', - esc_attr( $title ), - array( - 'response' => 200, - ) - ); - } - } - - /** - * Start the rollback operation for the theme. - */ - private function start_rollback_theme() { - add_filter( 'update_theme_complete_actions', array( $this, 'alter_links_theme_upgrade' ) ); - $rollback = $this->get_rollback(); - $transient = get_site_transient( 'update_themes' ); - $folder = $this->product->get_slug(); - $version = $rollback['version']; - $temp_array = array( - 'new_version' => $version, - 'package' => $rollback['url'], - ); - - $transient->response[ $folder . '/style.css' ] = $temp_array; - set_site_transient( 'update_themes', $transient ); - - $transient = get_transient( $this->product->get_key() . '_warning_rollback' ); - - // Style fix for the api link that gets outside the content. - echo ''; - - if ( false === $transient ) { - set_transient( $this->product->get_key() . '_warning_rollback', 'in progress', 30 ); - require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; - $title = sprintf( apply_filters( $this->product->get_key() . '_rollback_message', 'Rolling back %s to v%s' ), $this->product->get_name(), $version ); - $theme = $folder . '/style.css'; - $nonce = 'upgrade-theme_' . $theme; - $url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme ); - - $upgrader = new \Theme_Upgrader( new \Theme_Upgrader_Skin( compact( 'title', 'nonce', 'url', 'theme' ) ) ); - $upgrader->upgrade( $theme ); - delete_transient( $this->product->get_key() . '_warning_rollback' ); - wp_die( - '', - esc_attr( $title ), - array( - 'response' => 200, - ) - ); - } - } - - /** - * Alter links and remove duplicate customize message. - * - * @param array $links Array of old links. - * - * @return mixed Array of links. - */ - public function alter_links_theme_upgrade( $links ) { - if ( isset( $links['preview'] ) ) { - $links['preview'] = str_replace( '', '', $links['preview'] ); - } - - return $links; - } - - /** - * Loads product object. - * - * @param Product $product Product object. - * - * @return bool Should we load the module? - */ - public function can_load( $product ) { - if ( $this->is_from_partner( $product ) ) { - return false; - } - if ( $product->is_theme() && ! current_user_can( 'switch_themes' ) ) { - return false; - } - - if ( $product->is_plugin() && ! current_user_can( 'install_plugins' ) ) { - return false; - } - - return true; - } - - /** - * Sort the rollbacks array in descending order. - * - * @param mixed $a First version to compare. - * @param mixed $b Second version to compare. - * - * @return bool Which version is greater? - */ - public function sort_rollback_array( $a, $b ) { - return version_compare( $b['version'], $a['version'] ); - } - - /** - * Load module logic. - * - * @param Product $product Product object. - * - * @return $this Module object. - */ - public function load( $product ) { - $this->product = $product; - $this->show_link(); - $this->add_hooks(); - - return $this; - } - - /** - * If product can be rolled back, show the link to rollback. - */ - private function show_link() { - add_filter( - 'plugin_action_links_' . plugin_basename( $this->product->get_basefile() ), - array( - $this, - 'add_rollback_link', - ) - ); - } - - /** - * Fires after the option has been updated. - * - * @param mixed $old_value The old option value. - * @param mixed $value The new option value. - * @param string $option Option name. - */ - public function update_active_plugins_action( $old_value, $value, $option ) { - delete_site_transient( 'update_plugins' ); - wp_cache_delete( 'plugins', 'plugins' ); - } - - /** - * Set the rollback hook. Strangely, this does not work if placed in the ThemeIsle_SDK_Rollback class, so it is being called from there instead. - */ - public function add_hooks() { - add_action( 'admin_post_' . $this->product->get_key() . '_rollback', array( $this, 'start_rollback' ) ); - add_action( 'admin_footer', array( $this, 'add_footer' ) ); - - // This hook will be invoked after the plugin activation. - // We use this to force an update of the cache so that Update is present immediate after a rollback. - add_action( 'update_option_active_plugins', array( $this, 'update_active_plugins_action' ), 10, 3 ); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Script_loader.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Script_loader.php deleted file mode 100644 index 2933df7..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Script_loader.php +++ /dev/null @@ -1,142 +0,0 @@ -is_from_partner( $product ) ) { - return false; - } - - return true; - } - - /** - * Load module logic. - * - * @param Product $product Product to load. - * - * @return Dependancy Module object. - */ - public function load( $product ) { - $this->product = $product; - $this->setup_actions(); - return $this; - } - - /** - * Setup actions. - */ - private function setup_actions() { - add_filter( 'themeisle_sdk_dependency_script_handler', [ $this, 'get_script_handler' ], 10, 1 ); - add_action( 'themeisle_sdk_dependency_enqueue_script', [ $this, 'enqueue_script' ], 10, 1 ); - } - - /** - * Get the script handler. - * - * @param string $slug The slug of the script. - * - * @return string The script handler. Empty if slug is not a string or not implemented. - */ - public function get_script_handler( $slug ) { - if ( ! is_string( $slug ) ) { - return ''; - } - - if ( 'tracking' !== $slug && 'survey' !== $slug ) { - return ''; - } - - return apply_filters( 'themeisle_sdk_dependency_script_handler_name', 'themeisle_sdk_' . $slug . '_script', $slug ); - } - - /** - * Enqueue the script. - * - * @param string $slug The slug of the script. - */ - public function enqueue_script( $slug ) { - $handler = apply_filters( 'themeisle_sdk_dependency_script_handler', $slug ); - if ( empty( $handler ) ) { - return; - } - - if ( 'tracking' === $slug ) { - $this->load_tracking( $handler ); - } elseif ( 'survey' === $slug ) { - $this->load_survey( $handler ); - } - } - - /** - * Load the survey script. - * - * @param string $handler The script handler. - * - * @return void - */ - public function load_survey( $handler ) { - global $themeisle_sdk_max_path; - $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/survey/survey_deps.asset.php'; - - wp_enqueue_script( - $handler, - $this->get_sdk_uri() . 'assets/js/build/survey/survey_deps.js', - $asset_file['dependencies'], - $asset_file['version'], - true - ); - } - - /** - * Load the tracking script. - * - * @param string $handler The script handler. - * - * @return void - */ - public function load_tracking( $handler ) { - global $themeisle_sdk_max_path; - $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/tracking/tracking.asset.php'; - - wp_enqueue_script( - $handler, - $this->get_sdk_uri() . 'assets/js/build/tracking/tracking.js', - $asset_file['dependencies'], - $asset_file['version'], - true - ); - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Translate.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Translate.php deleted file mode 100644 index 6916947..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Translate.php +++ /dev/null @@ -1,918 +0,0 @@ - array( - 'slug' => 'af', - 'name' => 'Afrikaans', - ), - 'ak' => array( - 'slug' => 'ak', - 'name' => 'Akan', - ), - 'am' => array( - 'slug' => 'am', - 'name' => 'Amharic', - ), - 'ar' => array( - 'slug' => 'ar', - 'name' => 'Arabic', - ), - 'arq' => array( - 'slug' => 'arq', - 'name' => 'Algerian Arabic', - ), - 'ary' => array( - 'slug' => 'ary', - 'name' => 'Moroccan Arabic', - ), - 'as' => array( - 'slug' => 'as', - 'name' => 'Assamese', - ), - 'ast' => array( - 'slug' => 'ast', - 'name' => 'Asturian', - ), - 'az' => array( - 'slug' => 'az', - 'name' => 'Azerbaijani', - ), - 'azb' => array( - 'slug' => 'azb', - 'name' => 'South Azerbaijani', - ), - 'az_TR' => array( - 'slug' => 'az-tr', - 'name' => 'Azerbaijani (Turkey)', - ), - 'ba' => array( - 'slug' => 'ba', - 'name' => 'Bashkir', - ), - 'bal' => array( - 'slug' => 'bal', - 'name' => 'Catalan (Balear)', - ), - 'bcc' => array( - 'slug' => 'bcc', - 'name' => 'Balochi Southern', - ), - 'bel' => array( - 'slug' => 'bel', - 'name' => 'Belarusian', - ), - 'bg_BG' => array( - 'slug' => 'bg', - 'name' => 'Bulgarian', - ), - 'bn_BD' => array( - 'slug' => 'bn', - 'name' => 'Bengali', - ), - 'bo' => array( - 'slug' => 'bo', - 'name' => 'Tibetan', - ), - 'bre' => array( - 'slug' => 'br', - 'name' => 'Breton', - ), - 'bs_BA' => array( - 'slug' => 'bs', - 'name' => 'Bosnian', - ), - 'ca' => array( - 'slug' => 'ca', - 'name' => 'Catalan', - ), - 'ceb' => array( - 'slug' => 'ceb', - 'name' => 'Cebuano', - ), - 'ckb' => array( - 'slug' => 'ckb', - 'name' => 'Kurdish (Sorani)', - ), - 'co' => array( - 'slug' => 'co', - 'name' => 'Corsican', - ), - 'cs_CZ' => array( - 'slug' => 'cs', - 'name' => 'Czech', - ), - 'cy' => array( - 'slug' => 'cy', - 'name' => 'Welsh', - ), - 'da_DK' => array( - 'slug' => 'da', - 'name' => 'Danish', - ), - 'de_DE' => array( - 'slug' => 'de', - 'name' => 'German', - ), - 'de_CH' => array( - 'slug' => 'de-ch', - 'name' => 'German (Switzerland)', - ), - 'dv' => array( - 'slug' => 'dv', - 'name' => 'Dhivehi', - ), - 'dzo' => array( - 'slug' => 'dzo', - 'name' => 'Dzongkha', - ), - 'el' => array( - 'slug' => 'el', - 'name' => 'Greek', - ), - 'art_xemoji' => array( - 'slug' => 'art-xemoji', - 'name' => 'Emoji', - ), - 'en_US' => array( - 'slug' => 'en', - 'name' => 'English', - ), - 'en_AU' => array( - 'slug' => 'en-au', - 'name' => 'English (Australia)', - ), - 'en_CA' => array( - 'slug' => 'en-ca', - 'name' => 'English (Canada)', - ), - 'en_GB' => array( - 'slug' => 'en-gb', - 'name' => 'English (UK)', - ), - 'en_NZ' => array( - 'slug' => 'en-nz', - 'name' => 'English (New Zealand)', - ), - 'en_ZA' => array( - 'slug' => 'en-za', - 'name' => 'English (South Africa)', - ), - 'eo' => array( - 'slug' => 'eo', - 'name' => 'Esperanto', - ), - 'es_ES' => array( - 'slug' => 'es', - 'name' => 'Spanish (Spain)', - ), - 'es_AR' => array( - 'slug' => 'es-ar', - 'name' => 'Spanish (Argentina)', - ), - 'es_CL' => array( - 'slug' => 'es-cl', - 'name' => 'Spanish (Chile)', - ), - 'es_CO' => array( - 'slug' => 'es-co', - 'name' => 'Spanish (Colombia)', - ), - 'es_CR' => array( - 'slug' => 'es-cr', - 'name' => 'Spanish (Costa Rica)', - ), - 'es_GT' => array( - 'slug' => 'es-gt', - 'name' => 'Spanish (Guatemala)', - ), - 'es_MX' => array( - 'slug' => 'es-mx', - 'name' => 'Spanish (Mexico)', - ), - 'es_PE' => array( - 'slug' => 'es-pe', - 'name' => 'Spanish (Peru)', - ), - 'es_PR' => array( - 'slug' => 'es-pr', - 'name' => 'Spanish (Puerto Rico)', - ), - 'es_VE' => array( - 'slug' => 'es-ve', - 'name' => 'Spanish (Venezuela)', - ), - 'et' => array( - 'slug' => 'et', - 'name' => 'Estonian', - ), - 'eu' => array( - 'slug' => 'eu', - 'name' => 'Basque', - ), - 'fa_IR' => array( - 'slug' => 'fa', - 'name' => 'Persian', - ), - 'fa_AF' => array( - 'slug' => 'fa-af', - 'name' => 'Persian (Afghanistan)', - ), - 'fuc' => array( - 'slug' => 'fuc', - 'name' => 'Fulah', - ), - 'fi' => array( - 'slug' => 'fi', - 'name' => 'Finnish', - ), - 'fo' => array( - 'slug' => 'fo', - 'name' => 'Faroese', - ), - 'fr_FR' => array( - 'slug' => 'fr', - 'name' => 'French (France)', - ), - 'fr_BE' => array( - 'slug' => 'fr-be', - 'name' => 'French (Belgium)', - ), - 'fr_CA' => array( - 'slug' => 'fr-ca', - 'name' => 'French (Canada)', - ), - 'frp' => array( - 'slug' => 'frp', - 'name' => 'Arpitan', - ), - 'fur' => array( - 'slug' => 'fur', - 'name' => 'Friulian', - ), - 'fy' => array( - 'slug' => 'fy', - 'name' => 'Frisian', - ), - 'ga' => array( - 'slug' => 'ga', - 'name' => 'Irish', - ), - 'gd' => array( - 'slug' => 'gd', - 'name' => 'Scottish Gaelic', - ), - 'gl_ES' => array( - 'slug' => 'gl', - 'name' => 'Galician', - ), - 'gn' => array( - 'slug' => 'gn', - 'name' => 'Guarani', - ), - 'gsw' => array( - 'slug' => 'gsw', - 'name' => 'Swiss German', - ), - 'gu' => array( - 'slug' => 'gu', - 'name' => 'Gujarati', - ), - 'hat' => array( - 'slug' => 'hat', - 'name' => 'Haitian Creole', - ), - 'hau' => array( - 'slug' => 'hau', - 'name' => 'Hausa', - ), - 'haw_US' => array( - 'slug' => 'haw', - 'name' => 'Hawaiian', - ), - 'haz' => array( - 'slug' => 'haz', - 'name' => 'Hazaragi', - ), - 'he_IL' => array( - 'slug' => 'he', - 'name' => 'Hebrew', - ), - 'hi_IN' => array( - 'slug' => 'hi', - 'name' => 'Hindi', - ), - 'hr' => array( - 'slug' => 'hr', - 'name' => 'Croatian', - ), - 'hu_HU' => array( - 'slug' => 'hu', - 'name' => 'Hungarian', - ), - 'hy' => array( - 'slug' => 'hy', - 'name' => 'Armenian', - ), - 'id_ID' => array( - 'slug' => 'id', - 'name' => 'Indonesian', - ), - 'ido' => array( - 'slug' => 'ido', - 'name' => 'Ido', - ), - 'is_IS' => array( - 'slug' => 'is', - 'name' => 'Icelandic', - ), - 'it_IT' => array( - 'slug' => 'it', - 'name' => 'Italian', - ), - 'ja' => array( - 'slug' => 'ja', - 'name' => 'Japanese', - ), - 'jv_ID' => array( - 'slug' => 'jv', - 'name' => 'Javanese', - ), - 'ka_GE' => array( - 'slug' => 'ka', - 'name' => 'Georgian', - ), - 'kab' => array( - 'slug' => 'kab', - 'name' => 'Kabyle', - ), - 'kal' => array( - 'slug' => 'kal', - 'name' => 'Greenlandic', - ), - 'kin' => array( - 'slug' => 'kin', - 'name' => 'Kinyarwanda', - ), - 'kk' => array( - 'slug' => 'kk', - 'name' => 'Kazakh', - ), - 'km' => array( - 'slug' => 'km', - 'name' => 'Khmer', - ), - 'kn' => array( - 'slug' => 'kn', - 'name' => 'Kannada', - ), - 'ko_KR' => array( - 'slug' => 'ko', - 'name' => 'Korean', - ), - 'kir' => array( - 'slug' => 'kir', - 'name' => 'Kyrgyz', - ), - 'lb_LU' => array( - 'slug' => 'lb', - 'name' => 'Luxembourgish', - ), - 'li' => array( - 'slug' => 'li', - 'name' => 'Limburgish', - ), - 'lin' => array( - 'slug' => 'lin', - 'name' => 'Lingala', - ), - 'lo' => array( - 'slug' => 'lo', - 'name' => 'Lao', - ), - 'lt_LT' => array( - 'slug' => 'lt', - 'name' => 'Lithuanian', - ), - 'lv' => array( - 'slug' => 'lv', - 'name' => 'Latvian', - ), - 'me_ME' => array( - 'slug' => 'me', - 'name' => 'Montenegrin', - ), - 'mg_MG' => array( - 'slug' => 'mg', - 'name' => 'Malagasy', - ), - 'mk_MK' => array( - 'slug' => 'mk', - 'name' => 'Macedonian', - ), - 'ml_IN' => array( - 'slug' => 'ml', - 'name' => 'Malayalam', - ), - 'mlt' => array( - 'slug' => 'mlt', - 'name' => 'Maltese', - ), - 'mn' => array( - 'slug' => 'mn', - 'name' => 'Mongolian', - ), - 'mr' => array( - 'slug' => 'mr', - 'name' => 'Marathi', - ), - 'mri' => array( - 'slug' => 'mri', - 'name' => 'Maori', - ), - 'ms_MY' => array( - 'slug' => 'ms', - 'name' => 'Malay', - ), - 'my_MM' => array( - 'slug' => 'mya', - 'name' => 'Myanmar (Burmese)', - ), - 'ne_NP' => array( - 'slug' => 'ne', - 'name' => 'Nepali', - ), - 'nb_NO' => array( - 'slug' => 'nb', - 'name' => 'Norwegian (Bokmal)', - ), - 'nl_NL' => array( - 'slug' => 'nl', - 'name' => 'Dutch', - ), - 'nl_BE' => array( - 'slug' => 'nl-be', - 'name' => 'Dutch (Belgium)', - ), - 'nn_NO' => array( - 'slug' => 'nn', - 'name' => 'Norwegian (Nynorsk)', - ), - 'oci' => array( - 'slug' => 'oci', - 'name' => 'Occitan', - ), - 'ory' => array( - 'slug' => 'ory', - 'name' => 'Oriya', - ), - 'os' => array( - 'slug' => 'os', - 'name' => 'Ossetic', - ), - 'pa_IN' => array( - 'slug' => 'pa', - 'name' => 'Punjabi', - ), - 'pl_PL' => array( - 'slug' => 'pl', - 'name' => 'Polish', - ), - 'pt_BR' => array( - 'slug' => 'pt-br', - 'name' => 'Portuguese (Brazil)', - ), - 'pt_PT' => array( - 'slug' => 'pt', - 'name' => 'Portuguese (Portugal)', - ), - 'ps' => array( - 'slug' => 'ps', - 'name' => 'Pashto', - ), - 'rhg' => array( - 'slug' => 'rhg', - 'name' => 'Rohingya', - ), - 'ro_RO' => array( - 'slug' => 'ro', - 'name' => 'Romanian', - ), - 'roh' => array( - 'slug' => 'roh', - 'name' => 'Romansh', - ), - 'ru_RU' => array( - 'slug' => 'ru', - 'name' => 'Russian', - ), - 'rue' => array( - 'slug' => 'rue', - 'name' => 'Rusyn', - ), - 'rup_MK' => array( - 'slug' => 'rup', - 'name' => 'Aromanian', - ), - 'sah' => array( - 'slug' => 'sah', - 'name' => 'Sakha', - ), - 'sa_IN' => array( - 'slug' => 'sa-in', - 'name' => 'Sanskrit', - ), - 'scn' => array( - 'slug' => 'scn', - 'name' => 'Sicilian', - ), - 'si_LK' => array( - 'slug' => 'si', - 'name' => 'Sinhala', - ), - 'sk_SK' => array( - 'slug' => 'sk', - 'name' => 'Slovak', - ), - 'sl_SI' => array( - 'slug' => 'sl', - 'name' => 'Slovenian', - ), - 'sna' => array( - 'slug' => 'sna', - 'name' => 'Shona', - ), - 'snd' => array( - 'slug' => 'snd', - 'name' => 'Sindhi', - ), - 'so_SO' => array( - 'slug' => 'so', - 'name' => 'Somali', - ), - 'sq' => array( - 'slug' => 'sq', - 'name' => 'Albanian', - ), - 'sq_XK' => array( - 'slug' => 'sq-xk', - 'name' => 'Shqip (Kosovo)', - ), - 'sr_RS' => array( - 'slug' => 'sr', - 'name' => 'Serbian', - ), - 'srd' => array( - 'slug' => 'srd', - 'name' => 'Sardinian', - ), - 'su_ID' => array( - 'slug' => 'su', - 'name' => 'Sundanese', - ), - 'sv_SE' => array( - 'slug' => 'sv', - 'name' => 'Swedish', - ), - 'sw' => array( - 'slug' => 'sw', - 'name' => 'Swahili', - ), - 'syr' => array( - 'slug' => 'syr', - 'name' => 'Syriac', - ), - 'szl' => array( - 'slug' => 'szl', - 'name' => 'Silesian', - ), - 'ta_IN' => array( - 'slug' => 'ta', - 'name' => 'Tamil', - ), - 'ta_LK' => array( - 'slug' => 'ta-lk', - 'name' => 'Tamil (Sri Lanka)', - ), - 'tah' => array( - 'slug' => 'tah', - 'name' => 'Tahitian', - ), - 'te' => array( - 'slug' => 'te', - 'name' => 'Telugu', - ), - 'tg' => array( - 'slug' => 'tg', - 'name' => 'Tajik', - ), - 'th' => array( - 'slug' => 'th', - 'name' => 'Thai', - ), - 'tir' => array( - 'slug' => 'tir', - 'name' => 'Tigrinya', - ), - 'tl' => array( - 'slug' => 'tl', - 'name' => 'Tagalog', - ), - 'tr_TR' => array( - 'slug' => 'tr', - 'name' => 'Turkish', - ), - 'tt_RU' => array( - 'slug' => 'tt', - 'name' => 'Tatar', - ), - 'tuk' => array( - 'slug' => 'tuk', - 'name' => 'Turkmen', - ), - 'twd' => array( - 'slug' => 'twd', - 'name' => 'Tweants', - ), - 'tzm' => array( - 'slug' => 'tzm', - 'name' => 'Tamazight (Central Atlas)', - ), - 'ug_CN' => array( - 'slug' => 'ug', - 'name' => 'Uighur', - ), - 'uk' => array( - 'slug' => 'uk', - 'name' => 'Ukrainian', - ), - 'ur' => array( - 'slug' => 'ur', - 'name' => 'Urdu', - ), - 'uz_UZ' => array( - 'slug' => 'uz', - 'name' => 'Uzbek', - ), - 'vi' => array( - 'slug' => 'vi', - 'name' => 'Vietnamese', - ), - 'wa' => array( - 'slug' => 'wa', - 'name' => 'Walloon', - ), - 'xho' => array( - 'slug' => 'xho', - 'name' => 'Xhosa', - ), - 'xmf' => array( - 'slug' => 'xmf', - 'name' => 'Mingrelian', - ), - 'yor' => array( - 'slug' => 'yor', - 'name' => 'Yoruba', - ), - 'zh_CN' => array( - 'slug' => 'zh-cn', - 'name' => 'Chinese (China)', - ), - 'zh_HK' => array( - 'slug' => 'zh-hk', - 'name' => 'Chinese (Hong Kong)', - ), - 'zh_TW' => array( - 'slug' => 'zh-tw', - 'name' => 'Chinese (Taiwan)', - ), - 'de_DE_formal' => array( - 'slug' => 'de/formal', - 'name' => 'German (Formal)', - ), - 'nl_NL_formal' => array( - 'slug' => 'nl/formal', - 'name' => 'Dutch (Formal)', - ), - 'de_CH_informal' => array( - 'slug' => 'de-ch/informal', - 'name' => 'Chinese (Taiwan)', - ), - 'pt_PT_ao90' => array( - 'slug' => 'pt/ao90', - 'name' => 'Portuguese (Portugal, AO90)', - ), - ); - - /** - * Check if we should load module for this. - * - * @param Product $product Product to check. - * - * @return bool Should load ? - */ - public function can_load( $product ) { - if ( $this->is_from_partner( $product ) ) { - return false; - } - if ( ! $product->is_wordpress_available() ) { - return false; - } - - $lang = $this->get_user_locale(); - - if ( 'en_US' === $lang ) { - return false; - } - - $languages = $this->get_translations( $product ); - - if ( ! is_array( $languages ) ) { - return false; - } - - if ( ! isset( $languages['translations'] ) ) { - return false; - } - - $languages = $languages['translations']; - - $available = wp_list_pluck( $languages, 'language' ); - - if ( in_array( $lang, $available ) ) { - return false; - } - - if ( ! isset( self::$locales[ $lang ] ) ) { - return false; - } - - return apply_filters( $product->get_slug() . '_sdk_enable_translate', true ); - } - - /** - * Get the user's locale. - */ - private function get_user_locale() { - global $wp_version; - if ( version_compare( $wp_version, '4.7.0', '>=' ) ) { - return get_user_locale(); - } - $user = wp_get_current_user(); - if ( $user ) { - $locale = $user->locale; - } - - return $locale ? $locale : get_locale(); - } - - /** - * Fetch translations from api. - * - * @param Product $product Product to check. - * - * @return mixed Translation array. - */ - private function get_translations( $product ) { - $cache_key = $product->get_key() . '_all_languages'; - $translations = get_transient( $cache_key ); - - if ( false === $translations ) { - require_once ABSPATH . 'wp-admin/includes/translation-install.php'; - $translations = translations_api( - $product->get_type() . 's', - array( - 'slug' => $product->get_slug(), - 'version' => $product->get_version(), - ) - ); - set_transient( $cache_key, $translations, WEEK_IN_SECONDS ); - } - - return $translations; - - } - - /** - * Add notification to queue. - * - * @param array $all_notifications Previous notification. - * - * @return array All notifications. - */ - public function add_notification( $all_notifications ) { - - $lang = $this->get_user_locale(); - $link = $this->get_locale_paths( $lang ); - $language_meta = self::$locales[ $lang ]; - - $heading = apply_filters( $this->product->get_key() . '_feedback_translate_heading', 'Improve {product}' ); - $heading = str_replace( - array( '{product}' ), - $this->product->get_friendly_name(), - $heading - ); - $message = apply_filters( - $this->product->get_key() . '_feedback_translation', - 'Translating {product} into as many languages as possible is a huge project. We still need help with a lot of them, so if you are good at translating into {language}, it would be greatly appreciated. -The process is easy, and you can join by following the link below!' - ); - - $message = str_replace( - [ '{product}', '{language}' ], - [ - $this->product->get_friendly_name(), - $language_meta['name'], - ], - $message - ); - - $button_submit = apply_filters( $this->product->get_key() . '_feedback_translate_button_do', 'Ok, I will gladly help.' ); - $button_cancel = apply_filters( $this->product->get_key() . '_feedback_translate_button_cancel', 'No, thanks.' ); - - $all_notifications[] = [ - 'id' => $this->product->get_key() . '_translate_flag', - 'heading' => $heading, - 'message' => $message, - 'ctas' => [ - 'confirm' => [ - 'link' => $link, - 'text' => $button_submit, - ], - 'cancel' => [ - 'link' => '#', - 'text' => $button_cancel, - ], - ], - ]; - - return $all_notifications; - } - - /** - * Return the locale path. - * - * @param string $locale Locale code. - * - * @return string Locale path. - */ - private function get_locale_paths( $locale ) { - if ( empty( $locale ) ) { - return ''; - } - - $slug = isset( self::$locales[ $locale ] ) ? self::$locales[ $locale ]['slug'] : ''; - if ( empty( $slug ) ) { - return ''; - } - if ( strpos( $slug, '/' ) === false ) { - $slug .= '/default'; - } - $url = 'https://translate.wordpress.org/projects/wp-' . $this->product->get_type() . 's/' . $this->product->get_slug() . '/' . ( $this->product->get_type() === 'plugin' ? 'dev/' : '' ) . $slug . '?filters%5Bstatus%5D=untranslated&sort%5Bby%5D=random'; - - return $url; - } - - /** - * Load module logic. - * - * @param Product $product Product to load. - * - * @return Translate Module instance. - */ - public function load( $product ) { - - $this->product = $product; - - add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ] ); - - return $this; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php deleted file mode 100644 index f026f65..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +++ /dev/null @@ -1,860 +0,0 @@ - array( - 'id' => 3, - 'type' => 'text', - 'placeholder' => 'What\'s the plugin\'s name?', - ), - 'I could not get the plugin to work' => array( - 'type' => 'textarea', - 'placeholder' => 'What problem are you experiencing?', - 'id' => 4, - ), - 'I no longer need the plugin' => array( - 'id' => 5, - 'type' => 'textarea', - 'placeholder' => 'If you could improve one thing about our product, what would it be?', - ), - 'It\'s a temporary deactivation. I\'m just debugging an issue.' => array( - 'type' => 'textarea', - 'placeholder' => 'What problem are you experiencing?', - 'id' => 6, - ), - ); - /** - * Default options for theme. - * - * @var array $options_theme The main options list for themes. - */ - private $options_theme = array( - 'I don\'t know how to make it look like demo' => array( - 'id' => 7, - ), - 'It lacks options' => array( - 'placeholder' => 'What option is missing?', - 'type' => 'text', - 'id' => 8, - ), - 'Is not working with a plugin that I need' => array( - 'id' => 9, - 'type' => 'text', - 'placeholder' => 'What is the name of the plugin', - ), - 'I want to try a new design, I don\'t like {theme} style' => array( - 'id' => 10, - ), - ); - /** - * Default other option. - * - * @var array $other The other option - */ - private $other = array( - 'Other' => array( - 'id' => 999, - 'type' => 'textarea', - 'placeholder' => 'What can we do better?', - ), - ); - /** - * Default heading for plugin. - * - * @var string $heading_plugin The heading of the modal - */ - private $heading_plugin = 'What\'s wrong?'; - /** - * Default heading for theme. - * - * @var string $heading_theme The heading of the modal - */ - private $heading_theme = 'What does not work for you in {theme}?'; - /** - * Default submit button action text. - * - * @var string $button_submit The text of the deactivate button - */ - private $button_submit = 'Submit & Deactivate'; - /** - * Default cancel button. - * - * @var string $button_cancel The text of the cancel button - */ - private $button_cancel = 'Skip & Deactivate'; - - /** - * Loads the additional resources - */ - public function load_resources() { - $screen = get_current_screen(); - - if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) { - return; - } - - $this->add_feedback_popup_style(); - - if ( $this->product->get_type() === 'theme' ) { - $this->add_theme_feedback_drawer_js(); - $this->render_theme_feedback_popup(); - - return; - } - $this->add_plugin_feedback_popup_js(); - $this->render_plugin_feedback_popup(); - } - - /** - * Render theme feedback drawer. - */ - private function render_theme_feedback_popup() { - $heading = str_replace( '{theme}', $this->product->get_name(), $this->heading_theme ); - $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', 'Submit' ); - $options = $this->options_theme; - $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) ); - $info_disclosure_link = '' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . ''; - - $options += $this->other; - - ?> - - - - product->get_key(); - ?> - - product->get_key() . '_uninstall_feedback_after_js' ); - } - - /** - * Render the options list. - * - * @param array $options the options for the feedback form. - */ - private function render_options_list( $options ) { - $key = $this->product->get_key(); - $inputs_row_map = [ - 'text' => 1, - 'textarea' => 2, - ]; - ?> - - product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel ); - $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit ); - $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) ); - $info_disclosure_link = '' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . ''; - - $options += $this->other; - ?> - - - product->get_slug() . '_uninstall_feedback_popup'; - $key = $this->product->get_key(); - ?> - - product->get_key() . '_uninstall_feedback_after_js' ); - } - - /** - * Get the disclosure labels markup. - * - * @return string - */ - private function get_disclosure_labels() { - $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product ); - $disclosure_labels = array_merge( - [ - 'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No email address or IP addresses are transmitted after you submit the survey.', - 'items' => [ - sprintf( '%s %s version %s %s %s %s', '', ucwords( $this->product->get_type() ), '', '', $this->product->get_version(), '' ), - sprintf( '%sCurrent website:%s %s %s %s', '', '', '', get_site_url(), '' ), - sprintf( '%sUsage time:%s %s %s%s', '', '', '', ( time() - $this->product->get_install_time() ), 's' ), - sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '', '', '', '' ), - ], - ], - $disclosure_new_labels - ); - - $info_disclosure_content = '

' . wp_kses_post( $disclosure_labels['title'] ) . '

    '; - foreach ( $disclosure_labels['items'] as $disclosure_item ) { - $info_disclosure_content .= sprintf( '
  • %s
  • ', wp_kses_post( $disclosure_item ) ); - } - $info_disclosure_content .= '
'; - - return $info_disclosure_content; - } - - /** - * Randomizes the options array. - * - * @param array $options The options array. - */ - public function randomize_options( $options ) { - $new = array(); - $keys = array_keys( $options ); - shuffle( $keys ); - - foreach ( $keys as $key ) { - $new[ $key ] = $options[ $key ]; - } - - return $new; - } - - /** - * Called when the deactivate button is clicked. - */ - public function post_deactivate() { - check_ajax_referer( (string) __CLASS__, 'nonce' ); - - $this->post_deactivate_or_cancel(); - - if ( empty( $_POST['id'] ) ) { - - wp_send_json( [] ); - - return; - } - $this->call_api( - array( - 'type' => 'deactivate', - 'id' => sanitize_key( $_POST['id'] ), - 'comment' => isset( $_POST['msg'] ) ? sanitize_textarea_field( $_POST['msg'] ) : '', - ) - ); - wp_send_json( [] ); - - } - - /** - * Called when the deactivate/cancel button is clicked. - */ - private function post_deactivate_or_cancel() { - if ( ! isset( $_POST['type'] ) || ! isset( $_POST['key'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function. - return; - } - if ( 'theme' !== $_POST['type'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function. - return; - } - - set_transient( 'ti_sdk_pause_' . sanitize_text_field( $_POST['key'] ), true, self::PAUSE_DEACTIVATE_WINDOW_DAYS * DAY_IN_SECONDS );//phpcs:ignore WordPress.Security.NonceVerification.Missing, Nonce already present in caller function. - - } - - /** - * Calls the API - * - * @param array $attributes The attributes of the post body. - * - * @return bool Is the request succesfull? - */ - protected function call_api( $attributes ) { - $slug = $this->product->get_slug(); - $version = $this->product->get_version(); - $attributes['slug'] = $slug; - $attributes['version'] = $version; - $attributes['url'] = get_site_url(); - $attributes['active_time'] = ( time() - $this->product->get_install_time() ); - - $response = wp_remote_post( - self::FEEDBACK_ENDPOINT, - array( - 'body' => $attributes, - ) - ); - - return is_wp_error( $response ); - } - - /** - * Should we load this object?. - * - * @param Product $product Product object. - * - * @return bool Should we load the module? - */ - public function can_load( $product ) { - if ( $this->is_from_partner( $product ) ) { - return false; - } - if ( $product->is_theme() && ( false !== get_transient( 'ti_sdk_pause_' . $product->get_key(), false ) ) ) { - return false; - } - - if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { - return true; - } - global $pagenow; - - if ( ! isset( $pagenow ) || empty( $pagenow ) ) { - return false; - } - - if ( $product->is_plugin() && 'plugins.php' !== $pagenow ) { - return false; - - } - if ( $product->is_theme() && 'theme-install.php' !== $pagenow ) { - return false; - } - - return true; - } - - /** - * Loads module hooks. - * - * @param Product $product Product details. - * - * @return Uninstall_Feedback Current module instance. - */ - public function load( $product ) { - - if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) { - return; - } - - $this->product = $product; - add_action( 'admin_head', array( $this, 'load_resources' ) ); - add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) ); - - return $this; - } -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Modules/Welcome.php b/vendor/codeinwp/themeisle-sdk/src/Modules/Welcome.php deleted file mode 100644 index 8650e60..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Modules/Welcome.php +++ /dev/null @@ -1,193 +0,0 @@ -_welcome_metadata', function() { - * return [ - * 'is_enabled' => , - * 'pro_name' => 'Product PRO name', - * 'logo' => '', - * 'cta_link' => tsdk_utmify( 'https://link_to_upgrade.with/?discount=') - * ]; - * } ); - * ``` - * - * @package ThemeIsleSDK - * @subpackage Modules - * @copyright Copyright (c) 2023, Bogdan Preda - * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License - * @since 1.0.0 - */ - -namespace ThemeisleSDK\Modules; - -// Exit if accessed directly. -use ThemeisleSDK\Common\Abstract_Module; - -if ( ! defined( 'ABSPATH' ) ) { - exit; -} - -/** - * Promotions module for ThemeIsle SDK. - */ -class Welcome extends Abstract_Module { - - /** - * Debug mode. - * - * @var bool - */ - private $debug = false; - - /** - * Welcome metadata. - * - * @var array - */ - private $welcome_discounts = array(); - - /** - * Check that we can load this module. - * - * @param \ThemeisleSDK\Product $product The product. - * - * @return bool - */ - public function can_load( $product ) { - $this->debug = apply_filters( 'themeisle_sdk_welcome_debug', $this->debug ); - $welcome_metadata = apply_filters( $product->get_key() . '_welcome_metadata', array() ); - - $is_welcome_enabled = $this->is_welcome_meta_valid( $welcome_metadata ); - - if ( $is_welcome_enabled ) { - $this->welcome_discounts[ $product->get_key() ] = $welcome_metadata; - } - - return $this->debug || $is_welcome_enabled; - } - - /** - * Check that the metadata is valid and the welcome is enabled. - * - * @param array $welcome_metadata The metadata to validate. - * - * @return bool - */ - private function is_welcome_meta_valid( $welcome_metadata ) { - return ! empty( $welcome_metadata ) && isset( $welcome_metadata['is_enabled'] ) && $welcome_metadata['is_enabled']; - } - - /** - * Load the module. - * - * @param \ThemeisleSDK\Product $product The product. - * - * @return $this - */ - public function load( $product ) { - if ( ! current_user_can( 'install_plugins' ) ) { - return; - } - - $this->product = $product; - if ( ! $this->is_time_to_show_welcome() && $this->debug === false ) { - return; - } - - add_filter( 'themeisle_sdk_registered_notifications', [ $this, 'add_notification' ], 99, 1 ); - - return $this; - } - - /** - * Check if it's time to show the welcome. - * - * @return bool - */ - private function is_time_to_show_welcome() { - // if 7 days from install have not passed, don't show the welcome. - if ( $this->product->get_install_time() + 7 * DAY_IN_SECONDS > time() ) { - return false; - } - - // if 12 days from install have passed, don't show the welcome ( after 7 days for 5 days ). - if ( $this->product->get_install_time() + 12 * DAY_IN_SECONDS < time() ) { - return false; - } - - return true; - } - - /** - * Add the welcome notification. - * Will block all other notifications if a welcome notification is present. - * - * @return array - */ - public function add_notification( $all_notifications ) { - if ( empty( $this->welcome_discounts ) ) { - return $all_notifications; - } - - if ( ! isset( $this->welcome_discounts[ $this->product->get_key() ] ) ) { - return $all_notifications; - } - - // filter out the notifications that are not welcome upsells - // if we arrived here we will have at least one welcome upsell - $all_notifications = array_filter( - $all_notifications, - function( $notification ) { - return strpos( $notification['id'], '_welcome_upsell_flag' ) !== false; - } - ); - - $offer = $this->welcome_discounts[ $this->product->get_key() ]; - - $response = []; - $logo = isset( $offer['logo'] ) ? $offer['logo'] : ''; - $pro_name = isset( $offer['pro_name'] ) ? $offer['pro_name'] : $this->product->get_friendly_name() . ' PRO'; - - $link = $offer['cta_link']; - - $message = apply_filters( $this->product->get_key() . '_welcome_upsell_message', '

You\'ve been using {product} for 7 days now and we appreciate your loyalty! We also want to make sure you\'re getting the most out of our product. That\'s why we\'re offering you a special deal - upgrade to {pro_product} in the next 5 days and receive a discount of up to 30%. Upgrade now and unlock all the amazing features of {pro_product}!

' ); - - $button_submit = apply_filters( $this->product->get_key() . '_feedback_review_button_do', 'Upgrade Now!' ); - $button_cancel = apply_filters( $this->product->get_key() . '_feedback_review_button_cancel', 'No, thanks.' ); - $message = str_replace( - [ '{product}', '{pro_product}', '{cta_link}' ], - [ - $this->product->get_friendly_name(), - $pro_name, - $link, - ], - $message - ); - - $all_notifications[] = [ - 'id' => $this->product->get_key() . '_welcome_upsell_flag', - 'message' => $message, - 'img_src' => $logo, - 'ctas' => [ - 'confirm' => [ - 'link' => $link, - 'text' => $button_submit, - ], - 'cancel' => [ - 'link' => '#', - 'text' => $button_cancel, - ], - ], - 'type' => 'info', - ]; - - $key = array_rand( $all_notifications ); - $response[] = $all_notifications[ $key ]; - - return $response; - } - -} diff --git a/vendor/codeinwp/themeisle-sdk/src/Product.php b/vendor/codeinwp/themeisle-sdk/src/Product.php deleted file mode 100644 index 17f9d1f..0000000 --- a/vendor/codeinwp/themeisle-sdk/src/Product.php +++ /dev/null @@ -1,460 +0,0 @@ -basefile = $basefile; - $this->setup_from_path(); - $this->setup_from_fileheaders(); - } - } - $install = get_option( $this->get_key() . '_install', 0 ); - if ( 0 === $install ) { - $install = time(); - update_option( $this->get_key() . '_install', time() ); - } - $this->install = $install; - self::$cached_products[ crc32( $basefile ) ] = $this; - } - - /** - * Return a product. - * - * @param string $basefile Product basefile. - * - * @return Product Product Object. - */ - public static function get( $basefile ) { - $key = crc32( $basefile ); - if ( isset( self::$cached_products[ $key ] ) ) { - return self::$cached_products[ $key ]; - } - self::$cached_products[ $key ] = new Product( $basefile ); - - return self::$cached_products[ $key ]; - } - - /** - * Setup props from path. - */ - public function setup_from_path() { - $this->file = basename( $this->basefile ); - $dir = dirname( $this->basefile ); - $this->slug = basename( $dir ); - $exts = explode( '.', $this->basefile ); - $ext = $exts[ count( $exts ) - 1 ]; - if ( 'css' === $ext ) { - $this->type = 'theme'; - } - if ( 'php' === $ext ) { - $this->type = 'plugin'; - } - $this->key = self::key_ready_name( $this->slug ); - } - - /** - * Normalize string. - * - * @param string $string the String to be normalized for cron handler. - * - * @return string $name The normalized string. - */ - public static function key_ready_name( $string ) { - return str_replace( '-', '_', strtolower( trim( $string ) ) ); - } - - /** - * Setup props from fileheaders. - */ - public function setup_from_fileheaders() { - $file_headers = array( - 'Requires License' => 'Requires License', - 'WordPress Available' => 'WordPress Available', - 'Pro Slug' => 'Pro Slug', - 'Version' => 'Version', - ); - if ( 'plugin' === $this->type ) { - $file_headers['Name'] = 'Plugin Name'; - $file_headers['AuthorName'] = 'Author'; - $file_headers['AuthorURI'] = 'Author URI'; - } - if ( 'theme' === $this->type ) { - $file_headers['Name'] = 'Theme Name'; - $file_headers['AuthorName'] = 'Author'; - $file_headers['AuthorURI'] = 'Author URI'; - } - $file_headers = get_file_data( $this->basefile, $file_headers ); - - $this->name = $file_headers['Name']; - $this->store_name = $file_headers['AuthorName']; - $this->author_url = $file_headers['AuthorURI']; - $this->store_url = $file_headers['AuthorURI']; - - $this->requires_license = ( 'yes' === $file_headers['Requires License'] ) ? true : false; - $this->wordpress_available = ( 'yes' === $file_headers['WordPress Available'] ) ? true : false; - $this->pro_slug = ! empty( $file_headers['Pro Slug'] ) ? $file_headers['Pro Slug'] : ''; - $this->version = $file_headers['Version']; - - } - - /** - * Return the product key. - * - * @return string The product key. - */ - public function get_key() { - return $this->key; - } - - /** - * Check if the product is either theme or plugin. - * - * @return string Product type. - */ - public function get_type() { - return $this->type; - } - - /** - * Return if the product is used as a plugin. - * - * @return bool Is plugin? - */ - public function is_plugin() { - return self::PLUGIN_TYPE === $this->type; - } - - /** - * Return if the product is used as a theme. - * - * @return bool Is theme ? - */ - public function is_theme() { - return self::THEME_TYPE === $this->type; - } - - /** - * Returns the product slug. - * - * @return string The product slug. - */ - public function get_slug() { - return $this->slug; - } - - /** - * The magic var_dump info method. - * - * @return array Debug info. - */ - public function __debugInfo() { - return array( - 'name' => $this->name, - 'slug' => $this->slug, - 'version' => $this->version, - 'basefile' => $this->basefile, - 'key' => $this->key, - 'type' => $this->type, - 'store_name' => $this->store_name, - 'store_url' => $this->store_url, - 'wordpress_available' => $this->wordpress_available, - 'requires_license' => $this->requires_license, - ); - - } - - /** - * Getter for product version. - * - * @return string The product version. - */ - public function get_version() { - return $this->version; - } - - /** - * Returns current product license, if available. - * - * @return string Return license key, if available. - */ - public function get_license() { - - if ( ! $this->requires_license() && ! $this->is_wordpress_available() ) { - return 'free'; - } - $license_data = get_option( $this->get_key() . '_license_data', '' ); - - if ( empty( $license_data ) ) { - return get_option( $this->get_key() . '_license', '' ); - } - if ( ! isset( $license_data->key ) ) { - return get_option( $this->get_key() . '_license', '' ); - } - - return $license_data->key; - } - - /** - * Either the product requires license or not. - * - * @return bool Either requires license or not. - */ - public function requires_license() { - return $this->requires_license; - } - - /** - * If product is available on wordpress.org or not. - * - * @return bool Either is wp available or not. - */ - public function is_wordpress_available() { - return $this->wordpress_available; - } - - /** - * Return friendly name. - * - * @return string Friendly name. - */ - public function get_friendly_name() { - $name = apply_filters( $this->get_key() . '_friendly_name', trim( str_replace( 'Lite', '', $this->get_name() ) ) ); - $name = rtrim( $name, '- ()' ); - - return $name; - } - - /** - * Return the product version cache key. - * - * @return string The product version cache key. - */ - public function get_cache_key() { - return $this->get_key() . '_' . preg_replace( '/[^0-9a-zA-Z ]/m', '', $this->get_version() ) . 'versions'; - } - - /** - * Getter for product name. - * - * @return string The product name. - */ - public function get_name() { - return $this->name; - } - - /** - * Returns the Store name. - * - * @return string Store name. - */ - public function get_store_name() { - return $this->store_name; - } - - /** - * Returns the store url. - * - * @return string The store url. - */ - public function get_store_url() { - - if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) { - return 'https://store.themeisle.com/'; - } - - return $this->store_url; - } - - /** - * Returns product basefile, which holds the metaheaders. - * - * @return string The product basefile. - */ - public function get_basefile() { - return $this->basefile; - } - - /** - * Get changelog url. - * - * @return string Changelog url. - */ - public function get_changelog() { - return add_query_arg( - [ - 'name' => rawurlencode( $this->get_name() ), - 'edd_action' => 'view_changelog', - ], - $this->get_store_url() - ); - } - - /** - * Returns product filename. - * - * @return string The product filename. - */ - public function get_file() { - return $this->file; - } - - /** - * Returns the pro slug, if available. - * - * @return string The pro slug. - */ - public function get_pro_slug() { - return $this->pro_slug; - } - - /** - * Return the install timestamp. - * - * @return int The install timestamp. - */ - public function get_install_time() { - return $this->install; - } - - /** - * Returns the URL of the product base file. - * - * @param string $path The path to the file. - * - * @return string The URL of the product base file. - */ - public function get_base_url( $path = '/' ) { - if ( $this->type ) { - return plugins_url( $path, $this->basefile ); - } - } - -} diff --git a/vendor/codeinwp/themeisle-sdk/start.php b/vendor/codeinwp/themeisle-sdk/start.php deleted file mode 100644 index 922e374..0000000 --- a/vendor/codeinwp/themeisle-sdk/start.php +++ /dev/null @@ -1,54 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var \Closure(string):void */ - private static $includeFile; - - /** @var string|null */ - private $vendorDir; - - // PSR-4 - /** - * @var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var list - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * List of PSR-0 prefixes - * - * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) - * - * @var array>> - */ - private $prefixesPsr0 = array(); - /** - * @var list - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var array - */ - private $missingClasses = array(); - - /** @var string|null */ - private $apcuPrefix; - - /** - * @var array - */ - private static $registeredLoaders = array(); - - /** - * @param string|null $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return array> - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return list - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return list - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return array Array of classname => path - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders keyed by their corresponding vendor directories. - * - * @return array - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } - - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } -} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php deleted file mode 100644 index 51e734a..0000000 --- a/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,359 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints((string) $constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require $vendorDir.'/composer/installed.php'; - $installed[] = self::$installedByVendor[$vendorDir] = $required; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require __DIR__ . '/installed.php'; - self::$installed = $required; - } else { - self::$installed = array(); - } - } - - if (self::$installed !== array()) { - $installed[] = self::$installed; - } - - return $installed; - } -} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE deleted file mode 100644 index f27399a..0000000 --- a/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -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 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. - diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php deleted file mode 100644 index 097728c..0000000 --- a/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,12 +0,0 @@ - $vendorDir . '/composer/InstalledVersions.php', - 'WP_Async_Request' => $vendorDir . '/deliciousbrains/wp-background-processing/classes/wp-async-request.php', - 'WP_Background_Process' => $vendorDir . '/deliciousbrains/wp-background-processing/classes/wp-background-process.php', -); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php deleted file mode 100644 index 36c014e..0000000 --- a/vendor/composer/autoload_files.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/codeinwp/themeisle-sdk/load.php', -); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3..0000000 --- a/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ -register(true); - - $filesToLoad = \Composer\Autoload\ComposerStaticInit718cd62be4fc0d1c7deeabef60d4e8b7::$files; - $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } - }, null, null); - foreach ($filesToLoad as $fileIdentifier => $file) { - $requireFile($fileIdentifier, $file); - } - - return $loader; - } -} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php deleted file mode 100644 index e74e4ee..0000000 --- a/vendor/composer/autoload_static.php +++ /dev/null @@ -1,26 +0,0 @@ - __DIR__ . '/..' . '/codeinwp/themeisle-sdk/load.php', - ); - - public static $classMap = array ( - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'WP_Async_Request' => __DIR__ . '/..' . '/deliciousbrains/wp-background-processing/classes/wp-async-request.php', - 'WP_Background_Process' => __DIR__ . '/..' . '/deliciousbrains/wp-background-processing/classes/wp-background-process.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->classMap = ComposerStaticInit718cd62be4fc0d1c7deeabef60d4e8b7::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json deleted file mode 100644 index 44a4008..0000000 --- a/vendor/composer/installed.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "packages": [ - { - "name": "codeinwp/themeisle-sdk", - "version": "3.3.14", - "version_normalized": "3.3.14.0", - "source": { - "type": "git", - "url": "https://github.com/Codeinwp/themeisle-sdk.git", - "reference": "662952078c57b12e4d3af9bc98ef847ea3500206" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/662952078c57b12e4d3af9bc98ef847ea3500206", - "reference": "662952078c57b12e4d3af9bc98ef847ea3500206", - "shasum": "" - }, - "require-dev": { - "codeinwp/phpcs-ruleset": "dev-main" - }, - "time": "2024-02-27T17:30:04+00:00", - "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "ThemeIsle team", - "email": "friends@themeisle.com", - "homepage": "https://themeisle.com" - } - ], - "description": "ThemeIsle SDK", - "homepage": "https://github.com/Codeinwp/themeisle-sdk", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/Codeinwp/themeisle-sdk/issues", - "source": "https://github.com/Codeinwp/themeisle-sdk/tree/v3.3.14" - }, - "install-path": "../codeinwp/themeisle-sdk" - }, - { - "name": "deliciousbrains/wp-background-processing", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/deliciousbrains/wp-background-processing.git", - "reference": "2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/deliciousbrains/wp-background-processing/zipball/2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800", - "reference": "2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "suggest": { - "coenjacobs/mozart": "Easily wrap this library with your own prefix, to prevent collisions when multiple plugins use this library" - }, - "time": "2020-07-31T07:00:11+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "classes/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Delicious Brains", - "email": "nom@deliciousbrains.com" - } - ], - "description": "WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.", - "support": { - "issues": "https://github.com/deliciousbrains/wp-background-processing/issues", - "source": "https://github.com/deliciousbrains/wp-background-processing/tree/master" - }, - "install-path": "../deliciousbrains/wp-background-processing" - } - ], - "dev": false, - "dev-package-names": [] -} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php deleted file mode 100644 index f2ad383..0000000 --- a/vendor/composer/installed.php +++ /dev/null @@ -1,41 +0,0 @@ - array( - 'name' => 'codeinwp/wp-cloudflare-super-page-cache', - 'pretty_version' => 'v4.7.7', - 'version' => '4.7.7.0', - 'reference' => '6bd071a3922831eedcdceb0056a286228c8ffbdf', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev' => false, - ), - 'versions' => array( - 'codeinwp/themeisle-sdk' => array( - 'pretty_version' => '3.3.14', - 'version' => '3.3.14.0', - 'reference' => '662952078c57b12e4d3af9bc98ef847ea3500206', - 'type' => 'library', - 'install_path' => __DIR__ . '/../codeinwp/themeisle-sdk', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'codeinwp/wp-cloudflare-super-page-cache' => array( - 'pretty_version' => 'v4.7.7', - 'version' => '4.7.7.0', - 'reference' => '6bd071a3922831eedcdceb0056a286228c8ffbdf', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'deliciousbrains/wp-background-processing' => array( - 'pretty_version' => '1.0.2', - 'version' => '1.0.2.0', - 'reference' => '2cbee1abd1b49e1133cd8f611df4d4fc5a8b9800', - 'type' => 'library', - 'install_path' => __DIR__ . '/../deliciousbrains/wp-background-processing', - 'aliases' => array(), - 'dev_requirement' => false, - ), - ), -); diff --git a/vendor/deliciousbrains/wp-background-processing/classes/wp-async-request.php b/vendor/deliciousbrains/wp-background-processing/classes/wp-async-request.php deleted file mode 100644 index 7a37dd6..0000000 --- a/vendor/deliciousbrains/wp-background-processing/classes/wp-async-request.php +++ /dev/null @@ -1,181 +0,0 @@ -identifier = $this->prefix . '_' . $this->action; - - add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) ); - add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) ); - } - - /** - * Set data used during the request - * - * @param array $data Data. - * - * @return $this - */ - public function data( $data ) { - $this->data = $data; - - return $this; - } - - /** - * Dispatch the async request - * - * @return array|WP_Error - */ - public function dispatch() { - $url = add_query_arg( $this->get_query_args(), $this->get_query_url() ); - $args = $this->get_post_args(); - - return wp_remote_post( esc_url_raw( $url ), $args ); - } - - /** - * Get query args - * - * @return array - */ - protected function get_query_args() { - if ( property_exists( $this, 'query_args' ) ) { - return $this->query_args; - } - - $args = array( - 'action' => $this->identifier, - 'nonce' => wp_create_nonce( $this->identifier ), - ); - - /** - * Filters the post arguments used during an async request. - * - * @param array $url - */ - return apply_filters( $this->identifier . '_query_args', $args ); - } - - /** - * Get query URL - * - * @return string - */ - protected function get_query_url() { - if ( property_exists( $this, 'query_url' ) ) { - return $this->query_url; - } - - $url = admin_url( 'admin-ajax.php' ); - - /** - * Filters the post arguments used during an async request. - * - * @param string $url - */ - return apply_filters( $this->identifier . '_query_url', $url ); - } - - /** - * Get post args - * - * @return array - */ - protected function get_post_args() { - if ( property_exists( $this, 'post_args' ) ) { - return $this->post_args; - } - - $args = array( - 'timeout' => 0.01, - 'blocking' => false, - 'body' => $this->data, - 'cookies' => $_COOKIE, - 'sslverify' => apply_filters( 'https_local_ssl_verify', false ), - ); - - /** - * Filters the post arguments used during an async request. - * - * @param array $args - */ - return apply_filters( $this->identifier . '_post_args', $args ); - } - - /** - * Maybe handle - * - * Check for correct nonce and pass to handler. - */ - public function maybe_handle() { - // Don't lock up other requests while processing - session_write_close(); - - check_ajax_referer( $this->identifier, 'nonce' ); - - $this->handle(); - - wp_die(); - } - - /** - * Handle - * - * Override this method to perform any actions required - * during the async request. - */ - abstract protected function handle(); - -} diff --git a/vendor/deliciousbrains/wp-background-processing/classes/wp-background-process.php b/vendor/deliciousbrains/wp-background-processing/classes/wp-background-process.php deleted file mode 100644 index ce7904a..0000000 --- a/vendor/deliciousbrains/wp-background-processing/classes/wp-background-process.php +++ /dev/null @@ -1,505 +0,0 @@ -cron_hook_identifier = $this->identifier . '_cron'; - $this->cron_interval_identifier = $this->identifier . '_cron_interval'; - - add_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) ); - add_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) ); - } - - /** - * Dispatch - * - * @access public - * @return void - */ - public function dispatch() { - // Schedule the cron healthcheck. - $this->schedule_event(); - - // Perform remote post. - return parent::dispatch(); - } - - /** - * Push to queue - * - * @param mixed $data Data. - * - * @return $this - */ - public function push_to_queue( $data ) { - $this->data[] = $data; - - return $this; - } - - /** - * Save queue - * - * @return $this - */ - public function save() { - $key = $this->generate_key(); - - if ( ! empty( $this->data ) ) { - update_site_option( $key, $this->data ); - } - - return $this; - } - - /** - * Update queue - * - * @param string $key Key. - * @param array $data Data. - * - * @return $this - */ - public function update( $key, $data ) { - if ( ! empty( $data ) ) { - update_site_option( $key, $data ); - } - - return $this; - } - - /** - * Delete queue - * - * @param string $key Key. - * - * @return $this - */ - public function delete( $key ) { - delete_site_option( $key ); - - return $this; - } - - /** - * Generate key - * - * Generates a unique key based on microtime. Queue items are - * given a unique key so that they can be merged upon save. - * - * @param int $length Length. - * - * @return string - */ - protected function generate_key( $length = 64 ) { - $unique = md5( microtime() . rand() ); - $prepend = $this->identifier . '_batch_'; - - return substr( $prepend . $unique, 0, $length ); - } - - /** - * Maybe process queue - * - * Checks whether data exists within the queue and that - * the process is not already running. - */ - public function maybe_handle() { - // Don't lock up other requests while processing - session_write_close(); - - if ( $this->is_process_running() ) { - // Background process already running. - wp_die(); - } - - if ( $this->is_queue_empty() ) { - // No data to process. - wp_die(); - } - - check_ajax_referer( $this->identifier, 'nonce' ); - - $this->handle(); - - wp_die(); - } - - /** - * Is queue empty - * - * @return bool - */ - protected function is_queue_empty() { - global $wpdb; - - $table = $wpdb->options; - $column = 'option_name'; - - if ( is_multisite() ) { - $table = $wpdb->sitemeta; - $column = 'meta_key'; - } - - $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; - - $count = $wpdb->get_var( $wpdb->prepare( " - SELECT COUNT(*) - FROM {$table} - WHERE {$column} LIKE %s - ", $key ) ); - - return ( $count > 0 ) ? false : true; - } - - /** - * Is process running - * - * Check whether the current process is already running - * in a background process. - */ - protected function is_process_running() { - if ( get_site_transient( $this->identifier . '_process_lock' ) ) { - // Process already running. - return true; - } - - return false; - } - - /** - * Lock process - * - * Lock the process so that multiple instances can't run simultaneously. - * Override if applicable, but the duration should be greater than that - * defined in the time_exceeded() method. - */ - protected function lock_process() { - $this->start_time = time(); // Set start time of current process. - - $lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute - $lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration ); - - set_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration ); - } - - /** - * Unlock process - * - * Unlock the process so that other instances can spawn. - * - * @return $this - */ - protected function unlock_process() { - delete_site_transient( $this->identifier . '_process_lock' ); - - return $this; - } - - /** - * Get batch - * - * @return stdClass Return the first batch from the queue - */ - protected function get_batch() { - global $wpdb; - - $table = $wpdb->options; - $column = 'option_name'; - $key_column = 'option_id'; - $value_column = 'option_value'; - - if ( is_multisite() ) { - $table = $wpdb->sitemeta; - $column = 'meta_key'; - $key_column = 'meta_id'; - $value_column = 'meta_value'; - } - - $key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%'; - - $query = $wpdb->get_row( $wpdb->prepare( " - SELECT * - FROM {$table} - WHERE {$column} LIKE %s - ORDER BY {$key_column} ASC - LIMIT 1 - ", $key ) ); - - $batch = new stdClass(); - $batch->key = $query->$column; - $batch->data = maybe_unserialize( $query->$value_column ); - - return $batch; - } - - /** - * Handle - * - * Pass each queue item to the task handler, while remaining - * within server memory and time limit constraints. - */ - protected function handle() { - $this->lock_process(); - - do { - $batch = $this->get_batch(); - - foreach ( $batch->data as $key => $value ) { - $task = $this->task( $value ); - - if ( false !== $task ) { - $batch->data[ $key ] = $task; - } else { - unset( $batch->data[ $key ] ); - } - - if ( $this->time_exceeded() || $this->memory_exceeded() ) { - // Batch limits reached. - break; - } - } - - // Update or delete current batch. - if ( ! empty( $batch->data ) ) { - $this->update( $batch->key, $batch->data ); - } else { - $this->delete( $batch->key ); - } - } while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() ); - - $this->unlock_process(); - - // Start next batch or complete process. - if ( ! $this->is_queue_empty() ) { - $this->dispatch(); - } else { - $this->complete(); - } - - wp_die(); - } - - /** - * Memory exceeded - * - * Ensures the batch process never exceeds 90% - * of the maximum WordPress memory. - * - * @return bool - */ - protected function memory_exceeded() { - $memory_limit = $this->get_memory_limit() * 0.9; // 90% of max memory - $current_memory = memory_get_usage( true ); - $return = false; - - if ( $current_memory >= $memory_limit ) { - $return = true; - } - - return apply_filters( $this->identifier . '_memory_exceeded', $return ); - } - - /** - * Get memory limit - * - * @return int - */ - protected function get_memory_limit() { - if ( function_exists( 'ini_get' ) ) { - $memory_limit = ini_get( 'memory_limit' ); - } else { - // Sensible default. - $memory_limit = '128M'; - } - - if ( ! $memory_limit || - 1 === intval( $memory_limit ) ) { - // Unlimited, set to 32GB. - $memory_limit = '32000M'; - } - - return wp_convert_hr_to_bytes( $memory_limit ); - } - - /** - * Time exceeded. - * - * Ensures the batch never exceeds a sensible time limit. - * A timeout limit of 30s is common on shared hosting. - * - * @return bool - */ - protected function time_exceeded() { - $finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds - $return = false; - - if ( time() >= $finish ) { - $return = true; - } - - return apply_filters( $this->identifier . '_time_exceeded', $return ); - } - - /** - * Complete. - * - * Override if applicable, but ensure that the below actions are - * performed, or, call parent::complete(). - */ - protected function complete() { - // Unschedule the cron healthcheck. - $this->clear_scheduled_event(); - } - - /** - * Schedule cron healthcheck - * - * @access public - * - * @param mixed $schedules Schedules. - * - * @return mixed - */ - public function schedule_cron_healthcheck( $schedules ) { - $interval = apply_filters( $this->identifier . '_cron_interval', 5 ); - - if ( property_exists( $this, 'cron_interval' ) ) { - $interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval ); - } - - // Adds every 5 minutes to the existing schedules. - $schedules[ $this->identifier . '_cron_interval' ] = array( - 'interval' => MINUTE_IN_SECONDS * $interval, - 'display' => sprintf( __( 'Every %d Minutes' ), $interval ), - ); - - return $schedules; - } - - /** - * Handle cron healthcheck - * - * Restart the background process if not already running - * and data exists in the queue. - */ - public function handle_cron_healthcheck() { - if ( $this->is_process_running() ) { - // Background process already running. - exit; - } - - if ( $this->is_queue_empty() ) { - // No data to process. - $this->clear_scheduled_event(); - exit; - } - - $this->handle(); - - exit; - } - - /** - * Schedule event - */ - protected function schedule_event() { - if ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) { - wp_schedule_event( time(), $this->cron_interval_identifier, $this->cron_hook_identifier ); - } - } - - /** - * Clear scheduled event - */ - protected function clear_scheduled_event() { - $timestamp = wp_next_scheduled( $this->cron_hook_identifier ); - - if ( $timestamp ) { - wp_unschedule_event( $timestamp, $this->cron_hook_identifier ); - } - } - - /** - * Cancel Process - * - * Stop processing queue items, clear cronjob and delete batch. - * - */ - public function cancel_process() { - if ( ! $this->is_queue_empty() ) { - $batch = $this->get_batch(); - - $this->delete( $batch->key ); - - wp_clear_scheduled_hook( $this->cron_hook_identifier ); - } - - } - - /** - * Task - * - * Override this method to perform any actions required on each - * queue item. Return the modified item for further processing - * in the next pass through. Or, return false to remove the - * item from the queue. - * - * @param mixed $item Queue item to iterate over. - * - * @return mixed - */ - abstract protected function task( $item ); - -} \ No newline at end of file diff --git a/vendor/deliciousbrains/wp-background-processing/license.txt b/vendor/deliciousbrains/wp-background-processing/license.txt deleted file mode 100644 index a0939e9..0000000 --- a/vendor/deliciousbrains/wp-background-processing/license.txt +++ /dev/null @@ -1,280 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/vendor/deliciousbrains/wp-background-processing/wp-background-processing.php b/vendor/deliciousbrains/wp-background-processing/wp-background-processing.php deleted file mode 100644 index c2fc252..0000000 --- a/vendor/deliciousbrains/wp-background-processing/wp-background-processing.php +++ /dev/null @@ -1,24 +0,0 @@ -