commit f70818ae9eb6c866c037451da4d128846076408a Author: hammad-ansari <62902797+hammad-ansari@users.noreply.github.com> Date: Tue Nov 29 15:11:10 2022 +0500 Add files via upload diff --git a/coupon-manager/LICENSE.txt b/coupon-manager/LICENSE.txt new file mode 100644 index 0000000..ecbc059 --- /dev/null +++ b/coupon-manager/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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 + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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. \ No newline at end of file diff --git a/coupon-manager/README.txt b/coupon-manager/README.txt new file mode 100644 index 0000000..5d38232 --- /dev/null +++ b/coupon-manager/README.txt @@ -0,0 +1,114 @@ +=== Plugin Name === +Contributors: (this should be a list of wordpress.org userid's) +Donate link: http://abdulwahab.live/ +Tags: comments, spam +Requires at least: 3.0.1 +Tested up to: 3.4 +Stable tag: 4.3 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Here is a short description of the plugin. This should be no more than 150 characters. No markup here. + +== Description == + +This is the long description. No limit, and you can use Markdown (as well as in the following sections). + +For backwards compatibility, if this section is missing, the full length of the short description will be used, and +Markdown parsed. + +A few notes about the sections above: + +* "Contributors" is a comma separated list of wp.org/wp-plugins.org usernames +* "Tags" is a comma separated list of tags that apply to the plugin +* "Requires at least" is the lowest version that the plugin will work on +* "Tested up to" is the highest version that you've *successfully used to test the plugin*. Note that it might work on +higher versions... this is just the highest one you've verified. +* Stable tag should indicate the Subversion "tag" of the latest stable version, or "trunk," if you use `/trunk/` for +stable. + + Note that the `readme.txt` of the stable tag is the one that is considered the defining one for the plugin, so +if the `/trunk/readme.txt` file says that the stable tag is `4.3`, then it is `/tags/4.3/readme.txt` that'll be used +for displaying information about the plugin. In this situation, the only thing considered from the trunk `readme.txt` +is the stable tag pointer. Thus, if you develop in trunk, you can update the trunk `readme.txt` to reflect changes in +your in-development version, without having that information incorrectly disclosed about the current stable version +that lacks those changes -- as long as the trunk's `readme.txt` points to the correct stable tag. + + If no stable tag is provided, it is assumed that trunk is stable, but you should specify "trunk" if that's where +you put the stable version, in order to eliminate any doubt. + +== Installation == + +This section describes how to install the plugin and get it working. + +e.g. + +1. Upload `coupon-manager.php` to the `/wp-content/plugins/` directory +1. Activate the plugin through the 'Plugins' menu in WordPress +1. Place `` in your templates + +== Frequently Asked Questions == + += A question that someone might have = + +An answer to that question. + += What about foo bar? = + +Answer to foo bar dilemma. + +== Screenshots == + +1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from +the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets +directory take precedence. For example, `/assets/screenshot-1.png` would win over `/tags/4.3/screenshot-1.png` +(or jpg, jpeg, gif). +2. This is the second screen shot + +== Changelog == + += 1.0 = +* A change since the previous version. +* Another change. + += 0.5 = +* List versions from most recent at top to oldest at bottom. + +== Upgrade Notice == + += 1.0 = +Upgrade notices describe the reason a user should upgrade. No more than 300 characters. + += 0.5 = +This version fixes a security related bug. Upgrade immediately. + +== Arbitrary section == + +You may provide arbitrary sections, in the same format as the ones above. This may be of use for extremely complicated +plugins where more information needs to be conveyed that doesn't fit into the categories of "description" or +"installation." Arbitrary sections will be shown below the built-in sections outlined above. + +== A brief Markdown Example == + +Ordered list: + +1. Some feature +1. Another feature +1. Something else about the plugin + +Unordered list: + +* something +* something else +* third thing + +Here's a link to [WordPress](http://wordpress.org/ "Your favorite software") and one to [Markdown's Syntax Documentation][markdown syntax]. +Titles are optional, naturally. + +[markdown syntax]: http://daringfireball.net/projects/markdown/syntax + "Markdown is what the parser uses to process much of the readme file" + +Markdown uses email style notation for blockquotes and I've been told: +> Asterisks for *emphasis*. Double it up for **strong**. + +`` \ No newline at end of file diff --git a/coupon-manager/admin/class-coupon-manager-admin.php b/coupon-manager/admin/class-coupon-manager-admin.php new file mode 100644 index 0000000..90ebebf --- /dev/null +++ b/coupon-manager/admin/class-coupon-manager-admin.php @@ -0,0 +1,238 @@ + + */ +class Coupon_Manager_Admin { + + /** + * The ID of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $plugin_name The ID of this plugin. + */ + private $plugin_name; + + /** + * The version of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $version The current version of this plugin. + */ + private $version; + + /** + * Initialize the class and set its properties. + * + * @since 1.0.0 + * @param string $plugin_name The name of this plugin. + * @param string $version The version of this plugin. + */ + public function __construct( $plugin_name, $version ) { + + $this->plugin_name = $plugin_name; + $this->version = $version; + + } + + /** + * Register the stylesheets for the admin area. + * + * @since 1.0.0 + */ + public function enqueue_styles() { + + /** + * This function is provided for demonstration purposes only. + * + * An instance of this class should be passed to the run() function + * defined in Coupon_Manager_Loader as all of the hooks are defined + * in that particular class. + * + * The Coupon_Manager_Loader will then create the relationship + * between the defined hooks and the functions defined in this + * class. + */ + + wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/coupon-manager-admin.css', array(), $this->version, 'all' ); + + } + + /** + * Register the JavaScript for the admin area. + * + * @since 1.0.0 + */ + public function enqueue_scripts() { + + /** + * This function is provided for demonstration purposes only. + * + * An instance of this class should be passed to the run() function + * defined in Coupon_Manager_Loader as all of the hooks are defined + * in that particular class. + * + * The Coupon_Manager_Loader will then create the relationship + * between the defined hooks and the functions defined in this + * class. + */ + + wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/coupon-manager-admin.js', array( 'jquery' ), $this->version, false ); + + } + + public function display_admin_page(){ + add_menu_page( + 'Coupon Manager', + 'Coupon Manager', + 'manage_options', + 'coupon-manager-admin', + array($this, 'showCouponPage'), + '', + 6 + ); + } + + public function showCouponPage(){ + + include plugin_dir_path( __FILE__ ) . 'partials/coupon-manager-admin-display.php'; + // include plugins_url('coupon-manager/admin/partials/coupon-manager-admin-display.php'); + } + + public function coupon_manager_settings_group(){ + + register_setting( 'coupon-manager-settings-group', 'thank_page_text_opt' ); + register_setting( 'coupon-manager-settings-group', 'background_image' ); + register_setting( 'coupon-manager-settings-group', 'limit_person_coupon' ); + register_setting( 'coupon-manager-settings-group', 'coupon_discount_amount' ); + register_setting( 'coupon-manager-settings-group', 'coupon_discount_type' ); + register_setting( 'coupon-manager-settings-group', 'coupon_expiry_date' ); + + register_setting( 'coupon-manager-style-group', 'copy_btn_text' ); + register_setting( 'coupon-manager-style-group', 'copy_btn_color' ); + register_setting( 'coupon-manager-style-group', 'copy_btn_size' ); + register_setting( 'coupon-manager-style-group', 'copy_btn_text_color' ); + + + } + + public function create_couponuser_cpt(){ + + $labels = array( + 'name' => _x( 'Coupon uses', 'Post Type General Name', 'textdomain' ), + 'singular_name' => _x( 'Coupon use', 'Post Type Singular Name', 'textdomain' ), + 'menu_name' => _x( 'Coupon uses', 'Admin Menu text', 'textdomain' ), + ); + $args = array( + 'label' => __( 'Coupon Uses', 'textdomain' ), + 'description' => __( '', 'textdomain' ), + 'labels' => $labels, + 'supports' => array('title', 'editor', 'excerpt', 'author', 'page-attributes', 'post-formats', 'custom-fields'), + 'taxonomies' => array(), + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 5, + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => true, + 'hierarchical' => true, + 'exclude_from_search' => false, + 'show_in_rest' => true, + 'publicly_queryable' => true, + 'capability_type' => 'post', + ); + register_post_type( 'couponuser', $args ); +} + public function add_coupon_uses_meta() + { + add_meta_box( + + 'coupon_users', + 'Coupon Users', + [ self::class, 'coupon_uses_custom_box_html' ], +// 'coupon_uses_custom_box_html', + 'couponuser', + 'normal', + 'high'); + + } + public static function coupon_uses_custom_box_html( $post ) { + + $get_post_meta = get_post_meta(get_the_ID()); +// echo '
';
+// 		print_r($get_post_meta);
+// 		echo '
'; + ?> + +
+ + +
+
+ + +
+
+ + +
+ +

%2$s Click to Activate.

', esc_attr( $class ), esc_html( $message ) ); +} + + +} diff --git a/coupon-manager/admin/css/coupon-manager-admin.css b/coupon-manager/admin/css/coupon-manager-admin.css new file mode 100644 index 0000000..00c8c7f --- /dev/null +++ b/coupon-manager/admin/css/coupon-manager-admin.css @@ -0,0 +1,4 @@ +/** + * All of the CSS for your admin-specific functionality should be + * included in this file. + */ \ No newline at end of file diff --git a/coupon-manager/admin/index.php b/coupon-manager/admin/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/coupon-manager/admin/index.php @@ -0,0 +1 @@ + + + + + +
+ + + + +
+ +

Coupon manager styles

+
+ + + + + + + + + + + + + + + + + + + + + + +
Button Text +
Button background color +
Button text color +
Button Size + + +
+ + + +
+ + +

Coupon Manager

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Thank you page text + You have got a coupon + +Your coupon is {coupon_code}. + +Website Url is {site_url}. + +Customer {first_name} {last_name}. + +Business Name {business_name}.'; + } + wp_editor($thankyou_text, 'thank_page_text_opt'); + ?> +
Background Image
Person Limit
Discount Amount
Discount type + + +
Coupon Expiry days
+ + + +
+ + +
+
+ + diff --git a/coupon-manager/coupon-manager.php b/coupon-manager/coupon-manager.php new file mode 100644 index 0000000..7184108 --- /dev/null +++ b/coupon-manager/coupon-manager.php @@ -0,0 +1,102 @@ +run(); + +} +run_coupon_manager(); + + +// add_action("wp_footer",function(){ +// $site_url = get_site_url(); +// $result = wp_remote_get("http://licenses-manager.com/wp-json/coupon/tracking?coupon_generate=1&site_url=".$site_url); +// var_dump($result); +// exit; +// if ( is_array( $result ) && ! is_wp_error( $result ) ) { +// $headers = $result['headers']; // array of http header lines +// $body = $result['body']; // use the content + + + +// } +// }); diff --git a/coupon-manager/domain-auction-edd.php b/coupon-manager/domain-auction-edd.php new file mode 100644 index 0000000..fc62e60 --- /dev/null +++ b/coupon-manager/domain-auction-edd.php @@ -0,0 +1,330 @@ + DP_Version, // current version number + 'license' => $license_key, // license key (used get_option above to retrieve from DB) + 'item_id' => EDD_ITEM_ID, // ID of the product + 'author' => DP_Author, // author of this plugin + 'beta' => false, + ) + ); + +} +add_action( 'admin_init', 'dsp_plugin_updater', 0 ); + +function edd_license_menu() { + + add_submenu_page( + 'coupon-manager-admin', + __( 'License', 'auctionsys' ), + __( 'License', 'auctionsys' ), + 'manage_options', + EDD_PLUGIN_LICENSE_PAGE, + 'edd_license_page' + ); + +} +add_action('admin_menu', 'edd_license_menu',99); + +function edd_license_page() { + $license = get_option( 'edd_license_key' ); + $status = get_option( 'edd_license_status' ); + ?> +
+

+
+ + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + +
+ + +
+ 'activate_license', + 'license' => $license, + 'item_name' => urlencode( 'Coupon Manager' ), + 'url' => home_url() + ); + + // Call the custom API. + $response = wp_remote_post( EDD_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) ); + + // make sure the response came back okay + if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { + + if ( is_wp_error( $response ) ) { + $message = $response->get_error_message(); + } else { + $message = __( 'An error occurred, please try again.' ); + } + + } else { + + $license_data = json_decode( wp_remote_retrieve_body( $response ) ); + + if ( false === $license_data->success ) { + + switch( $license_data->error ) { + + case 'expired' : + + $message = sprintf( + __( 'Your license key expired on %s.' ), + date_i18n( get_option( 'date_format' ), strtotime( $license_data->expires, current_time( 'timestamp' ) ) ) + ); + break; + + case 'disabled' : + case 'revoked' : + + $message = __( 'Your license key has been disabled.' ); + break; + + case 'missing' : + + $message = __( 'Invalid license.' ); + break; + + case 'invalid' : + case 'site_inactive' : + + $message = __( 'Your license is not active for this URL.' ); + break; + case 'item_name_mismatch' : + + $message = sprintf( __( 'This appears to be an invalid license key for %s.' ), 'WP Domain Auctions' ); + break; + + case 'no_activations_left': + + $message = __( 'Your license key has reached its activation limit.' ); + break; + + default : + + $message = __( 'An error occurred, please try again.' ); + break; + } + + } + + } + + // Check if anything passed on a message constituting a failure + if ( ! empty( $message ) ) { + $base_url = admin_url( 'admin.php?page=' . EDD_PLUGIN_LICENSE_PAGE ); + $redirect = add_query_arg( array( 'sl_activation' => 'false', 'message' => urlencode( $message ) ), $base_url ); + + wp_redirect( $redirect ); + exit(); + } + + // $license_data->license will be either "valid" or "invalid" + + update_option( 'edd_license_status', $license_data->license ); + wp_redirect( admin_url( 'admin.php?page=' . EDD_PLUGIN_LICENSE_PAGE ) ); + exit(); + } +} +add_action('admin_init', 'edd_activate_license'); + +function edd_deactivate_license() { + + // listen for our activate button to be clicked + if( isset( $_POST['edd_license_deactivate'] ) ) { + + // run a quick security check + if( ! check_admin_referer( 'edd_nonce', 'edd_nonce' ) ) + return; // get out if we didn't click the Activate button + + // retrieve the license from the database + $license = trim( get_option( 'edd_license_key' ) ); + + + // data to send in our API request + $api_params = array( + 'edd_action' => 'deactivate_license', + 'license' => $license, + 'item_name' => urlencode( 'Coupon Manager' ), + 'url' => home_url() + ); + + // Call the custom API. + $response = wp_remote_post( EDD_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) ); + + + // make sure the response came back okay + if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) { + + if ( is_wp_error( $response ) ) { + $message = $response->get_error_message(); + } else { + $message = __( 'An error occurred, please try again.' ); + } + + $base_url = admin_url( 'admin.php?page=' . EDD_PLUGIN_LICENSE_PAGE ); + $redirect = add_query_arg( array( 'sl_activation' => 'false', 'message' => urlencode( $message ) ), $base_url ); + + wp_redirect( $redirect ); + exit(); + } + + // decode the license data + $license_data = json_decode( wp_remote_retrieve_body( $response ) ); + + // $license_data->license will be either "deactivated" or "failed" + if( $license_data->license == 'deactivated' ) { + delete_option( 'edd_license_status' ); + }elseif($license_data->license == 'failed'){ + delete_option( 'edd_license_status' ); + } + + $base_url = admin_url( 'admin.php?page=' . EDD_PLUGIN_LICENSE_PAGE ); + $redirect = add_query_arg( array( 'sl_activation' => 'false', 'message' => urlencode( "License Deactivated" ) ), $base_url ); + + wp_redirect( $redirect ); + exit(); + + } +} +add_action('admin_init', 'edd_deactivate_license'); + +function edd_check_license() { + + global $wp_version; + + $license = trim( get_option( 'edd_license_key' ) ); + + $api_params = array( + 'edd_action' => 'check_license', + 'license' => $license, + 'item_name' => urlencode( 'WP Domain Auctions' ), + 'url' => home_url() + ); + + // Call the custom API. + $response = wp_remote_post( EDD_STORE_URL, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) ); + + if ( is_wp_error( $response ) ) + return false; + + $license_data = json_decode( wp_remote_retrieve_body( $response ) ); + + if( $license_data->license == 'valid' ) { + echo 'valid'; exit; + // this license is still valid + } else { + echo 'invalid'; exit; + // this license is no longer valid + } +} + + +/** + * This is a means of catching errors from the activation method above and displaying it to the customer + */ +function edd_admin_notices() { + if ( isset( $_GET['sl_activation'] ) && ! empty( $_GET['message'] ) ) { + + switch( $_GET['sl_activation'] ) { + + case 'false': + $message = urldecode( $_GET['message'] ); + ?> +
+

+
+ api_url = trailingslashit( $_api_url ); + $this->api_data = $_api_data; + $this->name = plugin_basename( $_plugin_file ); + $this->slug = basename( $_plugin_file, '.php' ); + $this->version = $_api_data['version']; + $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false; + $this->beta = ! empty( $this->api_data['beta'] ) ? true : false; + $this->cache_key = 'edd_sl_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); + + $edd_plugin_data[ $this->slug ] = $this->api_data; + + /** + * Fires after the $edd_plugin_data is setup. + * + * @since x.x.x + * + * @param array $edd_plugin_data Array of EDD SL plugin data. + */ + do_action( 'post_edd_sl_plugin_updater_setup', $edd_plugin_data ); + + // Set up hooks. + $this->init(); + + } + + /** + * Set up WordPress filters to hook into WP's update process. + * + * @uses add_filter() + * + * @return void + */ + public function init() { + + add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); + add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 ); + remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 ); + add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 ); + add_action( 'admin_init', array( $this, 'show_changelog' ) ); + + } + + /** + * Check for Updates at the defined API endpoint and modify the update array. + * + * This function dives into the update API just when WordPress creates its update array, + * then adds a custom API call and injects the custom plugin data retrieved from the API. + * It is reassembled from parts of the native WordPress plugin update code. + * See wp-includes/update.php line 121 for the original wp_update_plugins() function. + * + * @uses api_request() + * + * @param array $_transient_data Update array build by WordPress. + * @return array Modified update array with custom plugin data. + */ + public function check_update( $_transient_data ) { + + global $pagenow; + + if ( ! is_object( $_transient_data ) ) { + $_transient_data = new stdClass; + } + + if ( 'plugins.php' == $pagenow && is_multisite() ) { + return $_transient_data; + } + + if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) { + return $_transient_data; + } + + $version_info = $this->get_cached_version_info(); + + if ( false === $version_info ) { + $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); + + $this->set_version_info_cache( $version_info ); + + } + + if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) { + + if ( version_compare( $this->version, $version_info->new_version, '<' ) ) { + + $_transient_data->response[ $this->name ] = $version_info; + + // Make sure the plugin property is set to the plugin's name/location. See issue 1463 on Software Licensing's GitHub repo. + $_transient_data->response[ $this->name ]->plugin = $this->name; + + } + + $_transient_data->last_checked = time(); + $_transient_data->checked[ $this->name ] = $this->version; + + } + + return $_transient_data; + } + + /** + * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise! + * + * @param string $file + * @param array $plugin + */ + public function show_update_notification( $file, $plugin ) { + + if ( is_network_admin() ) { + return; + } + + if( ! current_user_can( 'update_plugins' ) ) { + return; + } + + if( ! is_multisite() ) { + return; + } + + if ( $this->name != $file ) { + return; + } + + // Remove our filter on the site transient + remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 ); + + $update_cache = get_site_transient( 'update_plugins' ); + + $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass(); + + if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) { + + $version_info = $this->get_cached_version_info(); + + if ( false === $version_info ) { + $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); + + // Since we disabled our filter for the transient, we aren't running our object conversion on banners, sections, or icons. Do this now: + if ( isset( $version_info->banners ) && ! is_array( $version_info->banners ) ) { + $version_info->banners = $this->convert_object_to_array( $version_info->banners ); + } + + if ( isset( $version_info->sections ) && ! is_array( $version_info->sections ) ) { + $version_info->sections = $this->convert_object_to_array( $version_info->sections ); + } + + if ( isset( $version_info->icons ) && ! is_array( $version_info->icons ) ) { + $version_info->icons = $this->convert_object_to_array( $version_info->icons ); + } + + $this->set_version_info_cache( $version_info ); + } + + if ( ! is_object( $version_info ) ) { + return; + } + + if ( version_compare( $this->version, $version_info->new_version, '<' ) ) { + + $update_cache->response[ $this->name ] = $version_info; + + } + + $update_cache->last_checked = time(); + $update_cache->checked[ $this->name ] = $this->version; + + set_site_transient( 'update_plugins', $update_cache ); + + } else { + + $version_info = $update_cache->response[ $this->name ]; + + } + + // Restore our filter + add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); + + if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) { + + // build a plugin list row, with update notification + $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); + # + echo ''; + echo ''; + echo '
'; + + $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' ); + + if ( empty( $version_info->download_link ) ) { + printf( + __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ), + esc_html( $version_info->name ), + '', + esc_html( $version_info->new_version ), + '' + ); + } else { + printf( + __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ), + esc_html( $version_info->name ), + '', + esc_html( $version_info->new_version ), + '', + '', + '' + ); + } + + do_action( "in_plugin_update_message-{$file}", $plugin, $version_info ); + + echo '
'; + } + } + + /** + * Updates information on the "View version x.x details" page with custom data. + * + * @uses api_request() + * + * @param mixed $_data + * @param string $_action + * @param object $_args + * @return object $_data + */ + public function plugins_api_filter( $_data, $_action = '', $_args = null ) { + + if ( $_action != 'plugin_information' ) { + + return $_data; + + } + + if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) { + + return $_data; + + } + + $to_send = array( + 'slug' => $this->slug, + 'is_ssl' => is_ssl(), + 'fields' => array( + 'banners' => array(), + 'reviews' => false, + 'icons' => array(), + ) + ); + + $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); + + // Get the transient where we store the api request for this plugin for 24 hours + $edd_api_request_transient = $this->get_cached_version_info( $cache_key ); + + //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now. + if ( empty( $edd_api_request_transient ) ) { + + $api_response = $this->api_request( 'plugin_information', $to_send ); + + // Expires in 3 hours + $this->set_version_info_cache( $api_response, $cache_key ); + + if ( false !== $api_response ) { + $_data = $api_response; + } + + } else { + $_data = $edd_api_request_transient; + } + + // Convert sections into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) { + $_data->sections = $this->convert_object_to_array( $_data->sections ); + } + + // Convert banners into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) { + $_data->banners = $this->convert_object_to_array( $_data->banners ); + } + + // Convert icons into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->icons ) && ! is_array( $_data->icons ) ) { + $_data->icons = $this->convert_object_to_array( $_data->icons ); + } + + if( ! isset( $_data->plugin ) ) { + $_data->plugin = $this->name; + } + + return $_data; + } + + /** + * Convert some objects to arrays when injecting data into the update API + * + * Some data like sections, banners, and icons are expected to be an associative array, however due to the JSON + * decoding, they are objects. This method allows us to pass in the object and return an associative array. + * + * @since 3.6.5 + * + * @param stdClass $data + * + * @return array + */ + private function convert_object_to_array( $data ) { + $new_data = array(); + foreach ( $data as $key => $value ) { + $new_data[ $key ] = $value; + } + + return $new_data; + } + + /** + * Disable SSL verification in order to prevent download update failures + * + * @param array $args + * @param string $url + * @return object $array + */ + public function http_request_args( $args, $url ) { + + $verify_ssl = $this->verify_ssl(); + if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) { + $args['sslverify'] = $verify_ssl; + } + return $args; + + } + + /** + * Calls the API and, if successfull, returns the object delivered by the API. + * + * @uses get_bloginfo() + * @uses wp_remote_post() + * @uses is_wp_error() + * + * @param string $_action The requested action. + * @param array $_data Parameters for the API action. + * @return false|object + */ + private function api_request( $_action, $_data ) { + + global $wp_version, $edd_plugin_url_available; + + $verify_ssl = $this->verify_ssl(); + + // Do a quick status check on this domain if we haven't already checked it. + $store_hash = md5( $this->api_url ); + if ( ! is_array( $edd_plugin_url_available ) || ! isset( $edd_plugin_url_available[ $store_hash ] ) ) { + $test_url_parts = parse_url( $this->api_url ); + + $scheme = ! empty( $test_url_parts['scheme'] ) ? $test_url_parts['scheme'] : 'http'; + $host = ! empty( $test_url_parts['host'] ) ? $test_url_parts['host'] : ''; + $port = ! empty( $test_url_parts['port'] ) ? ':' . $test_url_parts['port'] : ''; + + if ( empty( $host ) ) { + $edd_plugin_url_available[ $store_hash ] = false; + } else { + $test_url = $scheme . '://' . $host . $port; + $response = wp_remote_get( $test_url, array( 'timeout' => $this->health_check_timeout, 'sslverify' => $verify_ssl ) ); + $edd_plugin_url_available[ $store_hash ] = is_wp_error( $response ) ? false : true; + } + } + + if ( false === $edd_plugin_url_available[ $store_hash ] ) { + return; + } + + $data = array_merge( $this->api_data, $_data ); + + if ( $data['slug'] != $this->slug ) { + return; + } + + if( $this->api_url == trailingslashit ( home_url() ) ) { + return false; // Don't allow a plugin to ping itself + } + + $api_params = array( + 'edd_action' => 'get_version', + 'license' => ! empty( $data['license'] ) ? $data['license'] : '', + 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false, + 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false, + 'version' => isset( $data['version'] ) ? $data['version'] : false, + 'slug' => $data['slug'], + 'author' => $data['author'], + 'url' => home_url(), + 'beta' => ! empty( $data['beta'] ), + ); + + $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) ); + + if ( ! is_wp_error( $request ) ) { + $request = json_decode( wp_remote_retrieve_body( $request ) ); + } + + if ( $request && isset( $request->sections ) ) { + $request->sections = maybe_unserialize( $request->sections ); + } else { + $request = false; + } + + if ( $request && isset( $request->banners ) ) { + $request->banners = maybe_unserialize( $request->banners ); + } + + if ( $request && isset( $request->icons ) ) { + $request->icons = maybe_unserialize( $request->icons ); + } + + if( ! empty( $request->sections ) ) { + foreach( $request->sections as $key => $section ) { + $request->$key = (array) $section; + } + } + + return $request; + } + + public function show_changelog() { + + global $edd_plugin_data; + + if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) { + return; + } + + if( empty( $_REQUEST['plugin'] ) ) { + return; + } + + if( empty( $_REQUEST['slug'] ) ) { + return; + } + + if( ! current_user_can( 'update_plugins' ) ) { + wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) ); + } + + $data = $edd_plugin_data[ $_REQUEST['slug'] ]; + $beta = ! empty( $data['beta'] ) ? true : false; + $cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $beta . '_version_info' ); + $version_info = $this->get_cached_version_info( $cache_key ); + + if( false === $version_info ) { + + $api_params = array( + 'edd_action' => 'get_version', + 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false, + 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false, + 'slug' => $_REQUEST['slug'], + 'author' => $data['author'], + 'url' => home_url(), + 'beta' => ! empty( $data['beta'] ) + ); + + $verify_ssl = $this->verify_ssl(); + $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) ); + + if ( ! is_wp_error( $request ) ) { + $version_info = json_decode( wp_remote_retrieve_body( $request ) ); + } + + + if ( ! empty( $version_info ) && isset( $version_info->sections ) ) { + $version_info->sections = maybe_unserialize( $version_info->sections ); + } else { + $version_info = false; + } + + if( ! empty( $version_info ) ) { + foreach( $version_info->sections as $key => $section ) { + $version_info->$key = (array) $section; + } + } + + $this->set_version_info_cache( $version_info, $cache_key ); + + } + + if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) { + echo '
' . $version_info->sections['changelog'] . '
'; + } + + exit; + } + + public function get_cached_version_info( $cache_key = '' ) { + + if( empty( $cache_key ) ) { + $cache_key = $this->cache_key; + } + + $cache = get_option( $cache_key ); + + if( empty( $cache['timeout'] ) || time() > $cache['timeout'] ) { + return false; // Cache is expired + } + + // We need to turn the icons into an array, thanks to WP Core forcing these into an object at some point. + $cache['value'] = json_decode( $cache['value'] ); + if ( ! empty( $cache['value']->icons ) ) { + $cache['value']->icons = (array) $cache['value']->icons; + } + + return $cache['value']; + + } + + public function set_version_info_cache( $value = '', $cache_key = '' ) { + + if( empty( $cache_key ) ) { + $cache_key = $this->cache_key; + } + + $data = array( + 'timeout' => strtotime( '+3 hours', time() ), + 'value' => json_encode( $value ) + ); + + update_option( $cache_key, $data, 'no' ); + + } + + /** + * Returns if the SSL of the store should be verified. + * + * @since 1.6.13 + * @return bool + */ + private function verify_ssl() { + return (bool) apply_filters( 'edd_sl_api_request_verify_ssl', true, $this ); + } + +} diff --git a/coupon-manager/includes/class-coupon-manager-activator.php b/coupon-manager/includes/class-coupon-manager-activator.php new file mode 100644 index 0000000..84fbd83 --- /dev/null +++ b/coupon-manager/includes/class-coupon-manager-activator.php @@ -0,0 +1,36 @@ + + */ +class Coupon_Manager_Activator { + + /** + * Short Description. (use period) + * + * Long Description. + * + * @since 1.0.0 + */ + public static function activate() { + + } + +} diff --git a/coupon-manager/includes/class-coupon-manager-deactivator.php b/coupon-manager/includes/class-coupon-manager-deactivator.php new file mode 100644 index 0000000..61b5187 --- /dev/null +++ b/coupon-manager/includes/class-coupon-manager-deactivator.php @@ -0,0 +1,36 @@ + + */ +class Coupon_Manager_Deactivator { + + /** + * Short Description. (use period) + * + * Long Description. + * + * @since 1.0.0 + */ + public static function deactivate() { + + } + +} diff --git a/coupon-manager/includes/class-coupon-manager-i18n.php b/coupon-manager/includes/class-coupon-manager-i18n.php new file mode 100644 index 0000000..a78ac3d --- /dev/null +++ b/coupon-manager/includes/class-coupon-manager-i18n.php @@ -0,0 +1,47 @@ + + */ +class Coupon_Manager_i18n { + + + /** + * Load the plugin text domain for translation. + * + * @since 1.0.0 + */ + public function load_plugin_textdomain() { + + load_plugin_textdomain( + 'coupon-manager', + false, + dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' + ); + + } + + + +} diff --git a/coupon-manager/includes/class-coupon-manager-loader.php b/coupon-manager/includes/class-coupon-manager-loader.php new file mode 100644 index 0000000..f30f9e8 --- /dev/null +++ b/coupon-manager/includes/class-coupon-manager-loader.php @@ -0,0 +1,129 @@ + + */ +class Coupon_Manager_Loader { + + /** + * The array of actions registered with WordPress. + * + * @since 1.0.0 + * @access protected + * @var array $actions The actions registered with WordPress to fire when the plugin loads. + */ + protected $actions; + + /** + * The array of filters registered with WordPress. + * + * @since 1.0.0 + * @access protected + * @var array $filters The filters registered with WordPress to fire when the plugin loads. + */ + protected $filters; + + /** + * Initialize the collections used to maintain the actions and filters. + * + * @since 1.0.0 + */ + public function __construct() { + + $this->actions = array(); + $this->filters = array(); + + } + + /** + * Add a new action to the collection to be registered with WordPress. + * + * @since 1.0.0 + * @param string $hook The name of the WordPress action that is being registered. + * @param object $component A reference to the instance of the object on which the action is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1. + */ + public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * Add a new filter to the collection to be registered with WordPress. + * + * @since 1.0.0 + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority Optional. The priority at which the function should be fired. Default is 10. + * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1 + */ + public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { + $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args ); + } + + /** + * A utility function that is used to register the actions and hooks into a single + * collection. + * + * @since 1.0.0 + * @access private + * @param array $hooks The collection of hooks that is being registered (that is, actions or filters). + * @param string $hook The name of the WordPress filter that is being registered. + * @param object $component A reference to the instance of the object on which the filter is defined. + * @param string $callback The name of the function definition on the $component. + * @param int $priority The priority at which the function should be fired. + * @param int $accepted_args The number of arguments that should be passed to the $callback. + * @return array The collection of actions and filters registered with WordPress. + */ + private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { + + $hooks[] = array( + 'hook' => $hook, + 'component' => $component, + 'callback' => $callback, + 'priority' => $priority, + 'accepted_args' => $accepted_args + ); + + return $hooks; + + } + + /** + * Register the filters and actions with WordPress. + * + * @since 1.0.0 + */ + public function run() { + + foreach ( $this->filters as $hook ) { + add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + foreach ( $this->actions as $hook ) { + add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); + } + + } + +} diff --git a/coupon-manager/includes/class-coupon-manager.php b/coupon-manager/includes/class-coupon-manager.php new file mode 100644 index 0000000..c79c91b --- /dev/null +++ b/coupon-manager/includes/class-coupon-manager.php @@ -0,0 +1,241 @@ + + */ +class Coupon_Manager { + + /** + * The loader that's responsible for maintaining and registering all hooks that power + * the plugin. + * + * @since 1.0.0 + * @access protected + * @var Coupon_Manager_Loader $loader Maintains and registers all hooks for the plugin. + */ + protected $loader; + + /** + * The unique identifier of this plugin. + * + * @since 1.0.0 + * @access protected + * @var string $plugin_name The string used to uniquely identify this plugin. + */ + protected $plugin_name; + + /** + * The current version of the plugin. + * + * @since 1.0.0 + * @access protected + * @var string $version The current version of the plugin. + */ + protected $version; + + /** + * Define the core functionality of the plugin. + * + * Set the plugin name and the plugin version that can be used throughout the plugin. + * Load the dependencies, define the locale, and set the hooks for the admin area and + * the public-facing side of the site. + * + * @since 1.0.0 + */ + public function __construct() { + if ( defined( 'COUPON_MANAGER_VERSION' ) ) { + $this->version = COUPON_MANAGER_VERSION; + } else { + $this->version = '1.0.0'; + } + $this->plugin_name = 'coupon-manager'; + + $this->load_dependencies(); + $this->set_locale(); + $this->define_admin_hooks(); + $this->define_public_hooks(); + + } + + /** + * Load the required dependencies for this plugin. + * + * Include the following files that make up the plugin: + * + * - Coupon_Manager_Loader. Orchestrates the hooks of the plugin. + * - Coupon_Manager_i18n. Defines internationalization functionality. + * - Coupon_Manager_Admin. Defines all hooks for the admin area. + * - Coupon_Manager_Public. Defines all hooks for the public side of the site. + * + * Create an instance of the loader which will be used to register the hooks + * with WordPress. + * + * @since 1.0.0 + * @access private + */ + private function load_dependencies() { + + /** + * The class responsible for orchestrating the actions and filters of the + * core plugin. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-coupon-manager-loader.php'; + + /** + * The class responsible for defining internationalization functionality + * of the plugin. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-coupon-manager-i18n.php'; + + /** + * The class responsible for defining all actions that occur in the admin area. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-coupon-manager-admin.php'; + + /** + * The class responsible for defining all actions that occur in the public-facing + * side of the site. + */ + require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-coupon-manager-public.php'; + + $this->loader = new Coupon_Manager_Loader(); + + } + + /** + * Define the locale for this plugin for internationalization. + * + * Uses the Coupon_Manager_i18n class in order to set the domain and to register the hook + * with WordPress. + * + * @since 1.0.0 + * @access private + */ + private function set_locale() { + + $plugin_i18n = new Coupon_Manager_i18n(); + + $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' ); + + } + + /** + * Register all of the hooks related to the admin area functionality + * of the plugin. + * + * @since 1.0.0 + * @access private + */ + private function define_admin_hooks() { + + $plugin_admin = new Coupon_Manager_Admin( $this->get_plugin_name(), $this->get_version() ); + + $edd_license_status = get_option('edd_license_status'); + + if(!$edd_license_status || $edd_license_status != 'valid'){ + $this->loader->add_action( 'admin_notices', $plugin_admin, 'admin_notice' ); + } + + if($edd_license_status == 'valid'){ + $this->loader->add_action( 'init', $plugin_admin, 'create_couponuser_cpt' ); + } + + $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' ); + $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' ); + $this->loader->add_action( 'admin_menu', $plugin_admin, 'display_admin_page' ); + $this->loader->add_action( 'admin_init', $plugin_admin, 'coupon_manager_settings_group' ); + + $this->loader->add_action( 'add_meta_boxes', $plugin_admin, 'add_coupon_uses_meta' ); + $this->loader->add_action( 'save_post', $plugin_admin, 'coupon_uses_save_postdata' ); + } + + /** + * Register all of the hooks related to the public-facing functionality + * of the plugin. + * + * @since 1.0.0 + * @access private + */ + private function define_public_hooks() { + + $plugin_public = new Coupon_Manager_Public( $this->get_plugin_name(), $this->get_version() ); + + $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' ); + $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' ); + + $edd_license_status = get_option('edd_license_status'); + + if($edd_license_status && $edd_license_status == 'valid'){ + $this->loader->add_action( 'woocommerce_thankyou', $plugin_public, 'generate_coupon' ); + $this->loader->add_action( 'woocommerce_thankyou', $plugin_public, 'coupon_add_content_thankyou' ); + $this->loader->add_action( 'woocommerce_applied_coupon', $plugin_public, 'generate_coupon_user_post' ); + $this->loader->add_action( 'woocommerce_email_after_order_table ', $plugin_public, 'add_order_email_coupon_details' ); + } + + } + + /** + * Run the loader to execute all of the hooks with WordPress. + * + * @since 1.0.0 + */ + public function run() { + $this->loader->run(); + } + + /** + * The name of the plugin used to uniquely identify it within the context of + * WordPress and to define internationalization functionality. + * + * @since 1.0.0 + * @return string The name of the plugin. + */ + public function get_plugin_name() { + return $this->plugin_name; + } + + /** + * The reference to the class that orchestrates the hooks with the plugin. + * + * @since 1.0.0 + * @return Coupon_Manager_Loader Orchestrates the hooks of the plugin. + */ + public function get_loader() { + return $this->loader; + } + + /** + * Retrieve the version number of the plugin. + * + * @since 1.0.0 + * @return string The version number of the plugin. + */ + public function get_version() { + return $this->version; + } + +} diff --git a/coupon-manager/includes/currencies.json b/coupon-manager/includes/currencies.json new file mode 100644 index 0000000..2be8275 --- /dev/null +++ b/coupon-manager/includes/currencies.json @@ -0,0 +1 @@ +{"BD": "BDT", "BE": "EUR", "BF": "XOF", "BG": "BGN", "BA": "BAM", "BB": "BBD", "WF": "XPF", "BL": "EUR", "BM": "BMD", "BN": "BND", "BO": "BOB", "BH": "BHD", "BI": "BIF", "BJ": "XOF", "BT": "BTN", "JM": "JMD", "BV": "NOK", "BW": "BWP", "WS": "WST", "BQ": "USD", "BR": "BRL", "BS": "BSD", "JE": "GBP", "BY": "BYR", "BZ": "BZD", "RU": "RUB", "RW": "RWF", "RS": "RSD", "TL": "USD", "RE": "EUR", "TM": "TMT", "TJ": "TJS", "RO": "RON", "TK": "NZD", "GW": "XOF", "GU": "USD", "GT": "GTQ", "GS": "GBP", "GR": "EUR", "GQ": "XAF", "GP": "EUR", "JP": "JPY", "GY": "GYD", "GG": "GBP", "GF": "EUR", "GE": "GEL", "GD": "XCD", "GB": "GBP", "GA": "XAF", "SV": "USD", "GN": "GNF", "GM": "GMD", "GL": "DKK", "GI": "GIP", "GH": "GHS", "OM": "OMR", "TN": "TND", "JO": "JOD", "HR": "HRK", "HT": "HTG", "HU": "HUF", "HK": "HKD", "HN": "HNL", "HM": "AUD", "VE": "VEF", "PR": "USD", "PS": "ILS", "PW": "USD", "PT": "EUR", "SJ": "NOK", "PY": "PYG", "IQ": "IQD", "PA": "PAB", "PF": "XPF", "PG": "PGK", "PE": "PEN", "PK": "PKR", "PH": "PHP", "PN": "NZD", "PL": "PLN", "PM": "EUR", "ZM": "ZMK", "EH": "MAD", "EE": "EUR", "EG": "EGP", "ZA": "ZAR", "EC": "USD", "IT": "EUR", "VN": "VND", "SB": "SBD", "ET": "ETB", "SO": "SOS", "ZW": "ZWL", "SA": "SAR", "ES": "EUR", "ER": "ERN", "ME": "EUR", "MD": "MDL", "MG": "MGA", "MF": "EUR", "MA": "MAD", "MC": "EUR", "UZ": "UZS", "MM": "MMK", "ML": "XOF", "MO": "MOP", "MN": "MNT", "MH": "USD", "MK": "MKD", "MU": "MUR", "MT": "EUR", "MW": "MWK", "MV": "MVR", "MQ": "EUR", "MP": "USD", "MS": "XCD", "MR": "MRO", "IM": "GBP", "UG": "UGX", "TZ": "TZS", "MY": "MYR", "MX": "MXN", "IL": "ILS", "FR": "EUR", "IO": "USD", "SH": "SHP", "FI": "EUR", "FJ": "FJD", "FK": "FKP", "FM": "USD", "FO": "DKK", "NI": "NIO", "NL": "EUR", "NO": "NOK", "NA": "NAD", "VU": "VUV", "NC": "XPF", "NE": "XOF", "NF": "AUD", "NG": "NGN", "NZ": "NZD", "NP": "NPR", "NR": "AUD", "NU": "NZD", "CK": "NZD", "XK": "EUR", "CI": "XOF", "CH": "CHF", "CO": "COP", "CN": "CNY", "CM": "XAF", "CL": "CLP", "CC": "AUD", "CA": "CAD", "CG": "XAF", "CF": "XAF", "CD": "CDF", "CZ": "CZK", "CY": "EUR", "CX": "AUD", "CR": "CRC", "CW": "ANG", "CV": "CVE", "CU": "CUP", "SZ": "SZL", "SY": "SYP", "SX": "ANG", "KG": "KGS", "KE": "KES", "SS": "SSP", "SR": "SRD", "KI": "AUD", "KH": "KHR", "KN": "XCD", "KM": "KMF", "ST": "STD", "SK": "EUR", "KR": "KRW", "SI": "EUR", "KP": "KPW", "KW": "KWD", "SN": "XOF", "SM": "EUR", "SL": "SLL", "SC": "SCR", "KZ": "KZT", "KY": "KYD", "SG": "SGD", "SE": "SEK", "SD": "SDG", "DO": "DOP", "DM": "XCD", "DJ": "DJF", "DK": "DKK", "VG": "USD", "DE": "EUR", "YE": "YER", "DZ": "DZD", "US": "USD", "UY": "UYU", "YT": "EUR", "UM": "USD", "LB": "LBP", "LC": "XCD", "LA": "LAK", "TV": "AUD", "TW": "TWD", "TT": "TTD", "TR": "TRY", "LK": "LKR", "LI": "CHF", "LV": "EUR", "TO": "TOP", "LT": "LTL", "LU": "EUR", "LR": "LRD", "LS": "LSL", "TH": "THB", "TF": "EUR", "TG": "XOF", "TD": "XAF", "TC": "USD", "LY": "LYD", "VA": "EUR", "VC": "XCD", "AE": "AED", "AD": "EUR", "AG": "XCD", "AF": "AFN", "AI": "XCD", "VI": "USD", "IS": "ISK", "IR": "IRR", "AM": "AMD", "AL": "ALL", "AO": "AOA", "AQ": "", "AS": "USD", "AR": "ARS", "AU": "AUD", "AT": "EUR", "AW": "AWG", "IN": "INR", "AX": "EUR", "AZ": "AZN", "IE": "EUR", "ID": "IDR", "UA": "UAH", "QA": "QAR", "MZ": "MZN"} \ No newline at end of file diff --git a/coupon-manager/includes/index.php b/coupon-manager/includes/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/coupon-manager/includes/index.php @@ -0,0 +1 @@ + + */ +class Coupon_Manager_Public { + + /** + * The ID of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $plugin_name The ID of this plugin. + */ + private $plugin_name; + + /** + * The version of this plugin. + * + * @since 1.0.0 + * @access private + * @var string $version The current version of this plugin. + */ + private $version; + + /** + * Initialize the class and set its properties. + * + * @since 1.0.0 + * @param string $plugin_name The name of the plugin. + * @param string $version The version of this plugin. + */ + public function __construct( $plugin_name, $version ) { + + $this->plugin_name = $plugin_name; + $this->version = $version; + + } + + /** + * Register the stylesheets for the public-facing side of the site. + * + * @since 1.0.0 + */ + public function enqueue_styles() { + + /** + * This function is provided for demonstration purposes only. + * + * An instance of this class should be passed to the run() function + * defined in Coupon_Manager_Loader as all of the hooks are defined + * in that particular class. + * + * The Coupon_Manager_Loader will then create the relationship + * between the defined hooks and the functions defined in this + * class. + */ + + wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/coupon-manager-public.css', array(), $this->version, 'all' ); + + } + + /** + * Register the JavaScript for the public-facing side of the site. + * + * @since 1.0.0 + */ + public function enqueue_scripts() { + + /** + * This function is provided for demonstration purposes only. + * + * An instance of this class should be passed to the run() function + * defined in Coupon_Manager_Loader as all of the hooks are defined + * in that particular class. + * + * The Coupon_Manager_Loader will then create the relationship + * between the defined hooks and the functions defined in this + * class. + */ + + wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/coupon-manager-public.js', array( 'jquery' ), $this->version, false ); + + } + + public function generate_coupon(){ + + $order_id = wc_get_order_id_by_order_key( $_GET['key'] ); + $order = wc_get_order( $order_id ); + $site_url = get_site_url(); + $coupon_uses = false; + if( $order->get_used_coupons() && !get_post_meta($order_id,'uses_c',true) ) { + $coupon_uses = true; + $coupons_count = count( $order->get_used_coupons() ); + + foreach( $order->get_used_coupons() as $coupon) { + + $c = new WC_Coupon($coupon); +// var_dump(get_post_meta( $c->get_id(),'billing_user_name',true)); + $name = $order->get_billing_first_name() . " "; + $name .= $order->get_billing_last_name(); + + $username = $name; + $useremail = $order->get_billing_email(); + $get_post_meta = get_post_meta($c->get_id()); + + $billing_username = get_post_meta( $c->get_id(),'billing_user_name',true); + $customer_email = get_post_meta( $c->get_id(),'customer_email_',true); + $coupon_user = array( + 'post_title' => $username, + 'post_content' => 'User Name = '.$username.'
User Email = '.$useremail.'
Giver Name = '. $billing_username .'
Giver Email = '. $customer_email, + 'post_excerpt' => '', + 'post_status' => 'publish', + 'post_author' => 1, + 'post_type' => 'couponuser' + ); + $new_coupon_id = wp_insert_post( $coupon_user ); + + add_post_meta( $new_coupon_id, 'username', $username ); + add_post_meta( $new_coupon_id, 'useremail', $useremail ); + add_post_meta( $new_coupon_id, 'giver_name', $billing_username ); + add_post_meta( $new_coupon_id, 'giver_email', $customer_email ); + + } + + update_post_meta($order_id,'uses_c',true); + + } +// wp_remote_get("http://licenses-manager.com/wp-json/coupon/tracking?coupon_uses=1&site_url=".$site_url); + + + if(get_post_meta($order_id,'received_coupon_code',true)){ + return get_post_meta($order_id,'received_coupon_code',true); + } + + $coupon_limit = get_option('limit_person_coupon'); + $discount_amount = get_option('coupon_discount_amount'); + $coupon_expiry_day = get_option('coupon_expiry_date'); + + $coupon_code = substr( "abcdefghijklmnopqrstuvwxyz123456789", mt_rand(0, 50) , 1) .substr( md5( time() ), 1); // Code + $coupon_code = substr( $coupon_code, 0,10); // create 10 letters coupon + $discount_type = get_option('coupon_discount_type'); // Type: fixed_cart, percent, fixed_product, percent_product + $billing_user_name = $order->get_billing_first_name(); + $user_id = $order->get_user_id(); + $user_email = $order->get_billing_email(); + $coupon = array( + 'post_title' => $coupon_code, + 'post_content' => '$'.$discount_amount.' off coupon', + 'post_excerpt' => '$'.$discount_amount.' off coupon', + 'post_status' => 'publish', + 'post_type' => 'shop_coupon' + ); + + $new_coupon_id = wp_insert_post( $coupon ); + $coupon_publish_date = get_the_date('Y-m-d',$new_coupon_id); + $coupon_expiry_date = date('Y-m-d', strtotime($coupon_publish_date. ' + '.$coupon_expiry_day.' Days')); + // Add meta + update_post_meta( $new_coupon_id, 'discount_type', $discount_type ); + update_post_meta( $new_coupon_id, 'coupon_amount', $discount_amount ); + update_post_meta( $new_coupon_id, 'usage_limit', $coupon_limit ); + update_post_meta( $new_coupon_id, 'customer_email_', $user_email ); + add_post_meta( $new_coupon_id, 'customer_id', $user_id ); + update_post_meta( $new_coupon_id, 'expiry_date', $coupon_expiry_date ); + + $name = $order->get_billing_first_name() . " "; + $name .= $order->get_billing_last_name(); + + add_post_meta( $new_coupon_id, 'billing_user_name', $name ); + + add_post_meta( $order_id, 'received_coupon_code', $coupon_code ); + + wp_remote_get("http://licenses-manager.com/wp-json/coupon/tracking?coupon_uses=1&coupon_generate=1&site_url=".$site_url); + + return $coupon_code; + + } + + public function coupon_add_content_thankyou(){ + + $order_id = wc_get_order_id_by_order_key( $_GET['key'] ); + $order = wc_get_order( $order_id ); + $user_first_name = $order->get_billing_first_name(); + $user_last_name = $order->get_billing_last_name(); + $received_coupon_code = get_post_meta( $order_id, 'received_coupon_code', false); + $site_url = get_site_url(); + $business_name = get_bloginfo(); + + foreach($received_coupon_code as $key => $code){ + $str = get_option('thank_page_text_opt'); + + if(!$str){ + + $str = " + +

You have got a coupon

+ Your coupon is {coupon_code}. + Website Url is {site_url}. + Customer {first_name} {last_name}. + Business Name {business_name}. + "; + + } + + $background_image = get_option('background_image'); + + $str = str_replace("{coupon_code}",$code,$str); + $str = str_replace("{site_url}",$site_url,$str); + $str = str_replace("{first_name}",$user_first_name,$str); + $str = str_replace("{last_name}",$user_last_name,$str); + $str = str_replace("{business_name}",$business_name,$str); + + + if($background_image){ + $background_image = "background-image:url($background_image); background-repeat:no-repeat;background-position:center;background-size: 100% 100%;min-height:400px;"; + } + + ?> + +
+
+ +
+ +
+ + +
+
+ + cart->get_applied_coupons(); + global $woocommerce; + $c = new WC_Coupon($applied_coupon[0]); + $current_user = wp_get_current_user(); + $username = $current_user->user_firstname; + $get_post_meta = get_post_meta($c->get_id()); + + $billing_username = get_post_meta( $c->get_id(),'billing_user_name',true); + $customer_email = get_post_meta( $c->get_id(),'customer_email_',true); + $coupon_user = array( + 'post_title' => $username, + 'post_content' => 'User Name ='.$username.'
Giver Name ='. $billing_username .'
Giver Email'. $customer_email, + 'post_excerpt' => '', + 'post_status' => 'publish', + 'post_author' => 1, + 'post_type' => 'couponuser' + ); +// wp_insert_post( $coupon_user ); + $new_coupon_id = wp_insert_post( $coupon_user ); + + add_post_meta( $new_coupon_id, 'username', $username ); + add_post_meta( $new_coupon_id, 'giver_name', $billing_username ); + add_post_meta( $new_coupon_id, 'giver_email', $customer_email ); + */ + } + public function add_order_email_coupon_details($order, $sent_to_admin){ + + $received_coupon_code = get_post_meta( $order->get_id(), 'received_coupon_code', false); + $site_url = get_site_url(); + + foreach($received_coupon_code as $key => $code){ + $str = get_option('thank_page_text_opt'); + $new_arr = explode(".",$str); + $new_replace = array($code, $site_url); + $new_find = array("{coupon_code}","{site_url}"); + print_r(str_replace($new_find,$new_replace,$new_arr)[0]); + echo '
'; + print_r(str_replace($new_find,$new_replace,$new_arr)[1]); + echo '
'; + } + } + + +} diff --git a/coupon-manager/public/css/coupon-manager-public.css b/coupon-manager/public/css/coupon-manager-public.css new file mode 100644 index 0000000..58ea33b --- /dev/null +++ b/coupon-manager/public/css/coupon-manager-public.css @@ -0,0 +1,17 @@ +/** + * All of the CSS for your public-facing functionality should be + * included in this file. + */ + +.copy_text_btn_sm{ + padding: 10px 15px; + border-radius: 2px; + } + .copy_text_btn_md{ + padding: 10px 25px; + border-radius: 2px; + } + .copy_text_btn_lg{ + padding: 10px 40px; + border-radius: 2px; + } \ No newline at end of file diff --git a/coupon-manager/public/index.php b/coupon-manager/public/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/coupon-manager/public/index.php @@ -0,0 +1 @@ +'); + $('body').append($temp); + $temp.val($(element).text()).select(); + document.execCommand('copy'); + $temp.remove(); + $('#hmd_copy_text_btn').after("Text Coppied"); + $('#hmd_copy_text_btn').remove(); +// setTimeout(function(){ +// $('.hmd_appended_text').remove(); +// }, 2000); +} \ No newline at end of file diff --git a/coupon-manager/public/partials/coupon-manager-public-display.php b/coupon-manager/public/partials/coupon-manager-public-display.php new file mode 100644 index 0000000..d1604e2 --- /dev/null +++ b/coupon-manager/public/partials/coupon-manager-public-display.php @@ -0,0 +1,16 @@ + + + diff --git a/coupon-manager/uninstall.php b/coupon-manager/uninstall.php new file mode 100644 index 0000000..2becfb4 --- /dev/null +++ b/coupon-manager/uninstall.php @@ -0,0 +1,31 @@ +