NoteStar il y a 5 ans
Parent
commit
b03b6d8908
100 fichiers modifiés avec 21425 ajouts et 0 suppressions
  1. 1 0
      .user.ini
  2. 400 0
      wp-content/plugins/classic-editor/LICENSE.md
  3. 941 0
      wp-content/plugins/classic-editor/classic-editor.php
  4. 23 0
      wp-content/plugins/classic-editor/js/block-editor-plugin.js
  5. 119 0
      wp-content/plugins/classic-editor/readme.txt
  6. 86 0
      wp-content/plugins/coupon-creator/coupon_creator.php
  7. BIN
      wp-content/plugins/coupon-creator/languages/coupon-creator-de_DE.mo
  8. 874 0
      wp-content/plugins/coupon-creator/languages/coupon-creator-de_DE.po
  9. BIN
      wp-content/plugins/coupon-creator/languages/coupon-creator-es_ES.mo
  10. 905 0
      wp-content/plugins/coupon-creator/languages/coupon-creator-es_ES.po
  11. BIN
      wp-content/plugins/coupon-creator/languages/coupon-creator-fr_FR.mo
  12. 874 0
      wp-content/plugins/coupon-creator/languages/coupon-creator-fr_FR.po
  13. BIN
      wp-content/plugins/coupon-creator/languages/coupon-creator-pt_BR.mo
  14. 1086 0
      wp-content/plugins/coupon-creator/languages/coupon-creator-pt_BR.po
  15. 874 0
      wp-content/plugins/coupon-creator/languages/coupon-creator.pot
  16. BIN
      wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-es_ES.mo
  17. 497 0
      wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-es_ES.po
  18. BIN
      wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-pt_BR.mo
  19. 491 0
      wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-pt_BR.po
  20. 484 0
      wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine.pot
  21. 6 0
      wp-content/plugins/coupon-creator/plugin-engine/pngx-autoload.php
  22. 28 0
      wp-content/plugins/coupon-creator/plugin-engine/pngx-common.php
  23. 10 0
      wp-content/plugins/coupon-creator/plugin-engine/readme.txt
  24. 50 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Abstract_Plugin_Register.php
  25. 112 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Add_Capabilities.php
  26. 287 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Ajax.php
  27. 191 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Assets.php
  28. 17 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Columns.php
  29. 127 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Cron.php
  30. 579 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/EDD_License.php
  31. 500 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/EDD_Plugin_Updater.php
  32. 74 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Checkbox.php
  33. 64 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Color.php
  34. 50 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Date.php
  35. 31 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Heading.php
  36. 41 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Help.php
  37. 33 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Hidden.php
  38. 62 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Icon.php
  39. 68 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Image.php
  40. 47 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/License.php
  41. 82 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/License_Status.php
  42. 37 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/List.php
  43. 25 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Message.php
  44. 55 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Number.php
  45. 56 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Radio.php
  46. 88 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Select.php
  47. 35 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Template.php
  48. 64 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Text.php
  49. 49 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Textarea.php
  50. 48 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Url.php
  51. 178 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Variety.php
  52. 121 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Wysiwyg.php
  53. 101 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field_Methods.php
  54. 244 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Fields.php
  55. 221 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Help.php
  56. 43 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Main.php
  57. 412 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Meta.php
  58. 132 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Notice/Plugin_Download.php
  59. 589 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Notices.php
  60. 449 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Options.php
  61. 249 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Plugin_License_List.php
  62. 49 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Style/Linked.php
  63. 637 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Support.php
  64. 80 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Updates.php
  65. 48 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Allowed_Tags.php
  66. 578 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Assets.php
  67. 258 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Autoloader.php
  68. 170 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Blocks/Abstract.php
  69. 80 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Blocks/Interface.php
  70. 299 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Container.php
  71. 126 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Context.php
  72. 41 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Cron_20.php
  73. 46 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Date.php
  74. 494 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Dependency.php
  75. 126 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Editor.php
  76. 65 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Content.php
  77. 33 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Icon.php
  78. 40 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Image.php
  79. 39 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Title.php
  80. 48 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Variety.php
  81. 37 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Wrap.php
  82. 92 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Fields.php
  83. 310 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Main.php
  84. 51 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Meta/Fields.php
  85. 98 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Plugins.php
  86. 206 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Register_Post_Type.php
  87. 90 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Register_Taxonomy.php
  88. 442 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Sanitize.php
  89. 280 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Service_Providers/Processes.php
  90. 88 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Style/Linked.php
  91. 480 0
      wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Utilities/Array.php
  92. 275 0
      wp-content/plugins/coupon-creator/plugin-engine/src/functions/template-tags/general.php
  93. BIN
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.eot
  94. 377 0
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.svg
  95. BIN
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.ttf
  96. BIN
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.woff
  97. 7 0
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/jquery-ui.min.css
  98. 2024 0
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/pngx-admin.css
  99. 1 0
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/pngx-admin.min.css
  100. 0 0
      wp-content/plugins/coupon-creator/plugin-engine/src/resources/images/pngx-loading.gif

+ 1 - 0
.user.ini

@@ -0,0 +1 @@
+open_basedir=/www/wwwroot/lyblog/:/tmp/:/proc/

+ 400 - 0
wp-content/plugins/classic-editor/LICENSE.md

@@ -0,0 +1,400 @@
+### WordPress - Web publishing software
+
+    Copyright 2011-2019 by the contributors
+
+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 St, Fifth Floor, Boston, MA  02110-1301  USA
+
+This program incorporates work covered by the following copyright and
+permission notices:
+
+    b2 is (c) 2001, 2002 Michel Valdrighi - m@tidakada.com -
+    http://tidakada.com
+
+    Wherever third party code has been used, credit has been given in the code's
+    comments.
+
+    b2 is released under the GPL
+
+and
+
+    WordPress - Web publishing software
+
+    Copyright 2003-2010 by the contributors
+
+    WordPress is released under the GPL
+  
+---
+
+### 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.
+
+### 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.
+
+    one line to give the program's name and an idea of what it does.
+    Copyright (C) yyyy  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 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.
+
+    signature of Ty Coon, 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](http://www.gnu.org/licenses/lgpl.html) instead of this
+License.

+ 941 - 0
wp-content/plugins/classic-editor/classic-editor.php

@@ -0,0 +1,941 @@
+<?php
+/**
+ * Classic Editor
+ *
+ * Plugin Name: Classic Editor
+ * Plugin URI:  https://wordpress.org/plugins/classic-editor/
+ * Description: Enables the WordPress classic editor and the old-style Edit Post screen with TinyMCE, Meta Boxes, etc. Supports the older plugins that extend this screen.
+ * Version:     1.5
+ * Author:      WordPress Contributors
+ * Author URI:  https://github.com/WordPress/classic-editor/
+ * License:     GPLv2 or later
+ * License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * Text Domain: classic-editor
+ * Domain Path: /languages
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License version 2, as published by the Free Software Foundation. You may NOT assume
+ * that you can use any other version of the GPL.
+ *
+ * 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.
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+	die( 'Invalid request.' );
+}
+
+if ( ! class_exists( 'Classic_Editor' ) ) :
+class Classic_Editor {
+	private static $settings;
+	private static $supported_post_types = array();
+
+	private function __construct() {}
+
+	public static function init_actions() {
+		$block_editor = has_action( 'enqueue_block_assets' );
+		$gutenberg = function_exists( 'gutenberg_register_scripts_and_styles' );
+
+		register_activation_hook( __FILE__, array( __CLASS__, 'activate' ) );
+		register_uninstall_hook( __FILE__, array( __CLASS__, 'uninstall' ) );
+
+		$settings = self::get_settings();
+
+		if ( is_multisite() ) {
+			add_action( 'wpmu_options', array( __CLASS__, 'network_settings' ) );
+			add_action( 'update_wpmu_options', array( __CLASS__, 'save_network_settings' ) );
+		}
+
+		if ( ! $settings['hide-settings-ui'] ) {
+			// Add a link to the plugin's settings and/or network admin settings in the plugins list table.
+			add_filter( 'plugin_action_links', array( __CLASS__, 'add_settings_link' ), 10, 2 );
+			add_filter( 'network_admin_plugin_action_links', array( __CLASS__, 'add_settings_link' ), 10, 2 );
+
+			add_action( 'admin_init', array( __CLASS__, 'register_settings' ) );
+
+			if ( $settings['allow-users'] ) {
+				// User settings.
+				add_action( 'personal_options_update', array( __CLASS__, 'save_user_settings' ) );
+				add_action( 'profile_personal_options', array( __CLASS__, 'user_settings' ) );
+			}
+		}
+
+		// Always remove the "Try Gutenberg" dashboard widget. See https://core.trac.wordpress.org/ticket/44635.
+		remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
+
+		if ( ! $block_editor && ! $gutenberg  ) {
+			return;
+		}
+
+		if ( $settings['allow-users'] ) {
+			// Also used in Gutenberg.
+			add_filter( 'use_block_editor_for_post', array( __CLASS__, 'choose_editor' ), 100, 2 );
+
+			if ( $gutenberg ) {
+				// Support older Gutenberg versions.
+				add_filter( 'gutenberg_can_edit_post', array( __CLASS__, 'choose_editor' ), 100, 2 );
+
+				if ( $settings['editor'] === 'classic' ) {
+					self::remove_gutenberg_hooks( 'some' );
+				}
+			}
+
+			add_filter( 'get_edit_post_link', array( __CLASS__, 'get_edit_post_link' ) );
+			add_filter( 'redirect_post_location', array( __CLASS__, 'redirect_location' ) );
+			add_action( 'edit_form_top', array( __CLASS__, 'add_redirect_helper' ) );
+			add_action( 'admin_head-edit.php', array( __CLASS__, 'add_edit_php_inline_style' ) );
+
+			add_action( 'edit_form_top', array( __CLASS__, 'remember_classic_editor' ) );
+			add_filter( 'block_editor_settings', array( __CLASS__, 'remember_block_editor' ), 10, 2 );
+
+			// Post state (edit.php)
+			add_filter( 'display_post_states', array( __CLASS__, 'add_post_state' ), 10, 2 );
+			// Row actions (edit.php)
+			add_filter( 'page_row_actions', array( __CLASS__, 'add_edit_links' ), 15, 2 );
+			add_filter( 'post_row_actions', array( __CLASS__, 'add_edit_links' ), 15, 2 );
+
+			// Switch editors while editing a post
+			add_action( 'add_meta_boxes', array( __CLASS__, 'add_meta_box' ), 10, 2 );
+			add_action( 'enqueue_block_editor_assets', array( __CLASS__, 'enqueue_block_editor_scripts' ) );
+		} else {
+			if ( $settings['editor'] === 'classic' ) {
+				// Also used in Gutenberg.
+				// Consider disabling other Block Editor functionality.
+				add_filter( 'use_block_editor_for_post_type', '__return_false', 100 );
+
+				if ( $gutenberg ) {
+					// Support older Gutenberg versions.
+					add_filter( 'gutenberg_can_edit_post_type', '__return_false', 100 );
+					self::remove_gutenberg_hooks();
+				}
+			} else {
+				// `$settings['editor'] === 'block'`, nothing to do :)
+				return;
+			}
+		}
+
+		if ( $block_editor ) {
+			// Move the Privacy Page notice back under the title.
+			add_action( 'admin_init', array( __CLASS__, 'on_admin_init' ) );
+		}
+		if ( $gutenberg ) {
+			// These are handled by this plugin. All are older, not used in 5.3+.
+			remove_action( 'admin_init', 'gutenberg_add_edit_link_filters' );
+			remove_action( 'admin_print_scripts-edit.php', 'gutenberg_replace_default_add_new_button' );
+			remove_filter( 'redirect_post_location', 'gutenberg_redirect_to_classic_editor_when_saving_posts' );
+			remove_filter( 'display_post_states', 'gutenberg_add_gutenberg_post_state' );
+			remove_action( 'edit_form_top', 'gutenberg_remember_classic_editor_when_saving_posts' );
+		}
+	}
+
+	public static function remove_gutenberg_hooks( $remove = 'all' ) {
+		remove_action( 'admin_menu', 'gutenberg_menu' );
+		remove_action( 'admin_init', 'gutenberg_redirect_demo' );
+
+		if ( $remove !== 'all' ) {
+			return;
+		}
+
+		// Gutenberg 5.3+
+		remove_action( 'wp_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
+		remove_action( 'admin_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
+		remove_action( 'admin_notices', 'gutenberg_wordpress_version_notice' );
+		remove_action( 'rest_api_init', 'gutenberg_register_rest_widget_updater_routes' );
+		remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
+		remove_action( 'admin_print_scripts', 'gutenberg_block_editor_admin_print_scripts' );
+		remove_action( 'admin_print_footer_scripts', 'gutenberg_block_editor_admin_print_footer_scripts' );
+		remove_action( 'admin_footer', 'gutenberg_block_editor_admin_footer' );
+		remove_action( 'admin_enqueue_scripts', 'gutenberg_widgets_init' );
+		remove_action( 'admin_notices', 'gutenberg_build_files_notice' );
+
+		remove_filter( 'load_script_translation_file', 'gutenberg_override_translation_file' );
+		remove_filter( 'block_editor_settings', 'gutenberg_extend_block_editor_styles' );
+		remove_filter( 'default_content', 'gutenberg_default_demo_content' );
+		remove_filter( 'default_title', 'gutenberg_default_demo_title' );
+		remove_filter( 'block_editor_settings', 'gutenberg_legacy_widget_settings' );
+		remove_filter( 'rest_request_after_callbacks', 'gutenberg_filter_oembed_result' );
+
+		// Previously used, compat for older Gutenberg versions.
+		remove_filter( 'wp_refresh_nonces', 'gutenberg_add_rest_nonce_to_heartbeat_response_headers' );
+		remove_filter( 'get_edit_post_link', 'gutenberg_revisions_link_to_editor' );
+		remove_filter( 'wp_prepare_revision_for_js', 'gutenberg_revisions_restore' );
+
+		remove_action( 'rest_api_init', 'gutenberg_register_rest_routes' );
+		remove_action( 'rest_api_init', 'gutenberg_add_taxonomy_visibility_field' );
+		remove_filter( 'registered_post_type', 'gutenberg_register_post_prepare_functions' );
+
+		remove_action( 'do_meta_boxes', 'gutenberg_meta_box_save' );
+		remove_action( 'submitpost_box', 'gutenberg_intercept_meta_box_render' );
+		remove_action( 'submitpage_box', 'gutenberg_intercept_meta_box_render' );
+		remove_action( 'edit_page_form', 'gutenberg_intercept_meta_box_render' );
+		remove_action( 'edit_form_advanced', 'gutenberg_intercept_meta_box_render' );
+		remove_filter( 'redirect_post_location', 'gutenberg_meta_box_save_redirect' );
+		remove_filter( 'filter_gutenberg_meta_boxes', 'gutenberg_filter_meta_boxes' );
+
+		remove_filter( 'body_class', 'gutenberg_add_responsive_body_class' );
+		remove_filter( 'admin_url', 'gutenberg_modify_add_new_button_url' ); // old
+		remove_action( 'admin_enqueue_scripts', 'gutenberg_check_if_classic_needs_warning_about_blocks' );
+		remove_filter( 'register_post_type_args', 'gutenberg_filter_post_type_labels' );
+
+		// Keep
+		// remove_filter( 'wp_kses_allowed_html', 'gutenberg_kses_allowedtags', 10, 2 ); // not needed in 5.0
+		// remove_filter( 'bulk_actions-edit-wp_block', 'gutenberg_block_bulk_actions' );
+		// remove_filter( 'wp_insert_post_data', 'gutenberg_remove_wpcom_markdown_support' );
+		// remove_filter( 'the_content', 'do_blocks', 9 );
+		// remove_action( 'init', 'gutenberg_register_post_types' );
+
+		// Continue to manage wpautop for posts that were edited in Gutenberg.
+		// remove_filter( 'wp_editor_settings', 'gutenberg_disable_editor_settings_wpautop' );
+		// remove_filter( 'the_content', 'gutenberg_wpautop', 8 );
+
+	}
+
+	private static function get_settings( $refresh = 'no' ) {
+		/**
+		 * Can be used to override the plugin's settings. Always hides the settings UI when used (as users cannot change the settings).
+		 *
+		 * Has to return an associative array with two keys.
+		 * The defaults are:
+		 *   'editor' => 'classic', // Accepted values: 'classic', 'block'.
+		 *   'allow-users' => false,
+		 *
+		 * @param boolean To override the settings return an array with the above keys.
+		 */
+		$settings = apply_filters( 'classic_editor_plugin_settings', false );
+
+		if ( is_array( $settings ) ) {
+			return array(
+				'editor' => ( isset( $settings['editor'] ) && $settings['editor'] === 'block' ) ? 'block' : 'classic',
+				'allow-users' => ! empty( $settings['allow-users'] ),
+				'hide-settings-ui' => true,
+			);
+		}
+
+		if ( ! empty( self::$settings ) && $refresh === 'no' ) {
+			return self::$settings;
+		}
+
+		if ( is_multisite() ) {
+			$defaults = array(
+				'editor' => get_network_option( null, 'classic-editor-replace' ) === 'block' ? 'block' : 'classic',
+				'allow-users' => false,
+			);
+
+			/**
+			 * Filters the default network options.
+			 *
+			 * @param array $defaults The default options array. See `classic_editor_plugin_settings` for supported keys and values.
+			 */
+			$defaults = apply_filters( 'classic_editor_network_default_settings', $defaults );
+
+			if ( get_network_option( null, 'classic-editor-allow-sites' ) !== 'allow' ) {
+				// Per-site settings are disabled. Return default network options nad hide the settings UI.
+				$defaults['hide-settings-ui'] = true;
+				return $defaults;
+			}
+
+			// Override with the site options.
+			$editor_option = get_option( 'classic-editor-replace' );
+			$allow_users_option = get_option( 'classic-editor-allow-users' );
+
+			if ( $editor_option ) {
+				$defaults['editor'] = $editor_option;
+			}
+			if ( $allow_users_option ) {
+				$defaults['allow-users'] = ( $allow_users_option === 'allow' );
+			}
+
+			$editor = ( isset( $defaults['editor'] ) && $defaults['editor'] === 'block' ) ? 'block' : 'classic';
+			$allow_users = ! empty( $defaults['allow-users'] );
+		} else {
+			$allow_users = ( get_option( 'classic-editor-allow-users' ) === 'allow' );
+			$option = get_option( 'classic-editor-replace' );
+
+			// Normalize old options.
+			if ( $option === 'block' || $option === 'no-replace' ) {
+				$editor = 'block';
+			} else {
+				// empty( $option ) || $option === 'classic' || $option === 'replace'.
+				$editor = 'classic';
+			}
+		}
+
+		// Override the defaults with the user options.
+		if ( ( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'options-writing.php' ) && $allow_users ) {
+			$user_options = get_user_option( 'classic-editor-settings' );
+
+			if ( $user_options === 'block' || $user_options === 'classic' ) {
+				$editor = $user_options;
+			}
+		}
+
+		self::$settings = array(
+			'editor' => $editor,
+			'hide-settings-ui' => false,
+			'allow-users' => $allow_users,
+		);
+
+		return self::$settings;
+	}
+
+	private static function is_classic( $post_id = 0 ) {
+		if ( ! $post_id ) {
+			$post_id = self::get_edited_post_id();
+		}
+
+		if ( $post_id ) {
+			$settings = self::get_settings();
+
+			if ( $settings['allow-users'] && ! isset( $_GET['classic-editor__forget'] ) ) {
+				$which = get_post_meta( $post_id, 'classic-editor-remember', true );
+
+				if ( $which ) {
+					// The editor choice will be "remembered" when the post is opened in either Classic or Block editor.
+					if ( 'classic-editor' === $which ) {
+						return true;
+					} elseif ( 'block-editor' === $which ) {
+						return false;
+					}
+				}
+
+				return ( ! self::has_blocks( $post_id ) );
+			}
+		}
+
+		if ( isset( $_GET['classic-editor'] ) ) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Get the edited post ID (early) when loading the Edit Post screen.
+	 */
+	private static function get_edited_post_id() {
+		if (
+			! empty( $_GET['post'] ) &&
+			! empty( $_GET['action'] ) &&
+			$_GET['action'] === 'edit' &&
+			! empty( $GLOBALS['pagenow'] ) &&
+			$GLOBALS['pagenow'] === 'post.php'
+		) {
+			return (int) $_GET['post']; // post_ID
+		}
+
+		return 0;
+	}
+
+	public static function register_settings() {
+		// Add an option to Settings -> Writing
+		register_setting( 'writing', 'classic-editor-replace', array(
+			'sanitize_callback' => array( __CLASS__, 'validate_option_editor' ),
+		) );
+
+		register_setting( 'writing', 'classic-editor-allow-users', array(
+			'sanitize_callback' => array( __CLASS__, 'validate_option_allow_users' ),
+		) );
+
+		add_option_whitelist( array(
+			'writing' => array( 'classic-editor-replace', 'classic-editor-allow-users' ),
+		) );
+
+		$heading_1 = __( 'Default editor for all users', 'classic-editor' );
+		$heading_2 = __( 'Allow users to switch editors', 'classic-editor' );
+
+		add_settings_field( 'classic-editor-1', $heading_1, array( __CLASS__, 'settings_1' ), 'writing' );
+		add_settings_field( 'classic-editor-2', $heading_2, array( __CLASS__, 'settings_2' ), 'writing' );
+	}
+
+	public static function save_user_settings( $user_id ) {
+		if (
+			isset( $_POST['classic-editor-user-settings'] ) &&
+			isset( $_POST['classic-editor-replace'] ) &&
+			wp_verify_nonce( $_POST['classic-editor-user-settings'], 'allow-user-settings' )
+		) {
+			$user_id = (int) $user_id;
+
+			if ( $user_id !== get_current_user_id() && ! current_user_can( 'edit_user', $user_id ) ) {
+				return;
+			}
+
+			$editor = self::validate_option_editor( $_POST['classic-editor-replace'] );
+			update_user_option( $user_id, 'classic-editor-settings', $editor );
+		}
+	}
+
+	/**
+	 * Validate
+	 */
+	public static function validate_option_editor( $value ) {
+		if ( $value === 'block' ) {
+			return 'block';
+		}
+
+		return 'classic';
+	}
+
+	public static function validate_option_allow_users( $value ) {
+		if ( $value === 'allow' ) {
+			return 'allow';
+		}
+
+		return 'disallow';
+	}
+
+	public static function settings_1() {
+		$settings = self::get_settings( 'refresh' );
+
+		?>
+		<div class="classic-editor-options">
+			<p>
+				<input type="radio" name="classic-editor-replace" id="classic-editor-classic" value="classic"<?php if ( $settings['editor'] === 'classic' ) echo ' checked'; ?> />
+				<label for="classic-editor-classic"><?php _ex( 'Classic Editor', 'Editor Name', 'classic-editor' ); ?></label>
+			</p>
+			<p>
+				<input type="radio" name="classic-editor-replace" id="classic-editor-block" value="block"<?php if ( $settings['editor'] !== 'classic' ) echo ' checked'; ?> />
+				<label for="classic-editor-block"><?php _ex( 'Block Editor', 'Editor Name', 'classic-editor' ); ?></label>
+			</p>
+		</div>
+		<script>
+		jQuery( 'document' ).ready( function( $ ) {
+			if ( window.location.hash === '#classic-editor-options' ) {
+				$( '.classic-editor-options' ).closest( 'td' ).addClass( 'highlight' );
+			}
+		} );
+		</script>
+		<?php
+	}
+
+	public static function settings_2() {
+		$settings = self::get_settings( 'refresh' );
+
+		?>
+		<div class="classic-editor-options">
+			<p>
+				<input type="radio" name="classic-editor-allow-users" id="classic-editor-allow" value="allow"<?php if ( $settings['allow-users'] ) echo ' checked'; ?> />
+				<label for="classic-editor-allow"><?php _e( 'Yes', 'classic-editor' ); ?></label>
+			</p>
+			<p>
+				<input type="radio" name="classic-editor-allow-users" id="classic-editor-disallow" value="disallow"<?php if ( ! $settings['allow-users'] ) echo ' checked'; ?> />
+				<label for="classic-editor-disallow"><?php _e( 'No', 'classic-editor' ); ?></label>
+			</p>
+		</div>
+		<?php
+	}
+
+	/**
+	 * Shown on the Profile page when allowed by admin.
+	 */
+	public static function user_settings() {
+		global $user_can_edit;
+		$settings = self::get_settings( 'update' );
+
+		if (
+			! defined( 'IS_PROFILE_PAGE' ) ||
+			! IS_PROFILE_PAGE ||
+			! $user_can_edit ||
+			! $settings['allow-users']
+		) {
+			return;
+		}
+
+		?>
+		<table class="form-table">
+			<tr class="classic-editor-user-options">
+				<th scope="row"><?php _e( 'Default Editor', 'classic-editor' ); ?></th>
+				<td>
+				<?php wp_nonce_field( 'allow-user-settings', 'classic-editor-user-settings' ); ?>
+				<?php self::settings_1(); ?>
+				</td>
+			</tr>
+		</table>
+		<script>jQuery( 'tr.user-rich-editing-wrap' ).before( jQuery( 'tr.classic-editor-user-options' ) );</script>
+		<?php
+	}
+
+	public static function network_settings() {
+		$editor = get_network_option( null, 'classic-editor-replace' );
+		$is_checked = ( get_network_option( null, 'classic-editor-allow-sites' ) === 'allow' );
+
+		?>
+		<h2 id="classic-editor-options"><?php _e( 'Editor Settings', 'classic-editor' ); ?></h2>
+		<table class="form-table">
+			<?php wp_nonce_field( 'allow-site-admin-settings', 'classic-editor-network-settings' ); ?>
+			<tr>
+				<th scope="row"><?php _e( 'Default editor for all sites', 'classic-editor' ); ?></th>
+				<td>
+					<p>
+						<input type="radio" name="classic-editor-replace" id="classic-editor-classic" value="classic"<?php if ( $editor !== 'block' ) echo ' checked'; ?> />
+						<label for="classic-editor-classic"><?php _ex( 'Classic Editor', 'Editor Name', 'classic-editor' ); ?></label>
+					</p>
+					<p>
+						<input type="radio" name="classic-editor-replace" id="classic-editor-block" value="block"<?php if ( $editor === 'block' ) echo ' checked'; ?> />
+						<label for="classic-editor-block"><?php _ex( 'Block Editor', 'Editor Name', 'classic-editor' ); ?></label>
+					</p>
+				</td>
+			</tr>
+			<tr>
+				<th scope="row"><?php _e( 'Change settings', 'classic-editor' ); ?></th>
+				<td>
+					<input type="checkbox" name="classic-editor-allow-sites" id="classic-editor-allow-sites" value="allow"<?php if ( $is_checked ) echo ' checked'; ?>>
+					<label for="classic-editor-allow-sites"><?php _e( 'Allow site admins to change settings', 'classic-editor' ); ?></label>
+					<p class="description"><?php _e( 'By default the Block Editor is replaced with the Classic Editor and users cannot switch editors.', 'classic-editor' ); ?></p>
+				</td>
+			</tr>
+		</table>
+		<?php
+	}
+
+	public static function save_network_settings() {
+		if (
+			isset( $_POST['classic-editor-network-settings'] ) &&
+			current_user_can( 'manage_network_options' ) &&
+			wp_verify_nonce( $_POST['classic-editor-network-settings'], 'allow-site-admin-settings' )
+		) {
+			if ( isset( $_POST['classic-editor-replace'] ) && $_POST['classic-editor-replace'] === 'block' ) {
+				update_network_option( null, 'classic-editor-replace', 'block' );
+			} else {
+				update_network_option( null, 'classic-editor-replace', 'classic' );
+			}
+			if ( isset( $_POST['classic-editor-allow-sites'] ) && $_POST['classic-editor-allow-sites'] === 'allow' ) {
+				update_network_option( null, 'classic-editor-allow-sites', 'allow' );
+			} else {
+				update_network_option( null, 'classic-editor-allow-sites', 'disallow' );
+			}
+		}
+	}
+
+	/**
+	 * Add a hidden field in edit-form-advanced.php
+	 * to help redirect back to the Classic Editor on saving.
+	 */
+	public static function add_redirect_helper() {
+		?>
+		<input type="hidden" name="classic-editor" value="" />
+		<?php
+	}
+
+	/**
+	 * Remember when the Classic Editor was used to edit a post.
+	 */
+	public static function remember_classic_editor( $post ) {
+		$post_type = get_post_type( $post );
+
+		if ( $post_type && post_type_supports( $post_type, 'editor' ) ) {
+			self::remember( $post->ID, 'classic-editor' );
+		}
+	}
+
+	/**
+	 * Remember when the Block Editor was used to edit a post.
+	 */
+	public static function remember_block_editor( $editor_settings, $post ) {
+		$post_type = get_post_type( $post );
+
+		if ( $post_type && self::can_edit_post_type( $post_type ) ) {
+			self::remember( $post->ID, 'block-editor' );
+		}
+
+		return $editor_settings;
+	}
+
+	private static function remember( $post_id, $editor ) {
+		if ( get_post_meta( $post_id, 'classic-editor-remember', true ) !== $editor ) {
+			update_post_meta( $post_id, 'classic-editor-remember', $editor );
+		}
+	}
+
+	/**
+	 * Choose which editor to use for a post.
+	 *
+	 * Passes through `$which_editor` for Block Editor (it's sets to `true` but may be changed by another plugin).
+	 *
+	 * @uses `use_block_editor_for_post` filter.
+	 *
+	 * @param boolean $use_block_editor True for Block Editor, false for Classic Editor.
+	 * @param WP_Post $post             The post being edited.
+	 * @return boolean True for Block Editor, false for Classic Editor.
+	 */
+	public static function choose_editor( $use_block_editor, $post ) {
+		$settings = self::get_settings();
+		$editors = self::get_enabled_editors_for_post( $post );
+
+		// If no editor is supported, pass through `$use_block_editor`.
+		if ( ! $editors['block_editor'] && ! $editors['classic_editor'] ) {
+			return $use_block_editor;
+		}
+
+		// Open the default editor when no $post and for "Add New" links,
+		// or the alternate editor when the user is switching editors.
+		if ( empty( $post->ID ) || $post->post_status === 'auto-draft' ) {
+			if (
+				( $settings['editor'] === 'classic' && ! isset( $_GET['classic-editor__forget'] ) ) ||  // Add New
+				( isset( $_GET['classic-editor'] ) && isset( $_GET['classic-editor__forget'] ) ) // Switch to Classic Editor when no draft post.
+			) {
+				$use_block_editor = false;
+			}
+		} elseif ( self::is_classic( $post->ID ) ) {
+			$use_block_editor = false;
+		}
+
+		// Enforce the editor if set by plugins.
+		if ( $use_block_editor && ! $editors['block_editor'] ) {
+			$use_block_editor = false;
+		} elseif ( ! $use_block_editor && ! $editors['classic_editor'] && $editors['block_editor'] ) {
+			$use_block_editor = true;
+		}
+
+		return $use_block_editor;
+	}
+
+	/**
+	 * Keep the `classic-editor` query arg through redirects when saving posts.
+	 */
+	public static function redirect_location( $location ) {
+		if (
+			isset( $_REQUEST['classic-editor'] ) ||
+			( isset( $_POST['_wp_http_referer'] ) && strpos( $_POST['_wp_http_referer'], '&classic-editor' ) !== false )
+		) {
+			$location = add_query_arg( 'classic-editor', '', $location );
+		}
+
+		return $location;
+	}
+
+	/**
+	 * Keep the `classic-editor` query arg when looking at revisions.
+	 */
+	public static function get_edit_post_link( $url ) {
+		$settings = self::get_settings();
+
+		if ( isset( $_REQUEST['classic-editor'] ) || $settings['editor'] === 'classic' ) {
+			$url = add_query_arg( 'classic-editor', '', $url );
+		}
+
+		return $url;
+	}
+
+	public static function add_meta_box( $post_type, $post ) {
+		$editors = self::get_enabled_editors_for_post( $post );
+
+		if ( ! $editors['block_editor'] || ! $editors['classic_editor'] ) {
+			// Editors cannot be switched.
+			return;
+		}
+
+		$id = 'classic-editor-switch-editor';
+		$title = __( 'Editor', 'classic-editor' );
+		$callback = array( __CLASS__, 'do_meta_box' );
+		$args = array(
+			'__back_compat_meta_box' => true,
+	    );
+
+		add_meta_box( $id, $title, $callback, null, 'side', 'default', $args );
+	}
+
+	public static function do_meta_box( $post ) {
+		$edit_url = get_edit_post_link( $post->ID, 'raw' );
+
+		// Switching to Block Editor.
+		$edit_url = remove_query_arg( 'classic-editor', $edit_url );
+		// Forget the previous value when going to a specific editor.
+		$edit_url = add_query_arg( 'classic-editor__forget', '', $edit_url );
+
+		?>
+		<p style="margin: 1em 0;">
+			<a href="<?php echo esc_url( $edit_url ); ?>"><?php _e( 'Switch to Block Editor', 'classic-editor' ); ?></a>
+		</p>
+		<?php
+	}
+
+	public static function enqueue_block_editor_scripts() {
+		$editors = self::get_enabled_editors_for_post( $GLOBALS['post'] );
+
+		if ( ! $editors['classic_editor'] ) {
+			// Editor cannot be switched.
+			return;
+		}
+
+		wp_enqueue_script(
+			'classic-editor-plugin',
+			plugins_url( 'js/block-editor-plugin.js', __FILE__ ),
+			array( 'wp-element', 'wp-components', 'lodash' ),
+			'1.4',
+			true
+		);
+
+		wp_localize_script(
+			'classic-editor-plugin',
+			'classicEditorPluginL10n',
+			array( 'linkText' => __( 'Switch to Classic Editor', 'classic-editor' ) )
+		);
+	}
+
+	/**
+	 * Add a link to the settings on the Plugins screen.
+	 */
+	public static function add_settings_link( $links, $file ) {
+		$settings = self::get_settings();
+
+		if ( $file === 'classic-editor/classic-editor.php' && ! $settings['hide-settings-ui'] && current_user_can( 'manage_options' ) ) {
+			if ( current_filter() === 'plugin_action_links' ) {
+				$url = admin_url( 'options-writing.php#classic-editor-options' );
+			} else {
+				$url = admin_url( '/network/settings.php#classic-editor-options' );
+			}
+
+			// Prevent warnings in PHP 7.0+ when a plugin uses this filter incorrectly.
+			$links = (array) $links;
+			$links[] = sprintf( '<a href="%s">%s</a>', $url, __( 'Settings', 'classic-editor' ) );
+		}
+
+		return $links;
+	}
+
+	private static function can_edit_post_type( $post_type ) {
+		$can_edit = false;
+
+		if ( function_exists( 'gutenberg_can_edit_post_type' ) ) {
+			$can_edit = gutenberg_can_edit_post_type( $post_type );
+		} elseif ( function_exists( 'use_block_editor_for_post_type' ) ) {
+			$can_edit = use_block_editor_for_post_type( $post_type );
+		}
+
+		return $can_edit;
+	}
+
+	/**
+	 * Checks which editors are enabled for the post type.
+	 *
+	 * @param string $post_type The post type.
+	 * @return array Associative array of the editors and whether they are enabled for the post type.
+	 */
+	private static function get_enabled_editors_for_post_type( $post_type ) {
+		if ( isset( self::$supported_post_types[ $post_type ] ) ) {
+			return self::$supported_post_types[ $post_type ];
+		}
+
+		$classic_editor = post_type_supports( $post_type, 'editor' );
+		$block_editor = self::can_edit_post_type( $post_type );
+
+		$editors = array(
+			'classic_editor' => $classic_editor,
+			'block_editor'   => $block_editor,
+		);
+
+		/**
+		 * Filters the editors that are enabled for the post type.
+		 *
+		 * @param array $editors    Associative array of the editors and whether they are enabled for the post type.
+		 * @param string $post_type The post type.
+		 */
+		$editors = apply_filters( 'classic_editor_enabled_editors_for_post_type', $editors, $post_type );
+		self::$supported_post_types[ $post_type ] = $editors;
+
+		return $editors;
+	}
+
+	/**
+	 * Checks which editors are enabled for the post.
+	 *
+	 * @param WP_Post $post  The post object.
+	 * @return array Associative array of the editors and whether they are enabled for the post.
+	 */
+	private static function get_enabled_editors_for_post( $post ) {
+		$post_type = get_post_type( $post );
+
+		if ( ! $post_type ) {
+			return array(
+				'classic_editor' => false,
+				'block_editor'   => false,
+			);
+		}
+
+		$editors = self::get_enabled_editors_for_post_type( $post_type );
+
+		/**
+		 * Filters the editors that are enabled for the post.
+		 *
+		 * @param array $editors Associative array of the editors and whether they are enabled for the post.
+		 * @param WP_Post $post  The post object.
+		 */
+		return apply_filters( 'classic_editor_enabled_editors_for_post', $editors, $post );
+	}
+
+	/**
+	 * Adds links to the post/page screens to edit any post or page in
+	 * the Classic Editor or Block Editor.
+	 *
+	 * @param  array   $actions Post actions.
+	 * @param  WP_Post $post    Edited post.
+	 * @return array Updated post actions.
+	 */
+	public static function add_edit_links( $actions, $post ) {
+		// This is in Gutenberg, don't duplicate it.
+		if ( array_key_exists( 'classic', $actions ) ) {
+			unset( $actions['classic'] );
+		}
+
+		if ( ! array_key_exists( 'edit', $actions ) ) {
+			return $actions;
+		}
+
+		$edit_url = get_edit_post_link( $post->ID, 'raw' );
+
+		if ( ! $edit_url ) {
+			return $actions;
+		}
+
+		$editors = self::get_enabled_editors_for_post( $post );
+
+		// Do not show the links if only one editor is available.
+		if ( ! $editors['classic_editor'] || ! $editors['block_editor'] ) {
+			return $actions;
+		}
+
+		// Forget the previous value when going to a specific editor.
+		$edit_url = add_query_arg( 'classic-editor__forget', '', $edit_url );
+
+		// Build the edit actions. See also: WP_Posts_List_Table::handle_row_actions().
+		$title = _draft_or_post_title( $post->ID );
+
+		// Link to the Block Editor.
+		$url = remove_query_arg( 'classic-editor', $edit_url );
+		$text = _x( 'Edit (Block Editor)', 'Editor Name', 'classic-editor' );
+		/* translators: %s: post title */
+		$label = sprintf( __( 'Edit &#8220;%s&#8221; in the Block Editor', 'classic-editor' ), $title );
+		$edit_block = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( $url ), esc_attr( $label ), $text );
+
+		// Link to the Classic Editor.
+		$url = add_query_arg( 'classic-editor', '', $edit_url );
+		$text = _x( 'Edit (Classic Editor)', 'Editor Name', 'classic-editor' );
+		/* translators: %s: post title */
+		$label = sprintf( __( 'Edit &#8220;%s&#8221; in the Classic Editor', 'classic-editor' ), $title );
+		$edit_classic = sprintf( '<a href="%s" aria-label="%s">%s</a>', esc_url( $url ), esc_attr( $label ), $text );
+
+		$edit_actions = array(
+			'classic-editor-block' => $edit_block,
+			'classic-editor-classic' => $edit_classic,
+		);
+
+		// Insert the new Edit actions instead of the Edit action.
+		$edit_offset = array_search( 'edit', array_keys( $actions ), true );
+		array_splice( $actions, $edit_offset, 1, $edit_actions );
+
+		return $actions;
+	}
+
+	/**
+	 * Show the editor that will be used in a "post state" in the Posts list table.
+	 */
+	public static function add_post_state( $post_states, $post ) {
+		if ( get_post_status( $post ) === 'trash' ) {
+			return $post_states;
+		}
+
+		$editors = self::get_enabled_editors_for_post( $post );
+
+		if ( ! $editors['classic_editor'] && ! $editors['block_editor'] ) {
+			return $post_states;
+		} elseif ( $editors['classic_editor'] && ! $editors['block_editor'] ) {
+			// Forced to Classic Editor.
+			$state = '<span class="classic-editor-forced-state">' . _x( 'Classic Editor', 'Editor Name', 'classic-editor' ) . '</span>';
+		} elseif ( ! $editors['classic_editor'] && $editors['block_editor'] ) {
+			// Forced to Block Editor.
+			$state = '<span class="classic-editor-forced-state">' . _x( 'Block Editor', 'Editor Name', 'classic-editor' ) . '</span>';
+		} else {
+			$last_editor = get_post_meta( $post->ID, 'classic-editor-remember', true );
+
+			if ( $last_editor ) {
+				$is_classic = ( $last_editor === 'classic-editor' );
+			} elseif ( ! empty( $post->post_content ) ) {
+				$is_classic = ! self::has_blocks( $post->post_content );
+			} else {
+				$settings = self::get_settings();
+				$is_classic = ( $settings['editor'] === 'classic' );
+			}
+
+			$state = $is_classic ? _x( 'Classic Editor', 'Editor Name', 'classic-editor' ) : _x( 'Block Editor', 'Editor Name', 'classic-editor' );
+		}
+
+		// Fix PHP 7+ warnings if another plugin returns unexpected type.
+		$post_states = (array) $post_states;
+		$post_states['classic-editor-plugin'] = $state;
+
+		return $post_states;
+	}
+
+	public static function add_edit_php_inline_style() {
+		?>
+		<style>
+		.classic-editor-forced-state {
+			font-style: italic;
+			font-weight: 400;
+			color: #72777c;
+			font-size: small;
+		}
+		</style>
+		<?php
+	}
+
+	public static function on_admin_init() {
+		global $pagenow;
+
+		if ( $pagenow !== 'post.php' ) {
+			return;
+		}
+
+		$settings = self::get_settings();
+		$post_id = self::get_edited_post_id();
+
+		if ( $post_id && ( $settings['editor'] === 'classic' || self::is_classic( $post_id ) ) ) {
+			// Move the Privacy Policy help notice back under the title field.
+			remove_action( 'admin_notices', array( 'WP_Privacy_Policy_Content', 'notice' ) );
+			add_action( 'edit_form_after_title', array( 'WP_Privacy_Policy_Content', 'notice' ) );
+		}
+	}
+
+	// Need to support WP < 5.0
+	private static function has_blocks( $post = null ) {
+		if ( ! is_string( $post ) ) {
+			$wp_post = get_post( $post );
+
+			if ( $wp_post instanceof WP_Post ) {
+				$post = $wp_post->post_content;
+			}
+		}
+
+		return false !== strpos( (string) $post, '<!-- wp:' );
+	}
+
+	/**
+	 * Set defaults on activation.
+	 */
+	public static function activate() {
+		if ( is_multisite() ) {
+			add_network_option( null, 'classic-editor-replace', 'classic' );
+			add_network_option( null, 'classic-editor-allow-sites', 'disallow' );
+		}
+
+		add_option( 'classic-editor-replace', 'classic' );
+		add_option( 'classic-editor-allow-users', 'disallow' );
+	}
+
+	/**
+	 * Delete the options on uninstall.
+	 */
+	public static function uninstall() {
+		if ( is_multisite() ) {
+			delete_network_option( null, 'classic-editor-replace' );
+			delete_network_option( null, 'classic-editor-allow-sites' );
+		}
+
+		delete_option( 'classic-editor-replace' );
+		delete_option( 'classic-editor-allow-users' );
+	}
+}
+
+add_action( 'plugins_loaded', array( 'Classic_Editor', 'init_actions' ) );
+
+endif;

+ 23 - 0
wp-content/plugins/classic-editor/js/block-editor-plugin.js

@@ -0,0 +1,23 @@
+( function( wp ) {
+	if ( ! wp ) {
+		return;
+	}
+
+	wp.plugins.registerPlugin( 'classic-editor-plugin', {
+		render: function() {
+			var createElement = wp.element.createElement;
+			var PluginMoreMenuItem = wp.editPost.PluginMoreMenuItem;
+			var url = wp.url.addQueryArgs( document.location.href, { 'classic-editor': '', 'classic-editor__forget': '' } );
+			var linkText = lodash.get( window, [ 'classicEditorPluginL10n', 'linkText' ] ) || 'Switch to Classic Editor';
+
+			return createElement(
+				PluginMoreMenuItem,
+				{
+					icon: 'editor-kitchensink',
+					href: url,
+				},
+				linkText
+			);
+		},
+	} );
+} )( window.wp );

+ 119 - 0
wp-content/plugins/classic-editor/readme.txt

@@ -0,0 +1,119 @@
+=== Classic Editor ===
+Contributors: wordpressdotorg, azaozz, melchoyce, chanthaboune, alexislloyd, pento, youknowriad, desrosj, luciano-croce
+Tags: gutenberg, disable, disable gutenberg, editor, classic editor, block editor
+Requires at least: 4.9
+Tested up to: 5.3
+Stable tag: 1.4
+Requires PHP: 5.2.4
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Enables the previous "classic" editor and the old-style Edit Post screen with TinyMCE, Meta Boxes, etc. Supports all plugins that extend this screen.
+
+== Description ==
+
+Classic Editor is an official plugin maintained by the WordPress team that restores the previous ("classic") WordPress editor and the "Edit Post" screen. It makes it possible to use plugins that extend that screen, add old-style meta boxes, or otherwise depend on the previous editor.
+
+Classic Editor is an official WordPress plugin, and will be fully supported and maintained until at least 2022, or as long as is necessary.
+
+At a glance, this plugin adds the following:
+
+* Administrators can select the default editor for all users.
+* Administrators can allow users to change their default editor.
+* When allowed, the users can choose which editor to use for each post.
+* Each post opens in the last editor used regardless of who edited it last. This is important for maintaining a consistent experience when editing content.
+
+In addition, the Classic Editor plugin includes several filters that let other plugins control the settings, and the editor choice per post and per post type.
+
+By default, this plugin hides all functionality available in the new Block Editor ("Gutenberg").
+
+== Changelog ==
+
+= 1.5 =
+* Updated for WordPress 5.2 and Gutenberg 5.3+.
+* Enhanced and fixed the "open posts in the last editor used to edit them" logic.
+* Fixed adding post state so it can easily be accessed from other plugins.
+
+= 1.4 =
+* On network installations removed the restriction for only network activation.
+* Added support for network administrators to choose the default network-wide editor.
+* Fixed the settings link in the warning on network About screen.
+* Properly added the "Switch to Classic Editor" menu item to the Block Editor menu. 
+
+= 1.3 =
+* Fixed removal of the "Try Gutenberg" dashboard widget.
+* Fixed condition for displaying of the after upgrade notice on the "What's New" screen. Shown when the Classic Editor is selected and users cannot switch editors.
+
+= 1.2 =
+* Fixed switching editors from the Add New (post) screen before a draft post is saved.
+* Fixed typo that was appending the edit URL to the `classic-editor` query var.
+* Changed detecting of WordPress 5.0 to not use version check. Fixes a bug when testing 5.1-alpha.
+* Changed the default value of the option to allow users to switch editors to false.
+* Added disabling of the Gutenberg plugin and lowered the required WordPress version to 4.9.
+* Added `classic_editor_network_default_settings` filter.
+
+= 1.1 =
+Fixed a bug where it may attempt to load the Block Editor for post types that do not support editor when users are allowed to switch editors.
+
+= 1.0 =
+* Updated for WordPress 5.0.
+* Changed all "Gutenberg" names/references to "Block Editor".
+* Refreshed the settings UI.
+* Removed disabling of the Gutenberg plugin. This was added for testing in WordPress 4.9. Users who want to continue following the development of Gutenberg in WordPress 5.0 and beyond will not need another plugin to disable it.
+* Added support for per-user settings of default editor.
+* Added support for admins to set the default editor for the site.
+* Added support for admins to allow users to change their default editor.
+* Added support for network admins to prevent site admins from changing the default settings.
+* Added support to store the last editor used for each post and open it next time. Enabled when users can choose default editor.
+* Added "post editor state" in the listing of posts on the Posts screen. Shows the editor that will be opened for the post. Enabled when users can choose default editor.
+* Added `classic_editor_enabled_editors_for_post` and `classic_editor_enabled_editors_for_post_type` filters. Can be used by other plugins to control or override the editor used for a particular post of post type.
+* Added `classic_editor_plugin_settings` filter. Can be used by other plugins to override the settings and disable the settings UI.
+
+= 0.5 =
+* Updated for Gutenberg 4.1 and WordPress 5.0-beta1.
+* Removed some functionality that now exists in Gutenberg.
+* Fixed redirecting back to the Classic Editor after looking at post revisions.
+
+= 0.4 =
+* Fixed removing of the "Try Gutenberg" call-out when the Gutenberg plugin is not activated.
+* Fixed to always show the settings and the settings link in the plugins list table.
+* Updated the readme text.
+
+= 0.3 =
+* Updated the option from a checkbox to couple of radio buttons, seems clearer. Thanks to @designsimply for the label text suggestions.
+* Some general updates and cleanup.
+
+= 0.2 =
+* Update for Gutenberg 1.9.
+* Remove warning and automatic deactivation when Gutenberg is not active.
+
+= 0.1 =
+Initial release.
+
+== Frequently Asked Questions ==
+
+= Default settings =
+
+When activated this plugin will restore the previous ("classic") WordPress editor and hide the new Block Editor ("Gutenberg").
+These settings can be changed at the Settings => Writing screen.
+
+= Default settings for network installation =
+
+There are two options:
+
+* When network-activated this plugin will set the Classic Editor as default and prevent site administrators and users from changing editors.
+The settings can be changed and default network-wide editor can be selected on the Network Settings screen.
+* When not network-activated each site administrator will be able to activate the plugin and choose options for their users.
+
+= Cannot find the "Switch to Classic Editor" link =
+
+It is in the main Block Editor menu, see this [screenshot](https://ps.w.org/classic-editor/assets/screenshot-7.png?rev=2023480).
+
+== Screenshots ==
+1. Admin settings on the Settings -> Writing screen.
+2. User settings on the Profile screen. Visible when the users are allowed to switch editors.
+3. "Action links" to choose alternative editor. Visible when the users are allowed to switch editors.
+4. Link to switch to the Block Editor while editing a post in the Classic Editor. Visible when the users are allowed to switch editors.
+5. Link to switch to the Classic Editor while editing a post in the Block Editor. Visible when the users are allowed to switch editors.
+6. Network settings to select the default editor for the network and allow site admins to change it.
+7. The "Switch to Classic Editor" link.

+ 86 - 0
wp-content/plugins/coupon-creator/coupon_creator.php

@@ -0,0 +1,86 @@
+<?php
+/*
+Plugin Name: Coupon Creator
+Description: This plugin creates a custom post type for coupons with a shortcode to display it on website and a single view template for printing.
+Version: 3.0
+Author: Brian Jessee
+Author URI: http://couponcreatorplugin.com
+Text Domain: coupon-creator
+License: GPLv2 or later
+*/
+//If Direct Access Kill the Script
+if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ ) {
+	die( 'Access denied.' );
+}
+
+define( 'COUPON_CREATOR_DIR', dirname( __FILE__ ) );
+define( 'COUPON_CREATOR_MAIN_PLUGIN_FILE', __FILE__ );
+
+// the main plugin class
+require_once dirname( __FILE__ ) . '/src/Cctor/Main.php';
+Cctor__Coupon__Main::instance();
+register_activation_hook( __FILE__, array( 'Cctor__Coupon__Main', 'activate' ) );
+register_deactivation_hook( __FILE__, array( 'Cctor__Coupon__Main', 'deactivate' ) );
+
+
+/**
+ * Get Options from Array
+ *
+ * echo cctor_options('cctor_coupon_base');
+ *
+ * @param      $option
+ * @param null $falseable
+ * @param null $default
+ *
+ * @return bool|null
+ */
+function cctor_options( $option, $falseable = null, $default = null ) {
+	$options = get_option( Cctor__Coupon__Main::OPTIONS_ID );
+
+	if ( isset( $options[ $option ] ) && $options[ $option ] != '' ) {
+		return $options[ $option ];
+	} elseif ( $falseable ) {
+		return false;
+	} elseif ( $default ) {
+		return $default;
+	} else {
+		return false;
+	}
+
+}
+
+if ( ! class_exists( 'Plugin_Usage_Tracker' ) ) {
+	require_once dirname( __FILE__ ) . '/src/tracking/class-plugin-usage-tracker.php';
+}
+if ( ! function_exists( 'coupon_creator_start_plugin_tracking' ) ) {
+	function coupon_creator_start_plugin_tracking() {
+		$wisdom = new Plugin_Usage_Tracker( __FILE__, 'https://couponcreatorplugin.com', array( 'coupon_creator_options' ), true, true, 1 );
+	}
+
+	coupon_creator_start_plugin_tracking();
+}
+
+/**
+ * Custom Deactivation Reasons
+ */
+add_filter( 'wisdom_form_text_coupon_creator', 'cctor_filter_deactivation_form' );
+function cctor_filter_deactivation_form( $form ) {
+
+	$form['heading'] = __( 'Sorry to see you go', 'coupon-creator' );
+
+	$form['body'] = __( 'Before you deactivate the plugin, would you quickly give us your reason for doing so?', 'coupon-creator' );
+
+	$form['options'] = array(
+		__( 'Could not create a coupon', 'coupon-creator' ),
+		__( 'Could not display my coupons', 'coupon-creator' ),
+		__( 'Looking for affiliate coupon features', 'coupon-creator' ),
+		__( 'Could not find where to get started', 'coupon-creator' ),
+		__( 'Not the features I wanted', 'coupon-creator' ),
+		__( 'Only required temporarily', 'coupon-creator' ),
+		__( 'Lack of technical documentation', 'coupon-creator' ),
+		__( 'Found a better plugin', 'coupon-creator' ),
+	);
+
+	return $form;
+
+}

BIN
wp-content/plugins/coupon-creator/languages/coupon-creator-de_DE.mo


+ 874 - 0
wp-content/plugins/coupon-creator/languages/coupon-creator-de_DE.po

@@ -0,0 +1,874 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Coupon Creator\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2018-04-20 15:57-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: coupon_creator.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: node_modules\n"
+"X-Poedit-SearchPathExcluded-2: .git\n"
+"X-Poedit-SearchPathExcluded-3: sass\n"
+"X-Poedit-SearchPathExcluded-4: vendor\n"
+"X-Poedit-SearchPathExcluded-5: languages\n"
+"X-Poedit-SearchPathExcluded-6: plugin-engine\n"
+
+#: coupon_creator.php:66
+msgid "Sorry to see you go"
+msgstr ""
+
+#: coupon_creator.php:68
+msgid ""
+"Before you deactivate the plugin, would you quickly give us your reason for "
+"doing so?"
+msgstr ""
+
+#: coupon_creator.php:71
+msgid "Could not create a coupon"
+msgstr ""
+
+#: coupon_creator.php:72
+msgid "Could not display my coupons"
+msgstr ""
+
+#: coupon_creator.php:73
+msgid "Looking for affiliate coupon features"
+msgstr ""
+
+#: coupon_creator.php:74
+msgid "Could not find where to get started"
+msgstr ""
+
+#: coupon_creator.php:75
+msgid "Not the features I wanted"
+msgstr ""
+
+#: coupon_creator.php:76
+msgid "Only required temporarily"
+msgstr ""
+
+#: coupon_creator.php:77
+msgid "Lack of technical documentation"
+msgstr ""
+
+#: coupon_creator.php:78
+msgid "Found a better plugin"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:74
+msgid "Coupon Title"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:81
+msgid "Coupon is "
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:83
+msgid "Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:85 src/Cctor/Admin/Options.php:251
+#: src/Cctor/Admin/Options.php:256 src/Cctor/Meta/Fields.php:265
+#: src/Cctor/Meta/Fields.php:270
+msgid "Ignore Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:87 src/Cctor/Admin/Options.php:252
+#: src/Cctor/Admin/Options.php:257 src/Cctor/Meta/Fields.php:266
+#: src/Cctor/Meta/Fields.php:271 src/Cctor/Meta/Fields.php:369
+msgid "Expiration Date"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:89 src/Cctor/Main.php:432
+msgid "Coupon Category"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:148
+msgid "Yes"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:169
+msgid "No Categories"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:45
+msgid "Insert Coupon Creator Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:234
+msgid "Select Loop or an Individual Coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:237
+msgid "Coupon Loop"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:251
+msgid "Select a Coupon Category to use in the Loop"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:254
+msgid "All Categories"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:276
+msgid "Select How to Align the Coupon(s)"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:278 src/Cctor/Admin/Inserter.php:293
+msgid "None"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:279
+msgid "Align Left"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:281
+msgid "Align Right"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:283
+msgid "Align Center"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:290
+msgid "Select how to order the coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:292
+msgid "Date (default)"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:294
+msgid "ID"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:295
+msgid "Author"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:296
+msgid "Coupon Post Title"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:297
+msgid "Slug Name"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:298
+msgid "Last Modified"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:299
+msgid "Random"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:318
+msgid "No Coupons are Published"
+msgstr ""
+
+#: src/Cctor/Admin/Main.php:73 src/Cctor/Admin/Options.php:86
+msgid "Options"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:113
+msgid "Coupon Fields"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:122
+msgid "Coupon Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:144
+msgid ""
+"Place this coupon in your posts, pages, custom post types, or widgets by "
+"using the shortcode below:<br><br>"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:156
+msgid "Content"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:157
+msgid "Border & Background"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:158 src/Cctor/Admin/Options.php:241
+#: src/Cctor/Meta/Fields.php:257
+msgid "Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:159
+msgid "Links"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:160 src/Cctor/Admin/Options.php:128
+msgid "Help"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:85 src/Cctor/Admin/Options.php:163
+msgid "Coupon Creator Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:124
+msgid "Defaults"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:125
+msgid "Link Attributes / Permalinks"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:126
+msgid "Display"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:127
+msgid "Templating"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:129
+msgid "Licenses"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:130 src/Cctor/Admin/Options.php:589
+msgid "System Info"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:131 src/Cctor/Admin/Options.php:614
+msgid "Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:165
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:170
+msgid "Coupon Creator Options updated."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:202
+msgid ""
+"*These are defaults for new coupons only and do not change existing coupons."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:210
+msgid "Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:214 src/Cctor/Admin/Options.php:219
+#: src/Cctor/Meta/Fields.php:71 src/Cctor/Meta/Fields.php:76
+msgid "Default"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:215 src/Cctor/Admin/Options.php:220
+#: src/Cctor/Meta/Fields.php:72 src/Cctor/Meta/Fields.php:77
+msgid "Image"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:221 src/Cctor/Meta/Fields.php:78
+msgid "Modern"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:222 src/Cctor/Meta/Fields.php:79
+msgid "Two Columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:223 src/Cctor/Meta/Fields.php:80
+msgid "Lower Third"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:224 src/Cctor/Meta/Fields.php:81
+msgid "Highlight"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:230
+msgid "Template Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:231
+msgid "Choose a default template for new coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:258 src/Cctor/Meta/Fields.php:272
+msgid "Recurring Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:259 src/Cctor/Meta/Fields.php:273
+msgid "Expires in X Days"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:260 src/Cctor/Meta/Fields.php:274
+msgid "Range Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:266 src/Cctor/Meta/Fields.php:279
+msgid "Expiration Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:267 src/Cctor/Meta/Fields.php:280
+msgid "Choose the expiration method for this coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:275 src/Cctor/Meta/Fields.php:350
+msgid "Date Format"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:276
+msgid "Select the Date Format to show for all Coupons*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:280 src/Cctor/Meta/Fields.php:356
+msgid "Month First - MM/DD/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:281 src/Cctor/Meta/Fields.php:357
+msgid "Day First - DD/MM/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:327 src/Cctor/Meta/Fields.php:191
+msgid "Inner Border"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:331 src/Cctor/Meta/Fields.php:199
+msgid "Inside Border Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:332
+msgid "Choose default inside border color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:346
+msgid "Default Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:350
+msgid "Deal Background Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:351
+msgid "Choose default background color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:357
+msgid "Deal Text Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:358
+msgid "Choose default text color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:373 src/Cctor/Admin/Options.php:452
+#: src/Cctor/Admin/Options.php:524 src/Cctor/Admin/Options.php:552
+msgid "Pro Default Features"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:383
+msgid ""
+"Save time by setting default options for the expiration fields for all new "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:384
+msgid ""
+"Remove your coupons from the front end by having them set to draft after "
+"expired"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:385
+msgid ""
+"Create a standard look with default styling fields such as color, radius, "
+"border type, and background fields"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:391 src/Cctor/Admin/Options.php:469
+#: src/Cctor/Admin/Options.php:541 src/Cctor/Admin/Options.php:571
+#: src/Cctor/Meta/Fields.php:172 src/Cctor/Meta/Fields.php:240
+#: src/Cctor/Meta/Fields.php:422 src/Cctor/Meta/Fields.php:478
+msgid "Pro Link"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:405
+msgid "Link Attribute Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:410
+msgid "Print View Links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:411
+msgid "Add nofollow to all the \"Click to Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:417
+msgid "Disable Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:418
+msgid ""
+"This will disable all custom links and the popup option in Pro as well as "
+"the \"Click to Open in Print View\" links under the coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:424
+msgid "Print Template No Follow"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:425
+msgid "Add nofollow and noindex to the print template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:432
+msgid "Permalink Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:436
+msgid "Coupon Print Template Slug"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:437
+msgid "default: cctor_coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:462
+msgid "Use Google Analytics to Track Print Views"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:463
+msgid ""
+"Choose all new coupons to start as Pop Up Coupons or hide the \"Click to "
+"Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:481
+msgid "Custom Coupon Styles"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:482
+msgid ""
+"Enter any custom CSS here to apply to the coupons for the shortcode and the "
+"print template.(without &#60;style&#62; tags)"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:491
+msgid "Auto P Filter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:492
+msgid ""
+"Check to remove <a href=\"http://codex.wordpress.org/Function_Reference/"
+"wpautop\" target=\"_blank\">wpautop filter</a> from Coupon Terms Field"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:499
+msgid "Print View Base CSS"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:500
+msgid "Check to disable the base CSS in Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:509
+msgid "WordPress Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:514
+msgid "Coupon Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:518
+msgid ""
+"Check this to prevent the Coupon Creator from modifying the search query to "
+"remove the coupon custom post type."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:534
+msgid ""
+"Customize \"Expires on:\", \"Click to Open in Print View\", Valid thru, and "
+"\"Print the Coupon\" for all Coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:535
+msgid "Change default font and font weights for the Print Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:562
+msgid ""
+"Set a custom size for both views of the coupon for coupons and the image "
+"coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:563
+msgid ""
+"With the Pro &#91;couponloop&#93; shortcode change default settings such as "
+"per page, order, and columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:564
+msgid ""
+"Customize to your theme the responsive breakpoints for the &#91;"
+"couponloop&#93; shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:565
+msgid ""
+"Easily build all the attributes of the &#91;couponloop&#93; shortcode and "
+"insert it into content using the Pro inserter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:580
+msgid "Support: "
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:602
+msgid "Coupon Creator Option Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:618
+msgid ""
+"Check this box and click \"Save Changes\" below to reset all coupon creator "
+"options to their defaults. This does not change any existing coupon settings "
+"or remove your licenses."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:623
+msgid "Wisdom Enabled"
+msgstr ""
+
+#: src/Cctor/Expiration.php:158
+msgid "This Coupon is Showing."
+msgstr ""
+
+#: src/Cctor/Expiration.php:160
+msgid "This Coupon is not Showing."
+msgstr ""
+
+#: src/Cctor/Expiration.php:195
+msgid "Ignore Coupon Expiration is On"
+msgstr ""
+
+#: src/Cctor/Expiration.php:200
+msgid "There is no Coupon Expiration Date"
+msgstr ""
+
+#: src/Cctor/Expiration.php:202
+msgid "This Coupon Expires On "
+msgstr ""
+
+#: src/Cctor/Expiration.php:204
+msgid "This Coupon Expired On "
+msgstr ""
+
+#: src/Cctor/Expiration.php:316
+msgid "Showing"
+msgstr ""
+
+#: src/Cctor/Expiration.php:318
+msgid "Not Showing"
+msgstr ""
+
+#: src/Cctor/Main.php:196
+#, php-format
+msgid ""
+"Coupon Creator Requires WordPress version: %s or higher. You currently have "
+"WordPress version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:199
+#, php-format
+msgid ""
+"Coupon Creator Requires PHP version: %s or higher. You currently have PHP "
+"version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:272
+msgid ""
+"It appears as if the plugin-engine libraries cannot be found! The directory "
+"should be in the \"plugin-engine/\" directory in the Coupon Creator plugin."
+msgstr ""
+
+#: src/Cctor/Main.php:392
+#: src/functions/template-functions/cctor-function-links.php:22
+msgid "Coupon"
+msgstr ""
+
+#: src/Cctor/Main.php:403
+msgid "coupon"
+msgstr ""
+
+#: src/Cctor/Main.php:412
+msgid "Coupons"
+msgstr ""
+
+#: src/Cctor/Main.php:423
+msgid "coupons"
+msgstr ""
+
+#: src/Cctor/Main.php:441
+msgid "coupon category"
+msgstr ""
+
+#: src/Cctor/Main.php:450
+msgid "Coupon Categories"
+msgstr ""
+
+#: src/Cctor/Main.php:459
+msgid "coupon categories"
+msgstr ""
+
+#: src/Cctor/Main.php:492
+msgid "Enter Coupon Admin Title"
+msgstr ""
+
+#: src/Cctor/Main.php:567
+msgid "coupon-category"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:87
+msgid "Coupon Type"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:88
+msgid "Choose a coupon type to use."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:148 src/Cctor/Meta/Fields.php:217
+#: src/Cctor/Meta/Fields.php:398 src/Cctor/Meta/Fields.php:455
+msgid "Pro Content Features"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:161
+msgid "Use the Visual editor to easily style the coupons term's"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:162
+msgid ""
+"Give visitors a reason to click on the coupon by only showing the deal in "
+"print view or by using the view shortcodes to selectively display content on "
+"either view"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:163
+msgid ""
+"Insert columns and rows into the content editor for more unique looking "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:200
+msgid "Choose inside border color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:230
+msgid ""
+"Use 4 style sections in Pro to create a unique coupon or a standard brand to "
+"attract customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:231
+msgid ""
+"Choose between 5 different border styles in Pro, including Saw Tooth, "
+"Stitched, Dotted, Coupon, and None.<br> <img class=\"cctor-pro-img\" alt="
+"\"Coupon Creator Pro Border Examples\" src=\""
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:298
+msgid ""
+"This coupon will not expire and always show on the front end of your site."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:308
+msgid "This coupon will no longer show the day after the expiration date."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:318
+msgid "This coupon's expiration will change based on the choosen pattern."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:328
+msgid "This coupon will expire X days from when it is printed."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:338
+msgid "This coupon will show a range of dates that it is valid."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:351
+msgid "Choose the date format"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:371
+msgid "Choose a date this coupon will expire."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:383
+msgid "Ignore Expiration Date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:384
+msgid "Check this to ignore the expiration date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:411
+msgid ""
+"Utilize five(5) different expiration options to help promote sales at your "
+"business"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:412
+msgid ""
+"Save time by editing multiple coupons expiration and counter fields using "
+"Pro's Bulk Edits"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:413
+msgid ""
+"Track coupon print views by using the unlimited counter or set a limit to "
+"restrict a coupon to a certain amount of customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:432
+msgid ""
+"The Image Coupon is now part of the template system. Go to the Content tab "
+"and choose the Image template to create one."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:468
+msgid "Use the custom links and text to promote your affiliate links"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:469
+msgid ""
+"Enable your visitors to print coupons while staying on the same page using "
+"the Pop Up Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:521
+msgid "Deal"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:522
+msgid "Enter coupon deal - 30% OFF! or Buy One Get One Free, etc..."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:545
+msgid "Font Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:558
+msgid "Background Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:579
+msgid "Terms"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:580
+msgid "Enter the terms of the discount"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:625
+msgid " Style Fields are disabled when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:637
+msgid " Only outer border styles are available when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:643
+msgid "Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:644
+msgid ""
+"Upload an image to use as the entire coupon - Current image size is for 390 "
+"pixels in width with auto height"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:668
+msgid ""
+"The Expiration Date will display based off the selection in the Expiration / "
+"Counter Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:679
+msgid ""
+"The Counter will display based off the selection in the Expiration / Counter "
+"Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:690
+msgid ""
+"The Expiration Date and Counter will display based off the selection in the "
+"Expiration / Counter Tab of this Coupon."
+msgstr ""
+
+#: src/functions/template-functions/cctor-function-expiration.php:24
+msgid "Expires on:"
+msgstr "Läuft aus am"
+
+#: src/functions/template-functions/cctor-function-links.php:21
+#: src/functions/template-functions/cctor-function-links.php:46
+msgid "Click to Open in Print View"
+msgstr "Klicken um die Druckansicht zu öffnen"
+
+#: src/functions/template-functions/cctor-function-links.php:62
+msgid "Click to Print"
+msgstr "Klicken zum Drucken"
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Do Not Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Yes Please"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "No Thank You"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Submit and Deactivate"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Just Deactivate"
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "Coupon Creator"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"This plugin creates a custom post type for coupons with a shortcode to "
+"display it on website and a single view template for printing."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Brian Jessee"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://couponcreatorplugin.com"
+msgstr ""

BIN
wp-content/plugins/coupon-creator/languages/coupon-creator-es_ES.mo


+ 905 - 0
wp-content/plugins/coupon-creator/languages/coupon-creator-es_ES.po

@@ -0,0 +1,905 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Coupon Creator\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2018-04-20 15:57-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: coupon_creator.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: .git\n"
+"X-Poedit-SearchPathExcluded-2: node_modules\n"
+"X-Poedit-SearchPathExcluded-3: sass\n"
+"X-Poedit-SearchPathExcluded-4: vendor\n"
+"X-Poedit-SearchPathExcluded-5: languages\n"
+"X-Poedit-SearchPathExcluded-6: plugin-engine\n"
+
+#: coupon_creator.php:66
+msgid "Sorry to see you go"
+msgstr ""
+
+#: coupon_creator.php:68
+msgid ""
+"Before you deactivate the plugin, would you quickly give us your reason for "
+"doing so?"
+msgstr ""
+
+#: coupon_creator.php:71
+msgid "Could not create a coupon"
+msgstr ""
+
+#: coupon_creator.php:72
+msgid "Could not display my coupons"
+msgstr ""
+
+#: coupon_creator.php:73
+msgid "Looking for affiliate coupon features"
+msgstr ""
+
+#: coupon_creator.php:74
+msgid "Could not find where to get started"
+msgstr ""
+
+#: coupon_creator.php:75
+msgid "Not the features I wanted"
+msgstr ""
+
+#: coupon_creator.php:76
+msgid "Only required temporarily"
+msgstr ""
+
+#: coupon_creator.php:77
+msgid "Lack of technical documentation"
+msgstr ""
+
+#: coupon_creator.php:78
+msgid "Found a better plugin"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:74
+msgid "Coupon Title"
+msgstr "Título del Cupón"
+
+#: src/Cctor/Admin/Columns.php:81
+msgid "Coupon is "
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:83
+msgid "Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:85 src/Cctor/Admin/Options.php:251
+#: src/Cctor/Admin/Options.php:256 src/Cctor/Meta/Fields.php:265
+#: src/Cctor/Meta/Fields.php:270
+msgid "Ignore Expiration"
+msgstr "Ignorar fecha de caducidad"
+
+#: src/Cctor/Admin/Columns.php:87 src/Cctor/Admin/Options.php:252
+#: src/Cctor/Admin/Options.php:257 src/Cctor/Meta/Fields.php:266
+#: src/Cctor/Meta/Fields.php:271 src/Cctor/Meta/Fields.php:369
+msgid "Expiration Date"
+msgstr "Fecha de expiración"
+
+#: src/Cctor/Admin/Columns.php:89 src/Cctor/Main.php:432
+msgid "Coupon Category"
+msgstr "Categoría de cupón"
+
+#: src/Cctor/Admin/Columns.php:148
+msgid "Yes"
+msgstr "Si"
+
+#: src/Cctor/Admin/Columns.php:169
+msgid "No Categories"
+msgstr "No hay categorías"
+
+#: src/Cctor/Admin/Inserter.php:45
+msgid "Insert Coupon Creator Shortcode"
+msgstr "Inserte shortcode del cupón"
+
+#: src/Cctor/Admin/Inserter.php:234
+msgid "Select Loop or an Individual Coupon"
+msgstr "Seleccione bucle o un cupón Individual"
+
+#: src/Cctor/Admin/Inserter.php:237
+msgid "Coupon Loop"
+msgstr "Lazo de cupón"
+
+#: src/Cctor/Admin/Inserter.php:251
+msgid "Select a Coupon Category to use in the Loop"
+msgstr "Seleccione una categoría de cupones para utilizar en el circuito"
+
+#: src/Cctor/Admin/Inserter.php:254
+msgid "All Categories"
+msgstr "Todas las Categorías"
+
+#: src/Cctor/Admin/Inserter.php:276
+msgid "Select How to Align the Coupon(s)"
+msgstr "Seleccione la que desea alinear el cupon"
+
+#: src/Cctor/Admin/Inserter.php:278 src/Cctor/Admin/Inserter.php:293
+msgid "None"
+msgstr "Ninguna"
+
+#: src/Cctor/Admin/Inserter.php:279
+msgid "Align Left"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:281
+msgid "Align Right"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:283
+msgid "Align Center"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:290
+msgid "Select how to order the coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:292
+msgid "Date (default)"
+msgstr "Fecha (por defecto)"
+
+#: src/Cctor/Admin/Inserter.php:294
+msgid "ID"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:295
+msgid "Author"
+msgstr "Autor"
+
+#: src/Cctor/Admin/Inserter.php:296
+msgid "Coupon Post Title"
+msgstr "Título del cupón"
+
+#: src/Cctor/Admin/Inserter.php:297
+msgid "Slug Name"
+msgstr "Sula Nombre"
+
+#: src/Cctor/Admin/Inserter.php:298
+msgid "Last Modified"
+msgstr "Última modificación"
+
+#: src/Cctor/Admin/Inserter.php:299
+msgid "Random"
+msgstr "Aleatorio"
+
+#: src/Cctor/Admin/Inserter.php:318
+msgid "No Coupons are Published"
+msgstr "No hay cupones publicados"
+
+#: src/Cctor/Admin/Main.php:73 src/Cctor/Admin/Options.php:86
+msgid "Options"
+msgstr "Opciones"
+
+#: src/Cctor/Admin/Meta.php:113
+msgid "Coupon Fields"
+msgstr "Campos del Cupón"
+
+#: src/Cctor/Admin/Meta.php:122
+msgid "Coupon Shortcode"
+msgstr "Shortcode de cupón"
+
+#: src/Cctor/Admin/Meta.php:144
+msgid ""
+"Place this coupon in your posts, pages, custom post types, or widgets by "
+"using the shortcode below:<br><br>"
+msgstr ""
+"Coloca este cupón en tus posts, páginas, tipos de post personalizados o "
+"widgets utilizando el código siguiente:<br><br>"
+
+#: src/Cctor/Admin/Meta.php:156
+msgid "Content"
+msgstr "Contenido"
+
+#: src/Cctor/Admin/Meta.php:157
+msgid "Border & Background"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:158 src/Cctor/Admin/Options.php:241
+#: src/Cctor/Meta/Fields.php:257
+msgid "Expiration"
+msgstr "Expiración"
+
+#: src/Cctor/Admin/Meta.php:159
+msgid "Links"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:160 src/Cctor/Admin/Options.php:128
+msgid "Help"
+msgstr "Ayuda"
+
+#: src/Cctor/Admin/Options.php:85 src/Cctor/Admin/Options.php:163
+msgid "Coupon Creator Options"
+msgstr "Opciones de Creador de Cupón"
+
+#: src/Cctor/Admin/Options.php:124
+msgid "Defaults"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:125
+msgid "Link Attributes / Permalinks"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:126
+msgid "Display"
+msgstr "Visualización"
+
+#: src/Cctor/Admin/Options.php:127
+msgid "Templating"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:129
+msgid "Licenses"
+msgstr "Licencias"
+
+#: src/Cctor/Admin/Options.php:130 src/Cctor/Admin/Options.php:589
+msgid "System Info"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:131 src/Cctor/Admin/Options.php:614
+msgid "Reset"
+msgstr "Borrar"
+
+#: src/Cctor/Admin/Options.php:165
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:170
+msgid "Coupon Creator Options updated."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:202
+msgid ""
+"*These are defaults for new coupons only and do not change existing coupons."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:210
+msgid "Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:214 src/Cctor/Admin/Options.php:219
+#: src/Cctor/Meta/Fields.php:71 src/Cctor/Meta/Fields.php:76
+msgid "Default"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:215 src/Cctor/Admin/Options.php:220
+#: src/Cctor/Meta/Fields.php:72 src/Cctor/Meta/Fields.php:77
+msgid "Image"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:221 src/Cctor/Meta/Fields.php:78
+msgid "Modern"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:222 src/Cctor/Meta/Fields.php:79
+msgid "Two Columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:223 src/Cctor/Meta/Fields.php:80
+msgid "Lower Third"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:224 src/Cctor/Meta/Fields.php:81
+msgid "Highlight"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:230
+msgid "Template Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:231
+msgid "Choose a default template for new coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:258 src/Cctor/Meta/Fields.php:272
+msgid "Recurring Expiration"
+msgstr "Recurrentes de la caducidad"
+
+#: src/Cctor/Admin/Options.php:259 src/Cctor/Meta/Fields.php:273
+msgid "Expires in X Days"
+msgstr "Caduca dentro de X días"
+
+#: src/Cctor/Admin/Options.php:260 src/Cctor/Meta/Fields.php:274
+msgid "Range Expiration"
+msgstr "Rango de vencimiento"
+
+#: src/Cctor/Admin/Options.php:266 src/Cctor/Meta/Fields.php:279
+msgid "Expiration Option"
+msgstr "Opción de vencimiento"
+
+#: src/Cctor/Admin/Options.php:267 src/Cctor/Meta/Fields.php:280
+msgid "Choose the expiration method for this coupon"
+msgstr "Elegir el método de caducidad para este cupón"
+
+#: src/Cctor/Admin/Options.php:275 src/Cctor/Meta/Fields.php:350
+msgid "Date Format"
+msgstr "Formato de Fecha"
+
+#: src/Cctor/Admin/Options.php:276
+msgid "Select the Date Format to show for all Coupons*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:280 src/Cctor/Meta/Fields.php:356
+msgid "Month First - MM/DD/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:281 src/Cctor/Meta/Fields.php:357
+msgid "Day First - DD/MM/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:327 src/Cctor/Meta/Fields.php:191
+msgid "Inner Border"
+msgstr "Borde interior"
+
+#: src/Cctor/Admin/Options.php:331 src/Cctor/Meta/Fields.php:199
+msgid "Inside Border Color"
+msgstr "Color del interior del borde"
+
+#: src/Cctor/Admin/Options.php:332
+msgid "Choose default inside border color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:346
+msgid "Default Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:350
+msgid "Deal Background Color"
+msgstr "Color de fondo del descuento"
+
+#: src/Cctor/Admin/Options.php:351
+msgid "Choose default background color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:357
+msgid "Deal Text Color"
+msgstr "Color del texto del descuento"
+
+#: src/Cctor/Admin/Options.php:358
+msgid "Choose default text color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:373 src/Cctor/Admin/Options.php:452
+#: src/Cctor/Admin/Options.php:524 src/Cctor/Admin/Options.php:552
+msgid "Pro Default Features"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:383
+msgid ""
+"Save time by setting default options for the expiration fields for all new "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:384
+msgid ""
+"Remove your coupons from the front end by having them set to draft after "
+"expired"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:385
+msgid ""
+"Create a standard look with default styling fields such as color, radius, "
+"border type, and background fields"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:391 src/Cctor/Admin/Options.php:469
+#: src/Cctor/Admin/Options.php:541 src/Cctor/Admin/Options.php:571
+#: src/Cctor/Meta/Fields.php:172 src/Cctor/Meta/Fields.php:240
+#: src/Cctor/Meta/Fields.php:422 src/Cctor/Meta/Fields.php:478
+msgid "Pro Link"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:405
+msgid "Link Attribute Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:410
+msgid "Print View Links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:411
+msgid "Add nofollow to all the \"Click to Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:417
+msgid "Disable Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:418
+msgid ""
+"This will disable all custom links and the popup option in Pro as well as "
+"the \"Click to Open in Print View\" links under the coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:424
+msgid "Print Template No Follow"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:425
+msgid "Add nofollow and noindex to the print template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:432
+msgid "Permalink Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:436
+msgid "Coupon Print Template Slug"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:437
+msgid "default: cctor_coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:462
+msgid "Use Google Analytics to Track Print Views"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:463
+msgid ""
+"Choose all new coupons to start as Pop Up Coupons or hide the \"Click to "
+"Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:481
+msgid "Custom Coupon Styles"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:482
+msgid ""
+"Enter any custom CSS here to apply to the coupons for the shortcode and the "
+"print template.(without &#60;style&#62; tags)"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:491
+msgid "Auto P Filter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:492
+msgid ""
+"Check to remove <a href=\"http://codex.wordpress.org/Function_Reference/"
+"wpautop\" target=\"_blank\">wpautop filter</a> from Coupon Terms Field"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:499
+msgid "Print View Base CSS"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:500
+msgid "Check to disable the base CSS in Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:509
+msgid "WordPress Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:514
+msgid "Coupon Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:518
+msgid ""
+"Check this to prevent the Coupon Creator from modifying the search query to "
+"remove the coupon custom post type."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:534
+msgid ""
+"Customize \"Expires on:\", \"Click to Open in Print View\", Valid thru, and "
+"\"Print the Coupon\" for all Coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:535
+msgid "Change default font and font weights for the Print Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:562
+msgid ""
+"Set a custom size for both views of the coupon for coupons and the image "
+"coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:563
+msgid ""
+"With the Pro &#91;couponloop&#93; shortcode change default settings such as "
+"per page, order, and columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:564
+msgid ""
+"Customize to your theme the responsive breakpoints for the &#91;"
+"couponloop&#93; shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:565
+msgid ""
+"Easily build all the attributes of the &#91;couponloop&#93; shortcode and "
+"insert it into content using the Pro inserter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:580
+msgid "Support: "
+msgstr "Apoyo:"
+
+#: src/Cctor/Admin/Options.php:602
+msgid "Coupon Creator Option Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:618
+msgid ""
+"Check this box and click \"Save Changes\" below to reset all coupon creator "
+"options to their defaults. This does not change any existing coupon settings "
+"or remove your licenses."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:623
+msgid "Wisdom Enabled"
+msgstr ""
+
+#: src/Cctor/Expiration.php:158
+msgid "This Coupon is Showing."
+msgstr "Este cupón se está mostrando"
+
+#: src/Cctor/Expiration.php:160
+msgid "This Coupon is not Showing."
+msgstr "Este cupon no está mostrandose"
+
+#: src/Cctor/Expiration.php:195
+msgid "Ignore Coupon Expiration is On"
+msgstr ""
+
+#: src/Cctor/Expiration.php:200
+msgid "There is no Coupon Expiration Date"
+msgstr ""
+
+#: src/Cctor/Expiration.php:202
+msgid "This Coupon Expires On "
+msgstr "Este cupón expira el"
+
+#: src/Cctor/Expiration.php:204
+msgid "This Coupon Expired On "
+msgstr "Este cupón expiró el"
+
+#: src/Cctor/Expiration.php:316
+msgid "Showing"
+msgstr "Mostrando"
+
+#: src/Cctor/Expiration.php:318
+msgid "Not Showing"
+msgstr "No mostrándose"
+
+#: src/Cctor/Main.php:196
+#, php-format
+msgid ""
+"Coupon Creator Requires WordPress version: %s or higher. You currently have "
+"WordPress version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:199
+#, php-format
+msgid ""
+"Coupon Creator Requires PHP version: %s or higher. You currently have PHP "
+"version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:272
+msgid ""
+"It appears as if the plugin-engine libraries cannot be found! The directory "
+"should be in the \"plugin-engine/\" directory in the Coupon Creator plugin."
+msgstr ""
+
+#: src/Cctor/Main.php:392
+#: src/functions/template-functions/cctor-function-links.php:22
+msgid "Coupon"
+msgstr "Cupón"
+
+#: src/Cctor/Main.php:403
+msgid "coupon"
+msgstr "cupón"
+
+#: src/Cctor/Main.php:412
+msgid "Coupons"
+msgstr "Cupones"
+
+#: src/Cctor/Main.php:423
+msgid "coupons"
+msgstr "cupones"
+
+#: src/Cctor/Main.php:441
+msgid "coupon category"
+msgstr "Categoría de cupón"
+
+#: src/Cctor/Main.php:450
+msgid "Coupon Categories"
+msgstr "Categorías de cupones"
+
+#: src/Cctor/Main.php:459
+msgid "coupon categories"
+msgstr "categorías de cupones"
+
+#: src/Cctor/Main.php:492
+msgid "Enter Coupon Admin Title"
+msgstr "Título de administrador de cupón"
+
+#: src/Cctor/Main.php:567
+msgid "coupon-category"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:87
+msgid "Coupon Type"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:88
+msgid "Choose a coupon type to use."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:148 src/Cctor/Meta/Fields.php:217
+#: src/Cctor/Meta/Fields.php:398 src/Cctor/Meta/Fields.php:455
+msgid "Pro Content Features"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:161
+msgid "Use the Visual editor to easily style the coupons term's"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:162
+msgid ""
+"Give visitors a reason to click on the coupon by only showing the deal in "
+"print view or by using the view shortcodes to selectively display content on "
+"either view"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:163
+msgid ""
+"Insert columns and rows into the content editor for more unique looking "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:200
+msgid "Choose inside border color"
+msgstr "Seleccione el color del borde interior"
+
+#: src/Cctor/Meta/Fields.php:230
+msgid ""
+"Use 4 style sections in Pro to create a unique coupon or a standard brand to "
+"attract customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:231
+msgid ""
+"Choose between 5 different border styles in Pro, including Saw Tooth, "
+"Stitched, Dotted, Coupon, and None.<br> <img class=\"cctor-pro-img\" alt="
+"\"Coupon Creator Pro Border Examples\" src=\""
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:298
+msgid ""
+"This coupon will not expire and always show on the front end of your site."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:308
+msgid "This coupon will no longer show the day after the expiration date."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:318
+msgid "This coupon's expiration will change based on the choosen pattern."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:328
+msgid "This coupon will expire X days from when it is printed."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:338
+msgid "This coupon will show a range of dates that it is valid."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:351
+msgid "Choose the date format"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:371
+msgid "Choose a date this coupon will expire."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:383
+msgid "Ignore Expiration Date"
+msgstr "Ignorar fecha de caducidad"
+
+#: src/Cctor/Meta/Fields.php:384
+msgid "Check this to ignore the expiration date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:411
+msgid ""
+"Utilize five(5) different expiration options to help promote sales at your "
+"business"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:412
+msgid ""
+"Save time by editing multiple coupons expiration and counter fields using "
+"Pro's Bulk Edits"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:413
+msgid ""
+"Track coupon print views by using the unlimited counter or set a limit to "
+"restrict a coupon to a certain amount of customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:432
+msgid ""
+"The Image Coupon is now part of the template system. Go to the Content tab "
+"and choose the Image template to create one."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:468
+msgid "Use the custom links and text to promote your affiliate links"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:469
+msgid ""
+"Enable your visitors to print coupons while staying on the same page using "
+"the Pop Up Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:521
+msgid "Deal"
+msgstr "Acuerdo"
+
+#: src/Cctor/Meta/Fields.php:522
+msgid "Enter coupon deal - 30% OFF! or Buy One Get One Free, etc..."
+msgstr ""
+"Introduzca la promoción - 30% de Descuento! o Compre uno y tenga otro "
+"gratis, etc..."
+
+#: src/Cctor/Meta/Fields.php:545
+msgid "Font Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:558
+msgid "Background Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:579
+msgid "Terms"
+msgstr "Términos"
+
+#: src/Cctor/Meta/Fields.php:580
+msgid "Enter the terms of the discount"
+msgstr "Introducir en los términos del descuento"
+
+#: src/Cctor/Meta/Fields.php:625
+msgid " Style Fields are disabled when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:637
+msgid " Only outer border styles are available when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:643
+msgid "Image Coupon"
+msgstr "Imagen del Cupón"
+
+#: src/Cctor/Meta/Fields.php:644
+msgid ""
+"Upload an image to use as the entire coupon - Current image size is for 390 "
+"pixels in width with auto height"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:668
+msgid ""
+"The Expiration Date will display based off the selection in the Expiration / "
+"Counter Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:679
+msgid ""
+"The Counter will display based off the selection in the Expiration / Counter "
+"Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:690
+msgid ""
+"The Expiration Date and Counter will display based off the selection in the "
+"Expiration / Counter Tab of this Coupon."
+msgstr ""
+
+#: src/functions/template-functions/cctor-function-expiration.php:24
+msgid "Expires on:"
+msgstr "Expira el:"
+
+#: src/functions/template-functions/cctor-function-links.php:21
+#: src/functions/template-functions/cctor-function-links.php:46
+msgid "Click to Open in Print View"
+msgstr "Haga Clic en Para Abrir la Vista de Impresión"
+
+#: src/functions/template-functions/cctor-function-links.php:62
+msgid "Click to Print"
+msgstr "Haga Clic Para Imprimir"
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Do Not Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Yes Please"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "No Thank You"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Submit and Deactivate"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Just Deactivate"
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "Coupon Creator"
+msgstr "Creador de cupón Pro"
+
+#. Description of the plugin/theme
+msgid ""
+"This plugin creates a custom post type for coupons with a shortcode to "
+"display it on website and a single view template for printing."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Brian Jessee"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://couponcreatorplugin.com"
+msgstr ""
+
+#~ msgid "Style"
+#~ msgstr "Estilo"
+
+#~ msgid "Coupon Deal"
+#~ msgstr "Promoción del Cupón"
+
+#~ msgid "Coupon Terms"
+#~ msgstr "Términos de cupón"
+
+#~ msgid "Deal Field Colors"
+#~ msgstr "Oferta campo colores"
+
+#~ msgid "Choose background color"
+#~ msgstr "Elija el color de fondo"
+
+#~ msgid "Choose color for discount text"
+#~ msgstr "Seleccione un color para el texto del descuento"
+
+#~ msgid "Upgrade to Pro"
+#~ msgstr "Actualizar a Pro"
+
+#~ msgid "Today's Date is "
+#~ msgstr "La fecha de hoy es"
+
+#~ msgid "License is Active"
+#~ msgstr "Licencia Activa"

BIN
wp-content/plugins/coupon-creator/languages/coupon-creator-fr_FR.mo


+ 874 - 0
wp-content/plugins/coupon-creator/languages/coupon-creator-fr_FR.po

@@ -0,0 +1,874 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Coupon Creator\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2018-04-20 15:57-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: coupon_creator.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: .git\n"
+"X-Poedit-SearchPathExcluded-2: node_modules\n"
+"X-Poedit-SearchPathExcluded-3: sass\n"
+"X-Poedit-SearchPathExcluded-4: vendor\n"
+"X-Poedit-SearchPathExcluded-5: languages\n"
+"X-Poedit-SearchPathExcluded-6: plugin-engine\n"
+
+#: coupon_creator.php:66
+msgid "Sorry to see you go"
+msgstr ""
+
+#: coupon_creator.php:68
+msgid ""
+"Before you deactivate the plugin, would you quickly give us your reason for "
+"doing so?"
+msgstr ""
+
+#: coupon_creator.php:71
+msgid "Could not create a coupon"
+msgstr ""
+
+#: coupon_creator.php:72
+msgid "Could not display my coupons"
+msgstr ""
+
+#: coupon_creator.php:73
+msgid "Looking for affiliate coupon features"
+msgstr ""
+
+#: coupon_creator.php:74
+msgid "Could not find where to get started"
+msgstr ""
+
+#: coupon_creator.php:75
+msgid "Not the features I wanted"
+msgstr ""
+
+#: coupon_creator.php:76
+msgid "Only required temporarily"
+msgstr ""
+
+#: coupon_creator.php:77
+msgid "Lack of technical documentation"
+msgstr ""
+
+#: coupon_creator.php:78
+msgid "Found a better plugin"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:74
+msgid "Coupon Title"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:81
+msgid "Coupon is "
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:83
+msgid "Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:85 src/Cctor/Admin/Options.php:251
+#: src/Cctor/Admin/Options.php:256 src/Cctor/Meta/Fields.php:265
+#: src/Cctor/Meta/Fields.php:270
+msgid "Ignore Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:87 src/Cctor/Admin/Options.php:252
+#: src/Cctor/Admin/Options.php:257 src/Cctor/Meta/Fields.php:266
+#: src/Cctor/Meta/Fields.php:271 src/Cctor/Meta/Fields.php:369
+msgid "Expiration Date"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:89 src/Cctor/Main.php:432
+msgid "Coupon Category"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:148
+msgid "Yes"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:169
+msgid "No Categories"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:45
+msgid "Insert Coupon Creator Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:234
+msgid "Select Loop or an Individual Coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:237
+msgid "Coupon Loop"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:251
+msgid "Select a Coupon Category to use in the Loop"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:254
+msgid "All Categories"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:276
+msgid "Select How to Align the Coupon(s)"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:278 src/Cctor/Admin/Inserter.php:293
+msgid "None"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:279
+msgid "Align Left"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:281
+msgid "Align Right"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:283
+msgid "Align Center"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:290
+msgid "Select how to order the coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:292
+msgid "Date (default)"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:294
+msgid "ID"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:295
+msgid "Author"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:296
+msgid "Coupon Post Title"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:297
+msgid "Slug Name"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:298
+msgid "Last Modified"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:299
+msgid "Random"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:318
+msgid "No Coupons are Published"
+msgstr ""
+
+#: src/Cctor/Admin/Main.php:73 src/Cctor/Admin/Options.php:86
+msgid "Options"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:113
+msgid "Coupon Fields"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:122
+msgid "Coupon Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:144
+msgid ""
+"Place this coupon in your posts, pages, custom post types, or widgets by "
+"using the shortcode below:<br><br>"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:156
+msgid "Content"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:157
+msgid "Border & Background"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:158 src/Cctor/Admin/Options.php:241
+#: src/Cctor/Meta/Fields.php:257
+msgid "Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:159
+msgid "Links"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:160 src/Cctor/Admin/Options.php:128
+msgid "Help"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:85 src/Cctor/Admin/Options.php:163
+msgid "Coupon Creator Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:124
+msgid "Defaults"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:125
+msgid "Link Attributes / Permalinks"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:126
+msgid "Display"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:127
+msgid "Templating"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:129
+msgid "Licenses"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:130 src/Cctor/Admin/Options.php:589
+msgid "System Info"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:131 src/Cctor/Admin/Options.php:614
+msgid "Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:165
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:170
+msgid "Coupon Creator Options updated."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:202
+msgid ""
+"*These are defaults for new coupons only and do not change existing coupons."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:210
+msgid "Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:214 src/Cctor/Admin/Options.php:219
+#: src/Cctor/Meta/Fields.php:71 src/Cctor/Meta/Fields.php:76
+msgid "Default"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:215 src/Cctor/Admin/Options.php:220
+#: src/Cctor/Meta/Fields.php:72 src/Cctor/Meta/Fields.php:77
+msgid "Image"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:221 src/Cctor/Meta/Fields.php:78
+msgid "Modern"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:222 src/Cctor/Meta/Fields.php:79
+msgid "Two Columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:223 src/Cctor/Meta/Fields.php:80
+msgid "Lower Third"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:224 src/Cctor/Meta/Fields.php:81
+msgid "Highlight"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:230
+msgid "Template Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:231
+msgid "Choose a default template for new coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:258 src/Cctor/Meta/Fields.php:272
+msgid "Recurring Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:259 src/Cctor/Meta/Fields.php:273
+msgid "Expires in X Days"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:260 src/Cctor/Meta/Fields.php:274
+msgid "Range Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:266 src/Cctor/Meta/Fields.php:279
+msgid "Expiration Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:267 src/Cctor/Meta/Fields.php:280
+msgid "Choose the expiration method for this coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:275 src/Cctor/Meta/Fields.php:350
+msgid "Date Format"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:276
+msgid "Select the Date Format to show for all Coupons*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:280 src/Cctor/Meta/Fields.php:356
+msgid "Month First - MM/DD/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:281 src/Cctor/Meta/Fields.php:357
+msgid "Day First - DD/MM/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:327 src/Cctor/Meta/Fields.php:191
+msgid "Inner Border"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:331 src/Cctor/Meta/Fields.php:199
+msgid "Inside Border Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:332
+msgid "Choose default inside border color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:346
+msgid "Default Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:350
+msgid "Deal Background Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:351
+msgid "Choose default background color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:357
+msgid "Deal Text Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:358
+msgid "Choose default text color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:373 src/Cctor/Admin/Options.php:452
+#: src/Cctor/Admin/Options.php:524 src/Cctor/Admin/Options.php:552
+msgid "Pro Default Features"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:383
+msgid ""
+"Save time by setting default options for the expiration fields for all new "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:384
+msgid ""
+"Remove your coupons from the front end by having them set to draft after "
+"expired"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:385
+msgid ""
+"Create a standard look with default styling fields such as color, radius, "
+"border type, and background fields"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:391 src/Cctor/Admin/Options.php:469
+#: src/Cctor/Admin/Options.php:541 src/Cctor/Admin/Options.php:571
+#: src/Cctor/Meta/Fields.php:172 src/Cctor/Meta/Fields.php:240
+#: src/Cctor/Meta/Fields.php:422 src/Cctor/Meta/Fields.php:478
+msgid "Pro Link"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:405
+msgid "Link Attribute Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:410
+msgid "Print View Links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:411
+msgid "Add nofollow to all the \"Click to Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:417
+msgid "Disable Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:418
+msgid ""
+"This will disable all custom links and the popup option in Pro as well as "
+"the \"Click to Open in Print View\" links under the coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:424
+msgid "Print Template No Follow"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:425
+msgid "Add nofollow and noindex to the print template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:432
+msgid "Permalink Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:436
+msgid "Coupon Print Template Slug"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:437
+msgid "default: cctor_coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:462
+msgid "Use Google Analytics to Track Print Views"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:463
+msgid ""
+"Choose all new coupons to start as Pop Up Coupons or hide the \"Click to "
+"Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:481
+msgid "Custom Coupon Styles"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:482
+msgid ""
+"Enter any custom CSS here to apply to the coupons for the shortcode and the "
+"print template.(without &#60;style&#62; tags)"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:491
+msgid "Auto P Filter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:492
+msgid ""
+"Check to remove <a href=\"http://codex.wordpress.org/Function_Reference/"
+"wpautop\" target=\"_blank\">wpautop filter</a> from Coupon Terms Field"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:499
+msgid "Print View Base CSS"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:500
+msgid "Check to disable the base CSS in Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:509
+msgid "WordPress Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:514
+msgid "Coupon Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:518
+msgid ""
+"Check this to prevent the Coupon Creator from modifying the search query to "
+"remove the coupon custom post type."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:534
+msgid ""
+"Customize \"Expires on:\", \"Click to Open in Print View\", Valid thru, and "
+"\"Print the Coupon\" for all Coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:535
+msgid "Change default font and font weights for the Print Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:562
+msgid ""
+"Set a custom size for both views of the coupon for coupons and the image "
+"coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:563
+msgid ""
+"With the Pro &#91;couponloop&#93; shortcode change default settings such as "
+"per page, order, and columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:564
+msgid ""
+"Customize to your theme the responsive breakpoints for the &#91;"
+"couponloop&#93; shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:565
+msgid ""
+"Easily build all the attributes of the &#91;couponloop&#93; shortcode and "
+"insert it into content using the Pro inserter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:580
+msgid "Support: "
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:602
+msgid "Coupon Creator Option Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:618
+msgid ""
+"Check this box and click \"Save Changes\" below to reset all coupon creator "
+"options to their defaults. This does not change any existing coupon settings "
+"or remove your licenses."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:623
+msgid "Wisdom Enabled"
+msgstr ""
+
+#: src/Cctor/Expiration.php:158
+msgid "This Coupon is Showing."
+msgstr ""
+
+#: src/Cctor/Expiration.php:160
+msgid "This Coupon is not Showing."
+msgstr ""
+
+#: src/Cctor/Expiration.php:195
+msgid "Ignore Coupon Expiration is On"
+msgstr ""
+
+#: src/Cctor/Expiration.php:200
+msgid "There is no Coupon Expiration Date"
+msgstr ""
+
+#: src/Cctor/Expiration.php:202
+msgid "This Coupon Expires On "
+msgstr ""
+
+#: src/Cctor/Expiration.php:204
+msgid "This Coupon Expired On "
+msgstr ""
+
+#: src/Cctor/Expiration.php:316
+msgid "Showing"
+msgstr ""
+
+#: src/Cctor/Expiration.php:318
+msgid "Not Showing"
+msgstr ""
+
+#: src/Cctor/Main.php:196
+#, php-format
+msgid ""
+"Coupon Creator Requires WordPress version: %s or higher. You currently have "
+"WordPress version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:199
+#, php-format
+msgid ""
+"Coupon Creator Requires PHP version: %s or higher. You currently have PHP "
+"version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:272
+msgid ""
+"It appears as if the plugin-engine libraries cannot be found! The directory "
+"should be in the \"plugin-engine/\" directory in the Coupon Creator plugin."
+msgstr ""
+
+#: src/Cctor/Main.php:392
+#: src/functions/template-functions/cctor-function-links.php:22
+msgid "Coupon"
+msgstr ""
+
+#: src/Cctor/Main.php:403
+msgid "coupon"
+msgstr ""
+
+#: src/Cctor/Main.php:412
+msgid "Coupons"
+msgstr ""
+
+#: src/Cctor/Main.php:423
+msgid "coupons"
+msgstr ""
+
+#: src/Cctor/Main.php:441
+msgid "coupon category"
+msgstr ""
+
+#: src/Cctor/Main.php:450
+msgid "Coupon Categories"
+msgstr ""
+
+#: src/Cctor/Main.php:459
+msgid "coupon categories"
+msgstr ""
+
+#: src/Cctor/Main.php:492
+msgid "Enter Coupon Admin Title"
+msgstr ""
+
+#: src/Cctor/Main.php:567
+msgid "coupon-category"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:87
+msgid "Coupon Type"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:88
+msgid "Choose a coupon type to use."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:148 src/Cctor/Meta/Fields.php:217
+#: src/Cctor/Meta/Fields.php:398 src/Cctor/Meta/Fields.php:455
+msgid "Pro Content Features"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:161
+msgid "Use the Visual editor to easily style the coupons term's"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:162
+msgid ""
+"Give visitors a reason to click on the coupon by only showing the deal in "
+"print view or by using the view shortcodes to selectively display content on "
+"either view"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:163
+msgid ""
+"Insert columns and rows into the content editor for more unique looking "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:200
+msgid "Choose inside border color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:230
+msgid ""
+"Use 4 style sections in Pro to create a unique coupon or a standard brand to "
+"attract customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:231
+msgid ""
+"Choose between 5 different border styles in Pro, including Saw Tooth, "
+"Stitched, Dotted, Coupon, and None.<br> <img class=\"cctor-pro-img\" alt="
+"\"Coupon Creator Pro Border Examples\" src=\""
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:298
+msgid ""
+"This coupon will not expire and always show on the front end of your site."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:308
+msgid "This coupon will no longer show the day after the expiration date."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:318
+msgid "This coupon's expiration will change based on the choosen pattern."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:328
+msgid "This coupon will expire X days from when it is printed."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:338
+msgid "This coupon will show a range of dates that it is valid."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:351
+msgid "Choose the date format"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:371
+msgid "Choose a date this coupon will expire."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:383
+msgid "Ignore Expiration Date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:384
+msgid "Check this to ignore the expiration date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:411
+msgid ""
+"Utilize five(5) different expiration options to help promote sales at your "
+"business"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:412
+msgid ""
+"Save time by editing multiple coupons expiration and counter fields using "
+"Pro's Bulk Edits"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:413
+msgid ""
+"Track coupon print views by using the unlimited counter or set a limit to "
+"restrict a coupon to a certain amount of customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:432
+msgid ""
+"The Image Coupon is now part of the template system. Go to the Content tab "
+"and choose the Image template to create one."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:468
+msgid "Use the custom links and text to promote your affiliate links"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:469
+msgid ""
+"Enable your visitors to print coupons while staying on the same page using "
+"the Pop Up Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:521
+msgid "Deal"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:522
+msgid "Enter coupon deal - 30% OFF! or Buy One Get One Free, etc..."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:545
+msgid "Font Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:558
+msgid "Background Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:579
+msgid "Terms"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:580
+msgid "Enter the terms of the discount"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:625
+msgid " Style Fields are disabled when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:637
+msgid " Only outer border styles are available when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:643
+msgid "Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:644
+msgid ""
+"Upload an image to use as the entire coupon - Current image size is for 390 "
+"pixels in width with auto height"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:668
+msgid ""
+"The Expiration Date will display based off the selection in the Expiration / "
+"Counter Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:679
+msgid ""
+"The Counter will display based off the selection in the Expiration / Counter "
+"Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:690
+msgid ""
+"The Expiration Date and Counter will display based off the selection in the "
+"Expiration / Counter Tab of this Coupon."
+msgstr ""
+
+#: src/functions/template-functions/cctor-function-expiration.php:24
+msgid "Expires on:"
+msgstr "Se termine le:"
+
+#: src/functions/template-functions/cctor-function-links.php:21
+#: src/functions/template-functions/cctor-function-links.php:46
+msgid "Click to Open in Print View"
+msgstr "Cliquer pour ouvrir l'aperçu d'impression"
+
+#: src/functions/template-functions/cctor-function-links.php:62
+msgid "Click to Print"
+msgstr "Cliquer pour imprimer"
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Do Not Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Yes Please"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "No Thank You"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Submit and Deactivate"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Just Deactivate"
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "Coupon Creator"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"This plugin creates a custom post type for coupons with a shortcode to "
+"display it on website and a single view template for printing."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Brian Jessee"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://couponcreatorplugin.com"
+msgstr ""

BIN
wp-content/plugins/coupon-creator/languages/coupon-creator-pt_BR.mo


Fichier diff supprimé car celui-ci est trop grand
+ 1086 - 0
wp-content/plugins/coupon-creator/languages/coupon-creator-pt_BR.po


+ 874 - 0
wp-content/plugins/coupon-creator/languages/coupon-creator.pot

@@ -0,0 +1,874 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+"Project-Id-Version: Coupon Creator\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2016-03-18 10:08-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: coupon_creator.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: node_modules\n"
+"X-Poedit-SearchPathExcluded-2: .git\n"
+"X-Poedit-SearchPathExcluded-3: sass\n"
+"X-Poedit-SearchPathExcluded-4: vendor\n"
+"X-Poedit-SearchPathExcluded-5: languages\n"
+"X-Poedit-SearchPathExcluded-6: plugin-engine\n"
+
+#: coupon_creator.php:66
+msgid "Sorry to see you go"
+msgstr ""
+
+#: coupon_creator.php:68
+msgid ""
+"Before you deactivate the plugin, would you quickly give us your reason for "
+"doing so?"
+msgstr ""
+
+#: coupon_creator.php:71
+msgid "Could not create a coupon"
+msgstr ""
+
+#: coupon_creator.php:72
+msgid "Could not display my coupons"
+msgstr ""
+
+#: coupon_creator.php:73
+msgid "Looking for affiliate coupon features"
+msgstr ""
+
+#: coupon_creator.php:74
+msgid "Could not find where to get started"
+msgstr ""
+
+#: coupon_creator.php:75
+msgid "Not the features I wanted"
+msgstr ""
+
+#: coupon_creator.php:76
+msgid "Only required temporarily"
+msgstr ""
+
+#: coupon_creator.php:77
+msgid "Lack of technical documentation"
+msgstr ""
+
+#: coupon_creator.php:78
+msgid "Found a better plugin"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:74
+msgid "Coupon Title"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:81
+msgid "Coupon is "
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:83
+msgid "Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:85 src/Cctor/Admin/Options.php:251
+#: src/Cctor/Admin/Options.php:256 src/Cctor/Meta/Fields.php:265
+#: src/Cctor/Meta/Fields.php:270
+msgid "Ignore Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:87 src/Cctor/Admin/Options.php:252
+#: src/Cctor/Admin/Options.php:257 src/Cctor/Meta/Fields.php:266
+#: src/Cctor/Meta/Fields.php:271 src/Cctor/Meta/Fields.php:369
+msgid "Expiration Date"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:89 src/Cctor/Main.php:432
+msgid "Coupon Category"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:148
+msgid "Yes"
+msgstr ""
+
+#: src/Cctor/Admin/Columns.php:169
+msgid "No Categories"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:45
+msgid "Insert Coupon Creator Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:234
+msgid "Select Loop or an Individual Coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:237
+msgid "Coupon Loop"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:251
+msgid "Select a Coupon Category to use in the Loop"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:254
+msgid "All Categories"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:276
+msgid "Select How to Align the Coupon(s)"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:278 src/Cctor/Admin/Inserter.php:293
+msgid "None"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:279
+msgid "Align Left"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:281
+msgid "Align Right"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:283
+msgid "Align Center"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:290
+msgid "Select how to order the coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:292
+msgid "Date (default)"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:294
+msgid "ID"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:295
+msgid "Author"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:296
+msgid "Coupon Post Title"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:297
+msgid "Slug Name"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:298
+msgid "Last Modified"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:299
+msgid "Random"
+msgstr ""
+
+#: src/Cctor/Admin/Inserter.php:318
+msgid "No Coupons are Published"
+msgstr ""
+
+#: src/Cctor/Admin/Main.php:73 src/Cctor/Admin/Options.php:86
+msgid "Options"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:113
+msgid "Coupon Fields"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:122
+msgid "Coupon Shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:144
+msgid ""
+"Place this coupon in your posts, pages, custom post types, or widgets by "
+"using the shortcode below:<br><br>"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:156
+msgid "Content"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:157
+msgid "Border & Background"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:158 src/Cctor/Admin/Options.php:241
+#: src/Cctor/Meta/Fields.php:257
+msgid "Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:159
+msgid "Links"
+msgstr ""
+
+#: src/Cctor/Admin/Meta.php:160 src/Cctor/Admin/Options.php:128
+msgid "Help"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:85 src/Cctor/Admin/Options.php:163
+msgid "Coupon Creator Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:124
+msgid "Defaults"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:125
+msgid "Link Attributes / Permalinks"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:126
+msgid "Display"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:127
+msgid "Templating"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:129
+msgid "Licenses"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:130 src/Cctor/Admin/Options.php:589
+msgid "System Info"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:131 src/Cctor/Admin/Options.php:614
+msgid "Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:165
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:170
+msgid "Coupon Creator Options updated."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:202
+msgid ""
+"*These are defaults for new coupons only and do not change existing coupons."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:210
+msgid "Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:214 src/Cctor/Admin/Options.php:219
+#: src/Cctor/Meta/Fields.php:71 src/Cctor/Meta/Fields.php:76
+msgid "Default"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:215 src/Cctor/Admin/Options.php:220
+#: src/Cctor/Meta/Fields.php:72 src/Cctor/Meta/Fields.php:77
+msgid "Image"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:221 src/Cctor/Meta/Fields.php:78
+msgid "Modern"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:222 src/Cctor/Meta/Fields.php:79
+msgid "Two Columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:223 src/Cctor/Meta/Fields.php:80
+msgid "Lower Third"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:224 src/Cctor/Meta/Fields.php:81
+msgid "Highlight"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:230
+msgid "Template Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:231
+msgid "Choose a default template for new coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:258 src/Cctor/Meta/Fields.php:272
+msgid "Recurring Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:259 src/Cctor/Meta/Fields.php:273
+msgid "Expires in X Days"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:260 src/Cctor/Meta/Fields.php:274
+msgid "Range Expiration"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:266 src/Cctor/Meta/Fields.php:279
+msgid "Expiration Option"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:267 src/Cctor/Meta/Fields.php:280
+msgid "Choose the expiration method for this coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:275 src/Cctor/Meta/Fields.php:350
+msgid "Date Format"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:276
+msgid "Select the Date Format to show for all Coupons*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:280 src/Cctor/Meta/Fields.php:356
+msgid "Month First - MM/DD/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:281 src/Cctor/Meta/Fields.php:357
+msgid "Day First - DD/MM/YYYY"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:327 src/Cctor/Meta/Fields.php:191
+msgid "Inner Border"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:331 src/Cctor/Meta/Fields.php:199
+msgid "Inside Border Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:332
+msgid "Choose default inside border color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:346
+msgid "Default Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:350
+msgid "Deal Background Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:351
+msgid "Choose default background color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:357
+msgid "Deal Text Color"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:358
+msgid "Choose default text color*"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:373 src/Cctor/Admin/Options.php:452
+#: src/Cctor/Admin/Options.php:524 src/Cctor/Admin/Options.php:552
+msgid "Pro Default Features"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:383
+msgid ""
+"Save time by setting default options for the expiration fields for all new "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:384
+msgid ""
+"Remove your coupons from the front end by having them set to draft after "
+"expired"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:385
+msgid ""
+"Create a standard look with default styling fields such as color, radius, "
+"border type, and background fields"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:391 src/Cctor/Admin/Options.php:469
+#: src/Cctor/Admin/Options.php:541 src/Cctor/Admin/Options.php:571
+#: src/Cctor/Meta/Fields.php:172 src/Cctor/Meta/Fields.php:240
+#: src/Cctor/Meta/Fields.php:422 src/Cctor/Meta/Fields.php:478
+msgid "Pro Link"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:405
+msgid "Link Attribute Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:410
+msgid "Print View Links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:411
+msgid "Add nofollow to all the \"Click to Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:417
+msgid "Disable Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:418
+msgid ""
+"This will disable all custom links and the popup option in Pro as well as "
+"the \"Click to Open in Print View\" links under the coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:424
+msgid "Print Template No Follow"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:425
+msgid "Add nofollow and noindex to the print template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:432
+msgid "Permalink Options"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:436
+msgid "Coupon Print Template Slug"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:437
+msgid "default: cctor_coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:462
+msgid "Use Google Analytics to Track Print Views"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:463
+msgid ""
+"Choose all new coupons to start as Pop Up Coupons or hide the \"Click to "
+"Open in Print View\" links"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:481
+msgid "Custom Coupon Styles"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:482
+msgid ""
+"Enter any custom CSS here to apply to the coupons for the shortcode and the "
+"print template.(without &#60;style&#62; tags)"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:491
+msgid "Auto P Filter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:492
+msgid ""
+"Check to remove <a href=\"http://codex.wordpress.org/Function_Reference/"
+"wpautop\" target=\"_blank\">wpautop filter</a> from Coupon Terms Field"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:499
+msgid "Print View Base CSS"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:500
+msgid "Check to disable the base CSS in Print View"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:509
+msgid "WordPress Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:514
+msgid "Coupon Search"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:518
+msgid ""
+"Check this to prevent the Coupon Creator from modifying the search query to "
+"remove the coupon custom post type."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:534
+msgid ""
+"Customize \"Expires on:\", \"Click to Open in Print View\", Valid thru, and "
+"\"Print the Coupon\" for all Coupons"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:535
+msgid "Change default font and font weights for the Print Template"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:562
+msgid ""
+"Set a custom size for both views of the coupon for coupons and the image "
+"coupon"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:563
+msgid ""
+"With the Pro &#91;couponloop&#93; shortcode change default settings such as "
+"per page, order, and columns"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:564
+msgid ""
+"Customize to your theme the responsive breakpoints for the &#91;"
+"couponloop&#93; shortcode"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:565
+msgid ""
+"Easily build all the attributes of the &#91;couponloop&#93; shortcode and "
+"insert it into content using the Pro inserter"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:580
+msgid "Support: "
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:602
+msgid "Coupon Creator Option Reset"
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:618
+msgid ""
+"Check this box and click \"Save Changes\" below to reset all coupon creator "
+"options to their defaults. This does not change any existing coupon settings "
+"or remove your licenses."
+msgstr ""
+
+#: src/Cctor/Admin/Options.php:623
+msgid "Wisdom Enabled"
+msgstr ""
+
+#: src/Cctor/Expiration.php:158
+msgid "This Coupon is Showing."
+msgstr ""
+
+#: src/Cctor/Expiration.php:160
+msgid "This Coupon is not Showing."
+msgstr ""
+
+#: src/Cctor/Expiration.php:195
+msgid "Ignore Coupon Expiration is On"
+msgstr ""
+
+#: src/Cctor/Expiration.php:200
+msgid "There is no Coupon Expiration Date"
+msgstr ""
+
+#: src/Cctor/Expiration.php:202
+msgid "This Coupon Expires On "
+msgstr ""
+
+#: src/Cctor/Expiration.php:204
+msgid "This Coupon Expired On "
+msgstr ""
+
+#: src/Cctor/Expiration.php:316
+msgid "Showing"
+msgstr ""
+
+#: src/Cctor/Expiration.php:318
+msgid "Not Showing"
+msgstr ""
+
+#: src/Cctor/Main.php:196
+#, php-format
+msgid ""
+"Coupon Creator Requires WordPress version: %s or higher. You currently have "
+"WordPress version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:199
+#, php-format
+msgid ""
+"Coupon Creator Requires PHP version: %s or higher. You currently have PHP "
+"version: %s"
+msgstr ""
+
+#: src/Cctor/Main.php:272
+msgid ""
+"It appears as if the plugin-engine libraries cannot be found! The directory "
+"should be in the \"plugin-engine/\" directory in the Coupon Creator plugin."
+msgstr ""
+
+#: src/Cctor/Main.php:392
+#: src/functions/template-functions/cctor-function-links.php:22
+msgid "Coupon"
+msgstr ""
+
+#: src/Cctor/Main.php:403
+msgid "coupon"
+msgstr ""
+
+#: src/Cctor/Main.php:412
+msgid "Coupons"
+msgstr ""
+
+#: src/Cctor/Main.php:423
+msgid "coupons"
+msgstr ""
+
+#: src/Cctor/Main.php:441
+msgid "coupon category"
+msgstr ""
+
+#: src/Cctor/Main.php:450
+msgid "Coupon Categories"
+msgstr ""
+
+#: src/Cctor/Main.php:459
+msgid "coupon categories"
+msgstr ""
+
+#: src/Cctor/Main.php:492
+msgid "Enter Coupon Admin Title"
+msgstr ""
+
+#: src/Cctor/Main.php:567
+msgid "coupon-category"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:87
+msgid "Coupon Type"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:88
+msgid "Choose a coupon type to use."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:148 src/Cctor/Meta/Fields.php:217
+#: src/Cctor/Meta/Fields.php:398 src/Cctor/Meta/Fields.php:455
+msgid "Pro Content Features"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:161
+msgid "Use the Visual editor to easily style the coupons term's"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:162
+msgid ""
+"Give visitors a reason to click on the coupon by only showing the deal in "
+"print view or by using the view shortcodes to selectively display content on "
+"either view"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:163
+msgid ""
+"Insert columns and rows into the content editor for more unique looking "
+"coupons"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:200
+msgid "Choose inside border color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:230
+msgid ""
+"Use 4 style sections in Pro to create a unique coupon or a standard brand to "
+"attract customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:231
+msgid ""
+"Choose between 5 different border styles in Pro, including Saw Tooth, "
+"Stitched, Dotted, Coupon, and None.<br> <img class=\"cctor-pro-img\" alt="
+"\"Coupon Creator Pro Border Examples\" src=\""
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:298
+msgid ""
+"This coupon will not expire and always show on the front end of your site."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:308
+msgid "This coupon will no longer show the day after the expiration date."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:318
+msgid "This coupon's expiration will change based on the choosen pattern."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:328
+msgid "This coupon will expire X days from when it is printed."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:338
+msgid "This coupon will show a range of dates that it is valid."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:351
+msgid "Choose the date format"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:371
+msgid "Choose a date this coupon will expire."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:383
+msgid "Ignore Expiration Date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:384
+msgid "Check this to ignore the expiration date"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:411
+msgid ""
+"Utilize five(5) different expiration options to help promote sales at your "
+"business"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:412
+msgid ""
+"Save time by editing multiple coupons expiration and counter fields using "
+"Pro's Bulk Edits"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:413
+msgid ""
+"Track coupon print views by using the unlimited counter or set a limit to "
+"restrict a coupon to a certain amount of customers"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:432
+msgid ""
+"The Image Coupon is now part of the template system. Go to the Content tab "
+"and choose the Image template to create one."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:468
+msgid "Use the custom links and text to promote your affiliate links"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:469
+msgid ""
+"Enable your visitors to print coupons while staying on the same page using "
+"the Pop Up Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:521
+msgid "Deal"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:522
+msgid "Enter coupon deal - 30% OFF! or Buy One Get One Free, etc..."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:545
+msgid "Font Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:558
+msgid "Background Color"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:579
+msgid "Terms"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:580
+msgid "Enter the terms of the discount"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:625
+msgid " Style Fields are disabled when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:637
+msgid " Only outer border styles are available when using an Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:643
+msgid "Image Coupon"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:644
+msgid ""
+"Upload an image to use as the entire coupon - Current image size is for 390 "
+"pixels in width with auto height"
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:668
+msgid ""
+"The Expiration Date will display based off the selection in the Expiration / "
+"Counter Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:679
+msgid ""
+"The Counter will display based off the selection in the Expiration / Counter "
+"Tab of this Coupon."
+msgstr ""
+
+#: src/Cctor/Meta/Fields.php:690
+msgid ""
+"The Expiration Date and Counter will display based off the selection in the "
+"Expiration / Counter Tab of this Coupon."
+msgstr ""
+
+#: src/functions/template-functions/cctor-function-expiration.php:24
+msgid "Expires on:"
+msgstr ""
+
+#: src/functions/template-functions/cctor-function-links.php:21
+#: src/functions/template-functions/cctor-function-links.php:46
+msgid "Click to Open in Print View"
+msgstr ""
+
+#: src/functions/template-functions/cctor-function-links.php:62
+msgid "Click to Print"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Do Not Allow"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Yes Please"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "No Thank You"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Submit and Deactivate"
+msgstr ""
+
+#: src/tracking/class-plugin-usage-tracker.php:1
+msgid "Just Deactivate"
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "Coupon Creator"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"This plugin creates a custom post type for coupons with a shortcode to "
+"display it on website and a single view template for printing."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Brian Jessee"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://couponcreatorplugin.com"
+msgstr ""

BIN
wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-es_ES.mo


+ 497 - 0
wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-es_ES.po

@@ -0,0 +1,497 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Plugin Engine\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2018-04-20 15:57-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: pngx-common.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: .git\n"
+"X-Poedit-SearchPathExcluded-2: vendor\n"
+"X-Poedit-SearchPathExcluded-3: node_modules\n"
+"X-Poedit-SearchPathExcluded-4: languages\n"
+"X-Poedit-SearchPathExcluded-5: src/resources\n"
+
+#: src/Pngx/Admin/Ajax.php:35
+msgid "A Permission Error has occurred. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:40 src/Pngx/Admin/Ajax.php:128
+#: src/Pngx/Admin/Ajax.php:133 src/Pngx/Admin/Ajax.php:229
+#: src/Pngx/Admin/Ajax.php:234
+msgid "Permission Error has occurred. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:44
+msgid "No Template ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:137 src/Pngx/Admin/Ajax.php:238
+msgid "No Field ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:141
+msgid "No Option ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:246
+msgid "No Section Number Provided."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:250
+msgid "No Column Number Provided."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:263
+msgid "No Field Exists."
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:130 src/Pngx/Admin/Support.php:28
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:131
+msgid "System info copied"
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:132
+msgid "Press \"Cmd + C\" to copy"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:208
+msgid "Incorrect Permissions!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:212
+msgid "No Data!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:218
+msgid "Missing Required Fields"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:222
+msgid "Incorrect Capabilities!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:319 src/Pngx/Admin/EDD_License.php:441
+msgid "An error occurred, please try again."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:324
+msgid "License status has not changed with the license server."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:380
+#: src/Pngx/Admin/Field/License_Status.php:35
+#: src/Pngx/Admin/Plugin_License_List.php:127
+#, php-format
+msgid " and Expires on %s"
+msgstr "y expira el %s"
+
+#: src/Pngx/Admin/EDD_License.php:384
+msgid "License Saved and Valid"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:387
+#: src/Pngx/Admin/Field/License_Status.php:43
+#: src/Pngx/Admin/Plugin_License_List.php:194
+msgid "License is Active"
+msgstr "Licencia Activa"
+
+#: src/Pngx/Admin/EDD_License.php:418
+msgid "License Deactivated"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:420
+msgid "Click Activate License to enable automatic updates."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:426
+msgid ""
+"License Deactivated locally, it could not be deactivated with the server due "
+"to:"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:451
+#: src/Pngx/Admin/Field/License_Status.php:54
+#: src/Pngx/Admin/Plugin_License_List.php:205
+#, php-format
+msgid "License Expired on %s"
+msgstr "Licencia Expiró el %s"
+
+#: src/Pngx/Admin/EDD_License.php:456
+msgid "Your license key has been disabled."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:461
+msgid "Invalid license."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:466
+msgid "Your license is invalid."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:471
+msgid "Your license is not active for this URL."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:476
+#, php-format
+msgid "This appears to be for another plugin and invalid license key for %s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:481
+msgid "Your license key has reached its activation limit."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:486
+msgid ""
+"Your license cannot be activated or deactivated, please confirm in your "
+"accoint it is active."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:495
+#: src/Pngx/Admin/Field/License_Status.php:56
+#: src/Pngx/Admin/Plugin_License_List.php:207
+msgid "License is Not Active"
+msgstr "Licencia no es activo"
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:201
+#, php-format
+msgid ""
+"There is a new version of %1$s available. %2$sView version %3$s details%4$s."
+msgstr ""
+"Hay una nueva version de %1$s disponible. %3$sVer detalles%4$s de la versión"
+"%2$s."
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:209
+#, php-format
+msgid ""
+"There is a new version of %1$s available. %2$sView version %3$s details%4$s "
+"or %5$supdate now%6$s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:399
+msgid "You do not have permission to install plugin updates"
+msgstr "No tiene permiso para instalar actualizaciones del plugin"
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:399
+msgid "Error"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Date.php:42
+msgid "Today's Date is "
+msgstr "La fecha de hoy es "
+
+#: src/Pngx/Admin/Field/Icon.php:43
+#, php-format
+msgctxt "Icon Popup Header"
+msgid "%1s - %2s"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:49
+#, php-format
+msgctxt "Icon Popup Footer"
+msgid "%1s - %2s of %3s"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:50
+msgid "Search..."
+msgstr ""
+
+#: src/Pngx/Admin/Field/License_Status.php:47
+#: src/Pngx/Admin/Plugin_License_List.php:189
+msgid "Deactivate License"
+msgstr "Desactivar Licencia"
+
+#: src/Pngx/Admin/Field/License_Status.php:52
+#: src/Pngx/Admin/Plugin_License_List.php:203
+msgid "License is Invalid"
+msgstr "Licencia no válida"
+
+#: src/Pngx/Admin/Field/License_Status.php:63
+#: src/Pngx/Admin/Plugin_License_List.php:220
+msgid "Activate License"
+msgstr "Activar licencia"
+
+#: src/Pngx/Admin/Help.php:122
+msgid "Video Guides"
+msgstr "Guías de vídeo"
+
+#: src/Pngx/Admin/Help.php:137
+msgid "Guides"
+msgstr "Guías"
+
+#: src/Pngx/Admin/Meta.php:57
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+"Allí tal vez un conflicto de javascript prevenir algunas de las "
+"características de trabajo.  <a href=\"%s\" target=\"_blank\">Consulte esta "
+"guía para reducir la causa.</a>"
+
+#: src/Pngx/Admin/Meta.php:106
+msgid "Content"
+msgstr "Contenido"
+
+#: src/Pngx/Admin/Options.php:345
+msgid "Save Changes"
+msgstr "Salvar cambios"
+
+#: src/Pngx/Admin/Plugin_License_List.php:34
+msgid "Please deactivate the license key to deactivate this plugin"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:100
+msgid "Enter License Key"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:106
+msgid "License Key"
+msgstr ""
+
+#: src/Pngx/Admin/Style/Linked.php:24
+msgid "Field Styles"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:139
+msgid "English"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:177 src/Pngx/Admin/Support.php:179
+msgid "Unknown or not set"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:568
+msgid "Unknown"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:594
+msgid "Not Found"
+msgstr ""
+
+#: src/Pngx/Cron_20.php:35
+msgid "Once Every 20 Mins"
+msgstr "Una vez cada 20 minutos"
+
+#: src/Pngx/Register_Post_Type.php:55
+#, php-format
+msgid "%s updated. <a href=\"%s\">View %s</a>"
+msgstr "%s actualizado. <a href=“%s”>Ver %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:56
+msgid "Custom field updated."
+msgstr "Campo personalizado actualizado."
+
+#: src/Pngx/Register_Post_Type.php:57
+msgid "Custom field deleted."
+msgstr "Campo personalizado borrado."
+
+#: src/Pngx/Register_Post_Type.php:58
+#, php-format
+msgid "%s updated."
+msgstr "%s actualizado."
+
+#: src/Pngx/Register_Post_Type.php:59
+#, php-format
+msgid "%s restored to revision from %s"
+msgstr "%s restaurado a la revisión de %s"
+
+#: src/Pngx/Register_Post_Type.php:60
+#, php-format
+msgid "%s published. <a href=\"%s\">View %s</a>"
+msgstr "%s publicado. <a href=“%s”>Ver %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:61
+#, php-format
+msgid "%s saved."
+msgstr "%s guardados."
+
+#: src/Pngx/Register_Post_Type.php:62
+#, php-format
+msgid "%s submitted. <a target=\"_blank\" href=\"%s\">Preview %s</a>"
+msgstr "%s enviado. <a target=“_blank” href=“%s”>Vista Previa %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:63
+#, php-format
+msgid ""
+"%s scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
+"\">Preview %s</a>"
+msgstr ""
+"%s programado para: <strong>%1$s</strong>. <a target=“_blank” "
+"href=“%2$s”>Vista previa %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:63
+msgid "M j, Y @ G:i"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:64
+#, php-format
+msgid "%s draft updated. <a target=\"_blank\" href=\"%s\">Preview %s</a>"
+msgstr ""
+"%s borrador actualizado. <a target=“_blank” href=“%s”>Vista previa %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:109 src/Pngx/Register_Post_Type.php:110
+#: src/Pngx/Register_Post_Type.php:111 src/Pngx/Register_Post_Type.php:112
+#: src/Pngx/Register_Post_Type.php:151 src/Pngx/Register_Taxonomy.php:30
+#: src/Pngx/Register_Taxonomy.php:31 src/Pngx/Register_Taxonomy.php:40
+#, php-format
+msgid "%s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:113
+msgid "Add New"
+msgstr "Agregar Nuevo"
+
+#: src/Pngx/Register_Post_Type.php:114 src/Pngx/Register_Taxonomy.php:38
+#, php-format
+msgid "Add New %s"
+msgstr "Agregar Nuevo %s"
+
+#: src/Pngx/Register_Post_Type.php:115 src/Pngx/Register_Taxonomy.php:36
+#, php-format
+msgid "Edit %s"
+msgstr "Editar %s"
+
+#: src/Pngx/Register_Post_Type.php:116
+#, php-format
+msgid "New %s"
+msgstr "Nueva %s"
+
+#: src/Pngx/Register_Post_Type.php:117
+#, php-format
+msgid "View %s"
+msgstr "Mostrar %s"
+
+#: src/Pngx/Register_Post_Type.php:118 src/Pngx/Register_Taxonomy.php:32
+#, php-format
+msgid "Search %s"
+msgstr "Buscar %s "
+
+#: src/Pngx/Register_Post_Type.php:119
+#, php-format
+msgid "No %s found"
+msgstr "No se encontrarón %s"
+
+#: src/Pngx/Register_Post_Type.php:120
+#, php-format
+msgid "No %s found in Trash"
+msgstr "No hay %s en la Papelera"
+
+#: src/Pngx/Register_Post_Type.php:121 src/Pngx/Register_Taxonomy.php:34
+#, php-format
+msgid "Parent %s"
+msgstr "Principal %s"
+
+#: src/Pngx/Register_Post_Type.php:122 src/Pngx/Register_Taxonomy.php:33
+#, php-format
+msgid "All %s"
+msgstr "Todos %s"
+
+#: src/Pngx/Register_Post_Type.php:123 src/Pngx/Register_Taxonomy.php:37
+#, php-format
+msgid "Update %s"
+msgstr "Actualizar %s"
+
+#: src/Pngx/Register_Post_Type.php:124
+#, php-format
+msgid "%s Archives"
+msgstr "%s Archivos"
+
+#: src/Pngx/Register_Post_Type.php:125
+#, php-format
+msgid "Insert into %s"
+msgstr "Insertar en %s"
+
+#: src/Pngx/Register_Post_Type.php:126
+#, php-format
+msgid "Uploaded to this %s"
+msgstr "Actualizado a este %s"
+
+#: src/Pngx/Register_Post_Type.php:127
+#, php-format
+msgid "%s list"
+msgstr "%s lista"
+
+#: src/Pngx/Register_Post_Type.php:128
+#, php-format
+msgid "%s list navigation"
+msgstr "Lista Navegación %s"
+
+#: src/Pngx/Register_Post_Type.php:129
+#, php-format
+msgid "Filter %s list"
+msgstr "%s Lista de Navigation"
+
+#: src/Pngx/Register_Post_Type.php:152
+#, php-format
+msgid "Creates a %s Custom Post Type"
+msgstr "Crea un tipo de mensaje personalizado de %s"
+
+#: src/Pngx/Register_Taxonomy.php:35
+#, php-format
+msgid "Parent %s:"
+msgstr "%s superior:"
+
+#: src/Pngx/Register_Taxonomy.php:39
+#, php-format
+msgid "New %s Name"
+msgstr "Nueva%s Nombre"
+
+#: src/Pngx/Register_Taxonomy.php:41
+#, php-format
+msgid "Popular %s"
+msgstr "%s populares"
+
+#: src/Pngx/Register_Taxonomy.php:42
+#, php-format
+msgid "Separate %s with commas"
+msgstr "%s se separan con comas"
+
+#: src/Pngx/Register_Taxonomy.php:43
+#, php-format
+msgid "Add or remove %s"
+msgstr "Agregar o eliminar %s"
+
+#: src/Pngx/Register_Taxonomy.php:44
+#, php-format
+msgid "Choose from the most used %s"
+msgstr "Elegir el más utilizado de %s"
+
+#. Plugin Name of the plugin/theme
+msgid "Plugin Engine"
+msgstr "Plugin Engine"
+
+#. Description of the plugin/theme
+msgid "A plugin framework to be embeded in the core plugin"
+msgstr "Manten el plugin coreo <strong>GRATIS</strong>!"
+
+#. Author of the plugin/theme
+msgid "Jessee Productions, LLC"
+msgstr "Jessee Productions, LLC"
+
+#. Author URI of the plugin/theme
+msgid "https://jesseeproductions.com/"
+msgstr "https://jesseeproductions.com/"
+
+#~ msgid "An event settings framework for managing shared options"
+#~ msgstr ""
+#~ "Un marco para la gestión de la configuración de eventos opciones "
+#~ "compartidas"

BIN
wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-pt_BR.mo


+ 491 - 0
wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine-pt_BR.po

@@ -0,0 +1,491 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Plugin Engine\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2018-04-20 15:57-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: pngx-common.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: .git\n"
+"X-Poedit-SearchPathExcluded-2: vendor\n"
+"X-Poedit-SearchPathExcluded-3: node_modules\n"
+"X-Poedit-SearchPathExcluded-4: languages\n"
+"X-Poedit-SearchPathExcluded-5: src/resources\n"
+
+#: src/Pngx/Admin/Ajax.php:35
+msgid "A Permission Error has occurred. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:40 src/Pngx/Admin/Ajax.php:128
+#: src/Pngx/Admin/Ajax.php:133 src/Pngx/Admin/Ajax.php:229
+#: src/Pngx/Admin/Ajax.php:234
+msgid "Permission Error has occurred. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:44
+msgid "No Template ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:137 src/Pngx/Admin/Ajax.php:238
+msgid "No Field ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:141
+msgid "No Option ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:246
+msgid "No Section Number Provided."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:250
+msgid "No Column Number Provided."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:263
+msgid "No Field Exists."
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:130 src/Pngx/Admin/Support.php:28
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:131
+msgid "System info copied"
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:132
+msgid "Press \"Cmd + C\" to copy"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:208
+msgid "Incorrect Permissions!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:212
+msgid "No Data!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:218
+msgid "Missing Required Fields"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:222
+msgid "Incorrect Capabilities!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:319 src/Pngx/Admin/EDD_License.php:441
+msgid "An error occurred, please try again."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:324
+msgid "License status has not changed with the license server."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:380
+#: src/Pngx/Admin/Field/License_Status.php:35
+#: src/Pngx/Admin/Plugin_License_List.php:127
+#, php-format
+msgid " and Expires on %s"
+msgstr "e expira em %s"
+
+#: src/Pngx/Admin/EDD_License.php:384
+msgid "License Saved and Valid"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:387
+#: src/Pngx/Admin/Field/License_Status.php:43
+#: src/Pngx/Admin/Plugin_License_List.php:194
+msgid "License is Active"
+msgstr "A Chave de Licença está Ativa."
+
+#: src/Pngx/Admin/EDD_License.php:418
+msgid "License Deactivated"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:420
+msgid "Click Activate License to enable automatic updates."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:426
+msgid ""
+"License Deactivated locally, it could not be deactivated with the server due "
+"to:"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:451
+#: src/Pngx/Admin/Field/License_Status.php:54
+#: src/Pngx/Admin/Plugin_License_List.php:205
+#, php-format
+msgid "License Expired on %s"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Admin/EDD_License.php:456
+msgid "Your license key has been disabled."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:461
+msgid "Invalid license."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:466
+msgid "Your license is invalid."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:471
+msgid "Your license is not active for this URL."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:476
+#, php-format
+msgid "This appears to be for another plugin and invalid license key for %s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:481
+msgid "Your license key has reached its activation limit."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:486
+msgid ""
+"Your license cannot be activated or deactivated, please confirm in your "
+"accoint it is active."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:495
+#: src/Pngx/Admin/Field/License_Status.php:56
+#: src/Pngx/Admin/Plugin_License_List.php:207
+msgid "License is Not Active"
+msgstr "Licença não está ativa"
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:201
+#, php-format
+msgid ""
+"There is a new version of %1$s available. %2$sView version %3$s details%4$s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:209
+#, php-format
+msgid ""
+"There is a new version of %1$s available. %2$sView version %3$s details%4$s "
+"or %5$supdate now%6$s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:399
+msgid "You do not have permission to install plugin updates"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:399
+msgid "Error"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Date.php:42
+msgid "Today's Date is "
+msgstr "Data de hoje é"
+
+#: src/Pngx/Admin/Field/Icon.php:43
+#, php-format
+msgctxt "Icon Popup Header"
+msgid "%1s - %2s"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:49
+#, php-format
+msgctxt "Icon Popup Footer"
+msgid "%1s - %2s of %3s"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:50
+msgid "Search..."
+msgstr ""
+
+#: src/Pngx/Admin/Field/License_Status.php:47
+#: src/Pngx/Admin/Plugin_License_List.php:189
+msgid "Deactivate License"
+msgstr "Desativar licença"
+
+#: src/Pngx/Admin/Field/License_Status.php:52
+#: src/Pngx/Admin/Plugin_License_List.php:203
+msgid "License is Invalid"
+msgstr "Esta licença não é válida"
+
+#: src/Pngx/Admin/Field/License_Status.php:63
+#: src/Pngx/Admin/Plugin_License_List.php:220
+msgid "Activate License"
+msgstr "Ativar a Licença"
+
+#: src/Pngx/Admin/Help.php:122
+msgid "Video Guides"
+msgstr "Guias de vídeo"
+
+#: src/Pngx/Admin/Help.php:137
+msgid "Guides"
+msgstr "Guias"
+
+#: src/Pngx/Admin/Meta.php:57
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+"Há talvez um conflito de javascript, impedindo que alguns recursos "
+"funcionem  <a href=\"%s\" target=\"_blank\">Por favor, verifique este guia "
+"para diminuir a causa.</a>"
+
+#: src/Pngx/Admin/Meta.php:106
+msgid "Content"
+msgstr "Conteudo"
+
+#: src/Pngx/Admin/Options.php:345
+msgid "Save Changes"
+msgstr "Salvar alerações"
+
+#: src/Pngx/Admin/Plugin_License_List.php:34
+msgid "Please deactivate the license key to deactivate this plugin"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:100
+msgid "Enter License Key"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:106
+msgid "License Key"
+msgstr ""
+
+#: src/Pngx/Admin/Style/Linked.php:24
+msgid "Field Styles"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:139
+msgid "English"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:177 src/Pngx/Admin/Support.php:179
+msgid "Unknown or not set"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:568
+msgid "Unknown"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:594
+msgid "Not Found"
+msgstr ""
+
+#: src/Pngx/Cron_20.php:35
+msgid "Once Every 20 Mins"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:55
+#, php-format
+msgid "%s updated. <a href=\"%s\">View %s</a>"
+msgstr "%s atualizado. <a href=\"%s\">Veja %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:56
+msgid "Custom field updated."
+msgstr "Cor do campo de oferta"
+
+#: src/Pngx/Register_Post_Type.php:57
+msgid "Custom field deleted."
+msgstr "Campo personalizado deletado."
+
+#: src/Pngx/Register_Post_Type.php:58
+#, php-format
+msgid "%s updated."
+msgstr "e expira em %s"
+
+#: src/Pngx/Register_Post_Type.php:59
+#, php-format
+msgid "%s restored to revision from %s"
+msgstr "%s restaurado da revisão de %s"
+
+#: src/Pngx/Register_Post_Type.php:60
+#, php-format
+msgid "%s published. <a href=\"%s\">View %s</a>"
+msgstr "%s publicado. <a href=\\”%s\\”>Ver %s </a>"
+
+#: src/Pngx/Register_Post_Type.php:61
+#, php-format
+msgid "%s saved."
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Post_Type.php:62
+#, php-format
+msgid "%s submitted. <a target=\"_blank\" href=\"%s\">Preview %s</a>"
+msgstr "%s enviado. <a target=“_blank” href=“%s”>Pré-visualizar %s</a>"
+
+#: src/Pngx/Register_Post_Type.php:63
+#, php-format
+msgid ""
+"%s scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
+"\">Preview %s</a>"
+msgstr ""
+"%s agendado para: <strong>%1$s</strong>. <a target=\\\"_blank\\\" href=\\"
+"\"%2$s\\\">Pré-visualizar </a>"
+
+#: src/Pngx/Register_Post_Type.php:63
+msgid "M j, Y @ G:i"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:64
+#, php-format
+msgid "%s draft updated. <a target=\"_blank\" href=\"%s\">Preview %s</a>"
+msgstr ""
+"Rascunho de %s atualizado. <a target=\\”_blank\\” href=\\”%s\\”>Pré-"
+"visualizar  %s </a>"
+
+#: src/Pngx/Register_Post_Type.php:109 src/Pngx/Register_Post_Type.php:110
+#: src/Pngx/Register_Post_Type.php:111 src/Pngx/Register_Post_Type.php:112
+#: src/Pngx/Register_Post_Type.php:151 src/Pngx/Register_Taxonomy.php:30
+#: src/Pngx/Register_Taxonomy.php:31 src/Pngx/Register_Taxonomy.php:40
+#, php-format
+msgid "%s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:113
+msgid "Add New"
+msgstr "Adicionar Novo"
+
+#: src/Pngx/Register_Post_Type.php:114 src/Pngx/Register_Taxonomy.php:38
+#, php-format
+msgid "Add New %s"
+msgstr "Adicionar Novo %s"
+
+#: src/Pngx/Register_Post_Type.php:115 src/Pngx/Register_Taxonomy.php:36
+#, php-format
+msgid "Edit %s"
+msgstr "Editar %s"
+
+#: src/Pngx/Register_Post_Type.php:116
+#, php-format
+msgid "New %s"
+msgstr "Novo %s"
+
+#: src/Pngx/Register_Post_Type.php:117
+#, php-format
+msgid "View %s"
+msgstr "e expira em %s"
+
+#: src/Pngx/Register_Post_Type.php:118 src/Pngx/Register_Taxonomy.php:32
+#, php-format
+msgid "Search %s"
+msgstr "Buscar %s"
+
+#: src/Pngx/Register_Post_Type.php:119
+#, php-format
+msgid "No %s found"
+msgstr "Nenhum %s encontrado"
+
+#: src/Pngx/Register_Post_Type.php:120
+#, php-format
+msgid "No %s found in Trash"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Post_Type.php:121 src/Pngx/Register_Taxonomy.php:34
+#, php-format
+msgid "Parent %s"
+msgstr "Matriz %s"
+
+#: src/Pngx/Register_Post_Type.php:122 src/Pngx/Register_Taxonomy.php:33
+#, php-format
+msgid "All %s"
+msgstr "e expira em %s"
+
+#: src/Pngx/Register_Post_Type.php:123 src/Pngx/Register_Taxonomy.php:37
+#, php-format
+msgid "Update %s"
+msgstr "Atualizar %s"
+
+#: src/Pngx/Register_Post_Type.php:124
+#, php-format
+msgid "%s Archives"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Post_Type.php:125
+#, php-format
+msgid "Insert into %s"
+msgstr "Inserir %s"
+
+#: src/Pngx/Register_Post_Type.php:126
+#, php-format
+msgid "Uploaded to this %s"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Post_Type.php:127
+#, php-format
+msgid "%s list"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Post_Type.php:128
+#, php-format
+msgid "%s list navigation"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Post_Type.php:129
+#, php-format
+msgid "Filter %s list"
+msgstr "Lista de filtros de %s"
+
+#: src/Pngx/Register_Post_Type.php:152
+#, php-format
+msgid "Creates a %s Custom Post Type"
+msgstr "Cria um tipo de Post personalizado de %s"
+
+#: src/Pngx/Register_Taxonomy.php:35
+#, php-format
+msgid "Parent %s:"
+msgstr "Matriz %s:"
+
+#: src/Pngx/Register_Taxonomy.php:39
+#, php-format
+msgid "New %s Name"
+msgstr "Novo %s Nome"
+
+#: src/Pngx/Register_Taxonomy.php:41
+#, php-format
+msgid "Popular %s"
+msgstr "Licença expirou em %s"
+
+#: src/Pngx/Register_Taxonomy.php:42
+#, php-format
+msgid "Separate %s with commas"
+msgstr "Separar %s por vírgulas"
+
+#: src/Pngx/Register_Taxonomy.php:43
+#, php-format
+msgid "Add or remove %s"
+msgstr "Adicionar ou remover %s"
+
+#: src/Pngx/Register_Taxonomy.php:44
+#, php-format
+msgid "Choose from the most used %s"
+msgstr "Escolher entre os mais utilizados %s"
+
+#. Plugin Name of the plugin/theme
+msgid "Plugin Engine"
+msgstr "Plugin Engine"
+
+#. Description of the plugin/theme
+msgid "A plugin framework to be embeded in the core plugin"
+msgstr "Um quadro de plugin para ser embeded no núcleo plugin"
+
+#. Author of the plugin/theme
+msgid "Jessee Productions, LLC"
+msgstr "Jessee Productions, LLC"
+
+#. Author URI of the plugin/theme
+msgid "https://jesseeproductions.com/"
+msgstr "https://jesseeproductions.com/"

+ 484 - 0
wp-content/plugins/coupon-creator/plugin-engine/languages/plugin-engine.pot

@@ -0,0 +1,484 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+"Project-Id-Version: Plugin Engine\n"
+"POT-Creation-Date: 2018-04-20 15:57-0400\n"
+"PO-Revision-Date: 2016-08-29 11:16-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-WPHeader: pngx-common.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SearchPathExcluded-1: .git\n"
+"X-Poedit-SearchPathExcluded-2: vendor\n"
+"X-Poedit-SearchPathExcluded-3: node_modules\n"
+"X-Poedit-SearchPathExcluded-4: languages\n"
+"X-Poedit-SearchPathExcluded-5: src/resources\n"
+
+#: src/Pngx/Admin/Ajax.php:35
+msgid "A Permission Error has occurred. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:40 src/Pngx/Admin/Ajax.php:128
+#: src/Pngx/Admin/Ajax.php:133 src/Pngx/Admin/Ajax.php:229
+#: src/Pngx/Admin/Ajax.php:234
+msgid "Permission Error has occurred. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:44
+msgid "No Template ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:137 src/Pngx/Admin/Ajax.php:238
+msgid "No Field ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:141
+msgid "No Option ID. Please save, reload, and try again."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:246
+msgid "No Section Number Provided."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:250
+msgid "No Column Number Provided."
+msgstr ""
+
+#: src/Pngx/Admin/Ajax.php:263
+msgid "No Field Exists."
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:130 src/Pngx/Admin/Support.php:28
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:131
+msgid "System info copied"
+msgstr ""
+
+#: src/Pngx/Admin/Assets.php:132
+msgid "Press \"Cmd + C\" to copy"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:208
+msgid "Incorrect Permissions!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:212
+msgid "No Data!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:218
+msgid "Missing Required Fields"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:222
+msgid "Incorrect Capabilities!"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:319 src/Pngx/Admin/EDD_License.php:441
+msgid "An error occurred, please try again."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:324
+msgid "License status has not changed with the license server."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:380
+#: src/Pngx/Admin/Field/License_Status.php:35
+#: src/Pngx/Admin/Plugin_License_List.php:127
+#, php-format
+msgid " and Expires on %s"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:384
+msgid "License Saved and Valid"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:387
+#: src/Pngx/Admin/Field/License_Status.php:43
+#: src/Pngx/Admin/Plugin_License_List.php:194
+msgid "License is Active"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:418
+msgid "License Deactivated"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:420
+msgid "Click Activate License to enable automatic updates."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:426
+msgid ""
+"License Deactivated locally, it could not be deactivated with the server due "
+"to:"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:451
+#: src/Pngx/Admin/Field/License_Status.php:54
+#: src/Pngx/Admin/Plugin_License_List.php:205
+#, php-format
+msgid "License Expired on %s"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:456
+msgid "Your license key has been disabled."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:461
+msgid "Invalid license."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:466
+msgid "Your license is invalid."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:471
+msgid "Your license is not active for this URL."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:476
+#, php-format
+msgid "This appears to be for another plugin and invalid license key for %s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:481
+msgid "Your license key has reached its activation limit."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:486
+msgid ""
+"Your license cannot be activated or deactivated, please confirm in your "
+"accoint it is active."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_License.php:495
+#: src/Pngx/Admin/Field/License_Status.php:56
+#: src/Pngx/Admin/Plugin_License_List.php:207
+msgid "License is Not Active"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:201
+#, php-format
+msgid ""
+"There is a new version of %1$s available. %2$sView version %3$s details%4$s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:209
+#, php-format
+msgid ""
+"There is a new version of %1$s available. %2$sView version %3$s details%4$s "
+"or %5$supdate now%6$s."
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:399
+msgid "You do not have permission to install plugin updates"
+msgstr ""
+
+#: src/Pngx/Admin/EDD_Plugin_Updater.php:399
+msgid "Error"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Date.php:42
+msgid "Today's Date is "
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:43
+#, php-format
+msgctxt "Icon Popup Header"
+msgid "%1s - %2s"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:49
+#, php-format
+msgctxt "Icon Popup Footer"
+msgid "%1s - %2s of %3s"
+msgstr ""
+
+#: src/Pngx/Admin/Field/Icon.php:50
+msgid "Search..."
+msgstr ""
+
+#: src/Pngx/Admin/Field/License_Status.php:47
+#: src/Pngx/Admin/Plugin_License_List.php:189
+msgid "Deactivate License"
+msgstr ""
+
+#: src/Pngx/Admin/Field/License_Status.php:52
+#: src/Pngx/Admin/Plugin_License_List.php:203
+msgid "License is Invalid"
+msgstr ""
+
+#: src/Pngx/Admin/Field/License_Status.php:63
+#: src/Pngx/Admin/Plugin_License_List.php:220
+msgid "Activate License"
+msgstr ""
+
+#: src/Pngx/Admin/Help.php:122
+msgid "Video Guides"
+msgstr ""
+
+#: src/Pngx/Admin/Help.php:137
+msgid "Guides"
+msgstr ""
+
+#: src/Pngx/Admin/Meta.php:57
+#, php-format
+msgid ""
+"There maybe a javascript conflict preventing some features from working.  <a "
+"href=\"%s\" target=\"_blank\" >Please check this guide to narrow down the "
+"cause.</a>"
+msgstr ""
+
+#: src/Pngx/Admin/Meta.php:106
+msgid "Content"
+msgstr ""
+
+#: src/Pngx/Admin/Options.php:345
+msgid "Save Changes"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:34
+msgid "Please deactivate the license key to deactivate this plugin"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:100
+msgid "Enter License Key"
+msgstr ""
+
+#: src/Pngx/Admin/Plugin_License_List.php:106
+msgid "License Key"
+msgstr ""
+
+#: src/Pngx/Admin/Style/Linked.php:24
+msgid "Field Styles"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:139
+msgid "English"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:177 src/Pngx/Admin/Support.php:179
+msgid "Unknown or not set"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:568
+msgid "Unknown"
+msgstr ""
+
+#: src/Pngx/Admin/Support.php:594
+msgid "Not Found"
+msgstr ""
+
+#: src/Pngx/Cron_20.php:35
+msgid "Once Every 20 Mins"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:55
+#, php-format
+msgid "%s updated. <a href=\"%s\">View %s</a>"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:56
+msgid "Custom field updated."
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:57
+msgid "Custom field deleted."
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:58
+#, php-format
+msgid "%s updated."
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:59
+#, php-format
+msgid "%s restored to revision from %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:60
+#, php-format
+msgid "%s published. <a href=\"%s\">View %s</a>"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:61
+#, php-format
+msgid "%s saved."
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:62
+#, php-format
+msgid "%s submitted. <a target=\"_blank\" href=\"%s\">Preview %s</a>"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:63
+#, php-format
+msgid ""
+"%s scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
+"\">Preview %s</a>"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:63
+msgid "M j, Y @ G:i"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:64
+#, php-format
+msgid "%s draft updated. <a target=\"_blank\" href=\"%s\">Preview %s</a>"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:109 src/Pngx/Register_Post_Type.php:110
+#: src/Pngx/Register_Post_Type.php:111 src/Pngx/Register_Post_Type.php:112
+#: src/Pngx/Register_Post_Type.php:151 src/Pngx/Register_Taxonomy.php:30
+#: src/Pngx/Register_Taxonomy.php:31 src/Pngx/Register_Taxonomy.php:40
+#, php-format
+msgid "%s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:113
+msgid "Add New"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:114 src/Pngx/Register_Taxonomy.php:38
+#, php-format
+msgid "Add New %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:115 src/Pngx/Register_Taxonomy.php:36
+#, php-format
+msgid "Edit %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:116
+#, php-format
+msgid "New %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:117
+#, php-format
+msgid "View %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:118 src/Pngx/Register_Taxonomy.php:32
+#, php-format
+msgid "Search %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:119
+#, php-format
+msgid "No %s found"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:120
+#, php-format
+msgid "No %s found in Trash"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:121 src/Pngx/Register_Taxonomy.php:34
+#, php-format
+msgid "Parent %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:122 src/Pngx/Register_Taxonomy.php:33
+#, php-format
+msgid "All %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:123 src/Pngx/Register_Taxonomy.php:37
+#, php-format
+msgid "Update %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:124
+#, php-format
+msgid "%s Archives"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:125
+#, php-format
+msgid "Insert into %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:126
+#, php-format
+msgid "Uploaded to this %s"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:127
+#, php-format
+msgid "%s list"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:128
+#, php-format
+msgid "%s list navigation"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:129
+#, php-format
+msgid "Filter %s list"
+msgstr ""
+
+#: src/Pngx/Register_Post_Type.php:152
+#, php-format
+msgid "Creates a %s Custom Post Type"
+msgstr ""
+
+#: src/Pngx/Register_Taxonomy.php:35
+#, php-format
+msgid "Parent %s:"
+msgstr ""
+
+#: src/Pngx/Register_Taxonomy.php:39
+#, php-format
+msgid "New %s Name"
+msgstr ""
+
+#: src/Pngx/Register_Taxonomy.php:41
+#, php-format
+msgid "Popular %s"
+msgstr ""
+
+#: src/Pngx/Register_Taxonomy.php:42
+#, php-format
+msgid "Separate %s with commas"
+msgstr ""
+
+#: src/Pngx/Register_Taxonomy.php:43
+#, php-format
+msgid "Add or remove %s"
+msgstr ""
+
+#: src/Pngx/Register_Taxonomy.php:44
+#, php-format
+msgid "Choose from the most used %s"
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "Plugin Engine"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid "A plugin framework to be embeded in the core plugin"
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Jessee Productions, LLC"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "https://jesseeproductions.com/"
+msgstr ""

+ 6 - 0
wp-content/plugins/coupon-creator/plugin-engine/pngx-autoload.php

@@ -0,0 +1,6 @@
+<?php
+$plugin_engine = dirname( __FILE__ ) . '/src';
+require_once $plugin_engine . '/Pngx/Autoloader.php';
+$autoloader = Pngx__Autoloader::instance();
+$autoloader->register_prefix( 'Pngx__', $plugin_engine . '/Pngx' );
+$autoloader->register_autoloader();

+ 28 - 0
wp-content/plugins/coupon-creator/plugin-engine/pngx-common.php

@@ -0,0 +1,28 @@
+<?php
+/*
+Plugin Name: Plugin Engine
+Description: A plugin framework to be embeded in the core plugin
+Version: 2.6
+Author: Jessee Productions, LLC
+Author URI: https://jesseeproductions.com/
+Text Domain: plugin-engine
+License: GPLv2 or later
+*/
+/*
+Copyright 2009-2018 by Jessee Productions, LLC and the contributors
+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.
+*/
+// the main plugin class
+require_once dirname( __FILE__ ) . '/src/Pngx/Main.php';
+
+Pngx__Main::instance();

+ 10 - 0
wp-content/plugins/coupon-creator/plugin-engine/readme.txt

@@ -0,0 +1,10 @@
+=== Plugin Engine ===
+
+== Changelog ==
+
+= 3.0 TBD =
+* Add - Plugin Dependency Checker to prevent incompatible versions from loading
+* Tweak - Increase minimum PHP version to 5.6 and WordPress 4.9
+
+= 2.5.6 March 11th, 2019 =
+* Add - A filter on coupon content to use to modify the allowed tags

+ 50 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Abstract_Plugin_Register.php

@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Base Plugin register
+ *
+ * Register all plugins to Dependency Class
+ *
+ * @package Pngx
+ * @since 3.0
+ *
+ */
+abstract class Pngx__Abstract_Plugin_Register {
+
+	/**
+	 * The absolute path to the plugin file, the one that contains the plugin header.
+	 *
+	 * @var string
+	 */
+	protected $base_dir;
+	protected $main_class;
+	protected $version;
+	protected $dependencies = array(
+		'parent-dependencies' => array(),
+		'co-dependencies' => array(),
+		'addon-dependencies' => array(),
+	);
+
+	/**
+	 * Registers a plugin with dependencies
+	 */
+	public function register_plugin() {
+		return pngx_register_plugin(
+			$this->base_dir,
+			$this->main_class,
+			$this->version,
+			array(),
+			$this->dependencies
+		);
+	}
+
+	/**
+	 * Returns whether or not the dependencies have been met
+	 *
+	 * This is basically an aliased function - register_plugins, upon
+	 * second calling, returns whether or not a plugin should load.
+	 */
+	public function has_valid_dependencies() {
+		return $this->register_plugin();
+	}
+}

+ 112 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Add_Capabilities.php

@@ -0,0 +1,112 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+if ( class_exists( 'Pngx__Add_Capabilities' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Add_Capabilities
+ *
+ * Adds Capabilities for a CPT
+ */
+class Pngx__Add_Capabilities {
+
+	/**
+	 * constructor
+	 *
+	 * @param $post_type
+	 * @param $cap_plural
+	 */
+	public function __construct( $capability_type ) {
+
+		//Administrator
+		$caps['administrator'] = array(
+			"read_{$capability_type}",
+			"read_private_{$capability_type}s",
+			"edit_{$capability_type}",
+			"edit_{$capability_type}s",
+			"edit_private_{$capability_type}s",
+			"edit_published_{$capability_type}s",
+			"edit_others_{$capability_type}s",
+			"publish_{$capability_type}s",
+			"delete_{$capability_type}",
+			"delete_{$capability_type}s",
+			"delete_private_{$capability_type}s",
+			"delete_published_{$capability_type}s",
+			"delete_others_{$capability_type}s",
+		);
+		//Editor
+		$caps['editor'] = array(
+			"read_{$capability_type}",
+			"read_private_{$capability_type}s",
+			"edit_{$capability_type}",
+			"edit_{$capability_type}s",
+			"edit_private_{$capability_type}s",
+			"edit_published_{$capability_type}s",
+			"edit_others_{$capability_type}s",
+			"publish_{$capability_type}s",
+			"delete_{$capability_type}",
+			"delete_{$capability_type}s",
+			"delete_private_{$capability_type}s",
+			"delete_published_{$capability_type}s",
+			"delete_others_{$capability_type}s",
+		);
+		//Author
+		$caps['author'] = array(
+			"edit_{$capability_type}",
+			"read_{$capability_type}",
+			"delete_{$capability_type}",
+			"delete_{$capability_type}s",
+			"edit_{$capability_type}s",
+			"publish_{$capability_type}s",
+			"edit_published_{$capability_type}s",
+			"delete_published_{$capability_type}s",
+		);
+		//Contributor
+		$caps['contributor'] = array(
+			"edit_{$capability_type}",
+			"read_{$capability_type}",
+			"delete_{$capability_type}",
+			"delete_{$capability_type}s",
+			"edit_{$capability_type}s",
+
+		);
+		//Subscriber
+		$caps['subscriber'] = array(
+			"read_{$capability_type}",
+		);
+
+		$roles = array(
+			get_role( 'administrator' ),
+			get_role( 'editor' ),
+			get_role( 'author' ),
+			get_role( 'contributor' ),
+			get_role( 'subscriber' ),
+		);
+
+		//Add Capabilities to Role if Role Exists
+		foreach ( $roles as $role ) {
+
+			$role_check = '';
+			if ( is_object( $role ) ) {
+				$role_check = get_role( $role->name );
+			}
+
+			if ( ! empty( $role_check ) ) {
+				foreach ( $caps[ $role->name ] as $cap ) {
+					$role->add_cap( $cap );
+				}
+			}
+		}
+
+		//Set Option to Prevent this from Running Again
+		update_option( $capability_type . '_capabilities_register', date( 'l jS \of F Y h:i:s A' ) );
+
+	}
+
+}

+ 287 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Ajax.php

@@ -0,0 +1,287 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Class Pngx__Admin__Ajax
+ *
+ */
+class Pngx__Admin__Ajax {
+
+
+	public function __construct() {
+
+		$this->start();
+
+	}
+
+	protected function start() {
+
+		add_action( 'wp_ajax_pngx_templates', array( $this, 'load_templates' ) );
+
+		add_action( 'wp_ajax_pngx_variety',  array( $this, 'load_variety' ) );
+
+		add_action( 'wp_ajax_pngx_repeatable',  array( $this, 'load_repeatable' ) );
+
+	}
+
+	public function load_templates() {
+
+		// End if not the correct action
+		if ( ! isset( $_POST['action'] ) || 'pngx_templates' !== $_POST['action'] ) {
+			wp_send_json_error( __( 'A Permission Error has occurred. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		// End if not correct nonce
+		if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'pngx_admin_' . $_POST['post_id'] ) ) {
+			wp_send_json_error( __( 'Permission Error has occurred. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['option'] ) ) {
+			wp_send_json_error( __( 'No Template ID. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		Pngx__Main::instance()->doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX;
+
+		ob_start();
+
+		/**
+		 * Filter to Add All Fields for a Plugin
+		 */
+		$fields = apply_filters( 'pngx_meta_fields', array() );
+
+		foreach ( $fields as $field ) {
+
+			$field_template = isset( $field['template'] ) ? $field['template'] : array();
+
+			if ( $field['type'] && in_array( $_POST['option'], $field_template ) ) {
+
+				// get value of this field if it exists for this post
+				$meta = get_post_meta( $_POST['post_id'], $field['id'], true );
+
+				//Wrap Class for Conditionals
+				$wrapclass = isset( $field['wrapclass'] ) ? $field['wrapclass'] : '';
+
+				if ( 'wrap-start' === $field['type'] ) {
+					?>
+					<div class="pngx-meta-fields-wrap admin-field-wrap <?php echo esc_html( $wrapclass ); ?>" >
+					<?php
+					continue;
+
+				} elseif ( "wrap-end" === $field['type'] ) {
+
+					if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+						echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+					}
+
+					// Display admin linked style fields
+					Pngx__Admin__Style__Linked::display_styles( $fields, $field, $_POST['post_id'] );
+					?>
+					</div>
+					<?php
+					continue;
+				}
+				?>
+
+				<div class="pngx-meta-field-wrap field-wrap-<?php echo esc_html( $field['type'] ); ?> field-wrap-<?php echo esc_html( $field['id'] ); ?> <?php echo esc_html( $wrapclass ); ?>"
+					<?php echo isset( $field['toggle'] ) ? Pngx__Admin__Fields::toggle( $field['toggle'], esc_attr( $field['id'] ) ) : null; ?> >
+
+					<div class="pngx-meta-field field-<?php echo esc_attr( $field['type'] ); ?> field-<?php echo esc_attr( $field['id'] ); ?>">
+
+						<?php if ( isset( $field['label'] ) && ! empty( $field['label'] ) ) { ?>
+							<label for="<?php echo esc_attr( $field['id'] ); ?>">
+								<?php echo esc_attr( $field['label'] ); ?>
+							</label>
+						<?php } ?>
+
+						<?php
+						Pngx__Admin__Fields::display_field( $field, false, false, $meta, null );
+
+						// Display admin linked style fields
+						Pngx__Admin__Style__Linked::display_styles( $fields, $field, $_POST['post_id'] );
+
+						?>
+
+					</div>
+					<!-- end .pngx-meta-field.field-<?php echo esc_attr( $field['type'] ); ?>.field-<?php echo esc_attr( $field['id'] ); ?> -->
+
+				</div> <!-- end .pngx-meta-field-wrap.field-wrap-<?php echo esc_attr( $field['type'] ); ?>.field-wrap-<?php echo esc_attr( $field['id'] ); ?>	-->
+
+				<?php
+			}
+		} // end foreach fields
+
+		$template_fields = ob_get_contents();
+
+		ob_end_clean();
+
+		wp_send_json_success( json_encode( $template_fields ) );
+	}
+
+	public function load_variety() {
+
+		//End if not the correct action
+		if ( ! isset( $_POST['action'] ) || 'pngx_variety' != $_POST['action'] ) {
+			wp_send_json_error( __( 'Permission Error has occurred. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		//End if not correct nonce
+		if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'pngx_admin_' . $_POST['post_id'] ) ) {
+			wp_send_json_error( __( 'Permission Error has occurred. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['field'] ) ) {
+			wp_send_json_error( __( 'No Field ID. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['option'] ) ) {
+			wp_send_json_error( __( 'No Option ID. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		Pngx__Main::instance()->doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX;
+
+		ob_start();
+
+		/**
+		 * Filter to Add All Fields for a Plugin
+		 */
+		$fields = apply_filters( 'pngx_meta_fields', array() );
+
+		if ( isset( $fields[ $_POST['field'] ]['variety_choices'][ $_POST['option'] ] ) ) {
+			foreach ( $fields[ $_POST['field'] ]['variety_choices'][ $_POST['option'] ] as $label ) {
+
+				if ( is_array( $label ) && isset( $label['open'] ) ) {
+					?>
+					<div class="<?php echo esc_html( $label['open'] ); ?>">
+					<?php
+					continue;
+				}
+
+				if ( is_array( $label ) && ! empty( $label['label'] ) ) {
+					?>
+					<label for="<?php echo esc_attr( $label['label'] ); ?>">
+						<?php echo esc_attr( $label['label'] ); ?>
+					</label>
+					<?php
+					continue;
+				}
+
+				if ( is_array( $label ) && isset( $label['description'] ) ) {
+					?>
+					<span class="description"><?php echo esc_html( $label['description'] ); ?></span>
+					<?php
+					continue;
+				}
+
+				if ( is_array( $label ) ) {
+					continue;
+				}
+
+				if ( 'close' === $label ) {
+					?>
+					</div>
+					<?php
+					continue;
+				}
+
+				if ( ! isset( $fields[ $label ] ) ) {
+					continue;
+				}
+
+				$meta = '';
+				if ( isset( $_POST['post_id'] ) ) {
+					$meta = get_post_meta( $_POST['post_id'], $label, true );
+				}
+
+				?>
+				<div class="pngx-variety-field <?php echo isset( $fields[ $label ]['variety_class'] ) ? esc_attr( $fields[ $label ]['variety_class'] ) : ''; ?>">
+					<?php
+
+					if ( isset( $fields[ $label ]['label'] ) && ! empty( $fields[ $label ]['label'] ) ) { ?>
+						<label for="<?php echo esc_attr( $fields[ $label ]['id'] ); ?>">
+							<?php echo esc_attr( $fields[ $label ]['label'] ); ?>
+						</label>
+					<?php }
+
+					Pngx__Admin__Fields::display_field( $fields[ $label ], false, false, $meta, null );
+
+					?>
+				</div>
+				<?php
+
+			}
+		}
+
+		$field = ob_get_contents();
+
+		ob_end_clean();
+
+		wp_send_json_success( json_encode( $field ) );
+	}
+
+	public function load_repeatable() {
+
+		//End if not the correct action
+		if ( ! isset( $_POST['action'] ) || 'pngx_repeatable' != $_POST['action'] ) {
+			wp_send_json_error( __( 'Permission Error has occurred. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		//End if not correct nonce
+		if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'pngx_admin_rep_' . $_POST['post_id'] ) ) {
+			wp_send_json_error( __( 'Permission Error has occurred. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['field'] ) ) {
+			wp_send_json_error( __( 'No Field ID. Please save, reload, and try again.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['repeat_type'] ) ) {
+			//wp_send_json_error( __( 'No Repeat Type Provided Provided.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['section'] ) ) {
+			wp_send_json_error( __( 'No Section Number Provided.', 'plugin-engine' ) );
+		}
+
+		if ( ! isset( $_POST['column'] ) ) {
+			wp_send_json_error( __( 'No Column Number Provided.', 'plugin-engine' ) );
+		}
+
+		Pngx__Main::instance()->doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX;
+
+		ob_start();
+
+		/**
+		 * Filter to Add All Fields for a Plugin
+		 */
+		$fields = apply_filters( 'pngx_meta_fields', array() );
+
+		if ( ! isset( $fields[ $_POST['field'] ] ) ) {
+			wp_send_json_error( __( 'No Field Exists.', 'plugin-engine' ) );
+		}
+
+		$field = $fields[ $_POST['field'] ];
+
+		//foreach ( $fields as $field ) {
+
+		if ( ! isset( $repeat_obj ) ) {
+			$repeat_obj = new Pngx__Repeater__Main( $_POST['name_id'], false, absint( $_POST['section'] ), absint( $_POST['column'] ) );
+		}
+
+		Pngx__Admin__Field__Repeatable::display_repeat_fields( $field['repeatable_fields'], $field, null, $repeat_obj, null );
+
+		//}
+		//} // end foreach fields
+
+		$template_fields = ob_get_contents();
+
+		ob_end_clean();
+
+		wp_send_json_success( json_encode( $template_fields ) );
+
+	}
+
+}

+ 191 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Assets.php

@@ -0,0 +1,191 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Register Admin Assets for Plugin Engine
+ *
+ *
+ */
+class Pngx__Admin__Assets {
+
+	/*
+	* Register Assets
+	*/
+	public function register_assets() {
+
+		// @formatter:off
+		wp_register_style(
+			'pngx-bootstrap-iconpicker',
+			Pngx__Main::instance()->vendor_url . 'bootstrap-iconpicker/bootstrap-iconpicker/css/bootstrap-iconpicker.min.css',
+			false,
+			filemtime( Pngx__Main::instance()->vendor_path . 'bootstrap-iconpicker/bootstrap-iconpicker/css/bootstrap-iconpicker.min.css' )
+		);
+		wp_register_style(
+			'pngx-font-awesome',
+			Pngx__Main::instance()->vendor_url . 'bootstrap-iconpicker/icon-fonts/font-awesome-4.3.0/css/font-awesome.css',
+			false,
+			filemtime( Pngx__Main::instance()->vendor_path . 'bootstrap-iconpicker/icon-fonts/font-awesome-4.3.0/css/font-awesome.css' )
+		);
+		wp_register_style(
+			'pngx-colorbox',
+			Pngx__Main::instance()->vendor_url . 'colorbox/colorbox.css',
+			false,
+			filemtime( Pngx__Main::instance()->vendor_path . 'colorbox/colorbox.css' )
+		);
+		wp_register_style(
+			'pngx-admin',
+			Pngx__Main::instance()->resource_url . 'css/pngx-admin.css',
+			array( 'pngx-colorbox', 'pngx-bootstrap-iconpicker','pngx-font-awesome', 'pngx-bootstrap-iconpicker' ),
+			filemtime( Pngx__Main::instance()->resource_path . 'css/pngx-admin.css' )
+		);
+
+		wp_register_script(
+			'pngx-clipboard',
+			Pngx__Main::instance()->vendor_url . 'clipboard/clipboard.js',
+			array(),
+			filemtime( Pngx__Main::instance()->vendor_path . 'clipboard/clipboard.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-bootstrap',
+			Pngx__Main::instance()->vendor_url . 'bootstrap-iconpicker/bootstrap-3.2.0/js/bootstrap.min.js',
+			array(),
+			filemtime( Pngx__Main::instance()->vendor_path . 'bootstrap-iconpicker/bootstrap-3.2.0/js/bootstrap.min.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-bootstrap-iconpicker-fontawesome',
+			Pngx__Main::instance()->vendor_url . 'bootstrap-iconpicker/bootstrap-iconpicker/js/iconset/iconset-fontawesome-4.3.0.min.js',
+			array(),
+			filemtime( Pngx__Main::instance()->vendor_path . 'bootstrap-iconpicker/bootstrap-iconpicker/js/iconset/iconset-fontawesome-4.3.0.min.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-bootstrap-iconpicker',
+			Pngx__Main::instance()->vendor_url . 'bootstrap-iconpicker/bootstrap-iconpicker/js/bootstrap-iconpicker.min.js',
+			array(),
+			filemtime( Pngx__Main::instance()->vendor_path . 'bootstrap-iconpicker/bootstrap-iconpicker/js/bootstrap-iconpicker.min.js' ),
+			true
+		);
+
+		wp_register_script(
+			'pngx-color-picker-alpha',
+			Pngx__Main::instance()->vendor_url . 'wp-color-picker-alpha/wp-color-picker-alpha.min.js',
+			array(),
+			filemtime( Pngx__Main::instance()->vendor_path . 'wp-color-picker-alpha/wp-color-picker-alpha.min.js' ),
+			true
+		);
+
+		wp_register_script(
+			'pngx-bumpdown',
+			Pngx__Main::instance()->resource_url . 'js/bumpdown.js',
+			array(),
+			filemtime( Pngx__Main::instance()->resource_path . 'js/bumpdown.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-dependency',
+			Pngx__Main::instance()->resource_url . 'js/dependency.js',
+			array(),
+			filemtime( Pngx__Main::instance()->resource_path . 'js/dependency.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-wp-editor',
+			Pngx__Main::instance()->resource_url . 'js/wp_editor.js',
+			array(),
+			filemtime( Pngx__Main::instance()->resource_path . 'js/wp_editor.js' ),
+			true
+		);
+
+		wp_register_script(
+			'pngx-load-template-ajax',
+			Pngx__Main::instance()->resource_url . 'js/templates.js',
+			array(),
+			filemtime( Pngx__Main::instance()->resource_path . 'js/templates.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-colorbox',
+			Pngx__Main::instance()->vendor_url . 'colorbox/jquery.colorbox-min.js',
+			array( 'jquery' ),
+			filemtime( Pngx__Main::instance()->vendor_path . 'colorbox/jquery.colorbox-min.js' ),
+			true
+		);
+		wp_register_script(
+			'pngx-admin',
+			Pngx__Main::instance()->resource_url . 'js/pngx-admin.js',
+			array( 'pngx-bumpdown', 'pngx-dependency', 'pngx-clipboard', 'pngx-colorbox', 'pngx-wp-editor', 'pngx-load-template-ajax', 'pngx-color-picker-alpha', 'pngx-bootstrap', 'pngx-bootstrap-iconpicker-fontawesome', 'pngx-bootstrap-iconpicker', 'jquery-ui-tabs' ),
+			filemtime( Pngx__Main::instance()->resource_path . 'js/pngx-admin.js' ),
+			true
+		);
+
+		wp_localize_script( 'pngx-admin', 'pngx_admin', array(
+			'ajaxurl'    => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ),
+			'sysinfo_optin_nonce'   => wp_create_nonce( 'sysinfo_optin_nonce' ),
+			'clipboard_btn_text'    => __( 'Copy to clipboard', 'tribe-common' ),
+			'clipboard_copied_text' => __( 'System info copied', 'tribe-common' ),
+			'clipboard_fail_text'   => __( 'Press "Cmd + C" to copy', 'tribe-common' ),
+		) );
+		// @formatter:on
+
+		/**
+		 * Hook to Register New Scripts or Styles for the Admin
+		 */
+		do_action( 'pngx_admin_scripts_styles' );
+
+	}
+
+	/*
+		* Register Assets
+		*/
+		public function register_plugin_list_assets() {
+
+			// @formatter:off
+			wp_register_script(
+				'pngx-license',
+				Pngx__Main::instance()->resource_url . 'js/pngx-license.js',
+				array( 'jquery-ui-tabs' ),
+				filemtime( Pngx__Main::instance()->resource_path . 'js/pngx-license.js' ),
+				true
+			);
+
+			wp_localize_script( 'pngx-license', 'pngx_license', array(
+				'ajaxurl'   => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ),
+				'nonce'     => wp_create_nonce( 'pngx_license_updates' ),
+			) );
+			// @formatter:on
+
+			/**
+			 * Hook to Register New Scripts or Styles for the Admin
+			 */
+			do_action( 'pngx_admin_scripts_styles' );
+
+		}
+
+	/*
+	* Enqueue Plugin Engine Assets
+	*/
+	public function load_assets() {
+
+	}
+
+	/*
+	* Detect if External Asset is Available
+	*/
+	public function detect_external_asset( $file ) {
+
+		$file_headers = @get_headers( $file );
+		if ( false === $file_headers || 'HTTP/1.0 404 Not Found' == $file_headers[0] ) {
+			return false;
+		}
+
+		return true;
+
+	}
+
+}

+ 17 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Columns.php

@@ -0,0 +1,17 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Columns' ) ) {
+	return;
+}
+
+/**
+ * Class Pngx__Admin__Columns
+ * CPT Customized Admin Columns
+ */
+class Pngx__Admin__Columns {
+
+
+}

+ 127 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Cron.php

@@ -0,0 +1,127 @@
+<?php
+//If Direct Access Kill the Script
+if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ ) {
+	die( 'Access denied.' );
+}
+
+
+/*
+* Abstract Cron Class for Processing Individual Posts, Pages, or Custom Post Types
+*
+*/
+
+
+abstract class Pngx__Admin__Cron {
+
+	/**
+	 * @var string
+	 */
+	protected $scheduled_task = 'pngx_cron_job';
+
+	/**
+	 * Number of items to be processed in a single batch.
+	 *
+	 * @var int
+	 */
+	protected $batch_size = 100;
+
+	/**
+	 * Number of items in the current batch processed so far.
+	 *
+	 * @var int
+	 */
+	protected $processed = 0;
+
+	/**
+	 * @var int
+	 */
+	protected $current_id = 0;
+
+
+	/**
+	 * Construct
+	 */
+	abstract public function __construct();
+
+	/*public function __construct() {
+
+		add_action( 'cctor_activate', array( $this, 'register_scheduled_task' ) );
+
+		add_action( $this->scheduled_task, array( $this, 'process_queue' ), 20, 0 );
+
+		add_action( 'cctor_deactivate', array( $this, 'clear_scheduled_task' ) );
+	}*/
+
+	/**
+	 * Runs upon plugin update, registering the task to batch process recurring expiration
+	 */
+	public function register_scheduled_task() {
+
+		if ( ! wp_next_scheduled( $this->scheduled_task ) ) {
+			/**
+			 * Filter the interval at which to process recurring expiration queues.
+			 *
+			 * By default ever 30mins is specified, however other intervals of
+			 * "hourly", "twicedaily" and "daily" could be substituted.
+			 *
+			 * @see wp_schedule_event() or 'cron_schedules'
+			 */
+			$interval = apply_filters( $this->scheduled_task . '_interval', 'every_30mins' );
+
+			wp_schedule_event( time(), $interval, $this->scheduled_task );
+		}
+	}
+
+	/**
+	 * Expected to fire upon plugin deactivation.
+	 */
+	public function clear_scheduled_task() {
+		wp_clear_scheduled_hook( $this->scheduled_task );
+	}
+	/**
+	 * Processes the next item in que
+	 *
+	 * @param int $batch_size
+	 */
+	public function process_queue( $batch_size = null ) {
+		if ( null === $batch_size ) {
+			/**
+			 * Filter the amount of post objects to process
+			 *
+			 * @param int $default_batch_size
+			 */
+			$this->batch_size = (int) apply_filters( $this->scheduled_task . '_batch_size', 100 );
+		} else {
+			$this->batch_size = (int) $batch_size;
+		}
+
+		while ( $this->next_waiting_item() ) {
+			if ( ! $this->do_processing() ) {
+				break;
+			}
+		}
+	}
+
+	/**
+	 * Obtains the post ID of the next item
+	 *
+	 */
+	abstract protected function next_waiting_item();
+
+
+	/**
+	 * Process the Current Item
+	 *
+	 */
+	abstract protected function do_processing();
+
+
+	/**
+	 * Determines if the batch job is complete.
+	 *
+	 * @return bool
+	 */
+	protected function batch_complete() {
+		return ( $this->processed >= $this->batch_size );
+	}
+}

+ 579 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/EDD_License.php

@@ -0,0 +1,579 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * License Methods
+ *
+ */
+class Pngx__Admin__EDD_License {
+
+	protected $update_url  = '';
+	protected $options_id  = Pngx__Main::OPTIONS_ID;
+	protected $license     = '';
+	protected $plugin_name = '';
+
+	public function __construct( $shop_url, $options_id, $license, $plugin_name = null ) {
+
+		$this->update_url = trailingslashit( $shop_url );
+
+		$this->options_id = $options_id;
+
+		$this->license = $license;
+
+		$this->plugin_name = $plugin_name;
+
+		//Ajax Save License
+		add_action( 'wp_ajax_pngx_license_update', array( $this, 'license_update' ) );
+
+		add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
+
+	}
+
+	/**
+	 * Get the update API endpoint url
+	 *
+	 * @return string
+	 */
+	public function get_update_url() {
+		return apply_filters( 'pngx_update_url', $this->update_url );
+	}
+
+	/*
+	* Register and Enqueue Style and Scripts on Options Screens
+	*
+	*/
+	public function activate_license() {
+
+		// listen for our activate button to be clicked
+		if ( isset( $_POST[ 'pngx_license_activate_' . $this->license ] ) ) {
+
+			// run a quick security check
+			if ( ! check_admin_referer( 'pngx_license_nonce_' . $this->license, 'pngx_license_nonce_' . $this->license ) ) {
+				return false; // get out if we didn't click the Activate button
+			}
+
+			if ( $_POST[ 'pngx_license_key_' . $this->license ] != $this->license ) {
+				return false; //not this plugins license
+			}
+
+			//Set WordPress Option Name
+			$license_option_name = esc_attr( $_POST[ 'pngx_license_key_' . $this->license ] );
+
+			// retrieve the license from the database
+			$license_info = get_option( $license_option_name );
+
+			//Check if the License has changed and deactivate
+			if ( $_POST[ $this->options_id ][ $license_option_name ] != $license_info['key'] ) {
+
+				$license_info['key'] = esc_attr( trim( $_POST[ $this->options_id ][ $license_option_name ] ) );
+
+				delete_option( $license_option_name );
+
+				update_option( $license_option_name, $license_info );
+
+			}
+
+			// data to send in our API request
+			$api_params = array(
+				'edd_action' => 'activate_license',
+				'license'    => esc_attr( trim( $license_info['key'] ) ),
+				'item_name'  => urlencode( esc_attr( $_POST[ 'pngx_license_name_' . $this->license ] ) ), // the name of our product in EDD
+				'url'        => home_url(),
+			);
+
+			// Call the custom API.
+			$response = wp_remote_get( esc_url_raw( add_query_arg( $api_params, $this->get_update_url() ) ), array(
+				'timeout'   => 15,
+				'sslverify' => false,
+			) );
+
+			// make sure the response came back okay
+			if ( is_wp_error( $response ) ) {
+				return false;
+			}
+			// decode the license data
+			$license_data = json_decode( wp_remote_retrieve_body( $response ) );
+
+			//Remove Current Expiration
+			$license_info['status'] = 'nostatus';
+
+			//Get Status of Key
+			$license_info['status'] = esc_attr( $license_data->license );
+
+			//Remove Current Expiration
+			unset( $license_info['expires'] );
+
+			//Set Expiration Date  for This License
+			$license_info['expires'] = isset( $license_data->expires ) ? esc_attr( $license_data->expires ) : null;
+
+			//if Expired Add that to the option.
+			if ( isset( $license_data->error ) && 'expired' == $license_data->error ) {
+				$license_info['expired'] = esc_attr( $license_data->error );
+			}
+
+			//if Expired Add that to the option.
+			if ( isset( $license_data->error ) && 'missing' == $license_data->error ) {
+				unset( $license_info['expires'] );
+				unset( $license_info['expired'] );
+				$license_info['status'] = esc_attr( $license_data->error );
+			}
+
+			//Update License Object
+			update_option( $license_option_name, $license_info );
+
+		}
+
+		return true;
+	}
+
+	/*
+	* Deactivate a license key.
+	*
+	*/
+	public function deactivate_license() {
+
+		// listen for our activate button to be clicked
+		if ( isset( $_POST[ 'pngx_license_deactivate_' . $this->license ] ) ) {
+
+			// run a quick security check
+			if ( ! check_admin_referer( 'pngx_license_nonce_' . $this->license, 'pngx_license_nonce_' . $this->license ) ) {
+				return false; // get out if we didn't click the Activate button
+			}
+
+			if ( $_POST[ 'pngx_license_key_' . $this->license ] != $this->license ) {
+				return false; //not this plugins license
+			}
+
+			$license_option_name = esc_attr( $_POST[ 'pngx_license_key_' . $this->license ] );
+
+			// retrieve the license from the database
+			$license_info = get_option( $license_option_name );
+
+			// data to send in our API request
+			$api_params = array(
+				'edd_action' => 'deactivate_license',
+				'license'    => esc_attr( trim( $license_info['key'] ) ),
+				'item_name'  => urlencode( esc_attr( $_POST[ 'pngx_license_name_' . $this->license ] ) ),
+				// the name of our product in EDD
+				'url'        => home_url(),
+			);
+
+			// Call the custom API.
+			$response = wp_remote_get( esc_url_raw( add_query_arg( $api_params, self::get_update_url() ) ), array(
+				'timeout'   => 15,
+				'sslverify' => false,
+			) );
+
+			// make sure the response came back okay
+			if ( is_wp_error( $response ) ) {
+				unset( $license_info['status'] );
+				unset( $license_info['expires'] );
+
+				//Update License Object
+				update_option( $license_option_name, $license_info );
+
+				return false;
+			}
+
+			// decode the license data
+			$license_data = json_decode( wp_remote_retrieve_body( $response ) );
+
+			// $license_data->license will be either "deactivated" or "failed"
+			if ( 'deactivated' == $license_data->license || 'failed' == $license_data->license ) {
+
+				unset( $license_info['status'] );
+				unset( $license_info['expires'] );
+
+				//Update License Object
+				update_option( $license_option_name, $license_info );
+			}
+
+		}
+
+		return true;
+	}
+
+
+	/**
+	 * Update License by Ajax Call
+	 */
+	public function license_update() {
+
+		// check nonce
+		if ( ! wp_verify_nonce( $_POST['pngx_license_nonce'], 'pngx_license_updates' ) ) {
+			wp_send_json_error( array( 'message' => __( 'Incorrect Permissions!', 'plugin-engine' ) ) );
+		}
+
+		if ( ! isset( $_POST['license_inputs'] ) ) {
+			wp_send_json_error( array( 'message' => __( 'No Data!', 'plugin-engine' ) ) );
+		}
+
+		$license_fields = wp_parse_args( $_POST['license_inputs'] );
+
+		if ( ! $license_fields['pngx_license_key'] || ! $license_fields['pngx_license_name'] || ! $license_fields['pngx_license_action'] || ! $license_fields['pngx_shop_url'] ) {
+			wp_send_json_error( array( 'message' => __( 'Missing Required Fields', 'plugin-engine' ) ) );
+		}
+
+		if ( ! current_user_can( 'update_plugins' ) ) {
+			wp_send_json_error( array( 'message' => __( 'Incorrect Capabilities!', 'plugin-engine' ) ) );
+		}
+
+		// update local license key
+		$license_info = $this->update_local_license( $license_fields );
+
+		// Update status locally on deactivate
+		// Erroring on caution to do it here if for some reason there is a
+		// Server error at least it will enable plugin deactivation
+		if ( 'deactivate_license' == $license_fields['pngx_license_action'] ) {
+			$this->deactivate_local( $license_fields, $license_info );
+		}
+
+		// decode the license data
+		$license_data = $this->get_license_status( $license_fields, $license_info );
+
+		//If not success get the correct error message
+		if ( false === $license_data->success ) {
+
+			$this->invalid( $license_data, $license_fields );
+
+		}
+
+		// Deactived License
+		if ( 'deactivated' == $license_data->license || 'failed' == $license_data->license ) {
+
+			$this->deactivate();
+
+		}
+
+		//Activated License
+		if ( 'valid' === $license_data->license ) {
+
+			$this->activate( $license_fields, $license_data, $license_info );
+		}
+	}
+
+	/*
+	* Update Local License
+	*
+	*/
+	public function update_local_license( $license_fields ) {
+
+		//Send Input to Sanitize Class, will return sanitized input or no input if no sanitization method
+		$sanitize = new Pngx__Sanitize( 'license', $license_fields[ $license_fields['pngx_license_key'] ], array() );
+
+		$license_info = array();
+
+		//License Key
+		$license_info['key'] = $sanitize->result;
+
+		//Get Existing Option
+		$existing_license = get_option( $license_fields['pngx_license_key'] );
+
+		if ( ! $existing_license['key'] ) {
+
+			update_option( $license_fields['pngx_license_key'], $license_info );
+
+		} elseif ( $existing_license['key'] && $existing_license['key'] != $license_info['key'] ) {
+
+			delete_option( $license_fields['pngx_license_key'] );
+
+			update_option( $license_fields['pngx_license_key'], $license_info );
+
+		}
+
+		return $license_info;
+	}
+
+	/*
+	* License Status
+	*
+	*/
+	public function get_license_status( $license_fields, $license_info ) {
+
+		// data to send in our API request
+		$api_params = array(
+			'edd_action' => esc_html( $license_fields['pngx_license_action'] ),
+			'license'    => esc_attr( trim( $license_info['key'] ) ),
+			'item_name'  => urlencode( esc_attr( $license_fields['pngx_license_name'] ) ), // the name of our product in EDD
+			'url'        => home_url(),
+		);
+
+		// Call the custom API.
+		$response = wp_remote_get( esc_url_raw( add_query_arg( $api_params, $license_fields['pngx_shop_url'] ) ), array(
+			'timeout'   => 15,
+			'sslverify' => false,
+		) );
+
+		$body_response = json_decode( wp_remote_retrieve_body( $response ) );
+
+		// make sure the response came back okay
+		if ( is_wp_error( $response ) || ! $body_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.' );
+			}
+
+			$data = array(
+				'message'        => $message,
+				'license_status' => esc_html( __( 'License status has not changed with the license server.', 'plugin-engine' ) ),
+				'action'         => $license_fields['pngx_license_action'],
+			);
+
+			// On Error and Deactivating make sure to deactivate to prevent lock out
+			if ( 'deactivate_license' == $license_fields['pngx_license_action'] ) {
+				$this->deactivate( $data );
+			}
+
+			wp_send_json_error( $data );
+
+		}
+
+		// decode the license data
+		return json_decode( wp_remote_retrieve_body( $response ) );
+
+	}
+
+	/*
+	* Activate
+	*
+	*/
+	public function activate( $license_fields, $license_data, $license_info ) {
+
+		$expiration_msg = $expiration_date = '';
+
+		//Remove Current Expiration
+		$license_info['status'] = 'nostatus';
+
+		//Get Status of Key
+		$license_info['status'] = esc_html( $license_data->license );
+
+		//Remove Current Expiration
+		unset( $license_info['expires'] );
+
+		//Set Expiration Date  for This License
+		$license_info['expires'] = esc_html( $license_data->expires );
+
+		//if Expired Add that to the option.
+		if ( isset( $license_data->error ) && 'expired' === $license_data->error ) {
+			$license_info['expired'] = esc_html( $license_data->error );
+		}
+
+		//if Expired Add that to the option.
+		if ( isset( $license_data->error ) && 'missing' === $license_data->error ) {
+			unset( $license_info['expires'] );
+			unset( $license_info['expired'] );
+			$license_info['status'] = esc_html( $license_data->error );
+		}
+
+		//Update License Object
+		update_option( $license_fields['pngx_license_key'], $license_info );
+
+		if ( isset( $license_info['expires'] ) ) { // Only Display Expiration if Date
+			$expiration_date = strtotime( $license_info['expires'] );
+			$expiration_date = date( get_option( 'date_format' ), $expiration_date );
+			$expiration_msg  = sprintf( __( ' and Expires on %s', 'plugin-engine' ), esc_attr( $expiration_date ) );
+		}
+
+		$data = array(
+			'message'        => esc_html__( 'License Saved and Valid', 'plugin-engine' ),
+			'status'         => $license_info['status'],
+			'expires'        => $expiration_date,
+			'license_status' => esc_html( __( 'License is Active', 'plugin-engine' ) . $expiration_msg ),
+			'button'         => 'Deactivate License',
+			'action'         => 'deactivate_license',
+		);
+
+		wp_send_json_success( $data );
+
+	}
+
+	/*
+	* Deactivate Local
+	*
+	*/
+	public function deactivate_local( $license_fields, $license_info ) {
+
+		unset( $license_info['status'] );
+		unset( $license_info['expires'] );
+
+		//Update License Object
+		update_option( $license_fields['pngx_license_key'], $license_info );
+
+		return;
+	}
+
+	/*
+	* Deactivate
+	*
+	*/
+	public function deactivate( $error = array() ) {
+
+		$data = array(
+			'message'        => esc_html__( 'License Deactivated', 'plugin-engine' ),
+			'status'         => '',
+			'license_status' => esc_html( __( 'Click Activate License to enable automatic updates.', 'plugin-engine' ) ),
+			'button'         => 'Activate License',
+			'action'         => 'activate_license',
+		);
+
+		if ( isset( $error['message'] ) && isset( $error['license_status'] ) ) {
+			$data['message']        = esc_html__( 'License Deactivated locally, it could not be deactivated with the server due to:', 'plugin-engine' ) . ' ' . $error['message'];
+			$data['license_status'] = $error['license_status'];
+			$data['remote_error']   = true;
+		}
+
+		wp_send_json_success( $data );
+
+	}
+
+	/*
+	* Invalid
+	*
+	*/
+	public function invalid( $license_data, $license_fields ) {
+
+		$message = __( 'An error occurred, please try again.', 'plugin-engine' );
+
+		if ( isset( $license_data->error ) ) {
+
+			switch ( $license_data->error ) {
+
+				case 'expired' :
+
+					$expiration_date = strtotime( $license_data->expires );
+					$expiration_date = date( get_option( 'date_format' ), $expiration_date );
+					$message         = sprintf( __( 'License Expired on %s', 'plugin-engine' ), esc_attr( $expiration_date ) );
+					break;
+
+				case 'revoked' :
+
+					$message = __( 'Your license key has been disabled.', 'plugin-engine' );
+					break;
+
+				case 'missing' :
+
+					$message = __( 'Invalid license.', 'plugin-engine' );
+					break;
+
+				case 'invalid' :
+
+					$message = __( 'Your license is invalid.', 'plugin-engine' );
+					break;
+
+				case 'site_inactive' :
+
+					$message = __( 'Your license is not active for this URL.', 'plugin-engine' );
+					break;
+
+				case 'item_name_mismatch' :
+
+					$message = sprintf( __( 'This appears to be for another plugin and invalid license key for %s.', 'plugin-engine' ), $license_fields['pngx_license_name'] );
+					break;
+
+				case 'no_activations_left':
+
+					$message = __( 'Your license key has reached its activation limit.', 'plugin-engine' );
+					break;
+
+				case 'license_not_activable':
+
+					$message = __( 'Your license cannot be activated or deactivated, please confirm in your accoint it is active.', 'plugin-engine' );
+					break;
+			}
+
+		}
+
+		$status = 'expired' === $license_data->error ? $license_data->error : '';
+
+		$data = array(
+			'message'        => esc_html__( 'License is Not Active', 'plugin-engine' ),
+			'status'         => $status,
+			'license_status' => esc_html( $message ),
+			'button'         => 'Activate License',
+			'action'         => 'activate_license',
+		);
+
+		wp_send_json_error( $data );
+
+	}
+
+	/**
+	 * Check Plugin Engine Plugin License and Update Status and Expiration Date
+	 *
+	 * @param $_transient_data
+	 *
+	 * @return mixed
+	 */
+	public function check_update( $_transient_data ) {
+
+		if ( $this->plugin_name && false === ( $license = get_transient( 'pngx_plugin_check_' . $this->license ) ) ) {
+
+			$license_info = get_option( $this->license );
+
+			if ( empty( $license_info ) || empty( $license_info['key'] ) || empty( $license_info['status'] ) || empty( $license_info['expires'] ) ) {
+				return $_transient_data;
+			}
+
+
+			$api_params = array(
+				'edd_action' => 'check_license',
+				'license'    => esc_attr( trim( $license_info['key'] ) ),
+				'item_name'  => urlencode( esc_attr( $this->plugin_name ) ), // the name of our product in EDD
+				'url'        => home_url(),
+			);
+
+			// Call the custom API.
+			$response = wp_remote_get( esc_url_raw( add_query_arg( $api_params, $this->update_url ) ), array(
+				'timeout'   => 15,
+				'sslverify' => false,
+			) );
+
+			// make sure the response came back okay
+			if ( is_wp_error( $response ) ) {
+				return $_transient_data;
+			}
+
+			$license_data = json_decode( wp_remote_retrieve_body( $response ) );
+
+			if ( empty( $license_data->license ) || empty( $license_data->expires ) ) {
+				return $_transient_data;
+			}
+			//Get Status of Key
+			$license_info['status'] = esc_html( $license_data->license );
+
+			//Remove Current Expiration
+			unset( $license_info['expires'] );
+
+			//Set Expiration Date  for This License
+			$license_info['expires'] = esc_attr( $license_data->expires );
+
+			//if Expired Add that to the option.
+			if ( 'expired' == $license_data->license ) {
+				$license_info['expired'] = esc_attr( $license_data->license );
+			}
+
+			//if Expired Add that to the option.
+			if ( 'missing' == $license_data->license ) {
+				unset( $license_info['expires'] );
+				unset( $license_info['expired'] );
+				$license_info['status'] = esc_attr( $license_data->license );
+			}
+
+			//Update License Object
+			update_option( $this->license, $license_info );
+
+			set_transient( 'pngx_plugin_check_' . $this->license, $license_data, 24 * HOUR_IN_SECONDS );
+
+		}
+
+
+		return $_transient_data;
+	}
+
+}

+ 500 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/EDD_Plugin_Updater.php

@@ -0,0 +1,500 @@
+<?php
+
+// Exit if accessed directly
+if ( ! defined( 'ABSPATH' ) ) exit;
+
+/**
+ * Allows plugins to use their own update API.
+ *
+ * @author Easy Digital Downloads
+ * @version 1.6.16
+ */
+class Pngx__Admin__EDD_Plugin_Updater {
+
+	private $api_url     = '';
+	private $api_data    = array();
+	private $name        = '';
+	private $slug        = '';
+	private $version     = '';
+	private $wp_override = false;
+	private $cache_key   = '';
+
+	/**
+	 * Class constructor.
+	 *
+	 * @uses plugin_basename()
+	 * @uses hook()
+	 *
+	 * @param string  $_api_url     The URL pointing to the custom API endpoint.
+	 * @param string  $_plugin_file Path to the plugin file.
+	 * @param array   $_api_data    Optional data to send with API calls.
+	 */
+	public function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
+
+		global $edd_plugin_data;
+
+		$this->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;
+
+			}
+
+			$_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 ) );
+
+				$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' );
+			# <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">
+			echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">';
+			echo '<td colspan="3" class="plugin-update colspanchange">';
+			echo '<div class="update-message notice inline notice-warning notice-alt">';
+
+			$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 ),
+					'<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
+					esc_html( $version_info->new_version ),
+					'</a>'
+				);
+			} 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 ),
+					'<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
+					esc_html( $version_info->new_version ),
+					'</a>',
+					'<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">',
+					'</a>'
+				);
+			}
+
+			do_action( "in_plugin_update_message-{$file}", $plugin, $version_info );
+
+			echo '</div></td></tr>';
+		}
+	}
+
+	/**
+	 * 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
+			)
+		);
+
+		$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 ) ) {
+			$new_sections = array();
+			foreach ( $_data->sections as $key => $value ) {
+				$new_sections[ $key ] = $value;
+			}
+
+			$_data->sections = $new_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 ) ) {
+			$new_banners = array();
+			foreach ( $_data->banners as $key => $value ) {
+				$new_banners[ $key ] = $value;
+			}
+
+			$_data->banners = $new_banners;
+		}
+
+		return $_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;
+
+		$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'] ),
+		);
+
+		$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 ) ) {
+			$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( ! 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 '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>';
+		}
+
+		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
+		}
+
+		return json_decode( $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 );
+	}
+
+}

+ 74 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Checkbox.php

@@ -0,0 +1,74 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Checkbox' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Checkbox
+ * Checkbox Field
+ */
+class Pngx__Admin__Field__Checkbox {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		global $pagenow;
+		$selected = '';
+
+		if ( ! empty( $options_id ) ) {
+			$name     = $options_id;
+			$selected = $options[ $field['id'] ];
+		} else {
+			$name = $field['id'];
+
+			//Set Meta Default
+			if ( $meta ) {
+				$selected = $meta;
+			} elseif ( $pagenow == 'post-new.php' && isset( $field['value'] ) ) {
+				$selected = $field['value'];
+			}
+		}
+
+
+		if ( $meta ) {
+			$selected = $meta;
+		} elseif ( $pagenow == 'post-new.php' && isset( $field['value'] ) ) {
+			$selected = $field['value'];
+		}
+
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$std       = isset( $field['std'] ) ? $field['std'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+		$disabled  = empty( $field['disabled'] ) ? '' : 'disabled';
+
+		?>
+		<input
+				type="checkbox"
+				class="checkbox <?php echo esc_attr( $class ); ?>"
+				id="<?php echo esc_attr( $field['id'] ); ?>"
+				name="<?php echo esc_attr( $name . $repeating ); ?>"
+				placeholder="<?php echo esc_attr( $std ); ?>"
+				value="1"
+			<?php echo checked( $selected, 1, false ); ?>
+			<?php echo $disabled; ?>
+		/>
+
+		<?php
+		if ( isset( $field['label'] ) ) {
+			?>
+			<label for="<?php echo esc_attr( $field['id'] ); ?>"><?php echo esc_html( $field['label'] ); ?></label>
+			<?php
+		}
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			?>
+			<span class="checkbox-description"><?php echo wp_kses_post( $field['desc'] ); ?></span>
+			<?php
+		}
+	}
+
+}

+ 64 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Color.php

@@ -0,0 +1,64 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Color' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Color
+ * Color Field
+ */
+class Pngx__Admin__Field__Color {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+			if ( ! $value && isset( $field['value'] ) ) {
+				$value = $field['value'];
+			}
+		}
+
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$std       = isset( $field['std'] ) ? $field['std'] : '';
+		$alpha     = isset( $field['alpha'] ) && 'true' === $field['alpha'] ? true : false;
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+
+		?><div class="pngx-color-picker-wrap">
+			<?php
+			if ( isset( $field['inside_label'] ) && '' !== $field['inside_label'] ) {
+				?>
+				<div class="pngx-inside-label"><?php echo esc_html( $field['inside_label'] ); ?></div>
+				<?php
+			}
+			?>
+			<input
+					type="text"
+					class="pngx-color-picker <?php echo esc_attr( $class ); ?>"
+					id="<?php echo esc_attr( $field['id'] ); ?>"
+					name="<?php echo esc_attr( $name . $repeating ); ?>"
+					placeholder="<?php echo esc_attr( $std ); ?>"
+					value="<?php echo esc_attr( $value ); ?>"
+					data-default-color="<?php echo esc_attr( $std ); ?>"
+					data-alpha="<?php echo esc_attr( $alpha ); ?>"
+			/>
+		</div><?php
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			?>
+			<span class="description"><?php echo esc_html( $field['desc'] ); ?></span>
+			<?php
+		}
+
+	}
+
+}
+

+ 50 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Date.php

@@ -0,0 +1,50 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Date' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Date
+ * Date Field
+ */
+class Pngx__Admin__Field__Date {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+
+		$size  = isset( $field['size'] ) ? $field['size'] : 10;
+		$class = isset( $field['class'] ) ? $field['class'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+
+		echo '<input type="text" class="pngx-datepicker ' . esc_attr( $class ) . '"  id="' . esc_attr( $field['id'] ) . '" name="' . esc_attr( $name ) . $repeating . '" value="' . esc_attr( $value ) . '" size="' . absint( $size ) . '" />';
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+		if ( isset( $field['condition'] ) && 'show_current_date' == $field['condition'] ) {
+
+			$date = Pngx__Date::display_date( $field['format'] );
+
+			if ( $date ) {
+				echo '<span class="description">' . esc_html__( 'Today\'s Date is ', 'plugin-engine' ) . esc_html( $date ) . '</span>';
+			}
+
+		}
+
+
+	}
+
+}

+ 31 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Heading.php

@@ -0,0 +1,31 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Heading' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Heading
+ * Heading Field
+ */
+class Pngx__Admin__Field__Heading {
+
+	public static function display( $field = array(), $options_id = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			if ( isset( $field['alert'] ) && ! empty( $field['alert'] ) ) {
+				echo '</td></tr><tr valign="top"><td colspan="2"><span class="description">' . esc_html( $field['alert'] ) . '</span>';
+			} else {
+				echo '</td></tr><tr valign="top"><td colspan="2"><h4 class="pngx-fields-heading">' . esc_html( $field['desc'] ) . '</h4>';
+			}
+		} else {
+			echo '<h4 class="pngx-fields-heading">' . esc_html( $field["desc"] ) . '</h4>';
+		}
+
+	}
+
+}

+ 41 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Help.php

@@ -0,0 +1,41 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Help' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Help
+ * Help Fields
+ */
+class Pngx__Admin__Field__Help {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$tab       = $field['section'];
+			$screen_id = 'plugin_engine_options_plugin-engine-options';
+		} else {
+			$tab       = $field['tab'];
+			$screen_id = '';
+		}
+
+		if ( 'pmgx_all_help' == $field['id'] ) {
+			$help_class = new Pngx__Admin__Help();
+			$help_class->display_help( 'all', false, 'pngx' );
+
+			//Return as this is only showing all the help documents
+			return;
+		}
+
+		//Display Help Per Tab
+		$help_class = new Pngx__Admin__Help();
+		$help_class->display_help( $tab, $screen_id, 'pngx' );
+
+	}
+
+}

+ 33 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Hidden.php

@@ -0,0 +1,33 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Hidden' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Hidden
+ * Hidden Field
+ */
+class Pngx__Admin__Field__Hidden {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+
+		$class = isset( $field['class'] ) ? $field['class'] : '';
+
+		echo '<input type="text" class="hidden ' . esc_attr( $class ) . '"  id="' . esc_attr( $field['id'] ) . '" name="' . esc_attr( $name ) . '" placeholder="" value="' . esc_attr( $value ) . '" />';
+
+	}
+
+}

+ 62 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Icon.php

@@ -0,0 +1,62 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Icon' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Icon
+ * Color Field
+ */
+class Pngx__Admin__Field__Icon {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+		global $pagenow;
+		$value = '';
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name = $field['id'];
+			//Set Meta Default
+			if ( $meta ) {
+				$value = $meta;
+			} elseif ( $pagenow == 'post-new.php' && isset( $field['value'] ) ) {
+				$value = $field['value'];
+			}
+		}
+
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+		?>
+
+		<!-- Button tag -->
+		<button
+				class="btn btn-default pngx-icon-picker <?php echo esc_attr( $class ); ?>"
+				data-iconset="fontawesome"
+				data-icon="<?php echo esc_attr( $value ); ?>"
+				data-label-header="<?php echo sprintf( esc_html_x( '%1s - %2s', 'Icon Popup Header', 'plugin-engine' ), '{0}', '{1}' ); ?>"
+				data-arrow-prev-icon-class="glyphicon glyphicon-circle-arrow-left"
+				data-arrow-next-icon-class="glyphicon glyphicon-circle-arrow-right"
+				data-rows="4"
+				data-cols="6"
+				data-placement="top"
+				data-label-footer="<?php echo sprintf( esc_html_x( '%1s - %2s of %3s', 'Icon Popup Footer', 'plugin-engine' ), '{0}', '{1}', '{2}' ); ?>"
+				data-search-text="<?php echo esc_html__( 'Search...', 'plugin-engine' ); ?>"
+				name="<?php echo esc_attr( $name . $repeating ); ?>"
+				role="iconpicker"
+		>
+		</button>
+
+		<?php
+
+
+	}
+
+}
+

+ 68 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Image.php

@@ -0,0 +1,68 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Image' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Text
+ * Image Field
+ */
+class Pngx__Admin__Field__Image {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		global $pagenow;
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+
+		if ( 'post-new.php' == $pagenow && ! $value && isset( $field['std'] ) ) {
+			$value = $field['std'];
+		}
+
+		$imagemsg  = isset( $field['imagemsg'] ) ? $field['imagemsg'] : '';
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+		$imagesrc  = '';
+
+		if ( is_numeric( $value ) ) {
+			$imagesrc     = wp_get_attachment_image_src( absint( $value ), 'medium' );
+			$imagesrc = isset( $imagesrc[0] ) ? wp_normalize_path( $imagesrc[0] ) : '';
+			$imagedisplay = '<div style="display:none" id="' . esc_attr( $field['id'] ) . '" class="pngx-default-image pngx-image-wrap">' . esc_html( $imagemsg ) . '</div> <img src="' . $imagesrc . '" id="' . esc_attr( $field['id'] ) . '" class="pngx-image pngx-image-wrap-img" />';
+		} else {
+			$imagedisplay = '<div style="display:block" id="' . esc_attr( $field['id'] ) . '" class="pngx-default-image pngx-image-wrap">' . esc_html( $imagemsg ) . '</div> <img style="display:none" src="' . $imagesrc . '" id="' . esc_attr( $field['id'] ) . '" class="pngx-image pngx-image-wrap-img" />';
+		}
+
+		echo $imagedisplay . '<br>';
+
+		?>
+
+		<input
+				class="pngx-upload-image <?php echo esc_attr( $class ); ?>"
+				type="hidden" id="<?php echo esc_attr( $field['id'] ); ?>"
+				name="<?php echo esc_attr( $name ) . $repeating; ?>"
+				value="<?php echo esc_attr( $value ); ?>"
+		/>
+
+		<button id="<?php echo esc_attr( $field['id'] ); ?>" class="pngx-image-button" <?php echo isset( $field['function'] ) ? Pngx__Admin__Fields::toggle( $field['function'], $field['id'] ) : null; ?> >Upload Image</button>
+
+		<small><a href="#" id="<?php echo esc_attr( $field['id'] ); ?>" class="pngx-clear-image">Remove Image</a></small>
+
+		<?php
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+	}
+
+}

+ 47 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/License.php

@@ -0,0 +1,47 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__License' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__License
+ * License Field only works on WordPress Options Page
+ */
+class Pngx__Admin__Field__License {
+
+	public static function display( $field = array(), $options_id = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name    = $options_id;
+			$license = isset( $field['license_key'] ) ? $field['license_key'] : '';
+
+			//handle older versions of Pro so they can update
+			if ( defined( 'CCTOR_PRO_VERSION_NUM' ) && 2.4 > CCTOR_PRO_VERSION_NUM && ! $license ) {
+				if ( isset( $field['class'] ) && 'pro_license' == $field['class'] && ! strpos( $field['class'], 'cctor_' ) ) {
+					$license = $field['class'];
+					$license = 'cctor_' . $license;
+				}
+			}
+
+			$license_info = get_option( $license );
+			$value        = isset( $license_info['key'] ) ? $license_info['key'] : '';
+
+			$size  = isset( $field['size'] ) ? $field['size'] : 30;
+			$class = isset( $field['class'] ) ? $field['class'] : '';
+			$std   = isset( $field['std'] ) ? $field['std'] : '';
+
+			echo '<input type="text" class="license-field ' . esc_attr( $class ) . '"  id="' . esc_attr( $field['id'] ) . '" name="' . esc_attr( $name ) . '" placeholder="' . esc_attr( $std ) . '" value="' . esc_attr( $value ) . '" size="' . absint( $size ) . '" />';
+
+			if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+				echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+			}
+		}
+
+	}
+
+}

+ 82 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/License_Status.php

@@ -0,0 +1,82 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__License_Status' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__License_Status
+ * License Status Field
+ */
+class Pngx__Admin__Field__License_Status {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null ) {
+
+		$expiration_msg = $expiration_date = '';
+		$license        = isset( $field['license_key'] ) ? $field['license_key'] : '';
+
+		//handle older versions of Pro so they can update
+		if ( defined( 'CCTOR_PRO_VERSION_NUM' ) && 2.4 > CCTOR_PRO_VERSION_NUM && ! $license ) {
+			if ( isset( $field['class'] ) && 'pro_license' == $field['class'] && ! strpos( $field['class'], 'cctor_' ) ) {
+				$license = $field['class'];
+				$license = 'cctor_' . $license;
+			}
+		}
+
+		$license_info = get_option( $license );
+
+		if ( isset( $license_info['expires'] ) ) { // Only Display Expiration if Date
+			$expiration_date = strtotime( $license_info['expires'] );
+			$expiration_date = date( get_option( 'date_format' ), $expiration_date );
+			$expiration_msg  = sprintf( __( ' and Expires on %s', 'plugin-engine' ), esc_attr( $expiration_date ) );
+		}
+
+		echo '<input type="hidden" class="pngx_license_key" name="pngx_license_key_' . esc_attr( $license ) . '" value="' . esc_attr( $license ) . '"/>';
+		echo '<input type="hidden" class="pngx_license_name" name="pngx_license_name_' . esc_attr( $license ) . '" value="' . esc_attr( $field['condition'] ) . '"/>';
+
+		if ( isset( $license_info['status'] ) && false !== $license_info['status'] && 'valid' == $license_info['status'] ) {
+
+			echo '<span style="color:green;">' . esc_html( __( 'License is Active', 'plugin-engine' ) . $expiration_msg ) . '</span><br><br>';
+
+			wp_nonce_field( 'pngx_license_nonce_' . esc_attr( $license ), 'pngx_license_nonce_' . esc_attr( $license ) );
+
+			echo '<input type="submit" class="pngx-license-button-act" name="pngx_license_deactivate_' . esc_attr( $license ) . '" value="' . __( 'Deactivate License', 'plugin-engine' ) . '"/>';
+
+		} else {
+
+			if (
+				isset( $license_info['status'] ) &&
+				(
+					'invalid' == $license_info['status'] ||
+					'missing' == $license_info['status']
+				) &&
+				! empty( $license_info['expired'] )
+			) {
+				$license_info_valid = __( 'License is Invalid', 'plugin-engine' );
+			} elseif (
+				isset( $license_info['expired'] ) &&
+				(
+					! empty( $license_info['expired'] ) &&
+					'expired' == $license_info['expired']
+				)
+			) {
+				$license_info_valid = sprintf( __( 'License Expired on %s', 'plugin-engine' ), esc_attr( $expiration_date ) );
+			} else {
+				$license_info_valid = __( 'License is Not Active', 'plugin-engine' );
+			}
+
+			echo '<span style="color:red;">' . esc_html( $license_info_valid ) . '</span><br><br>';
+
+			wp_nonce_field( 'pngx_license_nonce_' . esc_attr( $license ), 'pngx_license_nonce_' . esc_attr( $license ) );
+
+			echo '<input type="submit" class="pngx-license-button-det" name="pngx_license_activate_' . esc_attr( $license ) . '" value="' . esc_html__( 'Activate License', 'plugin-engine' ) . '"/>';
+
+		}
+
+	}
+
+}

+ 37 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/List.php

@@ -0,0 +1,37 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__List' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__List
+ * Select Field
+ */
+class Pngx__Admin__Field__List {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		$class = isset( $field['class'] ) ? $field['class'] : '';
+
+		if ( ! empty( $options_id ) ) {
+			echo '</td></tr><tr valign="top"><td colspan="2">';
+		}
+
+		echo '<ul id="' . esc_attr( $field['id'] ) . '" class="pngx-list ' . esc_attr( $class ) . '">';
+
+		foreach ( $field['choices'] as $value => $label ) {
+
+			echo '<li>' . strip_tags( $label, '<span><br><b><strong><em><i><a><img>' ) . '</li>';
+
+		}
+
+		echo '</ul>';
+
+	}
+
+}

+ 25 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Message.php

@@ -0,0 +1,25 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Message' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Message
+ * Message Field
+ */
+class Pngx__Admin__Field__Message {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null ) {
+
+		$attributes = empty( $field['field_attributes'] ) ? '' : Pngx__Admin__Field_Methods::instance()->set_field_attributes( $field['field_attributes'] );
+
+		echo '<div class="pngx-message-field" ' . $attributes . '>' . strip_tags( $field['desc'], apply_filters( 'cctor_filter_terms_tags', '' ) ) . '</div>';
+
+	}
+
+}

+ 55 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Number.php

@@ -0,0 +1,55 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Number' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Number
+ * Number Field
+ */
+class Pngx__Admin__Field__Number {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		global $pagenow;
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+
+		$size       = isset( $field['size'] ) ? $field['size'] : 30;
+		$class      = isset( $field['class'] ) ? $field['class'] : '';
+		$std        = isset( $field['std'] ) ? $field['std'] : '';
+		$numbertype = isset( $field['numbertype'] ) ? $field['numbertype'] : '';
+		$repeating  = isset( $field['repeating'] ) ? '[]' : '';
+
+		if ( $pagenow == 'post-new.php' && $std && empty( $value ) ) {
+			$value = $std;
+		}
+
+		echo '<input 
+				type="number" 
+				class="regular-number ' . esc_attr( $class ) . '"  
+				id="' . esc_attr( $field['id'] ) . '" 
+				name="' . esc_attr( $name ) . $repeating . '" 
+				placeholder="' . esc_attr( $std ) . '" 
+				value="' . esc_attr( $value ) . '" 
+				min="0" 
+				size="' . absint( $size ) . '"
+				style="width:60px; padding-right:0;" 
+			/> ' . esc_attr( $numbertype );
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+	}
+}

+ 56 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Radio.php

@@ -0,0 +1,56 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Radio' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Radio
+ * Radio Field
+ */
+class Pngx__Admin__Field__Radio {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		global $pagenow;
+		$selected = '';
+
+		if ( ! empty( $options_id ) ) {
+			$name     = $options_id;
+			$selected = $options[ $field['id'] ];
+		} else {
+			$name = $field['id'];
+
+			//Set Meta Default
+			if ( $meta ) {
+				$selected = $meta;
+			} elseif ( $pagenow == 'post-new.php' && isset( $field['value'] ) ) {
+				$selected = $field['value'];
+			}
+		}
+
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+
+		$i = 0;
+		foreach ( $field['choices'] as $value => $label ) {
+			echo '<input type="radio" class="radio ' . esc_attr( $class ) . '" name="' . esc_attr( $name ) . $repeating . '" id="' . $field['id'] . $i . '" value="' . esc_attr( $value ) . '" ' . checked( $selected, $value, false ) . '>
+			<label for="' . $field['id'] . $i . '">' . esc_attr( $label ) . '</label>';
+			if ( $i < count( $options ) - 1 ) {
+				echo '<br>';
+			}
+			$i ++;
+		}
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+
+	}
+
+}

+ 88 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Select.php

@@ -0,0 +1,88 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Select' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Select
+ * Select Field
+ */
+class Pngx__Admin__Field__Select {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		global $pagenow;
+		$selected = '';
+
+		if ( ! empty( $options_id ) ) {
+			$name     = $options_id;
+			$selected = $options[ $field['id'] ] ? $options[ $field['id'] ] : $field['std'];
+		} else {
+			$name = $field['id'];
+
+			//Set Meta Default
+			if ( $meta ) {
+				$selected = $meta;
+			} elseif ( $pagenow == 'post-new.php' && isset( $field['value'] ) ) {
+				$selected = $field['value'];
+			}
+		}
+
+
+		if ( $meta ) {
+			$selected = $meta;
+		} elseif ( $pagenow == 'post-new.php' && isset( $field['value'] ) ) {
+			$selected = $field['value'];
+		}
+
+		$class = isset( $field['class'] ) ? $field['class'] : '';
+
+		if ( $repeat_obj ) {
+			$name = $name = $repeat_obj->get_field_name( $name );
+		}
+
+		?>
+		<div class="pngx-default-select pngx-default <?php echo esc_attr( $class ); ?>">
+			<select
+					id="<?php echo esc_attr( $field['id'] ); ?>"
+					class="select"
+					name="<?php echo esc_attr( $name ); ?>"
+					<?php echo isset( $field['data'] ) ? Pngx__Admin__Fields::toggle( $field['data'], null ) : ''; ?>
+			>
+				<?php
+				foreach ( $field['choices'] as $value => $label ) {
+
+					$disabled = '';
+					if( is_array( $label ) ) {
+						$disabled  = empty( $label['disabled'] ) ? '' : 'disabled';
+						$label = $label['text'];
+					}
+
+					$style = isset( $field['class'] ) && 'css-select' == $field['class'] ? 'style="' . esc_attr( $value ) . '"' : '';
+
+					echo '<option ' . esc_textarea( $style ) . ' 
+						value="' . esc_attr( $value ) . '"' .
+						selected( $selected, $value, false ) .
+						$disabled .
+						'>' .
+						esc_attr( $label ) .
+						'</option>';
+
+				}
+				?>
+			</select>
+		</div>
+		<?php
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+	}
+
+}

+ 35 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Template.php

@@ -0,0 +1,35 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Template' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Template
+ * Ajax Template Scripts
+ */
+class Pngx__Admin__Field__Template {
+
+	public static function display() {
+
+		global $post;
+
+		wp_localize_script( 'pngx-load-template-ajax', 'pngx_admin_ajax', array(
+			'ajaxurl' => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ),
+			'nonce'   => wp_create_nonce( 'pngx_admin_' . $post->ID ),
+			'post_id' => $post->ID
+		) );
+
+		wp_localize_script( 'pngx-admin', 'pngx_admin_repeatable_ajax', array(
+			'ajaxurl' => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ),
+			'nonce'   => wp_create_nonce( 'pngx_admin_rep_' . $post->ID ),
+			'post_id' => $post->ID
+		) );
+
+	}
+
+}

+ 64 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Text.php

@@ -0,0 +1,64 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Text' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Text
+ * Text Field
+ */
+class Pngx__Admin__Field__Text {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+			if ( ! $value && isset( $field['value'] ) ) {
+				$value = $field['value'];
+			}
+		}
+
+		$size       = isset( $field['size'] ) ? $field['size'] : 30;
+		$class      = isset( $field['class'] ) ? $field['class'] : '';
+		$std        = isset( $field['std'] ) ? $field['std'] : '';
+		$condition  = isset( $field['condition'] ) ? $field['condition'] : '';
+		$attributes = empty( $field['field_attributes'] ) ? '' : Pngx__Admin__Field_Methods::instance()->set_field_attributes( $field['field_attributes'] );
+		$bumpdown   = empty( $field['bumpdown'] ) ? '' : Pngx__Admin__Field_Methods::instance()->set_bumpdown( $field['bumpdown'] );
+
+		if ( $repeat_obj ) {
+			$name = $repeat_obj->get_field_name( $name );
+		}
+
+		if ( isset( $field['alert'] ) && '' != $field['alert'] && 1 == $condition ) {
+			echo '<div class="pngx-error">&nbsp;&nbsp;' . esc_html( $field['alert'] ) . '</div>';
+		}
+
+		echo '<input 
+			type="text" 
+			id="' . esc_attr( $field['id'] ) . '" 
+			class="regular-text ' . esc_attr( $class ) . '"  
+			name="' . esc_attr( $name ) . '" 
+			placeholder="' . esc_attr( $std ) . '" 
+			value="' . esc_attr( $value ) . '" 
+			size="' . absint( $size ) . '" 
+			' . $attributes . '
+		/>';
+
+		echo $bumpdown;
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+	}
+
+}

+ 49 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Textarea.php

@@ -0,0 +1,49 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Textarea' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Textarea
+ * Textarea Field
+ */
+class Pngx__Admin__Field__Textarea {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+		global $wp_version;
+
+		$rows      = isset( $field['rows'] ) ? $field['rows'] : 12;
+		$cols      = isset( $field['cols'] ) ? $field['cols'] : 50;
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$std       = isset( $field['std'] ) ? $field['std'] : '';
+		$repeating = '';
+		if ( $repeat_obj ) {
+			$repeating = $repeat_obj->get_current_sec_col() . '[]';
+		}
+
+		if ( version_compare( $wp_version, '4.3', '<' ) ) {
+			echo '<textarea class="' . esc_attr( $class ) . '" id="' . esc_attr( $field['id'] ) . '" name="' . esc_attr( $name . $repeating ). '" placeholder="' . esc_attr( $std ) . '" rows="' . absint( $rows ) . '" cols="' . absint( $cols ) . '">' . wp_htmledit_pre( $value ) . '</textarea>';
+		} else {
+			echo '<textarea class="' . esc_attr( $class ) . '" id="' . esc_attr( $field['id'] ) . '" name="' . esc_attr( $name  . $repeating ) . '" placeholder="' . esc_attr( $std ) . '" rows="' . absint( $rows ) . '" cols="' . absint( $cols ) . '">' . format_for_editor( $value ) . '</textarea>';
+		}
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+	}
+
+}

+ 48 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Url.php

@@ -0,0 +1,48 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Url' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Url
+ * Text Field
+ */
+class Pngx__Admin__Field__Url {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+
+		$size      = isset( $field['size'] ) ? $field['size'] : 30;
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+		?>
+		<input
+			type="text"
+			class="url <?php echo esc_attr( $class ); ?>"
+			id="<?php echo esc_attr( $field['id'] ); ?>"
+			name="<?php echo esc_attr( $name ) . $repeating; ?>"
+			value="<?php echo esc_url( $value ); ?>"
+			size="<?php echo absint( $size ); ?>"
+		/>
+
+		<?php
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+	}
+
+}

+ 178 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Variety.php

@@ -0,0 +1,178 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Variety' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Variety
+ * Chooser Field for a variety of fields
+ */
+class Pngx__Admin__Field__Variety {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		global $pagenow;
+		$selected = '';
+
+		if ( ! empty( $options_id ) ) {
+			$name     = $options_id;
+			$selected = $options[ $field['id'] ] ? $options[ $field['id'] ] : $field['std'];
+		} else {
+			$name = $field['id'];
+
+			// Set Meta Default
+			if ( $meta ) {
+				$selected = $meta;
+			} elseif ( 'post-new.php' === $pagenow && isset( $field['value'] ) ) {
+				$selected = $field['value'];
+			} elseif ( Pngx__Main::instance()->doing_ajax ) {
+				$selected = $field['value'];
+			}
+
+
+			if ( $meta ) {
+				$selected = $meta;
+			} elseif ( 'post-new.php' === $pagenow && isset( $field['value'] ) ) {
+				$selected = $field['value'];
+			} elseif ( Pngx__Main::instance()->doing_ajax ) {
+				$selected = $field['value'];
+			}
+
+			$class     = isset( $field['class'] ) ? $field['class'] : '';
+			$repeating = isset( $field['repeating'] ) ? '[]' : '';
+			$attributes = empty( $field['field_attributes'] ) ? '' : Pngx__Admin__Field_Methods::instance()->set_field_attributes( $field['field_attributes'] );
+			$bumpdown   = empty( $field['bumpdown'] ) ? '' : Pngx__Admin__Field_Methods::instance()->set_bumpdown( $field['bumpdown'] );
+
+			?>
+			<div class="pngx-variety-selection">
+				<div class="pngx-default-select pngx-default">
+					<select
+							id="<?php echo esc_attr( $field['id'] ); ?>"
+							class="select pngx-variety-select <?php echo esc_attr( $class ); ?>"
+							name="<?php echo esc_attr( $name ) . $repeating; ?>"
+						<?php echo isset( $field['data'] ) ? Pngx__Admin__Fields::toggle( $field['data'], null ) : ''; ?>
+						<?php echo $attributes; ?>
+					>
+						<?php
+						foreach ( $field['choices'] as $value => $label ) {
+
+							$disabled = '';
+							if( is_array( $label ) ) {
+								$disabled  = empty( $label['disabled'] ) ? '' : 'disabled';
+								$label = $label['text'];
+							}
+
+							$style = isset( $field['class'] ) && 'css-select' === $field['class'] ? 'style="' . esc_attr( $value ) . '"' : '';
+
+							echo '<option ' .
+							$style .
+							' value="' .
+							esc_attr( $value ) .
+							'"' .
+							selected( $selected, $value, false ) .
+							$disabled .
+							'>' .
+							esc_attr( $label ) .
+							'</option>';
+
+						}
+						?>
+					</select>
+				</div>
+				<?php echo $bumpdown; ?>
+				<?php
+				if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+					echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+				}
+				?>
+			</div>
+			<div class="pngx-variety-fields-wrapper">
+				<?php
+
+				/**
+				 * Filter Template Fields to get infomation to display in the Variety Field
+				 */
+				$fields = apply_filters( 'pngx_meta_template_fields', array() );
+
+				global $post;
+
+				if ( isset( $field['variety_choices'][ $selected ] ) ) {
+					foreach ( $field['variety_choices'][ $selected ] as $label ) {
+
+						if ( is_array( $label ) && isset( $label['open'] ) ) {
+							?>
+							<div class="<?php echo esc_html( $label['open'] ); ?>">
+							<?php
+							continue;
+						}
+
+						if ( is_array( $label ) && isset( $label['label'] ) ) {
+							?>
+							<label for="<?php echo esc_attr( $label['label'] ); ?>">
+								<?php echo esc_attr( $label['label'] ); ?>
+							</label>
+							<?php
+							continue;
+						}
+
+						if ( is_array( $label ) && isset( $label['description'] ) ) {
+							?>
+							<span class="description"><?php echo esc_html( $label['description'] ); ?></span>
+							<?php
+							continue;
+						}
+
+						if ( is_array( $label ) ) {
+							continue;
+						}
+
+						if ( 'close' === $label ) {
+							?>
+							</div>
+							<?php
+							continue;
+						}
+
+						if ( ! isset( $fields[ $label ] ) ) {
+							continue;
+						}
+
+						$post_id = '';
+						if ( is_object( $post ) ) {
+							$post_id = empty( $post->ID ) ? null : $post->ID;
+						} elseif ( Pngx__Main::instance()->doing_ajax && isset( $_POST['post_id'] ) ) {
+							$post_id = absint( $_POST['post_id'] );
+						}
+
+						$meta = empty( $post_id ) ? null : get_post_meta( $post_id, $label, true );
+						?>
+						<div class="pngx-variety-field <?php echo isset( $fields[ $label ]['variety_class'] ) ? esc_attr( $fields[ $label ]['variety_class'] ) : ''; ?>">
+							<?php
+
+							if ( isset( $fields[ $label ]['label'] ) && ! empty( $fields[ $label ]['label'] ) ) { ?>
+								<label for="<?php echo esc_attr( $fields[ $label ]['id'] ); ?>">
+									<?php echo esc_attr( $fields[ $label ]['label'] ); ?>
+								</label>
+							<?php }
+
+							Pngx__Admin__Fields::display_field( $fields[ $label ], false, false, $meta, null );
+
+							?>
+						</div>
+						<?php
+
+					}
+				}
+				?>
+
+			</div>
+			<?php
+		}
+
+	}
+}

+ 121 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field/Wysiwyg.php

@@ -0,0 +1,121 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field__Wysiwyg' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field__Wysiwyg
+ * Visual Editor Field
+ */
+class Pngx__Admin__Field__Wysiwyg {
+
+	public static function display( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		if ( ! empty( $options_id ) ) {
+			$name  = $options_id;
+			$value = $options[ $field['id'] ];
+		} else {
+			$name  = $field['id'];
+			$value = $meta;
+		}
+
+		global $post, $wp_version;
+
+		$settings = array();
+		if ( ! class_exists( '_WP_Editors' ) ) {
+			require( ABSPATH . WPINC . '/class-wp-editor.php' );
+		}
+		$set = _WP_Editors::parse_settings( esc_attr( $field['id'] ), $settings );
+		if ( ! current_user_can( 'upload_files' ) ) {
+			$set['media_buttons'] = false;
+		}
+		if ( $set['media_buttons'] ) {
+			wp_enqueue_script( 'thickbox' );
+			wp_enqueue_style( 'thickbox' );
+			wp_enqueue_script( 'media-upload' );
+			$post = get_post();
+			if ( ! $post && ! empty( $GLOBALS['post_ID'] ) ) {
+				$post = $GLOBALS['post_ID'];
+			}
+			wp_enqueue_media( array(
+				'post' => $post
+			) );
+		}
+
+		wp_enqueue_script( 'tiny_mce' );
+
+		_WP_Editors::editor_settings( esc_attr( $field['id'] ), $set );
+
+		// Only Localize Script Once Per Page
+		if ( ! isset( $post->load_scripts ) ) {
+
+			/**
+			 * Filter Tiny MCE Buttons for PNGX Editor Script
+			 *
+			 * @param array() an    array of attributes to create the button
+			 * @param         $post current post object
+			 */
+			$pngx_visual_editor_buttons = apply_filters( 'pngx_visual_editor_functions', array(), $post );
+
+			/**
+			 * Filter HTML Editor Buttons for PNGX Editor Script
+			 *
+			 * @param array() an    array of attributes to create the button
+			 * @param         $post current post object
+			 */
+			$pngx_html_editor_buttons = apply_filters( 'pngx_html_editor_functions', array(), $post );
+
+			/**
+			 * Variables for WP Editor Script
+			 */
+			$pngx_editor_vars = array(
+				'url'                   => get_home_url(),
+				'includes_url'          => includes_url(),
+				'visual_editor_buttons' => $pngx_visual_editor_buttons,
+				'html_editor_buttons'   => $pngx_html_editor_buttons,
+				'rich_editing'          => get_user_meta( get_current_user_id(), 'rich_editing', true ),
+			);
+			wp_localize_script( 'pngx-wp-editor', 'pngx_editor_vars', $pngx_editor_vars );
+
+			if ( is_object( $post ) ) {
+				$post->load_scripts = true;
+			}
+		}
+
+		$std       = isset( $field['std'] ) ? $field['std'] : '';
+		$rows      = isset( $field['rows'] ) ? $field['rows'] : 12;
+		$cols      = isset( $field['cols'] ) ? $field['cols'] : 50;
+		$class     = isset( $field['class'] ) ? $field['class'] : '';
+		$repeating = isset( $field['repeating'] ) ? '[]' : '';
+
+		?>
+
+        <textarea
+                class="pngx-ajax-wp-editor <?php echo esc_attr( $class ); ?>"
+                id="<?php echo esc_attr( $field['id'] ); ?>"
+                name="<?php echo esc_attr( $name ) . $repeating; ?>"
+                placeholder="<?php echo esc_attr( $std ); ?>"
+                rows="<?php echo absint( $rows ); ?>"
+                cols="<?php echo absint( $cols ); ?>"
+			<?php echo isset( $field['data'] ) ? Pngx__Admin__Fields::toggle( $field['data'], null ) : ''; ?>
+        ><?php
+            if ( version_compare( $wp_version, '4.3', '<' ) ) {
+                echo wp_htmledit_pre( $value );
+            } else {
+                echo format_for_editor( $value );
+            }
+        ?></textarea>
+		<?php
+
+		if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+			echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+		}
+
+	}
+
+}

+ 101 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Field_Methods.php

@@ -0,0 +1,101 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Field_Methods' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Field_Methods
+ * Fields for Meta and Options
+ */
+class Pngx__Admin__Field_Methods {
+
+	protected static $instance;
+
+	/**
+	 * Static Singleton Factory Method
+	 *
+	 * @return self
+	 */
+	public static function instance() {
+		if ( ! self::$instance ) {
+			self::$instance = new self;
+		}
+
+		return self::$instance;
+	}
+
+	/**
+	 * Pngx__Admin__Field_Methods constructor.
+	 */
+	protected function __construct() {
+
+	}
+
+	/**
+	 * Generate String of Attributes
+	 *
+	 * @since 2.5.5
+	 *
+	 * @return mixed|void
+	 */
+	public function set_field_attributes( $field_attributes ) {
+
+		$return = '';
+		if ( ! empty( $field_attributes ) && is_array( $field_attributes ) ) {
+			foreach ( $field_attributes as $key => $value ) {
+
+				if ( empty( $value ) ) {
+					$return .= ' ' . esc_attr( $key );
+					continue;
+				}
+
+				$return .= ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
+			}
+		}
+
+		/**
+		 * Filter the Field Attributes
+		 *
+		 * @since 2.5.5
+		 *
+		 * @param $return           string|void a string of attributes
+		 * @param $field_attributes array an array of attributes
+		 */
+		return apply_filters( 'pngx_field_attributes', $return, $field_attributes );
+	}
+
+	/**
+	 * Generate Bumpdown
+	 *
+	 * @since 2.5.5
+	 *
+	 * @return mixed|void
+	 *
+	 */
+	public function set_bumpdown( $bumpdown ) {
+
+		$return = '';
+		if ( ! empty( $bumpdown ) && is_array( $bumpdown ) ) {
+
+			$return = '<span class="' . ( empty( $bumpdown['class'] ) ? '' : esc_attr( $bumpdown['class'] ) ) . '"';
+			$return .= empty( $bumpdown['data'] ) ? '' : $this->set_field_attributes( $bumpdown['data'] );
+			$return .= '>' . ( empty( $bumpdown['text'] ) ? '' : esc_attr( $bumpdown['text'] ) ) . '</span>';
+		}
+
+		/**
+		 * Filter the Bumpdown HTML
+		 *
+		 * @since 2.5.5
+		 *
+		 * @param $return   string|void a string of bumpdown
+		 * @param $bumpdown array an array of bumpdown attributes
+		 */
+		return apply_filters( 'pngx_bumpdown', $return, $bumpdown );
+	}
+
+}

+ 244 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Fields.php

@@ -0,0 +1,244 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Fields' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Fields
+ * Fields for Meta and Options
+ */
+class Pngx__Admin__Fields {
+
+	/*
+	* Toggle Field Data Setup
+	*/
+	public static function toggle( $toggle_fields, $id ) {
+
+		if ( isset( $toggle_fields ) && is_array( $toggle_fields ) ) {
+
+			$data = '';
+
+			foreach ( $toggle_fields as $key => $toggle_data ) {
+				$toggle = '';
+				if ( 'field' == $key ) {
+					$toggle = esc_html( $toggle_data ) . '#' . esc_attr( $id );
+				} elseif ( 'group' == $key || 'show' == $key || 'update_message' == $key || 'type' == $key || 'connection' == $key ) {
+					//handle options page update message in array
+					if ( is_array( $toggle_data ) ) {
+						if ( isset( $toggle_data[0]['code'] ) ) {
+							$toggle = esc_html( $toggle_data[0]['code'] );
+						}
+					} else {
+						$toggle = esc_html( $toggle_data );
+					}
+				} elseif ( 'id' == $key || 'wp_version' == $key || 'priority' == $key ) {
+					$toggle = absint( $toggle_data );
+				} elseif ( 'msg' == $key || 'tabs' == $key ) {
+					$toggle = json_encode( $toggle_data, JSON_HEX_APOS );
+				} else {
+					$toggle = esc_html( $toggle_data );
+				}
+
+				$data .= 'data-toggle-' . esc_attr( $key ) . '=\'' . $toggle . '\' ';
+			}
+
+			return $data;
+
+		}
+
+		return false;
+	}
+
+	/*
+	* Flush Permalink on Permalink Field Change
+	*
+	*/
+	public static function flush_permalinks() {
+
+		if ( true == get_option( 'pngx_permalink_change' ) ) {
+
+			do_action( 'pngx_flush_permalinks' );
+
+			flush_rewrite_rules();
+
+			update_option( 'pngx_permalink_flush', date( 'l jS \of F Y h:i:s A' ) );
+			update_option( 'pngx_permalink_change', false );
+
+		}
+
+	}
+
+	/*
+	* Display Individual Fields
+	*/
+	public static function display_field( $field = array(), $options = array(), $options_id = null, $meta = null, $repeat_obj = null ) {
+
+		/**
+		 * Filter the Options Name ID for Display of Fields
+		 *
+		 * @parm string 'plugin_engine_options' name of field id
+		 */
+		$option_name = apply_filters( 'pngx_options_name_id', 'plugin_engine_options' );
+
+		//Create Different name attribute for Option Fields and Not Meta Fields
+		if ( $options && $options_id == $option_name ) {
+			$options_id = $options_id . '[' . $field['id'] . ']';
+		}
+
+		if ( isset( $field['before'] ) && ! empty( $field['before'] ) ) {
+			echo '<span class="before">' . $field['before'] . '</span>';
+		}
+
+		switch ( $field['type'] ) {
+
+			case 'checkbox':
+
+				Pngx__Admin__Field__Checkbox::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'color':
+
+				Pngx__Admin__Field__Color::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'date':
+
+				Pngx__Admin__Field__Date::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'heading':
+
+				Pngx__Admin__Field__Heading::display( $field, $options_id );
+
+				break;
+
+			case 'hidden':
+
+				Pngx__Admin__Field__Hidden::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'icon':
+
+				Pngx__Admin__Field__Icon::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'image':
+
+				Pngx__Admin__Field__Image::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'license':
+
+				Pngx__Admin__Field__License::display( $field, $options_id );
+
+				break;
+
+			case 'license_status':
+
+				Pngx__Admin__Field__License_Status::display( $field, $options, $options_id, $meta );
+
+				break;
+
+			case 'list':
+
+				Pngx__Admin__Field__List::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'message':
+
+				Pngx__Admin__Field__Message::display( $field, $options, $options_id, $meta );
+
+				break;
+
+			case 'number':
+
+				Pngx__Admin__Field__Number::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'radio':
+
+				Pngx__Admin__Field__Radio::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'select':
+
+				Pngx__Admin__Field__Select::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'systeminfo':
+
+				Pngx__Admin__Support::getInstance()->get_system_info_copy();
+				echo Pngx__Admin__Support::getInstance()->formatted_support_stats();
+
+				break;
+
+			case 'template_chooser':
+
+				Pngx__Admin__Field__Template::display();
+
+				break;
+
+			case 'text':
+
+				Pngx__Admin__Field__Text::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'textarea':
+
+				Pngx__Admin__Field__Textarea::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+
+			case 'url':
+
+				Pngx__Admin__Field__Url::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'variety':
+
+				Pngx__Admin__Field__Variety::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+
+			case 'wysiwyg':
+
+				Pngx__Admin__Field__Wysiwyg::display( $field, $options, $options_id, $meta, $repeat_obj );
+
+				break;
+		}
+
+		if ( has_filter( 'pngx_field_types' ) ) {
+			/**
+			 * Filter the Plugin Engine Fields for Meta and Options
+			 *
+			 * @param array $options current field being displayed.
+			 * @param array $field   current value of option saved.
+			 */
+			apply_filters( 'pngx_field_types', $field, $options, $options_id, $meta, $repeat_obj );
+		}
+
+		if ( isset( $field['after'] ) && ! empty( $field['after'] ) ) {
+			echo '<span class="after description">' . $field['after'] . '</span>';
+		}
+
+	}
+
+}

+ 221 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Help.php

@@ -0,0 +1,221 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Help' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Help
+ * Help Class to display videos and text on meta and option tabs
+ */
+class Pngx__Admin__Help {
+
+	//Help Fields array()
+	protected $fields = array();
+
+	/**
+	 * Return Array of Help Fields
+	 *
+	 * @return array
+	 */
+	public function get_options() {
+		return $this->fields;
+	}
+
+	/**
+	 * Array of All Help Fields
+	 */
+	protected function set_help_fields() {
+		/*
+		 * Sample Help Section
+		 *
+		 * Help Sections should aways start with a heading and end with end_list
+		 *
+		 * Choose either section or tab to place the content
+		 */
+		$this->fields['header_video_guides_content'] = array(  // unique id
+			'section' => '', // options tab to place help content
+			'tab'     => 'content', // meta tab to place help content
+			'text'    => 'Content', // title for content section on help tab
+			'type'    => 'heading' //field type heading only used in opening
+		);
+		$this->fields['video_creating']       = array( // unique id
+			'section'  => '', //option tab to place help
+			'tab'      => 'content', //meta tab to place help
+			'text'     => 'Overview of Creating', //descriptive text for help
+			'video_id' => 'I1v9HxdIsSE', //Youtube Video ID
+			'type'     => 'video' //field type video
+		);
+		$this->fields['link_pro_hide_deal']           = array( // unique id
+			'section' => '', //option tab to place help
+			'tab'     => 'content', //meta tab to place help
+			'text'    => 'Descriptive Text',//descriptive text for help
+			'link'    => 'http://cctor.link/Ihoro', //helo link
+			'pro'     => 'Pro', //Add Pro superscript for pro only feature
+			'type'    => 'links' //field type links
+		);
+		$this->fields['video_end_list_content']      = array( // unique id
+			'section' => '', // options tab close for this content
+			'tab'     => 'content', // meta tab close for this content
+			'type'    => 'end_list'
+		);
+	}
+
+	/**
+	 * Find string in multidimensional array
+	 *
+	 * Thanks to jwueller http://stackoverflow.com/a/4128377
+	 *
+	 * @param            $needle
+	 * @param            $haystack
+	 * @param bool|false $strict
+	 *
+	 * @return bool
+	 */
+	public function in_array_r( $needle, $haystack, $strict = false ) {
+		foreach ( $haystack as $item ) {
+			if ( ( $strict ? $item === $needle : $item == $needle ) || ( is_array( $item ) && $this->in_array_r( $needle, $item, $strict ) ) ) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Display Help Fields in Tab
+	 *
+	 * @param null $section
+	 */
+	public function display_help( $section = null, $page_screen_id = null, $class = null ) {
+
+		if ( ! $section ) {
+			return;
+		}
+
+		if ( 'all' != $section && ! $this->in_array_r( $section, $this->fields ) ) {
+			return;
+		}
+
+		$screen = get_current_screen();
+
+		if ( 'all' != $section ) {
+
+			if ( $page_screen_id == $screen->id ) {
+				echo '</td></tr><tr valign="top"><td colspan="2">';
+			}
+
+			echo '<div class="' . esc_html( $class ) . ' pngx-meta-field-wrap pngx-section-help-container">';
+
+			echo '<button aria-expanded="false" class="pngx-section-help-container-toggle" type="button">
+					<span class="dashicons-before dashicons-editor-help">Help</span>
+					<span class="dashicons toggle__arrow dashicons-arrow-down"></span>
+				</button>';
+
+			echo '<div class="pngx-section-help-slideout">';
+
+			echo '<div class="pngx-meta-field-content video">';
+			echo '<h4>' . __( 'Video Guides', 'plugin-engine' ) . '</h4>';
+			echo '<ul>';
+			foreach ( $this->fields as $help_field ) {
+
+				if ( isset( $help_field['type'] ) && 'video' == $help_field['type'] ) {
+
+					if ( $section == $help_field['tab'] || $section == $help_field['section'] ) {
+						$this->help_fields_switch( $help_field, $section );
+					}
+				}
+
+			}
+			echo '</ul></div>';
+
+			echo '<div class="pngx-meta-field-content text">';
+			echo '<h4>' . __( 'Guides', 'plugin-engine' ) . '</h4>';
+			echo '<ul>';
+			foreach ( $this->fields as $help_field ) {
+
+				if ( isset( $help_field['type'] ) && 'links' == $help_field['type'] ) {
+
+					if ( $section == $help_field['tab'] || $section == $help_field['section'] ) {
+						$this->help_fields_switch( $help_field, $section );
+					}
+				}
+
+			}
+			echo '</ul></div>';
+
+			echo '</div></div>';
+
+			if ( $page_screen_id == $screen->id ) {
+				echo '</td></tr>';
+			}
+
+		} else {
+
+			//All Fields Display for Help Tabs
+			foreach ( $this->fields as $help_field ) {
+
+				if ( isset( $help_field['type'] ) ) {
+
+					if ( 'all' == $section ) {
+						$this->help_fields_switch( $help_field, $section );
+					}
+
+				}
+			}
+		}
+
+	}
+
+	protected function help_fields_switch( $help_field = array(), $section = null ) {
+
+		switch ( $help_field['type'] ) {
+
+			case 'heading':
+				?>
+
+				<h4 class="pngx-heading"><?php echo esc_html( $help_field['text'] ); ?></h4>
+				<ul>
+				<?php break;
+
+			case 'end_list':
+				?>
+				</ul>
+				<?php break;
+
+			case 'video':
+				$rel = '';
+				if ( 'all' == $section ) {
+					$rel = 'how_to_videos';
+				}
+				$pro = '';
+				if ( isset( $help_field['pro'] ) ) {
+					$pro = '<sup class="promote-sup">' . esc_html( $help_field['pro'] ) . '</sup>';
+				}
+				?>
+				<li><a class="pngx-support youtube_colorbox"
+				       href="https://www.youtube.com/embed/<?php echo esc_html( $help_field['video_id'] ); ?>?hd=1&autohide=1&rel=0&showsearch=0&autoplay=1"
+				       rel="<?php echo esc_attr( $rel ); ?>"><?php echo esc_html( $help_field['text'] ); ?></a><?php echo $pro; ?>
+				</li>
+
+				<?php break;
+
+			case 'links':
+				$pro = '';
+				if ( isset( $help_field['pro'] ) ) {
+					$pro = '<sup class="promote-sup">' . esc_html( $help_field['pro'] ) . '</sup>';
+				}
+				?>
+				<li><a class="pngx-support" target="_blank"
+				       href="<?php echo esc_url( $help_field['link'] ); ?>"><?php echo esc_html( $help_field['text'] ); ?></a><?php echo $pro; ?>
+				</li>
+				<?php break;
+
+		}
+
+	}
+}

+ 43 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Main.php

@@ -0,0 +1,43 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Plugin Engine Admin Class
+ *
+ *
+ */
+class Pngx__Admin__Main {
+
+	/*
+	* Admin Construct
+	*/
+	public function __construct() {
+
+		//Check to flush permalinks
+		add_action( 'init', array( 'Pngx__Admin__Fields', 'flush_permalinks' ) );
+
+		// Setup Ajax Methods for Editor
+		new Pngx__Admin__Ajax();
+
+		//Setup Admin
+		add_action( 'admin_init', array( $this, 'admin_init' ) );
+
+	}
+
+	/**
+	 * Admin Init
+	 */
+	public function admin_init() {
+
+		//Register Admin Assets
+		add_action( 'admin_enqueue_scripts', pngx_callback( 'admin.assets', 'register_assets' ), 0 );
+
+		add_action( 'admin_enqueue_scripts',  pngx_callback( 'admin.assets', 'register_plugin_list_assets' ), 0 );
+
+	} //end admin_init
+
+}

+ 412 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Meta.php

@@ -0,0 +1,412 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Meta' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Meta
+ * Create, Save, Display Custom Fields for a CPT
+ *
+ * @property array  post_type
+ * @property string user_capability
+ * @property array  tabs
+ * @property array  fields
+ */
+class Pngx__Admin__Meta {
+
+	protected static $instance;
+
+	//tabs key and label
+	protected $tabs = array();
+
+	//fields
+	protected $fields = array();
+
+	//post type
+	protected $post_type = array( 'pngx' );
+
+	//user capability
+	protected $user_capability = 'edit_post';
+
+	/*
+	* Construct
+	*/
+	public function __construct() {
+
+		//Save Meta
+		add_action( 'save_post', array( $this, 'save_meta' ), 10, 2 );
+
+		//JS Error Check
+		add_action( 'pngx_meta_message', array( $this, 'get_js_error_check_msg' ) );
+	}
+
+	/**
+	 * Javascript Conflict Message
+	 *
+	 * @return string
+	 */
+	public function get_js_error_check_msg() {
+
+		$js_troubleshoot_url = 'http://cctor.link/R7KRa';
+
+		$js_msg = '<div class="javascript-conflict pngx-error"><p>' . sprintf( __( 'There maybe a javascript conflict preventing some features from working.  <a href="%s" target="_blank" >Please check this guide to narrow down the cause.</a>', 'plugin-engine' ), esc_url( $js_troubleshoot_url ) ) . '</p></div>';
+
+		return $js_msg;
+
+	}
+
+	/*
+	* Set Current Screen Variables
+	*/
+	public function get_screen_variables() {
+
+		global $pagenow, $typenow;
+		$current_screen['pagenow'] = $pagenow;
+		$current_screen['post']    = isset( $_GET['post'] ) ? $_GET['post'] : '';
+		$current_screen['type']    = $typenow;
+
+		if ( empty( $current_screen['type'] ) && ! empty( $current_screen['type'] ) ) {
+			$current_screen['post_obj'] = get_post( $_GET['post'] );
+			$current_screen['type']     = $current_screen['post_obj']->post_type;
+		}
+
+		return $current_screen;
+
+	}
+
+	/*
+	* Get Post Type
+	*/
+	public function get_post_types() {
+
+		return $this->post_type;
+
+	}
+
+	/*
+	* Get User Capability
+	*/
+	public function get_user_capability() {
+
+		return $this->user_capability;
+
+	}
+
+	/*
+	* Set Tabs
+	*/
+	protected function set_tabs() {
+
+		//CPT Fields Tabs
+		$tabs['content'] = __( 'Content', 'plugin-engine' ); //set key and tab title
+
+		$this->tabs = $tabs;
+
+	}
+
+	/*
+	* Get Tabs
+	*/
+	public function get_tabs() {
+
+		return $this->tabs;
+
+	}
+
+	/*
+	* Load Meta Box Functions
+	*/
+	public function set_fields() {
+
+		$this->fields = Pngx__Meta__Fields::get_fields();
+	}
+
+	/*
+	* Get Fields
+	*/
+	public function get_fields() {
+
+		return $this->fields;
+
+	}
+
+	/**
+	 * Show Fields
+	 *
+	 * @param $post
+	 * @param $metabox
+	 */
+	public function display_fields( $post, $metabox ) {
+
+		global $wp_version;
+
+		wp_nonce_field( 'pngx_save_fields', 'pngx_nonce' );
+
+		//Create Array of Tabs and Localize to Meta Script
+		$tabs_array = array();
+
+		foreach ( $this->get_tabs() as $tab_slug => $tab ) {
+			$tabs_array[ $tab ] = $tab_slug;
+		}
+
+		//Detect if we saved or tried to save to set the current tab.
+		global $message;
+
+		$tab_data = array(
+			'tabs'           => $tabs_array,
+			'update_message' => $message,
+			'id'             => isset( $_GET['post'] ) ? absint( $_GET['post'] ) : '',
+			'wp_version'     => $wp_version,
+		);
+
+		ob_start(); ?>
+
+		<div class="main pngx-tabs" <?php echo Pngx__Admin__Fields::toggle( $tab_data, null ); ?> >
+
+			<ul class="main pngx-tabs-nav">
+
+				<?php //Create Tabs
+				foreach ( $this->get_tabs() as $tab_slug => $tab ) {
+					echo '<li><a href="#' . esc_attr( $tab_slug ) . '">' . esc_attr( $tab ) . '</a></li>';
+				}
+				?>
+			</ul>
+
+			<?php foreach ( $this->get_tabs() as $tab_slug => $tab ) {
+
+				//set variable for template area
+				$template_area = '';
+				?>
+
+				<div class="pngx-section-fields form-table">
+
+					<h2 class="pngx-tab-heading-<?php echo esc_attr( $tab_slug ); ?>"><?php echo esc_attr( $tab ); ?></h2>
+
+					<?php
+
+					/**
+					 * Hook to connect help section into a tab
+					 *
+					 * @parm $tab_slug string of current slug
+					 */
+					do_action( 'pngx_per_tab_help', $tab_slug );
+
+					$fields = $this->get_fields();
+
+					foreach ( $fields as $field ) {
+
+						if (
+							isset( $field['section'] ) &&
+							$field['type'] && $field['section'] === $metabox['id'] &&
+							(
+								isset( $field['tab'] ) &&
+								$tab_slug === $field['tab']
+							)
+						) {
+							// get value of this field if it exists for this post
+							$meta = get_post_meta( $post->ID, $field['id'], true );
+
+							//Wrap Class for Conditionals
+							$wrapclass = isset( $field['wrapclass'] ) ? $field['wrapclass'] : '';
+
+							//Template Wrap for AJAX
+							if ( "template_start" === $field['type'] ) {
+								//Start Template Section Wrap and set value for templates
+								$template_select = get_post_meta( $post->ID, $wrapclass, true );
+								/**
+								 * Filter Default Template Name
+								 */
+								$default       = apply_filters( 'pngx-default-template', 'default' );
+								$template_area = ! empty( $template_select ) ? $template_select : $default;
+								?>
+								<div class="pngx-meta-template-wrap template-wrap-<?php echo esc_html( $wrapclass ); ?>" >
+								<?php
+								continue;
+
+							} elseif ( "template_end" === $field['type'] ) {
+								//End Template Section Wrap
+								$template_area = '';
+								?>
+								</div>
+								<?php
+								continue;
+							}
+
+							//if in template area only get fields with the template value
+							if ( $template_area ) {
+								$field_template = isset( $field['template'] ) ? $field['template'] : array();
+								if ( ! in_array( $template_area, $field_template ) ) {
+									continue;
+								}
+
+							} elseif ( ! $template_area && isset( $field['template'] ) ) {
+								//if not template area set, but there is a template then do not display the field
+								continue;
+							}
+
+							if ( 'wrap-start' === $field['type'] ) {
+								?>
+								<div class="pngx-meta-fields-wrap admin-field-wrap <?php echo esc_html( $wrapclass ); ?>" >
+								<?php
+								continue;
+
+							} elseif ( "wrap-end" === $field['type'] ) {
+
+								if ( isset( $field['desc'] ) && ! empty( $field['desc'] ) ) {
+									echo '<span class="description">' . esc_html( $field['desc'] ) . '</span>';
+								}
+
+								// Display admin linked style fields
+								Pngx__Admin__Style__Linked::display_styles( $fields, $field, $post->ID );
+								?>
+								</div>
+								<?php
+								continue;
+							}
+
+							?>
+
+							<div class="pngx-meta-field-wrap field-wrap-<?php echo esc_html( $field['type'] ); ?> field-wrap-<?php echo esc_html( $field['id'] ); ?> <?php echo esc_html( $wrapclass ); ?>"
+								<?php echo isset( $field['toggle'] ) ? Pngx__Admin__Fields::toggle( $field['toggle'], esc_attr( $field['id'] ) ) : null; ?> >
+
+								<div class="pngx-meta-field field-<?php echo esc_attr( $field['type'] ); ?> field-<?php echo esc_attr( $field['id'] ); ?>">
+
+									<?php if ( isset( $field['label'] ) && ! empty( $field['label'] ) ) { ?>
+										<label for="<?php echo esc_attr( $field['id'] ); ?>">
+											<?php echo esc_attr( $field['label'] ); ?>
+										</label>
+									<?php } ?>
+
+									<?php
+
+									Pngx__Admin__Fields::display_field( $field, false, false, $meta, null );
+
+									// Display admin linked style fields
+									Pngx__Admin__Style__Linked::display_styles( $fields, $field, $post->ID );
+
+									?>
+
+								</div>
+								<!-- end .pngx-meta-field.field-<?php echo esc_attr( $field['type'] ); ?>.field-<?php echo esc_attr( $field['id'] ); ?> -->
+
+							</div> <!-- end .pngx-meta-field-wrap.field-wrap-<?php echo esc_attr( $field['type'] ); ?>.field-wrap-<?php echo esc_attr( $field['id'] ); ?>	-->
+
+							<?php
+						}//end if in section check
+
+					} // end foreach fields?>
+
+				</div>    <!-- end .pngx-section-fields.form-table -->
+
+			<?php } // end foreach tabs
+			?>
+
+		</div>    <!-- end .pngx-tabs -->
+
+		<?php echo ob_get_clean();
+	}
+
+	/*
+	* Save Meta Fields
+	*/
+	public function save_meta( $post_id, $post ) {
+
+		//Autosave or no past variable then kick out
+		if ( empty( $_POST ) || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) ) {
+			return;
+		}
+
+		//Check if on the right post type
+		if ( isset( $post->post_type ) && ! in_array( $post->post_type, $this->get_post_types() ) ) {
+			return;
+		}
+
+		//Check if the user can make edits
+		if ( ! current_user_can( $this->get_user_capability(), $post->ID ) ) {
+			return;
+		}
+
+		//Verify Nonce
+		if ( isset( $_POST['pngx_nonce'] ) && ! wp_verify_nonce( $_POST['pngx_nonce'], 'pngx_save_fields' ) && ( isset( $_POST['_inline_edit'] ) && ! wp_verify_nonce( $_POST['_inline_edit'], 'inlineeditnonce' ) ) ) {
+			return;
+		}
+
+		/**
+		 * Before Save Meta Fields
+		 *
+		 * @param array $_POST
+		 *
+		 */
+		do_action( 'pngx_before_save_meta_fields', $_POST );
+
+		//Save Date for each file
+		foreach ( $this->get_fields() as $option ) {
+
+			/**
+			 * Save Meta Fields
+			 *
+			 *
+			 * @param int   $post_id
+			 * @param array $option
+			 *
+			 */
+			do_action( 'pngx_save_meta_fields', $post_id, $option );
+
+			//handle check box saving
+			if ( $option['type'] == 'checkbox' ) {
+
+				$checkbox = get_post_meta( $post_id, $option['id'], true );
+
+				if ( $checkbox && ! isset( $_POST[ $option['id'] ] ) ) {
+					delete_post_meta( $post_id, $option['id'] );
+				}
+
+			}
+
+			// Final Check if value should be saved then sanitize and save
+			if ( isset( $_POST[ $option['id'] ] ) ) {
+				//Send Input to Sanitize Class, will return sanitized input or no input if no sanitization method
+				$sanitized = new Pngx__Sanitize( $option['type'], $_POST[ $option['id'] ], $option );
+
+				$old = get_post_meta( $post_id, $option['id'], true );
+
+				$new = $_POST[ $option['id'] ];
+
+				if ( ! is_null( $new ) && $new != $old ) {
+					update_post_meta( $post_id, $option['id'], $sanitized->result );
+				} elseif ( '' == $new && $old ) {
+					delete_post_meta( $post_id, $option['id'], $old );
+				}
+
+			}
+		}
+
+		/**
+		 * After Save Meta Fields
+		 *
+		 * @param array $_POST
+		 *
+		 */
+		do_action( 'pngx_after_save_meta_fields', $_POST );
+
+	}
+
+	/**
+	 * Static Singleton Factory Method
+	 *
+	 * @return self
+	 */
+	public static function instance() {
+		if ( ! self::$instance ) {
+			self::$instance = new self;
+		}
+
+		return self::$instance;
+	}
+
+}

+ 132 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Notice/Plugin_Download.php

@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Shows an admin notice telling users which requisite plugins they need to download
+ *
+ * Based off Modern Tribe's Tribe__Admin__Notice__Plugin_Download
+ *
+ * @since 3.0
+ */
+class Pngx__Admin__Notice__Plugin_Download {
+
+	private $plugin_path;
+
+	private $plugins_required = array();
+
+	/**
+	 * @param string $plugin_path Path to the plugin file we're showing a notice for
+	 */
+	public function __construct( $plugin_path ) {
+		$this->plugin_path = $plugin_path;
+
+		pngx_notice(
+			plugin_basename( $plugin_path ),
+			array( $this, 'show_inactive_plugins_alert' )
+		);
+	}
+
+	/**
+	 * Add a required plugin to the notice
+	 *
+	 * @since 4.8.3 Method introduced.
+	 * @since 4.9 Added $version and $addon parameters.
+	 *
+	 * @param string $name         Name of the required plugin
+	 * @param null   $thickbox_url Download or purchase URL for plugin from within /wp-admin/ thickbox
+	 * @param bool   $is_active    Indicates if the plugin is installed and active or not
+	 * @param string $version      Optional version number of the required plugin
+	 * @param bool   $addon        Indicates if the plugin is an add-on for The Events Calendar or Event Tickets
+	 */
+	public function add_required_plugin( $name, $thickbox_url = null, $is_active = null, $version = null, $addon = false ) {
+		$this->plugins_required[ $name ] = array(
+			'name'         => $name,
+			'thickbox_url' => $thickbox_url,
+			'is_active'    => $is_active,
+			'version'      => $version,
+			'addon'        => $addon,
+		);
+	}
+
+	/**
+	 * Echoes the admin notice, attach to admin_notices
+	 */
+	public function show_inactive_plugins_alert() {
+		if ( ! current_user_can( 'activate_plugins' ) ) {
+			return;
+		}
+
+		$plugin_data = get_plugin_data( $this->plugin_path );
+		$req_plugins = array();
+
+		if ( empty( $this->plugins_required ) ) {
+			return;
+		}
+
+		foreach ( $this->plugins_required as $req_plugin ) {
+			$item    = $req_plugin['name'];
+			$version = empty( $req_plugin['version'] ) ? '' : ' (' . str_replace( '-dev', '', $req_plugin['version'] ) . ')';
+
+			if ( ! empty( $req_plugin['thickbox_url'] ) ) {
+				$item = sprintf(
+					'<a href="%1$s" class="thickbox" title="%2$s" target="_blank">%3$s%4$s</a>',
+					esc_attr( $req_plugin['thickbox_url'] ),
+					esc_attr( $req_plugin['name'] ),
+					esc_html( $item ),
+					esc_html( $version )
+				);
+			}
+
+			if ( false === $req_plugin['is_active'] ) {
+				$item = sprintf(
+					'<strong class="pngx-inactive-plugin">%1$s</strong>',
+					$item
+				);
+			}
+
+			if ( ! empty( $req_plugin['addon'] ) ) {
+				$plugin_name[] = $req_plugin['name'];
+			}
+
+			$req_plugins[] = $item;
+		}
+
+		// If empty then add in the default name.
+		if ( empty( $plugin_name[0] ) ) {
+			$plugin_name[] = $plugin_data['Name'];
+		}
+
+		$allowed_html = array(
+			'strong' => array(),
+			'a'      => array( 'href' => array(), 'target' => array() ),
+		);
+
+		printf(
+			'<div class="error pngx-notice pngx-dependency-error" data-plugin="%1$s"><p>'
+			. esc_html__( 'To begin using %2$s, please install and activate at least the following version(s) of %3$s.', 'plugin-engine' )
+			. '</p></div>',
+			esc_attr( sanitize_title( $plugin_data['Name'] ) ),
+			wp_kses( $this->implode_with_grammar( $plugin_name ), $allowed_html ),
+			wp_kses( $this->implode_with_grammar( $req_plugins ), $allowed_html )
+		);
+	}
+
+	/**
+	 * Implodes a list items using 'and' as the final separator and a comma everywhere else
+	 *
+	 * @param array $items List of items to implode
+	 *
+	 * @return string String of items
+	 */
+	public function implode_with_grammar( $items ) {
+		$separator   = _x( ', ', 'separator used in a list of items', 'plugin-engine' );
+		$conjunction = _x( ' and ', 'the final separator in a list of two or more items', 'plugin-engine' );
+		$output      = $last_item = array_pop( $items );
+
+		if ( $items ) {
+			$output = implode( $separator, $items ) . $conjunction . $last_item;
+		}
+
+		return $output;
+	}
+
+}

+ 589 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Notices.php

@@ -0,0 +1,589 @@
+<?php
+// Don't load directly
+defined( 'WPINC' ) or die;
+
+/**
+ * @since 3.0
+ */
+class Pngx__Admin__Notices {
+
+	/**
+	 * The name of the transient that will store transient notices.
+	 *
+	 * @since 3.0
+	 *
+	 * @var string
+	 */
+	public static $transient_notices_name = '_pngx_admin_notices';
+
+	/**
+	 * Whether, in this request, transient notices have been pruned already or not.
+	 *
+	 * @since 3.0
+	 *
+	 * @var bool
+	 */
+	protected $did_prune_transients = false;
+
+	/**
+	 * Static singleton variable
+	 *
+	 * @since 3.0
+	 *
+	 * @var self
+	 */
+	private static $instance;
+
+	/**
+	 * Static Singleton Factory Method
+	 *
+	 * @since 3.0
+	 *
+	 * @return self
+	 */
+	public static function instance() {
+		if ( ! isset( self::$instance ) ) {
+			self::$instance = new self;
+		}
+
+		return self::$instance;
+	}
+
+	/**
+	 * User Meta Key that stores which notices have been dimissed
+	 *
+	 * @since 3.0
+	 *
+	 * @var string
+	 */
+	public static $meta_key = 'pngx-dismiss-notice';
+
+	/**
+	 * Stores all the Notices and it's configurations
+	 *
+	 * @since 3.0
+	 *
+	 * @var array
+	 */
+	protected $notices = array();
+
+	/**
+	 * Register the Methods in the correct places
+	 *
+	 * @since 3.0
+	 *
+	 */
+	private function __construct() {
+		// Not in the admin we don't even care
+		if ( ! is_admin() ) {
+			return;
+		}
+
+		// Before we bail on the
+		add_action( 'wp_ajax_pngx_notice_dismiss', array( $this, 'maybe_dismiss' ) );
+
+		// Doing AJAX? bail.
+		if ( pngx( 'context' )->doing_ajax() ) {
+			return;
+		}
+
+		// Hook the actual rendering of notices
+		add_action( 'current_screen', array( $this, 'hook' ), 20 );
+
+		// Add our notice dismissal script
+		pngx_asset(
+			Pngx__Main::instance(),
+			'pngx-notice-dismiss',
+			'notice-dismiss.js',
+			array( 'jquery' ),
+			'admin_enqueue_scripts'
+		);
+	}
+
+	/**
+	 * This will happen on the `current_screen` and will hook to the correct actions and display the notices
+	 *
+	 * @since 3.0
+	 *
+	 * @return void
+	 */
+	public function hook() {
+		$transients = $this->get_transients();
+
+		foreach ( $transients as $slug => $transient ) {
+			list( $html, $args, $expire ) = $transient;
+			if ( $expire < time() ) {
+				continue;
+			}
+			$this->register( $slug, $html, $args );
+		}
+
+		foreach ( $this->notices as $notice ) {
+			if ( $notice->dismiss && $this->has_user_dimissed( $notice->slug ) ) {
+				continue;
+			}
+
+			if (
+				! empty( $notice->active_callback )
+				&& is_callable( $notice->active_callback )
+				&& false == call_user_func( $notice->active_callback )
+			) {
+				continue;
+			}
+
+			add_action( $notice->action, $notice->callback, $notice->priority );
+		}
+	}
+
+	/**
+	 * This will allow the user to Dimiss the Notice using JS.
+	 *
+	 * We will dismiss the notice without checking to see if the slug was already
+	 * registered (via a call to exists()) for the reason that, during a dismiss
+	 * ajax request, some valid notices may not have been registered yet.
+	 *
+	 * @since 3.0
+	 *
+	 * @return void
+	 */
+	public function maybe_dismiss() {
+		if ( empty( $_GET[ self::$meta_key ] ) ) {
+			wp_send_json( false );
+		}
+
+		$slug = sanitize_title_with_dashes( $_GET[ self::$meta_key ] );
+
+		// Send a JSON answer with the status of dimissal
+		wp_send_json( $this->dismiss( $slug ) );
+	}
+
+	/**
+	 * Allows a Magic to remove the Requirement of creating a callback
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string $name       Name of the Method used to create the Slug of the Notice
+	 * @param  array  $arguments  Which arguments were used, normally empty
+	 *
+	 * @return string
+	 */
+	public function __call( $name, $arguments ) {
+		// Transform from Method name to Notice number
+		$slug = preg_replace( '/render_/', '', $name, 1 );
+
+		if ( ! $this->exists( $slug ) ) {
+			return false;
+		}
+
+		$notice = $this->get( $slug );
+
+		if (
+			empty( $notice->active_callback )
+			|| (
+				is_callable( $notice->active_callback )
+				&& true == call_user_func( $notice->active_callback )
+		     )
+		) {
+			$content = $notice->content;
+			$wrap = isset( $notice->wrap ) ? $notice->wrap : false;
+
+			if ( is_callable( $content ) ) {
+				$content = call_user_func_array( $content, array( $notice ) );
+			}
+
+			// Return the rendered HTML
+			return $this->render( $slug, $content, false, $wrap );
+		}
+
+		return false;
+	}
+
+	/**
+	 * This is a helper to actually print the Message
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string      $slug    The Name of the Notice
+	 * @param  string      $content The content of the notice
+	 * @param  boolean     $return  Echo or return the content
+	 * @param  string|bool $wrap    An optional HTML tag to wrap the content.
+	 *
+	 * @return bool|string
+	 */
+	public function render( $slug, $content = null, $return = true, $wrap = false ) {
+		if ( ! $this->exists( $slug ) ) {
+			return false;
+		}
+
+		// Bail if we already rendered
+		if ( $this->is_rendered( $slug ) ) {
+			if ( $this->is_rendered_html( $slug, $content ) && ! $return ) {
+				echo $content;
+			}
+
+			return false;
+		}
+
+		$notice = $this->get( $slug );
+		$this->notices[ $slug ]->is_rendered = true;
+
+		$classes = array( 'pngx-dismiss-notice', 'notice' );
+		$classes[] = sanitize_html_class( 'notice-' . $notice->type );
+		$classes[] = sanitize_html_class( 'pngx-notice-' . $notice->slug );
+
+		if ( $notice->dismiss ) {
+			$classes[] = 'is-dismissible';
+		}
+
+		// Prevents Empty Notices
+		if ( empty( $content ) ) {
+			return false;
+		}
+
+		if ( is_string( $wrap ) ) {
+			$content = sprintf( '<%1$s>' . $content . '</%1$s>', $wrap );
+		}
+
+		$html = sprintf( '<div class="%s" data-ref="%s">%s</div>', implode( ' ', $classes ), $notice->slug, $content );
+
+		if ( ! $return ) {
+			echo $html;
+		}
+
+		return $html;
+	}
+
+	/**
+	 * This is a helper to print the message surrounded by `p` tags.
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string  $slug    The Name of the Notice
+	 * @param  string  $content The content of the notice
+	 * @param  boolean $return  Echo or return the content
+	 *
+	 * @return boolean|string
+	 */
+	public function render_paragraph( $slug, $content = null, $return = true ) {
+		return $this->render( $slug, $content, $return, 'p' );
+	}
+
+	/**
+	 * Checks if a given notice is rendered
+	 *
+	 * @since  4.7.10
+	 *
+	 * @param  string  $slug  Which notice to check
+	 *
+	 * @return boolean
+	 */
+	public function is_rendered( $slug ) {
+		if ( ! $this->exists( $slug ) ) {
+			return false;
+		}
+
+		$notice = $this->get( $slug );
+
+		return isset( $notice->is_rendered ) ? $notice->is_rendered : false;
+	}
+
+	/**
+	 * Checks if a given string is a notice rendered
+	 *
+	 * @since  4.7.10
+	 *
+	 * @param  string  $slug  Which notice to check
+	 * @param  string  $html  Which html string we are check
+	 *
+	 * @return boolean
+	 */
+	public function is_rendered_html( $slug, $html ) {
+		if ( ! $this->exists( $slug ) ) {
+			return false;
+		}
+
+		$search = sprintf( 'data-ref="%s"', $slug );
+
+		return false !== strpos( $html, $search );
+	}
+
+	/**
+	 * Checks if a given user has dimissed a given notice.
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string    $slug    The Name of the Notice
+	 * @param  int|null  $user_id The user ID
+	 *
+	 * @return boolean
+	 */
+	public function has_user_dimissed( $slug, $user_id = null ) {
+
+		if ( is_null( $user_id ) ) {
+			$user_id = get_current_user_id();
+		}
+
+		$dismissed_notices = get_user_meta( $user_id, self::$meta_key );
+
+		if ( ! is_array( $dismissed_notices ) ) {
+			return false;
+		}
+
+		if ( ! in_array( $slug, $dismissed_notices ) ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * A Method to actually add the Meta value telling that this notice has been dismissed
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string    $slug    The Name of the Notice
+	 * @param  int|null  $user_id The user ID
+	 *
+	 * @return boolean
+	 */
+	public function dismiss( $slug, $user_id = null ) {
+		if ( is_null( $user_id ) ) {
+			$user_id = get_current_user_id();
+		}
+
+		// If this user has dimissed we don't care either
+		if ( $this->has_user_dimissed( $slug, $user_id ) ) {
+			return true;
+		}
+
+		return add_user_meta( $user_id, self::$meta_key, $slug, false );
+	}
+
+	/**
+	 * Removes the User meta holding if a notice was dimissed
+	 *
+	 * @param  string    $slug    The Name of the Notice
+	 * @param  int|null  $user_id The user ID
+	 *
+	 * @return boolean
+	 */
+	public function undismiss( $slug, $user_id = null ) {
+		if ( is_null( $user_id ) ) {
+			$user_id = get_current_user_id();
+		}
+
+		// If this user has dimissed we don't care either
+		if ( ! $this->has_user_dimissed( $slug, $user_id ) ) {
+			return false;
+		}
+
+		return delete_user_meta( $user_id, self::$meta_key, $slug );
+	}
+
+	/**
+	 * Undismisses the specified notice for all users.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $slug
+	 *
+	 * @return int
+	 */
+	public function undismiss_for_all( $slug ) {
+		$user_query = new WP_User_Query( array(
+			'meta_key'   => self::$meta_key,
+			'meta_value' => $slug,
+		) );
+
+		$affected = 0;
+
+		foreach ( $user_query->get_results() as $user ) {
+			if ( $this->undismiss( $slug, $user->ID ) ) {
+				$affected++;
+			}
+		}
+
+		return $affected;
+	}
+
+	/**
+	 * Register a Notice and attach a callback to the required action to display it correctly
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string          $slug      Slug to save the notice
+	 * @param  callable|string $callback  A callable Method/Fuction to actually display the notice
+	 * @param  array           $arguments Arguments to Setup a notice
+	 * @param callable|null    $active_callback An optional callback that should return bool values
+	 *                                          to indicate whether the notice should display or not.
+	 *
+	 * @return stdClass
+	 */
+	public function register( $slug, $callback, $arguments = array(), $active_callback = null ) {
+		// Prevent weird stuff here
+		$slug = sanitize_title_with_dashes( $slug );
+
+		$defaults = array(
+			'callback'        => null,
+			'content'         => null,
+			'action'          => 'admin_notices',
+			'priority'        => 10,
+			'expire'          => false,
+			'dismiss'         => false,
+			'type'            => 'error',
+			'is_rendered'     => false,
+			'wrap'            => false,
+		);
+
+		$defaults['callback'] = array( $this, 'render_' . $slug );
+		$defaults['content'] = $callback;
+
+		if ( is_callable( $active_callback ) ) {
+			$defaults['active_callback'] = $active_callback;
+		}
+
+		// Merge Arguments
+		$notice = (object) wp_parse_args( $arguments, $defaults );
+
+		// Enforce this one
+		$notice->slug = $slug;
+
+		// Clean these
+		$notice->priority = absint( $notice->priority );
+		$notice->expire = (bool) $notice->expire;
+		$notice->dismiss = (bool) $notice->dismiss;
+
+		// Set the Notice on the array of notices
+		$this->notices[ $slug ] = $notice;
+
+		// Return the notice Object because it might be modified
+		return $notice;
+	}
+
+	/**
+	 * Create a transient Admin Notice easily.
+	 *
+	 * A transient admin notice is a "fire-and-forget" admin notice that will display once registered and
+	 * until dismissed (if dismissible) without need, on the side of the source code, to register it on each request.
+	 *
+	 * @since  4.7.7
+	 *
+	 * @param  string $slug      Slug to save the notice
+	 * @param  string $html      The notice output HTML code
+	 * @param  array  $arguments Arguments to Setup a notice
+	 * @param  int    $expire    After how much time (in seconds) the notice will stop showing.
+	 *
+	 * @return stdClass Which notice was registered
+	 */
+	public function register_transient( $slug, $html, $arguments = array(), $expire = null ) {
+		$notices          = $this->get_transients();
+		$notices[ $slug ] = array( $html, $arguments, time() + $expire );
+		$this->set_transients( $notices );
+	}
+
+	/**
+	 * Removes a transient notice based on its slug.
+	 *
+	 * @since 4.7.7
+	 *
+	 * @param string $slug
+	 */
+	public function remove_transient( $slug ) {
+		$notices = $this->get_transients();
+		unset( $notices[ $slug ] );
+		$this->set_transients( $notices );
+	}
+
+	/**
+	 * Removes a notice based on its slug.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $slug
+	 *
+	 * @return bool
+	 */
+	public function remove( $slug ) {
+		if ( ! $this->exists( $slug ) ) {
+			return false;
+		}
+
+		unset( $this->notices[ $slug ] );
+		return true;
+	}
+
+	/**
+	 * Gets the configuration for the Notices
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $slug
+	 *
+	 * @return array|null
+	 */
+	public function get( $slug = null ) {
+		// Prevent weird stuff here
+		$slug = sanitize_title_with_dashes( $slug );
+
+		if ( is_null( $slug ) ) {
+			return $this->notices;
+		}
+
+		if ( ! empty( $this->notices[ $slug ] ) ) {
+			return $this->notices[ $slug ];
+		}
+
+		return null;
+	}
+
+	/**
+	 * Checks if a given notice exists
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $slug
+	 *
+	 * @return bool
+	 */
+	public function exists( $slug ) {
+		return is_object( $this->get( $slug ) ) ? true : false;
+	}
+
+	/**
+	 * Returns an array of registered transient notices.
+	 *
+	 * @since 4.7.7
+	 *
+	 * @return array An associative array in the shape [ <slug> => [ <html>, <args>, <expire timestamp> ] ]
+	 */
+	protected function get_transients() {
+		$transient = self::$transient_notices_name;
+		$notices   = get_transient( $transient );
+		$notices   = is_array( $notices ) ? $notices : array();
+
+		if ( $this->did_prune_transients ) {
+			$this->did_prune_transients = true;
+			foreach ( $notices as $key => $notice ) {
+				list( $html, $args, $expire_at ) = $notice;
+
+				if ( $expire_at < time() ) {
+					unset( $notices[ $key ] );
+				}
+			}
+		}
+
+		return $notices;
+	}
+
+	/**
+	 * Updates/sets the transient notices transient.
+	 *
+	 * @since 4.7.7
+	 *
+	 * @param array $notices An associative array in the shape [ <slug> => [ <html>, <args>, <expire timestamp> ] ]
+	 */
+	protected function set_transients( $notices ) {
+		$transient = self::$transient_notices_name;
+		set_transient( $transient, $notices, MONTH_IN_SECONDS );
+	}
+}

+ 449 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Options.php

@@ -0,0 +1,449 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Options' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Options
+ * Create, Save, Display Options
+ */
+class Pngx__Admin__Options {
+
+	protected static $instance;
+	/*
+	* Tab Sections
+	*/
+	protected $sections;
+	/*
+	* Checkbox Fields
+	*/
+	protected $checkboxes;
+	/*
+	* Option Fields
+	*/
+	public $fields;
+
+	/*
+	* Options Page Slug
+	*/
+	protected $options_slug = 'plugin-engine-options';
+
+	/*
+	* Options ID
+	*/
+	protected $options_id = Pngx__Main::OPTIONS_ID;
+
+	/*
+	* Field Prefix
+	*/
+	protected $field_prefix = 'pngx_';
+
+
+	/*
+	* Construct
+	*/
+	public function __construct() {
+
+		$this->checkboxes = array();
+
+		add_action( 'admin_menu', array( $this, 'options_page' ) );
+		add_action( 'admin_init', array( $this, 'register_options' ), 15 );
+
+		if ( ! get_option( $this->options_id ) ) {
+			add_action( 'admin_init', array( $this, 'set_defaults' ), 10 );
+		}
+
+		add_action( 'pngx_before_option_form', array( $this, 'display_options_header' ), 5 );
+		add_action( 'pngx_after_option_form', array( $this, 'display_options_footer' ), 5 );
+
+	}
+
+	/**
+	 * Setup Options Page
+	 */
+	public function options_page() {
+
+		$admin_page = add_submenu_page( 'options-general.php', // parent_slug
+			'Plugin Engine Options', // page_title __( 'use translation', 'plugin-engine' )
+			'Plugin Engine', // menu_title __( 'use translation', 'plugin-engine' )
+			'manage_options', // capability
+			$this->options_slug, // menu_slug
+			array( $this, 'display_fields' ) // function
+		);
+
+		add_action( 'admin_print_scripts-' . $admin_page, pngx_callback( 'admin.assets', 'load_assets' ) );
+
+	}
+
+	/*
+	* Register Options
+	*/
+	public function register_options() {
+
+		//Set options and sections here so they can be translated
+		$this->fields = $this->get_option_fields();
+		$this->set_sections();
+
+		register_setting( $this->options_id, $this->options_id, array( $this, 'validate_options' ) );
+
+		foreach ( $this->sections as $slug => $title ) {
+			//set to this an empty method as this ignores the WordPress Setting Sections
+			add_settings_section( $slug, $title, array( $this, 'display_section' ), $this->options_slug );
+		}
+
+		foreach ( $this->fields as $id => $option ) {
+			$option['id'] = $id;
+			$this->create_field( $option );
+		}
+
+	}
+
+	/*
+	* Display Section
+	*/
+	public function display_section() {
+		//Empty Method that is need to prevent infinite redirects
+	}
+
+	/*
+	* Get Section Tabs
+	*/
+	public function set_sections() {
+		//Section Tab Headings
+		$this->sections['defaults'] = 'Defaults'; // use __( 'use translation', 'plugin-engine' )
+	}
+
+	/*
+	* Get Section Tabs
+	*/
+	public function get_sections() {
+		return $this->sections;
+	}
+
+	/*
+	* Individual Fields Framework
+	*/
+	public function create_field( $args = array() ) {
+
+		$defaults = array(
+			'id'        => 'default_id',
+			'title'     => 'Default', //__( 'use translation', 'plugin-engine' )
+			'desc'      => 'This is a default description.', //__( 'use translation', 'plugin-engine' )
+			'section'   => 'general',
+			'alert'     => '',
+			'condition' => '',
+			'std'       => '',
+			'type'      => 'text',
+			'choices'   => array(),
+			'class'     => '',
+			'imagemsg'  => '',
+			'size'      => 35,
+			'toggle'    => array(),
+		);
+
+		$field_args = wp_parse_args( $args, $defaults );
+
+		if ( $field_args['type'] == 'checkbox' ) {
+			$this->checkboxes[] = $field_args['id'];
+		}
+
+		add_settings_field( $field_args['id'], $field_args['title'], array(
+			$this,
+			'display_field'
+		), $this->options_slug, $field_args['section'], $field_args );
+	}
+
+	/*
+	* Option Fields
+	*/
+	public function get_option_fields() {
+
+		//Expiration
+		$fields['header_expiration'] = array(
+			'section' => 'defaults',
+			'title'   => '',
+			'desc'    => 'Heading', //__( 'use translation', 'plugin-engine' )
+			'type'    => 'heading'
+		);
+		$fields['plugin_text_field'] = array(
+			'section' => 'defaults',
+			'title'   => 'Text Field', //__( 'use translation', 'plugin-engine' )
+			'desc'    => 'Enter Text', //__( 'use translation', 'plugin-engine' )
+			'std'     => '',
+			'type'    => 'text',
+			'class'   => ''
+		);
+
+		return $fields;
+
+	}
+
+	/*
+	* Validate Options
+	*/
+	public function validate_options( $input ) {
+
+		$clean = array();
+
+		//if Reset is Checked then delete all options
+		if ( ! isset( $input['reset_theme'] ) ) {
+
+			//If No CheckBox Sent, then Unset the Option
+			$options = get_option( $this->options_id );
+
+			foreach ( $this->checkboxes as $id ) {
+				if ( isset( $options[ $id ] ) && ! isset( $input[ $id ] ) ) {
+					// if permalinks should be flushed when deactivating option
+					if ( isset( $this->fields[ $id ]['class'] ) && 'flush' === $this->fields[ $id ]['class'] ) {
+						update_option( 'pngx_permalink_change', true );
+					}
+					unset( $options[ $id ] );
+				}
+			}
+
+			//$id is option name - $option is array of values from $this->fields
+			foreach ( $this->fields as $id => $option ) {
+
+				if ( isset( $option['class'] ) ) {
+					// Change Permalink Class Options to Lowercase
+					if ( 'permalink' === $option['class'] ) {
+						$input[ $id ] = str_replace( " ", "-", strtolower( trim( $input[ $id ] ) ) );
+						//if option is new then set to flush permalinks
+						if ( isset( $options[ $id ] ) && ( $options[ $id ] != $input[ $id ] ) ) {
+							update_option( 'pngx_permalink_change', true );
+						}
+					}
+
+					if ( 'flush' === $option['class'] && ( ! empty( $options[ $id ] ) != ! empty( $input[ $id ] ) ) ) {
+						update_option( 'pngx_permalink_change', true );
+					}
+				}
+
+
+				//Prevent Placeholder From Saving in Option for Text Areas
+				if ( "textarea" == $option['type'] ) {
+					if ( $input[ $id ] == $option['std'] ) {
+						$input[ $id ] = false;
+					}
+				}
+
+				// Create Separate License Option and Status
+				if ( 'license' == $option['type'] && isset( $input[ $id ] ) ) {
+
+					//Send Input to Sanitize Class, will return sanitized input or no input if no sanitization method
+					$sanitize = new Pngx__Sanitize( $option['type'], $input[ $id ], $option );
+
+					$license_info = array();
+
+					//License WP Option Name
+					$license = $this->field_prefix . $option['class'];
+
+					//License Key
+					$license_info['key'] = $sanitize->result;
+
+					//Get Existing Option
+					$existing_license = get_option( $license );
+
+					if ( ! $existing_license['key'] ) {
+
+						update_option( $license, $license_info );
+
+					} elseif ( $existing_license['key'] && $existing_license['key'] != $license_info['key'] ) {
+
+						delete_option( $license );
+
+						update_option( $license, $license_info );
+
+					}
+
+					// Remove to not save with Option Array
+					$input[ $id ] = "";
+				}
+
+				// Handle License Status
+				if ( $option['type'] == 'license_status' ) {
+					// Remove to not save with Option Array
+					$input[ $id ] = "";
+				}
+
+				// Sanitization Filter for each Option Type
+				if ( isset( $input[ $id ] ) && 'license' != $option['type'] && 'license_status' != $option['type'] ) {
+
+					//Send Input to Sanitize Class, will return sanitized input or no input if no sanitization method
+					$sanitize = new Pngx__Sanitize( $option['type'], $input[ $id ], $option );
+
+					//Set Sanitized Input in Array
+					$clean[ $id ] = $sanitize->result;
+
+				}
+
+			}
+
+			return $clean;
+		}
+
+		//Set Option to Flush Permalinks on Next Load as Reset was checked
+		update_option( 'pngx_permalink_change', true );
+
+		return false;
+
+	}
+
+	/*
+	* Display Fields
+	*/
+	public function display_fields() {
+
+		global $wp_version;
+
+		//Create Array of Tabs and Localize to Meta Script
+		$tabs_array = array();
+
+		foreach ( $this->sections as $tab_slug => $tab ) {
+			$tabs_array[ $tab ] = $tab_slug;
+		}
+
+		$tab_data = array(
+			'tabs'           => $tabs_array,
+			'update_message' => get_settings_errors(),
+			'id'             => 'pngx-options',
+			'wp_version'     => $wp_version,
+		);
+
+		echo '<div class="wrap pngx-wrapper">';
+
+		/**
+		 * Before Plugin Engine Options Form
+		 *
+		 * @param string $this ->options_slug options page string
+		 */
+		do_action( 'pngx_before_option_form', $this->options_slug );
+
+		echo '<form action="options.php" method="post">';
+
+		settings_fields( $this->options_id );
+
+		echo '<div class="main pngx-tabs" ' . Pngx__Admin__Fields::toggle( $tab_data, null ) . '>';
+
+		echo '<ul class="main pngx-tabs-nav">';
+
+		foreach ( $this->sections as $section_slug => $section ) {
+			echo '<li><a href="#' . $section_slug . '">' . $section . '</a></li>';
+		}
+
+		echo '</ul>';
+
+		do_settings_sections( $_GET['page'] );
+
+		echo '</div><!-- .pngx-tabs -->';
+
+		echo '<p class="submit"><input name="Submit" type="submit" class="button-primary" value="' . __( 'Save Changes' ) . '" /></p>';
+
+		echo '</form>';
+
+		/**
+		 * After Plugin Engine Options Form
+		 *
+		 * @param string $this ->options_slug options page string
+		 */
+		do_action( 'pngx_after_option_form', $this->options_slug );
+
+		echo '</div><!-- .wrap -->';
+
+	}
+
+
+	/*
+	 * Options Header
+	 *
+	 */
+	public function display_options_header( $slug ) {
+
+		if ( 'plugin-engine-options' == $slug ) {
+			echo '<h1>Plugin Engine Options</h1>';
+		}
+
+	}
+
+	/*
+	 * Option Footer Fields
+	 *
+	 */
+	public function display_options_footer() {
+
+		echo '<p style="text-align:right;">&copy; ' . date( "Y" ) . ' Jessee Productions, LLC</p>';
+
+	}
+
+	/*
+	* Display Individual Fields
+	*/
+	public function display_field( $field = array() ) {
+
+		$options = get_option( $this->options_id );
+
+		if ( ! isset( $options[ $field['id'] ] ) && 'checkbox' != $field['type'] ) {
+			$options[ $field['id'] ] = $field['std'];
+		} elseif ( ! isset( $options[ $field['id'] ] ) ) {
+			$options[ $field['id'] ] = 0;
+		}
+
+		Pngx__Admin__Fields::display_field( $field, $options, $this->options_id, false, null );
+
+	}
+
+	/*
+	 * Set Default Options
+	 */
+	public function set_defaults() {
+		$this->initialize_options();
+	}
+
+	/*
+	* Initialize Options and Default Values
+	*/
+	public function initialize_options() {
+
+		$default_options = array();
+		$this->fields    = $this->get_option_fields();
+
+		if ( is_array( $this->fields ) ) {
+
+			foreach ( $this->fields as $id => $option ) {
+
+				if ( 'heading' != $option['type'] && isset( $option['std'] ) ) {
+
+					//Sanitize Default
+					$pngx_sanitize = new Pngx__Sanitize( $option['type'], $option['std'], $option );
+
+					//Set Sanitized Input in Array
+					$default_options[ $id ] = $pngx_sanitize->result;
+				}
+
+			}
+
+			update_option( $this->options_id, $default_options );
+		}
+
+	}
+
+	/**
+	 * Static Singleton Factory Method
+	 *
+	 * @return self
+	 */
+	public static function instance() {
+		if ( ! self::$instance ) {
+			self::$instance = new self;
+		}
+
+		return self::$instance;
+	}
+
+
+}

+ 249 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Plugin_License_List.php

@@ -0,0 +1,249 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Plugin Version Validate License from Plugin Page
+ *
+ */
+class Pngx__Admin__Plugin_License_List {
+
+	protected $file;
+	protected $plugin_name;
+
+	/**
+	 * Class constructor
+	 *
+	 */
+	public function __construct( $file, $license_key, $plugin_name, $status_name, $options, $shop_url, $links = array() ) {
+
+		$this->basename = plugin_basename( $file );
+		$this->file     = basename( dirname( $file ) );
+
+		$this->license_key     = $license_key;
+		$this->license_info    = get_option( $this->license_key );
+		$this->plugin_name     = $plugin_name;
+		$this->status_name     = $status_name;
+		$this->options         = $options;
+		$this->shop_url        = $shop_url;
+		$this->links           = $links;
+		$this->deactivate_link = '';
+		$this->deactivate_msg  = __( 'Please deactivate the license key to deactivate this plugin', 'plugin-engine' );
+
+		//Modify Plugin Links
+		add_filter( 'plugin_action_links_' . $file, array( $this, 'plugin_links' ), 10 );
+
+		//Add License Key Field
+		add_action( 'after_plugin_row_' . $file, array( $this, 'license_key' ), 10 );
+
+	}
+
+	public function plugin_links( $links ) {
+
+		//Save Deactivate Link
+		if ( isset( $links['deactivate'] ) ) {
+			$this->deactivate_link = $links['deactivate'];
+		}
+
+		$plugin_links = array();
+
+		if ( ! empty( $this->links ) ) {
+			foreach ( $this->links as $k => $link ) {
+
+				$plugin_links[] = '<a href="' . esc_url( get_admin_url() . $link ) . '">' . esc_html( $k ) . '</a>';
+
+			}
+
+		}
+
+		if ( isset( $this->license_info['status'] ) && ( 'valid' === $this->license_info['status'] ) ) {
+			$links['deactivate'] = $this->deactivate_msg;
+		}
+
+		foreach ( $plugin_links as $link ) {
+			array_unshift( $links, $link );
+		}
+
+		return $links;
+
+	}
+
+
+	public function license_key() {
+
+		$this->license_key_output();
+
+	}
+
+	/**
+	 * Display license key field
+	 *
+	 */
+	public function license_key_output() {
+
+		wp_enqueue_style( 'pngx-admin' );
+		wp_enqueue_script( 'pngx-license' );
+
+		?>
+		<tr id="<?php echo esc_attr( $this->file ); ?>-license-key-row" class="active pngx-license-list-key-wrapper" xmlns="http://www.w3.org/1999/html">
+			<td class="plugin-update" colspan="3">
+
+				<div class="pngx-license-list-key-wrap">
+					<div id="pngx-loading"><span></span></div>
+					<?php
+
+					$value = isset( $this->license_info['key'] ) ? $this->license_info['key'] : '';
+
+					$std = __( 'Enter License Key', 'plugin-engine' );
+
+					?>
+					<label
+							for="<?php echo esc_attr( $this->license_key ); ?>"
+					>
+						<?php echo esc_html__( 'License Key', 'plugin-engine' ); ?>
+					</label>
+					<input
+							type="text"
+							class="pngx-license-field"
+							id="<?php echo esc_attr( $this->license_key ); ?>"
+							name="<?php echo esc_attr( $this->license_key ); ?>"
+							placeholder="<?php echo esc_attr( $std ); ?>"
+							value="<?php echo esc_attr( $value ); ?>"
+							size="30"
+						<?php echo isset( $this->license_info['status'] ) && 'valid' === $this->license_info['status'] ? 'readonly' : ''; ?>
+					/>
+
+					<?php
+
+
+					$expiration_msg = $expiration_date = '';
+
+					if ( isset( $this->license_info['expires'] ) ) { // Only Display Expiration if Date
+						$expiration_date = strtotime( $this->license_info['expires'] );
+						$expiration_date = date( get_option( 'date_format' ), $expiration_date );
+						$expiration_msg  = sprintf( __( ' and Expires on %s', 'plugin-engine' ), esc_attr( $expiration_date ) );
+					}
+
+					?>
+
+					<input
+							type="hidden"
+							class="pngx-license-field pngx_license_key"
+							name="pngx_license_key"
+							value="<?php echo esc_attr( $this->license_key ); ?>"
+					/>
+
+					<input
+							type="hidden"
+							class="pngx-license-field pngx_license_name"
+							name="pngx_license_name"
+							value="<?php echo esc_attr( $this->plugin_name ); ?>"
+					/>
+
+					<input
+							type="hidden"
+							class="pngx-license-field pngx_shop_url"
+							name="pngx_shop_url"
+							value="<?php echo esc_url( $this->shop_url ); ?>"
+					/>
+
+					<input
+							type="hidden"
+							class="pngx-license-field pngx_plugin_slug"
+							name="pngx_plugin_slug"
+							value="<?php echo esc_attr( $this->file ); ?>"
+					/>
+
+					<input
+							type="hidden"
+							class="pngx-license-field pngx_deactivate_link"
+							name="pngx_deactivate_link"
+							value="<?php echo esc_attr( htmlspecialchars( $this->deactivate_link ) ); ?>"
+					/>
+
+					<input
+							type="hidden"
+							class="pngx-license-field pngx_deactivate_link_msg"
+							name="pngx_deactivate_link_msg"
+							value="<?php echo esc_attr( $this->deactivate_msg ); ?>"
+					/>
+
+
+					<?php
+
+					if ( isset( $this->license_info['status'] ) && 'valid' == $this->license_info['status'] ) {
+
+						?>
+
+						<input
+								type="hidden"
+								class="pngx-license-field pngx_license_action"
+								name="pngx_license_action"
+								value="deactivate_license"
+						/>
+
+						<div class="pngx-license-field pngx-list-license-button">
+							<?php echo esc_html__( 'Deactivate License', 'plugin-engine' ); ?>
+						</div>
+
+						<span class="pngx-license-field-msg">
+							<span class="pngx-success-msg">
+								<?php echo esc_html( __( 'License is Active', 'plugin-engine' ) . $expiration_msg ); ?>
+							</span>
+						</span>
+
+						<?php
+
+					} else {
+
+						if ( isset( $this->license_info['status'] ) && ( 'invalid' == $this->license_info['status'] || 'missing' == $this->license_info['status'] ) && ! $this->license_info['expired'] ) {
+							$license_info_valid = __( 'License is Invalid', 'plugin-engine' );
+						} elseif ( isset( $this->license_info['expired'] ) && 'expired' == $this->license_info['expired'] ) {
+							$license_info_valid = sprintf( __( 'License Expired on %s', 'plugin-engine' ), esc_attr( $expiration_date ) );
+						} else {
+							$license_info_valid = __( 'License is Not Active', 'plugin-engine' );
+						}
+
+						?>
+
+						<input
+								type="hidden"
+								class="pngx-license-field pngx_license_action"
+								name="pngx_license_action"
+								value="activate_license"
+						/>
+
+						<div class="pngx-license-field pngx-list-license-button">
+							<?php echo esc_html__( 'Activate License', 'plugin-engine' ); ?>
+						</div>
+						<span class="pngx-license-field-msg">
+							<span style="pngx-error-msg">
+								<?php echo esc_html( $license_info_valid ); ?>
+							</span>
+						</span>
+						<?php
+
+					}
+
+					if ( isset( $this->options[ $this->license_key ]['desc'] ) && "" != $this->options[ $this->license_key ]['desc'] ) {
+						?>
+						<div class="description">
+							<?php echo esc_html( $this->options[ $this->license_key ]['desc'] ); ?>
+						</div>
+						<?php
+					}
+
+					?>
+					<div class="pngx-license-field-result-msg">
+
+					</div>
+				</div>
+			</td>
+		</tr>
+		<?php
+	}
+
+}

+ 49 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Style/Linked.php

@@ -0,0 +1,49 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Admin__Style__Linked' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Admin__Style__Linked
+ * Admin Linked Style Fields
+ */
+class Pngx__Admin__Style__Linked {
+
+	public static function display_styles( $fields = array(), $field = array(), $post_id = null ) {
+
+		// Display Linked Style Fields
+		if ( isset( $field['styles'] ) && is_array( $field['styles'] ) ) {
+
+			?>
+			<div class="pngx-meta-field-styles field-<?php echo $field['type']; ?>-styles field-<?php echo $field['id']; ?>-styles">
+				<div class="inline-style-title"><?php echo esc_html__( 'Field Styles', 'coupon-creator-add-ons' ); ?></div>
+				<?php
+
+				foreach ( $field['styles'] as $type => $field_name ) {
+
+					if ( ! isset( $fields[ $field_name ] ) ) {
+						continue;
+					}
+
+					if ( 'font-color' === $type || 'background-color' === $type || 'background-color:hover' === $type ) {
+						$meta = get_post_meta( $post_id, $field_name, true );
+						Pngx__Admin__Field__Color::display( $fields[ $field_name ], false, false, $meta );
+					}
+
+				}
+
+				?>
+			</div>
+			<?php
+		}
+
+		return;
+
+	}
+
+}

+ 637 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Support.php

@@ -0,0 +1,637 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+/**
+ * Admin Support Info
+ * Based of Modern Tribe, Revisr, and EDD System Info
+ * the-events-calendar/common/src/Tribe/Support.php
+ * revisr/classes/class-revisr-admin.php
+ * easy-digital-downloads/includes/admin/tools.php
+ */
+if ( ! class_exists( 'Pngx__Admin__Support' ) ) {
+
+	class Pngx__Admin__Support {
+
+		public static $support;
+
+
+		private function __construct() {
+
+		}
+
+		public function get_system_info_copy() {
+			echo '<div class="pngx-system-info-copy" >
+						<button data-clipboard-action = "copy" class="pngx-system-info-copy-btn" data-clipboard-target = ".pngx-support-stats" >
+							<span class="dashicons dashicons-clipboard license-btn" ></span > ' . __( 'Copy to clipboard', 'tribe - common' ) . ' 
+						</button >
+					</div >';
+		}
+
+		/**
+		 * Collect system information for support
+		 *
+		 * @return array of system data for support
+		 */
+		public function get_support_stats() {
+
+			$systeminfo = array(
+				'Site'                   => $this->get_site_info(),
+				'WordPress'              => $this->get_wp_info(),
+				'System'                 => $this->get_site_server_info(),
+				'User'                   => $this->get_user_info(),
+				'Plugin Engine Settings' => $this->get_pngx_info(),
+				'Active Plugins'         => $this->get_plugins(),
+				'Inactive Plugins'       => $this->get_plugins( true ),
+				'Network Plugins'        => $this->get_network_plugins(),
+				'MU Plugins'             => $this->get_mu_plugins(),
+			);
+
+			$systeminfo = apply_filters( 'pngx-support-info', $systeminfo );
+
+			return $systeminfo;
+		}
+
+		/**
+		 * Render system information into a pretty output
+		 *
+		 * @return string pretty HTML
+		 */
+		public function formatted_support_stats() {
+			$systeminfo = $this->get_support_stats();
+			$output     = '';
+			$output .= '<dl class="pngx-support-stats">';
+			foreach ( $systeminfo as $k => $v ) {
+
+				switch ( $k ) {
+					case 'name' :
+					case 'email' :
+						continue 2;
+						break;
+					case 'url' :
+						$v = sprintf( '<a href="%s">%s</a>', $v, $v );
+						break;
+				}
+
+				if ( is_array( $v ) ) {
+					$keys             = array_keys( $v );
+					$key              = array_shift( $keys );
+					$is_numeric_array = is_numeric( $key );
+					unset( $keys );
+					unset( $key );
+				}
+
+				$output .= sprintf( '<dt>%s</dt>', $k );
+				if ( empty( $v ) ) {
+					$output .= '<dd class="support-stats-null">-</dd>';
+				} elseif ( is_bool( $v ) ) {
+					$output .= sprintf( '<dd class="support-stats-bool">%s</dd>', $v );
+				} elseif ( is_string( $v ) ) {
+					$output .= sprintf( '<dd class="support-stats-string">%s</dd>', $v );
+				} elseif ( is_array( $v ) && $is_numeric_array ) {
+					$output .= sprintf( '<dd class="support-stats-array"><ul><li>%s</li></ul></dd>', join( '</li><li>', $v ) );
+				} else {
+					$formatted_v = array();
+					foreach ( $v as $obj_key => $obj_val ) {
+						if ( is_array( $obj_val ) ) {
+							$formatted_v[] = sprintf( '<li>%s = <pre>%s</pre></li>', $obj_key, print_r( $obj_val, true ) );
+						} else {
+							$formatted_v[] = sprintf( '<li>%s = %s</li>', $obj_key, $obj_val );
+						}
+					}
+					$v = join( "\n", $formatted_v );
+					$output .= sprintf( '<dd class="support-stats-object"><ul>%s</ul></dd>', print_r( $v, true ) );
+				}
+			}
+			$output .= '</dl>';
+
+			return $output;
+		}
+
+
+		/**
+		 * Get a basic overview of site info
+		 *
+		 * @return array
+		 */
+		public function get_site_info() {
+			global $wpdb;
+
+			// Get theme info from EDD, thanks!
+			$theme_data   = wp_get_theme();
+			$theme        = $theme_data->Name . ' ' . $theme_data->Version;
+			$parent_theme = $theme_data->Template;
+			if ( ! empty( $parent_theme ) ) {
+				$parent_theme_data = wp_get_theme( $parent_theme );
+				$parent_theme      = $parent_theme_data->Name . ' ' . $parent_theme_data->Version;
+			}
+
+			$site                 = array();
+			$site['Active Theme'] = $theme;
+			if ( $parent_theme !== $theme ) {
+				$site['Parent Theme'] = $parent_theme;
+			}
+			$site['Character Set'] = get_option( 'blog_charset' );
+			$site['Home URL']      = get_home_url();
+			$site['Site URL']      = get_site_url();
+			$site['Site Language'] = get_option( 'WPLANG' ) ? get_option( 'WPLANG' ) : esc_html__( 'English', 'plugin-engine' );
+			$site['Table Prefix']  = 'Length: ' . strlen( $wpdb->prefix );
+
+			/**
+			 * Filter the Site Infomation for System Infomation
+			 *
+			 * @param $site array an array of site infomation
+			 */
+			$site = apply_filters( 'pngx-filter-system-info-site-infomation', $site );
+
+			return $site;
+
+		}
+
+		/**
+		 * Return WordPress Settings and Defaults
+		 *
+		 * @return array
+		 */
+		public function get_wp_info() {
+
+			$wordpress                           = array();
+			$wordpress['WordPress version']      = get_bloginfo( 'version' );
+			$wordpress['ABSPATH']                = ABSPATH;
+			$wordpress['Memory Limit']           = WP_MEMORY_LIMIT;
+			$wordpress['Multisite']              = is_multisite();
+			$wordpress['Permalink Structure']    = ( get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default' );
+			$wordpress['Registered Post Status'] = implode( ', ', get_post_stati() );
+			$wordpress['Show On Front']          = get_option( 'show_on_front' );
+			// Only show page specs if frontpage is set to 'page', from EDD, thanks!
+			if ( get_option( 'show_on_front' ) == 'page' ) {
+				$front_page_id               = get_option( 'page_on_front' );
+				$blog_page_id                = get_option( 'page_for_posts' );
+				$wordpress['Page On Front']  = ( $front_page_id != 0 ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset' );
+				$wordpress['Page For Posts'] = ( $blog_page_id != 0 ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset' );
+			}
+			$wordpress['Server Timezone'] = date_default_timezone_get();
+			$wordpress['WP Date Format']  = get_option( 'date_format' );
+			$wordpress['WP GMT Offset']   = get_option( 'gmt_offset' ) ? ' ' . get_option( 'gmt_offset' ) : esc_html__( 'Unknown or not set', 'plugin-engine' );
+			$wordpress['WP Time Format']  = get_option( 'time_format' );
+			$wordpress['WP Timezone']     = get_option( 'timezone_string' ) ? get_option( 'timezone_string' ) : esc_html__( 'Unknown or not set', 'plugin-engine' );
+			$wordpress['Week Starts On']  = get_option( 'start_of_week' );
+			$wordpress['WP_DEBUG']        = ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set' );
+
+
+			/**
+			 * Filter the WordPress Settings for System Information
+			 *
+			 * @param $site array an array of WordPress settings
+			 */
+			$wordpress = apply_filters( 'pngx-filter-system-info-wordpress-infomation', $wordpress );
+
+			return $wordpress;
+
+		}
+
+		/**
+		 * Get basic server, database and php information
+		 *
+		 * @return array
+		 */
+		public function get_site_server_info() {
+			global $wpdb;
+
+			//Server Information
+			$server = array();
+
+			// OS
+			$os                         = $this->get_os();
+			$server['Operating System'] = $os['name'];
+			$server['SAPI']             = php_sapi_name();
+			$server['Server User']      = $this->get_user();
+			$server['Server Software']  = $_SERVER['SERVER_SOFTWARE'];
+
+			//MYSQL
+			$server['MySQL Version']      = $wpdb->db_version();
+			$server['MySQL Install Path'] = $this->guess_path( 'mysql' );
+
+			//PHP Info
+			$server['PHP version'] = phpversion();
+
+			if ( function_exists( 'exec' ) ) {
+				$exec = 'Enabled';
+			} else {
+				$exec = 'Disabled';
+			}
+			$server['Exec Enabled'] = $exec;
+			$php_vars               = array(
+				'display_errors',
+				'log_errors',
+				'max_execution_time',
+				'max_input_vars',
+				'memory_limit',
+				'post_max_size',
+				'safe_mode',
+				'upload_max_filesize',
+			);
+			foreach ( $php_vars as $php_var ) {
+				if ( isset( $wpdb->qm_php_vars ) && isset( $wpdb->qm_php_vars[ $php_var ] ) ) {
+					$val = $wpdb->qm_php_vars[ $php_var ];
+				} else {
+					$val = ini_get( $php_var );
+				}
+				$server[ $php_var ] = $val;
+			}
+
+			/**
+			 * Filter the Server Settings for Server Information
+			 *
+			 * @param $site array an array of Server settings
+			 */
+			$server = apply_filters( 'pngx-filter-system-info-server-infomation', $server );
+
+			return $server;
+
+		}
+
+		/**
+		 * Get Basic Infomation about Current User
+		 *
+		 * @return array
+		 */
+		public function get_user_info() {
+
+			if ( ! class_exists( 'Pngx_Browser' ) ) {
+				require_once Pngx__Main::instance()->vendor_path . 'browser/browser.php';
+			}
+
+			$browser = new Pngx_Browser();
+
+			$user                           = wp_get_current_user();
+			$user_info                      = array();
+			$user_info['Name']              = $user->display_name;
+			$user_info['Email']             = $user->user_email;
+			$user_info['Browser Name']      = $browser->_browser_name;
+			$user_info['Browser Version']   = $browser->_version;
+			$user_info['User Agent String'] = $browser->_agent;
+			$user_info['Platform']          = $browser->_platform;
+
+			/**
+			 * Filter the User Information for System Information
+			 *
+			 * @param $site array an array of User Information
+			 */
+			$user_info = apply_filters( 'pngx-filter-system-info-user-infomation', $user_info );
+
+			return $user_info;
+
+		}
+
+		/**
+		 * Get Infomation about the Plugin Engine
+		 *
+		 * @return array
+		 */
+		public function get_pngx_info() {
+
+			$pngx                                  = array();
+			$pngx['Plugin Engine Library Dir']     = $GLOBALS['plugin-engine-info']['dir'];
+			$pngx['Plugin Engine Library Version'] = $GLOBALS['plugin-engine-info']['version'];
+			$pngx['Plugin Engine Permalink Flush'] = get_option( 'pngx_permalink_flush' );
+
+			/**
+			 * Filter the Plugin Engine Settings for System Information
+			 *
+			 * @param $site array an array of Plugin Engine Settings
+			 */
+			$pngx = apply_filters( 'pngx-filter-system-info-pngx-settings', $pngx );
+
+			return $pngx;
+
+		}
+
+
+		/**
+		 * Add License Keys to System Info
+		 *
+		 * @return array|mixed
+		 */
+		public function get_key() {
+
+			$keys = apply_filters( 'pngx-system-info-license-keys', array() );
+			//Obfuscate the License Keys for Security
+			if ( is_array( $keys ) && ! empty( $keys ) ) {
+				$secure_keys = array();
+				foreach ( $keys as $plugin => $license ) {
+
+					if ( isset( $license['key'] ) ) {
+						$license['key'] = preg_replace( '/^(.{4}).*(.{4})$/', '$1' . str_repeat( '#', 32 ) . '$2', $license['key'] );
+					}
+					if ( is_array( $license ) ) {
+						$secure_keys[ $plugin ] = implode( ', ', $license );
+					}
+				}
+
+				$keys = $secure_keys;
+			}
+
+			/**
+			 * Filter the License Keys for System Information
+			 *
+			 * @param $site array an array of License Keys
+			 */
+			$keys = apply_filters( 'pngx-filter-system-info-license-keys', $keys );
+
+			return $keys;
+
+		}
+
+
+		/**
+		 * Get the Plugin Options added to filters
+		 *
+		 * @return array
+		 */
+		public function get_plugin_settings() {
+
+			/**
+			 * Add saved options to System Info for plugin engine using plugins
+			 *
+			 *
+			 * @param array array() an array of fields to display in option tabs.
+			 *
+			 */
+			$options = apply_filters( 'pngx-system-info-options', array() );
+
+			/**
+			 * Filter the options fields for System Info
+			 *
+			 *
+			 * @param array array() an array of fields to display in option tabs.
+			 *
+			 */
+			$fields = apply_filters( 'pngx-option-fields', array() );
+
+			$settings = array();
+
+			//Setup Settings to a human readable titles
+			if ( is_array( $options ) && is_array( $fields ) ) {
+
+				foreach ( $options as $k => $v ) {
+
+					if ( is_array( $v ) ) {
+
+						foreach ( $v as $key => $value ) {
+
+							if ( isset( $fields[ $key ]['title'] ) ) {
+								$settings[ $fields[ $key ]['title'] ] = esc_textarea( $value );
+							}
+
+						}
+
+					}
+				}
+			}
+
+
+			ksort( $settings );
+
+			/**
+			 * Filter the Plugin Settings for System Information
+			 *
+			 * @param $site array an array of Plugin Settings
+			 */
+			$settings = apply_filters( 'pngx-filter-system-info-plugin-settings', $settings );
+
+			return $settings;
+
+		}
+
+
+		/**
+		 * Get List of Active or Inactive Plugins
+		 *
+		 * @param bool $inactive
+		 *
+		 * @return array
+		 */
+		public function get_plugins( $inactive = false ) {
+
+			// Get plugins that have an update
+			$updates        = get_plugin_updates();
+			$all_plugins    = get_plugins();
+			$active_plugins = get_option( 'active_plugins', array() );
+			$plugins        = array();
+
+			foreach ( $all_plugins as $plugin_path => $p ) {
+
+				if ( $inactive ) {
+					if ( in_array( $plugin_path, $active_plugins ) ) {
+						continue;
+					}
+				} else {
+					if ( ! in_array( $plugin_path, $active_plugins ) ) {
+						continue;
+					}
+				}
+
+				$plugin = $p['Name'];
+				if ( ! empty( $p['Version'] ) ) {
+					$plugin .= sprintf( ' version %s', $p['Version'] );
+				}
+				if ( ! empty( $p['Author'] ) ) {
+					$plugin .= sprintf( ' by %s', $p['Author'] );
+				}
+				if ( ! empty( $p['AuthorURI'] ) ) {
+					$plugin .= sprintf( ' (%s)', $p['AuthorURI'] );
+				}
+
+				$update = ( array_key_exists( $plugin_path, $updates ) ) ? ' (needs update - ' . $updates[ $plugin_path ]->update->new_version . ')' : '';
+
+				$plugins[] = $plugin . $update;
+
+			}
+
+			/**
+			 * Filter the Active and In Active Plugins for System Information
+			 *
+			 * @param $site array an array of Active and In Active Plugins
+			 */
+			$plugins = apply_filters( 'pngx-filter-system-info-active-inactive-plugins', $plugins );
+
+			return $plugins;
+
+		}
+
+		/**
+		 * Get List of Network Active Plugins
+		 *
+		 * @return array
+		 */
+		public function get_network_plugins() {
+
+			$network_plugins = array();
+			if ( is_multisite() && function_exists( 'get_plugin_data' ) ) {
+				$plugins_raw = wp_get_active_network_plugins();
+				foreach ( $plugins_raw as $k => $v ) {
+					$plugin_details = get_plugin_data( $v );
+					$plugin         = $plugin_details['Name'];
+					if ( ! empty( $plugin_details['Version'] ) ) {
+						$plugin .= sprintf( ' version %s', $plugin_details['Version'] );
+					}
+					if ( ! empty( $plugin_details['Author'] ) ) {
+						$plugin .= sprintf( ' by %s', $plugin_details['Author'] );
+					}
+					if ( ! empty( $plugin_details['AuthorURI'] ) ) {
+						$plugin .= sprintf( '(%s)', $plugin_details['AuthorURI'] );
+					}
+					$network_plugins[] = $plugin;
+				}
+			}
+
+
+			/**
+			 * Filter the Network Plugins for System Information
+			 *
+			 * @param $site array an array of Newtork Plugins
+			 */
+			$network_plugins = apply_filters( 'pngx-filter-system-info-network-plugins', $network_plugins );
+
+			return $network_plugins;
+
+		}
+
+
+		/**
+		 * Get List of Must Use Plugins
+		 *
+		 * @return array
+		 */
+		public function get_mu_plugins() {
+
+			$mu_plugins = array();
+			if ( function_exists( 'get_mu_plugins' ) ) {
+				$mu_plugins_raw = get_mu_plugins();
+				foreach ( $mu_plugins_raw as $k => $v ) {
+					$plugin = $v['Name'];
+					if ( ! empty( $v['Version'] ) ) {
+						$plugin .= sprintf( ' version %s', $v['Version'] );
+					}
+					if ( ! empty( $v['Author'] ) ) {
+						$plugin .= sprintf( ' by %s', $v['Author'] );
+					}
+					if ( ! empty( $v['AuthorURI'] ) ) {
+						$plugin .= sprintf( '(%s)', $v['AuthorURI'] );
+					}
+					$mu_plugins[] = $plugin;
+				}
+			}
+
+
+			/**
+			 * Filter the Must Use Plugins for System Information
+			 *
+			 * @param $site array an array of Must Use Plugins
+			 */
+			$mu_plugins = apply_filters( 'pngx-filter-system-info-mu-plugins', $mu_plugins );
+
+			return $mu_plugins;
+		}
+
+		/**
+		 * Determines the current operating system.
+		 * Coding from WordPress Plugin revisr/classes/class-revisr-compatibility.php
+		 *
+		 * @access public
+		 * @return array
+		 */
+		public function get_os() {
+			$os         = array();
+			$uname      = php_uname( 's' );
+			$os['code'] = strtoupper( substr( $uname, 0, 3 ) );
+			$os['name'] = $uname;
+
+			return $os;
+		}
+
+		/**
+		 * Gets the user running this PHP process.
+		 * Coding from WordPress Plugin revisr/classes/class-revisr-compatibility.php
+		 *
+		 * @access public
+		 * @return string
+		 */
+		public function get_user() {
+			if ( function_exists( 'exec' ) ) {
+				return exec( 'whoami' );
+			}
+
+			return __( 'Unknown', 'plugin-engine' );
+		}
+
+		/**
+		 * Tries to guess the install path to the provided program.
+		 * Coding from WordPress Plugin revisr/classes/class-revisr-compatibility.php
+		 *
+		 * @access public
+		 *
+		 * @param  string $program The program to check for.
+		 *
+		 * @return string
+		 */
+		public function guess_path( $program ) {
+			$os      = $this->get_os();
+			$program = $this->escapeshellarg( $program );
+
+			if ( $os['code'] !== 'WIN' ) {
+				$path = exec( "which $program" );
+			} else {
+				$path = exec( "where $program" );
+			}
+
+			if ( $path ) {
+				return $path;
+			} else {
+				return __( 'Not Found', 'plugin-engine' );
+			}
+		}
+
+		/**
+		 * Escapes a shell arguement.
+		 * Coding from WordPress Plugin revisr/classes/class-revisr-admin.php
+		 *
+		 * @access public
+		 *
+		 * @param  string $string The string to escape.
+		 *
+		 * @return string $string The escaped string.
+		 */
+		public function escapeshellarg( $string ) {
+			$os = $this->get_os();
+			if ( 'WIN' !== $os['code'] ) {
+				return escapeshellarg( $string );
+			} else {
+				// Windows-friendly workaround.
+				return '"' . str_replace( "'", "'\\''", $string ) . '"';
+			}
+		}
+
+		/****************** SINGLETON GUTS ******************/
+
+		/**
+		 * Enforce Singleton Pattern
+		 */
+		private static $instance;
+
+
+		public static function getInstance() {
+			if ( null == self::$instance ) {
+				$instance       = new self;
+				self::$instance = $instance;
+			}
+
+			return self::$instance;
+		}
+	}
+
+
+}

+ 80 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Admin/Updates.php

@@ -0,0 +1,80 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Plugin Version Update and Data Updater
+ *
+ */
+class Pngx__Admin__Updates {
+
+	protected $plugin_name;
+	protected $version_key;
+	protected $version_num;
+	protected $license;
+	protected $store_url;
+	protected $plugin_path;
+
+	/**
+	 * Setup Version Update
+	 *
+	 * @param $plugin_name
+	 * @param $key
+	 * @param $num
+	 * @param $license
+	 * @param $store_url
+	 * @param $plugin_path
+	 */
+	public function __construct( $plugin_name, $key, $num, $license, $store_url, $plugin_path ) {
+
+		$this->plugin_name = $plugin_name;
+		$this->version_key = $key;
+		$this->version_num = $num;
+		$this->license     = get_option( $license );
+		$this->store_url   = $store_url;
+		$this->plugin_path = $plugin_path;
+
+		$this->update_version_number();
+		$this->plugin_updater();
+
+	}
+
+	/**
+	 * Update Version Number
+	 */
+	public function update_version_number() {
+		//Update Version Number
+		if ( get_option( $this->version_key ) != $this->version_num ) {
+
+			do_action( 'pngx_update_plugin_version', $this->version_key, $this->version_num );
+
+			// Then update the version value
+			update_option( $this->version_key, $this->version_num );
+
+		}
+	}
+
+	/*
+	 * Setup Automatic Updater for Pro Using EDD
+	 *
+	 */
+	public function plugin_updater() {
+
+		//Check if the License has changed and deactivate
+		if ( ( isset( $this->license['key'] ) && '' != $this->license['key'] ) && ( isset( $this->license['status'] ) && 'valid' == $this->license['status'] ) ) {
+
+			$edd_updater = new Pngx__Admin__EDD_Plugin_Updater( $this->store_url, $this->plugin_path, array(
+				'version'   => get_option( $this->version_key ),
+				'license'   => trim( $this->license['key'] ),
+				'item_name' => $this->plugin_name,
+				'author'    => 'Brian Jessee'
+			) );
+
+		}
+
+	}
+
+}

+ 48 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Allowed_Tags.php

@@ -0,0 +1,48 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Allowed Tags in Fields
+ *
+ *  Used with strip_tags();
+ */
+class Pngx__Allowed_Tags {
+
+	/*
+	* Allowed Tags for content without links support
+	*/
+	public static function title() {
+
+		$terms_tags = '<b><br><em><i><span><strong><sub><sup>';
+
+		return $terms_tags;
+
+	}
+
+	/*
+	* Allowed Tags for content
+	*/
+	public static function content() {
+
+		$terms_tags = '<h1><h2><h3><h4><h5><h6><p><blockquote><div><pre><code><span><br><b><strong><em><img><del><ins><sub><sup><ul><ol><li><hr><i><button><caption><cite><datalist><dd><dl><dt><figcaption><figure><a><style>';
+
+		return $terms_tags;
+
+	}
+
+	/*
+	* Allowed Tags for content without link support
+	*/
+	public static function content_no_link() {
+
+		$terms_tags = '<h1><h2><h3><h4><h5><h6><p><blockquote><div><pre><code><span><br><b><strong><em><img><del><ins><sub><sup><ul><ol><li><hr><i><button><caption><cite><datalist><dd><dl><dt><figcaption><figure><style>';
+
+		return $terms_tags;
+
+	}
+
+}

+ 578 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Assets.php

@@ -0,0 +1,578 @@
+<?php
+/**
+ * Class used to register and enqueue assets across our plugins
+ *
+ * Based off Modern Tribee's Tribee__Assets
+ *
+ * @since 3.0
+ */
+class Pngx__Assets {
+	/**
+	 * Stores all the Assets and it's configurations
+	 *
+	 * @var array
+	 */
+	protected $assets = array();
+
+	/**
+	 * Stores the localized scripts for reference
+	 *
+	 * @var array
+	 */
+	private $localized = array();
+
+	/**
+	 * Static Singleton Factory Method
+	 *
+	 * @since 3.0
+	 *
+	 * @return self
+	 */
+	public static function instance() {
+		return pngx( 'assets' );
+	}
+
+	/**
+	 * Register the Methods in the correct places
+	 *
+	 * @since 3.0
+	 */
+	public function __construct() {
+		// Hook the actual registering of
+		add_action( 'init', array( $this, 'register_in_wp' ), 1, 0 );
+	}
+
+	/**
+	 * Register the Assets on the correct hooks
+	 *
+	 * @since 3.0
+	 *
+	 * @return void
+	 */
+	public function register_in_wp( $assets = null ) {
+		if ( is_null( $assets ) ) {
+			$assets = $this->assets;
+		}
+
+		if ( ! is_array( $assets ) ) {
+			$assets = array( $assets );
+		}
+
+		uasort( $assets, array( $this, 'order_by_priority' ) );
+
+		foreach ( $assets as $asset ) {
+			if ( 'js' === $asset->type ) {
+				wp_register_script( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->in_footer );
+			} else {
+				wp_register_style( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->media );
+			}
+
+			// Register that this asset is actually registered on the WP methods
+			$asset->is_registered = true;
+
+			// If we don't have an action we don't even register the action to enqueue
+			if ( empty( $asset->action ) ) {
+				continue;
+			}
+
+			// Now add an action to enqueue the registered assets
+			foreach ( (array) $asset->action as $action ) {
+				// Enqueue the registered assets at the appropriate time
+				if ( did_action( $action ) > 0 ) {
+					$this->enqueue();
+				} else {
+					add_action( $action, array( $this, 'enqueue' ), $asset->priority );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Enqueues registered assets based on their groups.
+	 *
+	 * @since   2.6
+	 *
+	 * @uses    $this->enqueue
+	 *
+	 * @param   string|array $groups Which groups will be enqueued
+	 *
+	 * @return  void
+	 */
+	public function enqueue_group( $groups ) {
+		$assets = $this->get();
+		$enqueue = array();
+
+		foreach ( $assets as $asset ) {
+			if ( empty( $asset->groups ) ) {
+				continue;
+			}
+
+			$instersect = array_intersect( (array) $groups, $asset->groups );
+
+			if ( empty( $instersect ) ) {
+				continue;
+			}
+
+			$enqueue[] = $asset->slug;
+		}
+
+		$this->enqueue( $enqueue );
+	}
+
+	/**
+	 * Enqueues registered assets.
+	 *
+	 * This method is called on whichever action (if any) was declared during registration.
+	 *
+	 * It can also be called directly with a list of asset slugs to forcibly enqueue, which may be
+	 * useful where an asset is required in a situation not anticipated when it was originally
+	 * registered.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string|array $forcibly_enqueue
+	 */
+	public function enqueue( $forcibly_enqueue = null ) {
+		$forcibly_enqueue = array_filter( (array) $forcibly_enqueue );
+		$assets = $this->get();
+
+		foreach ( $assets as $asset ) {
+			// Should this asset be enqueued regardless of the current filter/any conditional requirements?
+			$must_enqueue = in_array( $asset->slug, $forcibly_enqueue );
+			$in_filter    = in_array( current_filter(), (array) $asset->action );
+
+			// Skip if we are not on the correct filter (unless we are forcibly enqueuing)
+			if ( ! $in_filter && ! $must_enqueue ) {
+				continue;
+			}
+
+			// If any single conditional returns true, then we need to enqueue the asset
+			if ( empty( $asset->action ) && ! $must_enqueue ) {
+				continue;
+			}
+
+			// If this asset was late called
+			if ( ! $asset->is_registered ) {
+				$this->register_in_wp( $asset );
+			}
+
+			// Default to enqueuing the asset if there are no conditionals,
+			// and default to not enqueuing it if there *are* conditionals
+			$enqueue = empty( $asset->conditionals );
+
+			if ( ! $enqueue ) {
+				// Reset Enqeue
+				$enqueue = array();
+
+				// Which is the operator?
+				$conditional_operator = Pngx__Utilities__Array::get( $asset->conditionals, 'operator', 'OR' );
+
+				// If we have a set of conditionals we loop on then and get if they are true
+				foreach ( $asset->conditionals as $key => $conditional ) {
+					// Avoid doing anything to the operator
+					if ( 'operator' === $key ) {
+						continue;
+					}
+
+					$enqueue[] = call_user_func( $conditional );
+				}
+
+				// By default we use OR for backwards compatibility
+				if ( 'OR' === $conditional_operator ) {
+					$enqueue = in_array( true, $enqueue );
+				} else {
+					$enqueue = ! in_array( false, $enqueue );
+				}
+			}
+
+			/**
+			 * Allows developers to hook-in and prevent an asset from been loaded
+			 *
+			 * @since 3.0
+			 *
+			 * @param bool   $enqueue If we should enqueue or not a given asset
+			 * @param object $asset   Which asset we are dealing with
+			 */
+			$enqueue = apply_filters( 'pngx_asset_enqueue', $enqueue, $asset );
+
+			/**
+			 * Allows developers to hook-in and prevent an asset from been loaded
+			 *
+			 * @since 3.0
+			 *
+			 * @param bool   $enqueue If we should enqueue or not a given asset
+			 * @param object $asset   Which asset we are dealing with
+			 */
+			$enqueue = apply_filters( 'pngx_asset_enqueue_' . $asset->slug, $enqueue, $asset );
+
+			if ( ! $enqueue && ! $must_enqueue ) {
+				continue;
+			}
+
+			if ( 'js' === $asset->type ) {
+				wp_enqueue_script( $asset->slug );
+
+				// Only localize on JS and if we have data
+				if ( ! empty( $asset->localize ) ) {
+					// Makes sure we have an Array of Localize data
+					if ( is_object( $asset->localize ) ) {
+						$localization = array( $asset->localize );
+					} else {
+						$localization = (array) $asset->localize;
+					}
+
+					/**
+					 * Check to ensure we haven't already localized it before
+					 * @since 4.5.8
+					 */
+					foreach ( $localization as $localize ) {
+						if ( in_array( $localize->name, $this->localized ) ) {
+							continue;
+						}
+
+						// If we have a Callable as the Localize data we execute it
+						if ( is_callable( $localize->data ) ) {
+							$localize->data = call_user_func_array( $localize->data, array( $asset ) );
+						}
+
+						wp_localize_script( $asset->slug, $localize->name, $localize->data );
+						$this->localized[] = $localize->name;
+					}
+				}
+			} else {
+				wp_enqueue_style( $asset->slug );
+			}
+
+			$asset->already_enqueued = true;
+		}
+	}
+
+	/**
+	 * Returns the path to a minified version of a js or css file, if it exists.
+	 * If the file does not exist, returns false.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $url The absolute URL to the un-minified file.
+	 *
+	 * @return string|false The url to the minified version or false, if file not found.
+	 */
+	public static function maybe_get_min_file( $url ) {
+		$urls = array();
+		$wpmu_plugin_url = set_url_scheme( WPMU_PLUGIN_URL );
+		$wp_plugin_url = set_url_scheme( WP_PLUGIN_URL );
+		$wp_content_url = set_url_scheme( WP_CONTENT_URL );
+		$plugins_url = plugins_url();
+
+		if ( 0 === strpos( $url, $wpmu_plugin_url ) ) {
+			// URL inside WPMU plugin dir.
+			$base_dir = wp_normalize_path( WPMU_PLUGIN_DIR );
+			$base_url = $wpmu_plugin_url;
+		} elseif ( 0 === strpos( $url, $wp_plugin_url ) ) {
+			// URL inside WP plugin dir.
+			$base_dir = wp_normalize_path( WP_PLUGIN_DIR );
+			$base_url = $wp_plugin_url;
+		} elseif ( 0 === strpos( $url, $wp_content_url ) ) {
+			// URL inside WP content dir.
+			$base_dir = wp_normalize_path( WP_CONTENT_DIR );
+			$base_url = $wp_content_url;
+		} elseif ( 0 === strpos( $url, $plugins_url ) ) {
+			$base_dir = wp_normalize_path( WP_PLUGIN_DIR );
+			$base_url = $plugins_url;
+		} else {
+			// Resource needs to be inside wp-content or a plugins dir.
+			return false;
+		}
+
+		// Strip the plugin URL and make this relative.
+		$relative_location = str_replace( $base_url, '', $url );
+
+		// If needed add the Min Files.
+		if ( ! defined( 'SCRIPT_DEBUG' ) || SCRIPT_DEBUG === false ) {
+			if ( substr( $relative_location, - 3, 3 ) === '.js' ) {
+				$urls[] = substr_replace( $relative_location, '.min', - 3, 0 );
+			}
+
+			if ( substr( $relative_location, - 4, 4 ) === '.css' ) {
+				$urls[] = substr_replace( $relative_location, '.min', - 4, 0 );
+			}
+		}
+
+		// Add the actual url after having the min file added.
+		$urls[] = $relative_location;
+
+		// Check for all Urls added to the array.
+		foreach ( $urls as $partial_path ) {
+			$file_path = wp_normalize_path( $base_dir . $partial_path );
+			$file_url  = plugins_url( basename( $file_path ), $file_path );
+
+			if ( file_exists( $file_path ) ) {
+				return $file_url;
+			}
+		}
+
+		// If we don't have any real file return false
+		return false;
+	}
+
+	/**
+	 * Register an Asset and attach a callback to the required action to display it correctly
+	 *
+	 * @since 3.0
+	 *
+	 * @param  object       $origin    The main Object for the plugin you are enqueueing the script/style for
+	 * @param  string       $slug      Slug to save the asset
+	 * @param  string       $file      Which file will be loaded, either CSS or JS
+	 * @param  array        $deps      Dependencies
+	 * @param  string|null  $action    (Optional) A WordPress Action, if set needs to happen after: `wp_enqueue_scripts`, `admin_enqueue_scripts`, or `login_enqueue_scripts`
+	 * @param  string|array $arguments {
+	 *     Optional. Array or string of parameters for this asset
+	 *
+	 *     @type string|null  $action         Which WordPress action this asset will be loaded on
+	 *     @type int          $priority       Priority in which this asset will be loaded on the WordPress action
+	 *     @type string       $file           The relative path to the File that will be enqueued, uses the $origin to get the full path
+	 *     @type string       $type           Asset Type, `js` or `css`
+	 *     @type array        $deps           An array of other asset as dependencies
+	 *     @type string       $version        Version number, used for cache expiring
+	 *     @type string       $media          Used only for CSS, when to load the file
+	 *     @type bool         $in_footer      A boolean determining if the javascript should be loaded on the footer
+	 *     @type array|object $localize       Variables needed on the JavaScript side {
+	 *          @type string 		$name     Name of the JS variable
+	 *          @type string|array  $data     Contents of the JS variable
+	 *     }
+	 *     @type callable[]   $conditionals   An callable method or an array of them, that will determine if the asset is loaded or not
+	 * }
+	 *
+	 * @return string
+	 */
+	public function register( $origin, $slug, $file, $deps = array(), $action = null, $arguments = array() ) {
+		// Prevent weird stuff here
+		$slug = sanitize_title_with_dashes( $slug );
+
+		if ( $this->exists( $slug ) ) {
+			return $this->get( $slug );
+		}
+
+		if ( is_string( $origin ) ) {
+			// Origin needs to be a class with a `instance` method and a Version constant
+			if ( class_exists( $origin ) && method_exists( $origin, 'instance' ) && defined( $origin . '::VERSION' ) ) {
+				$origin = call_user_func( array( $origin, 'instance' ) );
+			}
+		}
+
+		if ( is_object( $origin ) ) {
+			$origin_name = get_class( $origin );
+
+			if ( ! defined( $origin_name . '::VERSION' ) ) {
+				// If we have a Object and we don't have instance or version
+				return false;
+			}
+		} else {
+			return false;
+		}
+
+		// Fetches the version on the Origin Version constant
+		$version = constant( $origin_name . '::VERSION' );
+
+		// Default variables to prevent notices
+		$defaults = array(
+			'slug'          => null,
+			'file'          => false,
+			'url'           => false,
+			'action'        => null,
+			'priority'      => 10,
+			'type'          => null,
+			'deps'          => array(),
+			'groups'        => array(),
+			'version'       => $version,
+			'media'         => 'all',
+			'in_footer'     => true,
+			'is_registered' => false,
+			'origin_path'   => null,
+			'origin_url'    => null,
+			'origin_name'   => null,
+
+			// Bigger Variables at the end
+			'localize'      => array(),
+			'conditionals'  => array(),
+		);
+
+		// Merge Arguments
+		$asset = (object) wp_parse_args( $arguments, $defaults );
+
+		// Enforce these one
+		$asset->slug        = $slug;
+		$asset->file        = $file;
+		$asset->deps        = $deps;
+		$asset->action      = $action;
+		$asset->origin_path = trailingslashit( ! empty( $origin->plugin_path ) ? $origin->plugin_path : $origin->pluginPath );
+		$asset->origin_name = $origin_name;
+
+		// Origin URL might throw notices so we double check
+		$asset->origin_url  = ! empty( $origin->plugin_url ) ? $origin->plugin_url : null;
+		$asset->origin_url  = ! empty( $origin->pluginUrl ) ? $origin->pluginUrl : null;
+		if ( ! empty( $asset->origin_url ) ) {
+			$asset->origin_url = trailingslashit( $asset->origin_url );
+		}
+
+		// If we don't have a type on the arguments we grab from the File path
+		if ( is_null( $asset->type ) ) {
+			if ( substr( $asset->file, -3, 3 ) === '.js' ) {
+				$asset->type = 'js';
+			} elseif ( substr( $asset->file, -4, 4 ) === '.css' ) {
+				$asset->type = 'css';
+			}
+		}
+
+		// If asset type is wrong don't register
+		if ( ! in_array( $asset->type, array( 'js', 'css' ) ) ) {
+			return false;
+		}
+
+		/**
+		 * Filter to change version number on assets
+		 *
+		 * @since  2.6
+		 *
+		 * @param string $version
+		 * @param object $asset
+		 */
+		$asset->version = apply_filters( 'pngx_asset_version', $asset->version, $asset );
+
+		// Clean these
+		$asset->priority  = absint( $asset->priority );
+		$asset->in_footer = (bool) $asset->in_footer;
+		$asset->media     = esc_attr( $asset->media );
+
+		// Ensures that we have a priority over 1
+		if ( $asset->priority < 1 ) {
+			$asset->priority = 1;
+		}
+
+		$is_vendor = strpos( $asset->file, 'vendor/' ) !== false ? true : false;
+
+		// Setup the actual URL
+		if ( filter_var( $asset->file, FILTER_VALIDATE_URL ) ) {
+			$asset->url = $asset->file;
+		} else {
+			$asset->url = $this->maybe_get_min_file( pngx_resource_url( $asset->file, false, ( $is_vendor ? '' : null ), $origin ) );
+		}
+
+		// If you are passing localize, you need `name` and `data`
+		if ( ! empty( $asset->localize ) && ( is_array( $asset->localize ) || is_object( $asset->localize ) ) ) {
+			if ( is_array( $asset->localize ) && empty( $asset->localize['name'] )  ) {
+				foreach ( $asset->localize as $index => $local ) {
+					$asset->localize[ $index ] = (object) $local;
+				}
+			} else {
+				$asset->localize = (object) $asset->localize;
+
+				// if we don't have both reset localize
+				if ( ! isset( $asset->localize->data, $asset->localize->name ) ) {
+					$asset->localize = array();
+				}
+			}
+		}
+
+		// Looks for a single conditional callable and places it in an Array
+		if ( ! empty( $asset->conditionals ) && is_callable( $asset->conditionals ) ) {
+			$asset->conditionals = array( $asset->conditionals );
+		}
+
+		// Groups is always an array of unique strings
+		if ( ! empty( $asset->groups ) ) {
+			$asset->groups = (array) $asset->groups;
+			$asset->groups = array_filter( $asset->groups, 'is_string' );
+			$asset->groups = array_unique( $asset->groups );
+		}
+
+		/**
+		 * Filter an Asset loading variables
+		 *
+		 * @since  2.6
+		 *
+		 * @param object $asset
+		 */
+		$asset = apply_filters( 'pngx_asset_pre_register', $asset );
+
+		// Set the Asset on the array of notices
+		$this->assets[ $slug ] = $asset;
+
+		// Sorts by priority
+		uasort( $this->assets, array( $this, 'order_by_priority' ) );
+
+		// Return the Slug because it might be modified
+		return $asset;
+	}
+
+	/**
+	 * Removes an Asset from been registered and enqueue
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string $slug Slug of the Asset
+	 *
+	 * @return bool
+	 */
+	public function remove( $slug ) {
+		if ( ! $this->exists( $slug ) ) {
+			return false;
+		}
+
+		unset( $this->assets[ $slug ] );
+		return true;
+	}
+
+	/**
+	 * Get the Asset Object configuration
+	 *
+	 * @since 3.0
+	 *
+	 * @param  string $slug Slug of the Asset
+	 *
+	 * @return bool
+	 */
+	public function get( $slug = null ) {
+		uasort( $this->assets, array( $this, 'order_by_priority' ) );
+
+		if ( is_null( $slug ) ) {
+			return $this->assets;
+		}
+
+		// Prevent weird stuff here
+		$slug = sanitize_title_with_dashes( $slug );
+
+		if ( ! empty( $this->assets[ $slug ] ) ) {
+			return $this->assets[ $slug ];
+		}
+
+		return null;
+	}
+
+	/**
+	 * Add the Priority ordering, which was causing an issue of not respecting which order stuff was registered
+	 *
+	 * @since  2.6
+	 *
+	 * @param  object  $a  First Subject to compare
+	 * @param  object  $b  Second subject to compare
+	 *
+	 * @return boolean
+	 */
+	public function order_by_priority( $a, $b ) {
+		return (int) $a->priority === (int) $b->priority ? 0 : (int) $a->priority > (int) $b->priority;
+	}
+
+	/**
+	 * Checks if an Asset exists
+	 *
+	 * @since  2.6
+	 *
+	 * @param  string $slug Slug of the Asset
+	 *
+	 * @return bool
+	 */
+	public function exists( $slug ) {
+		return is_object( $this->get( $slug ) ) ? true : false;
+	}
+}

+ 258 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Autoloader.php

@@ -0,0 +1,258 @@
+<?php
+//If Direct Access Kill the Script
+if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ ) {
+	die( 'Access denied.' );
+}
+
+if ( class_exists( 'Pngx__Autoloader' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Autoloader
+ *
+ * Based off Modern Tribes Common Plugin - https://github.com/moderntribe/tribe-common
+ *
+ * Allows for autoloading of Plugin Engine plugins classes.
+ *
+ * Example usage:
+ *
+ *      // will be `/var/www/site/wp-content/plugins/coupon-creator'
+ *      $this_dir = dirname(__FILE__);
+ *
+ *      // gets hold of the singleton instance of the class
+ *      $autoloader = Pngx__Autoloader::instance();
+ *
+ *      // register one by one or use `register_prefixes` method
+ *      $autoloader->register_prefix( 'Pngx__Admin__', $this_dir . '/src/Pngx/admin' );
+ *      $autoloader->register_prefix( 'Pngx__Utils__', $this_dir . '/src/Pngx/another-dir' );
+ *
+ *      // register a direct class to path
+ *      $autoloader->register_class( 'Pngx__Some_Class', $this_dir . '/some/path/to/Some_Class.php' );
+ *
+ *      // register a fallback dir to be searched for the class before giving up
+ *      $autoloader->add_fallback_dir( $this_dir . '/all-the-classes' );
+ *
+ *      // calls `spl_autoload_register`
+ *      $autoloader->register_autoloader();
+ *
+ *      // class will be searched in the path
+ *      // `/var/www/site/wp-content/plugins/coupon-creator/src/Pngx/admin/Some_Class.php'
+ *      // and
+ *      // `/var/www/site/wp-content/plugins/coupon-creator/src/Pngx/another-dir/Some_Class.php'
+ *      $i = new Pngx__Admin__Some_Class();
+ *
+ *      // class will be searched in the path
+ *      // `/var/www/site/wp-content/plugins/coupon-creator/utils/some-dir/Some_Util.php'
+ *      $i = new Pngx__Utils__Some_Util();
+ *
+ *      // class will be searched in the path
+ *      // `/var/www/site/wp-content/plugins/coupon-creator/deprecated/Pngx_DeprecatedClass.php'
+ *      $i = new Pngx_DeprecatedClass();
+ */
+class Pngx__Autoloader {
+
+	/**
+	 * @var Pngx__Autoloader
+	 */
+	protected static $instance;
+
+	/**
+	 * An arrays of arrays each containing absolute paths.
+	 *
+	 * Paths are stored trimming any trailing `/`.
+	 * E.g. `/var/www/public/wp-content/plugins/coupon-creator/src/Pngx`
+	 *
+	 * @var string[][]
+	 */
+	protected $prefixes;
+
+	/**
+	 * The string acting as a directory separator in a class name.
+	 *
+	 * E.g.: given `__` as `$dir_separator` then `Admin__Metabox__Some_Metabox`
+	 * will map to `/Admin/Metabox/SomeMetabox.php`.
+	 *
+	 * @var string
+	 */
+	protected $dir_separator = '__';
+
+	/** @var string[] */
+	protected $fallback_dirs = array();
+
+	/**
+	 * @var array
+	 */
+	protected $class_paths = array();
+
+	/**
+	 * Returns the singleton instance of the class.
+	 *
+	 * @return Pngx__Autoloader
+	 */
+	public static function instance() {
+		if ( ! self::$instance instanceof Pngx__Autoloader ) {
+			self::$instance = new self();
+		}
+
+		return self::$instance;
+	}
+
+	/**
+	 * Registers prefixes and root dirs using an array.
+	 *
+	 * Same as calling `register_prefix` on each one.
+	 *
+	 * @param array $prefixes_to_root_dirs
+	 */
+	public function register_prefixes( array $prefixes_to_root_dirs ) {
+		foreach ( $prefixes_to_root_dirs as $prefix => $root_dir ) {
+			$this->register_prefix( $prefix, $root_dir );
+		}
+	}
+
+	/**
+	 * Associates a class prefix to an absolute path.
+	 *
+	 * @param string $prefix   A class prefix, e.g. `Pngx__Admin__`
+	 * @param string $root_dir The absolute path to the dir containing
+	 *                         the prefixed classes.
+	 */
+	public function register_prefix( $prefix, $root_dir ) {
+		$root_dir = $this->normalize_root_dir( $root_dir );
+
+		if ( ! isset( $this->prefixes[ $prefix ] ) ) {
+			$this->prefixes[ $prefix ] = array();
+		}
+		$this->prefixes[ $prefix ][] = $root_dir;
+	}
+
+	/**
+	 * Triggers the registration of the autoload method in the SPL
+	 * autoload register.
+	 */
+	public function register_autoloader() {
+		spl_autoload_register( array( $this, 'autoload' ) );
+	}
+
+	/**
+	 * Includes the file defining a class.
+	 *
+	 * This is the function that's registered as an autoloader.
+	 *
+	 * @param string $class
+	 */
+	public function autoload( $class ) {
+		$include_path = $this->get_class_path( $class );
+		if ( ! empty( $include_path ) ) {
+			include_once( $include_path );
+		}
+	}
+
+	private function normalize_root_dir( $root_dir ) {
+		return rtrim( $root_dir, '/' );
+	}
+
+	protected function get_prefixed_path( $class ) {
+		foreach ( $this->prefixes as $prefix => $dirs ) {
+			if ( strpos( $class, $prefix ) !== 0 ) {
+				continue;
+			}
+			$class_name      = str_replace( $prefix, '', $class );
+			$class_path_frag = implode( '/', explode( $this->dir_separator, $class_name ) ) . '.php';
+			foreach ( $dirs as $dir ) {
+				$path = $dir . '/' . $class_path_frag;
+				if ( ! file_exists( $path ) ) {
+					// check if the file exists in lowercase
+					$class_path_frag = strtolower( $class_path_frag );
+					$path            = $dir . '/' . $class_path_frag;
+				}
+				if ( ! file_exists( $path ) ) {
+					continue;
+				}
+
+				return $path;
+			}
+		}
+
+		return false;
+	}
+
+	protected function get_fallback_path( $class ) {
+		foreach ( $this->fallback_dirs as $fallback_dir ) {
+			$include_path = $fallback_dir . '/' . $class . '.php';
+			if ( ! file_exists( $include_path ) ) {
+				// check if the file exists in lowercase
+				$class        = strtolower( $class );
+				$include_path = $fallback_dir . '/' . $class . '.php';
+			}
+			if ( ! file_exists( $include_path ) ) {
+				continue;
+			}
+
+			return $include_path;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Gets the absolute path to a class file.
+	 *
+	 * @param string $class The class name
+	 *
+	 * @return string Either the absolute path to the class file or an
+	 *                empty string if the file was not found.
+	 */
+	public function get_class_path( $class ) {
+		$prefixed_path = $this->get_prefixed_path( $class );
+		if ( $prefixed_path ) {
+			return $prefixed_path;
+		}
+
+		$class_path = ! empty( $this->class_paths[ $class ] ) ? $this->class_paths[ $class ] : false;
+		if ( $class_path ) {
+			return $class_path;
+		}
+
+		$fallback_path = $this->get_fallback_path( $class );
+
+		return $fallback_path ? $fallback_path : '';
+	}
+
+	/**
+	 * Adds a folder to search for classes that were not found among
+	 * the prefixed ones.
+	 *
+	 * This is the method to use to register a directory of deprecated
+	 * classes.
+	 *
+	 * @param string $dir An absolute path dto a dir.
+	 */
+	public function add_fallback_dir( $dir ) {
+		if ( in_array( $dir, $this->fallback_dirs ) ) {
+			return;
+		}
+		$this->fallback_dirs[] = $this->normalize_root_dir( $dir );
+	}
+
+	/**
+	 * @return string
+	 */
+	public function get_dir_separator() {
+		return $this->dir_separator;
+	}
+
+	/**
+	 * @param string $dir_separator
+	 */
+	public function set_dir_separator( $dir_separator ) {
+		$this->dir_separator = $dir_separator;
+	}
+
+	public function register_class( $class, $path ) {
+		$this->class_paths[ $class ] = $path;
+	}
+
+}

+ 170 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Blocks/Abstract.php

@@ -0,0 +1,170 @@
+<?php
+
+
+abstract class Pngx__Blocks__Abstract implements Pngx__Blocks__Interface {
+
+	/**
+	 * Namespace for Blocks from pngx
+	 *
+	 * @since  TBD
+	 *
+	 * @var string
+	 */
+	private $namespace = 'pngx';
+
+	/**
+	 * Builds the name of the Block
+	 *
+	 * @since  TBD
+	 *
+	 * @return string
+	 */
+	public function name() {
+		return $this->namespace . '/' . $this->slug();
+	}
+
+	/*
+	 * Return the block attributes
+	 *
+	 * @since  TBD
+	 *
+	 * @param  array $attributes
+	 *
+	 * @return array
+	*/
+	public function attributes( $params = array() ) {
+
+		// get the default attributes
+		$default_attributes = $this->default_attributes();
+
+		// parse the attributes with the default ones
+		$attributes = wp_parse_args( $params, $default_attributes );
+
+		/**
+		 * Filters the default attributes for the block
+		 *
+		 * @param array  $attributes The attributes
+		 * @param object $this       The current object
+		 */
+		$attributes = apply_filters( 'pngx_block_attributes_defaults_' . $this->slug(), $attributes, $this );
+
+		return $attributes;
+	}
+
+	/*
+	 * Return the block default attributes
+	 *
+	 * @since  TBD
+	 *
+	 * @param  array $attributes
+	 *
+	 * @return array
+	*/
+	public function default_attributes() {
+
+		$attributes = array();
+
+		/**
+		 * Filters the default attributes
+		 *
+		 * @param array  $params The attributes
+		 * @param object $this   The current object
+		 */
+		$attributes = apply_filters( 'pngx_block_attributes_defaults', $attributes, $this );
+
+		return $attributes;
+	}
+
+	/**
+	 * Since we are dealing with a Dynamic type of Block we need a PHP method to render it
+	 *
+	 * @since  TBD
+	 *
+	 * @param  array $attributes
+	 *
+	 * @return string
+	 */
+	public function render( $attributes = array() ) {
+		if ( version_compare( phpversion(), '5.4', '>=' ) ) {
+			$json_string = json_encode( $attributes, JSON_PRETTY_PRINT );
+		} else {
+			$json_string = json_encode( $attributes );
+		}
+
+		return '<pre class="pngx-placeholder-text-' . $this->name() . '">' . 'Block Name: ' . $this->name() . "\n" . 'Block Attributes: ' . "\n" . $json_string . '</pre>';
+	}
+
+	/**
+	 * Sends a valid JSON response to the AJAX request for the block contents
+	 *
+	 * @since  TBD
+	 *
+	 * @return void
+	 */
+	public function ajax() {
+		wp_send_json_error( esc_attr__( 'Problem loading the block, please remove this block to restart.', 'plugin-engine' ) );
+	}
+
+	/**
+	 * Fetches which ever is the plugin we are dealing with
+	 *
+	 * @since  TBD
+	 *
+	 * @return mixed
+	 */
+	public function plugin() {
+		return pngx( 'gutenberg' );
+	}
+
+	/**
+	 * Does the registration for PHP rendering for the Block, important due to been
+	 * an dynamic Block
+	 *
+	 * @since  TBD
+	 *
+	 * @return void
+	 */
+	public function register() {
+		$block_args = array(
+			'render_callback' => array( $this, 'render' ),
+		);
+
+		register_block_type( $this->name(), $block_args );
+
+		add_action( 'wp_ajax_' . $this->get_ajax_action(), array( $this, 'ajax' ) );
+
+		$this->assets();
+	}
+
+	/**
+	 * Fetches the name for the block we are working with and converts it to the
+	 * correct `wp_ajax_{$action}` string for us to Hook
+	 *
+	 * @since  TBD
+	 *
+	 * @return string
+	 */
+	public function get_ajax_action() {
+		return str_replace( 'pngx/', 'pngx_editor_block_', $this->name() );
+	}
+
+	/**
+	 * Used to include any Assets for the Block we are registering
+	 *
+	 * @since  TBD
+	 *
+	 * @return void
+	 */
+	public function assets() {
+
+	}
+
+	/**
+	 * Attach any particular hook for the specif block.
+	 *
+	 * @since 3.0
+	 */
+	public function hook() {
+	}
+}
+

+ 80 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Blocks/Interface.php

@@ -0,0 +1,80 @@
+<?php
+
+
+interface Pngx__Blocks__Interface {
+
+	/**
+	 * Which is the name/slug of this block
+	 *
+	 * @since  TBD
+	 *
+	 * @return string
+	 */
+	public function slug();
+
+	/**
+	 * Which is the name/slug of this block
+	 *
+	 * @since  TBD
+	 *
+	 * @return string
+	 */
+	public function name();
+
+	/**
+	 * What are the default attributes for this block
+	 *
+	 * @since  TBD
+	 *
+	 * @return array
+	 */
+	public function default_attributes();
+
+	/**
+	 * Since we are dealing with a Dynamic type of Block we need a PHP method to render it
+	 *
+	 * @since  TBD
+	 *
+	 * @param  array $attributes
+	 *
+	 * @return string
+	 */
+	public function render( $attributes = array() );
+
+	/**
+	 * Does the registration for PHP rendering for the Block, important due to been
+	 * an dynamic Block
+	 *
+	 * @since  TBD
+	 *
+	 * @return void
+	 */
+	public function register();
+
+	/**
+	 * Used to include any Assets for the Block we are registering
+	 *
+	 * @since  TBD
+	 *
+	 * @return void
+	 */
+	public function assets();
+
+	/**
+	 * Fetches which ever is the plugin we are dealing with
+	 *
+	 * @since  TBD
+	 *
+	 * @return mixed
+	 */
+	public function plugin();
+
+	/**
+	 * Attach any specific hook to the current block.
+	 *
+	 * @since 3.0
+	 *
+	 * @return mixed
+	 */
+	public function hook();
+}

+ 299 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Container.php

@@ -0,0 +1,299 @@
+<?php
+/**
+ * Based off the excellent work of Luca @ Modern Tribe
+ */
+if ( ! class_exists( 'Pngx__Container' ) ) {
+
+	/**
+	 * Class Pngx__Container
+	 *
+	 * Pngx Dependency Injection Container.
+	 */
+	class Pngx__Container extends tad_DI52_Container {
+
+		/**
+		 * @var Pngx__Container
+		 */
+		protected static $instance;
+
+		/**
+		 * @return Pngx__Container
+		 */
+		public static function init() {
+			if ( empty( self::$instance ) ) {
+				self::$instance = new self();
+			}
+
+			return self::$instance;
+		}
+	}
+}
+
+if ( ! function_exists( 'pngx_singleton' ) ) {
+
+	/**
+	 * Registers a class as a singleton.
+	 *
+	 * Each call to obtain an instance of this class made using the `pngx( $slug )` function
+	 * will return the same instance; the instances are built just in time (if not passing an
+	 * object instance or callback function) and on the first request.
+	 * The container will call the class `__construct` method on the class (if not passing an object
+	 * or a callback function) and will try to automagically resolve dependencies.
+	 *
+	 * Example use:
+	 *
+	 *      pngx_singleton( 'tec.admin.class', 'Pngx__Admin__Class' );
+	 *
+	 *      // some code later...
+	 *
+	 *      // class is built here
+	 *      pngx( 'tec.admin.class' )->doSomething();
+	 *
+	 * Need the class built immediately? Build it and register it:
+	 *
+	 *      pngx_singleton( 'tec.admin.class', new Pngx__Admin__Class() );
+	 *
+	 *      // some code later...
+	 *
+	 *      pngx( 'tec.admin.class' )->doSomething();
+	 *
+	 * Need a very custom way to build the class? Register a callback:
+	 *
+	 *      pngx_singleton( 'tec.admin.class', array( Pngx__Admin__Class__Factory, 'make' ) );
+	 *
+	 *      // some code later...
+	 *
+	 *      pngx( 'tec.admin.class' )->doSomething();
+	 *
+	 * Or register the methods that should be called on the object after its construction:
+	 *
+	 *      pngx_singleton( 'tec.admin.class', 'Pngx__Admin__Class', array( 'hook', 'register' ) );
+	 *
+	 *      // some code later...
+	 *
+	 *      // the `hook` and `register` methods will be called on the built instance.
+	 *      pngx( 'tec.admin.class' )->doSomething();
+	 *
+	 * The class will be built only once (if passing the class name or a callback function), stored
+	 * and the same instance will be returned from that moment on.
+	 *
+	 * @param string                 $slug                The human-readable and catchy name of the class.
+	 * @param string|object|callable $class               The full class name or an instance of the class
+	 *                                                    or a callback that will return the instance of the class.
+	 * @param array                  $after_build_methods An array of methods that should be called on
+	 *                                                    the built object after the `__construct` method; the methods
+	 *                                                    will be called only once after the singleton instance
+	 *                                                    construction.
+	 */
+	function pngx_singleton( $slug, $class, array $after_build_methods = null ) {
+		Pngx__Container::init()->singleton( $slug, $class, $after_build_methods );
+	}
+}
+
+if ( ! function_exists( 'pngx_register' ) ) {
+	/**
+	 * Registers a class.
+	 *
+	 * Each call to obtain an instance of this class made using the `pngx( $slug )` function
+	 * will return a new instance; the instances are built just in time (if not passing an
+	 * object instance, in that case it will work as a singleton) and on the first request.
+	 * The container will call the class `__construct` method on the class (if not passing an object
+	 * or a callback function) and will try to automagically resolve dependencies.
+	 *
+	 * Example use:
+	 *
+	 *      pngx_register( 'tec.some', 'Pngx__Some' );
+	 *
+	 *      // some code later...
+	 *
+	 *      // class is built here
+	 *      $some_one = pngx( 'tec.some' )->doSomething();
+	 *
+	 *      // $some_two !== $some_one
+	 *      $some_two = pngx( 'tec.some' )->doSomething();
+	 *
+	 * Need the class built immediately? Build it and register it:
+	 *
+	 *      pngx_register( 'tec.admin.class', new Pngx__Admin__Class() );
+	 *
+	 *      // some code later...
+	 *
+	 *      // $some_two === $some_one
+	 *      // acts like a singleton
+	 *      $some_one = pngx( 'tec.some' )->doSomething();
+	 *      $some_two = pngx( 'tec.some' )->doSomething();
+	 *
+	 * Need a very custom way to build the class? Register a callback:
+	 *
+	 *      pngx_register( 'tec.some', array( Pngx__Some__Factory, 'make' ) );
+	 *
+	 *      // some code later...
+	 *
+	 *      // $some_two !== $some_one
+	 *      $some_one = pngx( 'tec.some' )->doSomething();
+	 *      $some_two = pngx( 'tec.some' )->doSomething();
+	 *
+	 * Or register the methods that should be called on the object after its construction:
+	 *
+	 *      pngx_singleton( 'tec.admin.class', 'Pngx__Admin__Class', array( 'hook', 'register' ) );
+	 *
+	 *      // some code later...
+	 *
+	 *      // the `hook` and `register` methods will be called on the built instance.
+	 *      pngx( 'tec.admin.class' )->doSomething();
+	 *
+	 * @param string                 $slug                The human-readable and catchy name of the class.
+	 * @param string|object|callable $class               The full class name or an instance of the class
+	 *                                                    or a callback that will return the instance of the class.
+	 * @param array                  $after_build_methods An array of methods that should be called on
+	 *                                                    the built object after the `__construct` method; the methods
+	 *                                                    will be called each time after the instance contstruction.
+	 */
+	function pngx_register( $slug, $class, array $after_build_methods = null ) {
+		Pngx__Container::init()->bind( $slug, $class, $after_build_methods );
+	}
+}
+
+if ( ! function_exists( 'pngx' ) ) {
+	/**
+	 * Returns a ready to use instance of the requested class.
+	 *
+	 * Example use:
+	 *
+	 *      pngx_singleton( 'common.main', 'Pngx__Main');
+	 *
+	 *      // some code later...
+	 *
+	 *      pngx( 'common.main' )->do_something();
+	 *
+	 * @param string|null $slug_or_class Either the slug of a binding previously registered using `pngx_singleton` or
+	 *                                   `pngx_register` or the full class name that should be automagically created or
+	 *                                   `null` to get the container instance itself.
+	 *
+	 * @return mixed|object|Pngx__Container The instance of the requested class. Please note that the cardinality of
+	 *                                       the class is controlled registering it as a singleton using `pngx_singleton`
+	 *                                       or `pngx_register`; if the `$slug_or_class` parameter is null then the
+	 *                                       container itself will be returned.
+	 */
+	function pngx( $slug_or_class = null ) {
+		$container = Pngx__Container::init();
+
+		return null === $slug_or_class ? $container : $container->make( $slug_or_class );
+	}
+}
+
+if ( ! function_exists( 'pngx_set_var' ) ) {
+	/**
+	 * Registers a value under a slug in the container.
+	 *
+	 * Example use:
+	 *
+	 *      pngx_set_var( 'tec.url', 'http://example.com' );
+	 *
+	 * @param string $slug  The human-readable and catchy name of the var.
+	 * @param mixed  $value The variable value.
+	 */
+	function pngx_set_var( $slug, $value ) {
+		$container = Pngx__Container::init();
+		$container->setVar( $slug, $value );
+	}
+}
+
+if ( ! function_exists( 'pngx_get_var' ) ) {
+	/**
+	 * Returns the value of a registered variable.
+	 *
+	 * Example use:
+	 *
+	 *      pngx_set_var( 'tec.url', 'http://example.com' );
+	 *
+	 *      $url = pngx_get_var( 'tec.url' );
+	 *
+	 * @param string $slug    The slug of the variable registered using `pngx_set_var`.
+	 * @param null   $default The value that should be returned if the variable slug
+	 *                        is not a registered one.
+	 *
+	 * @return mixed Either the registered value or the default value if the variable
+	 *               is not registered.
+	 */
+	function pngx_get_var( $slug, $default = null ) {
+		$container = Pngx__Container::init();
+
+		try {
+			$var = $container->getVar( $slug );
+		} catch ( InvalidArgumentException $e ) {
+			return $default;
+		}
+
+		return $var;
+	}
+}
+
+if ( ! function_exists( 'pngx_register_provider' ) ) {
+	/**
+	 * Registers a service provider in the container.
+	 *
+	 * Service providers must implement the `tad_DI52_ServiceProviderInterface` interface or extend
+	 * the `tad_DI52_ServiceProvider` class.
+	 *
+	 * @see tad_DI52_ServiceProvider
+	 * @see tad_DI52_ServiceProviderInterface
+	 *
+	 * @param string $provider_class
+	 */
+	function pngx_register_provider( $provider_class ) {
+		$container = Pngx__Container::init();
+
+		$container->register( $provider_class );
+	}
+
+	if ( ! function_exists( 'pngx_callback' ) ) {
+		/**
+		 * Returns a lambda function suitable to use as a callback; when called the function will build the implementation
+		 * bound to `$classOrInterface` and return the value of a call to `$method` method with the call arguments.
+		 *
+		 * @since  4.7
+		 * @since  4.6.2  Included the $argsN params
+		 *
+		 * @param  string $slug       A class or interface fully qualified name or a string slug.
+		 * @param  string $method     The method that should be called on the resolved implementation with the
+		 *                            specified array arguments.
+		 * @param  mixed  [$argsN]      (optional) Any number of arguments that will be passed down to the Callback
+		 *
+		 * @return callable A PHP Callable based on the Slug and Methods passed
+		 */
+		function pngx_callback( $slug, $method ) {
+			$container = Pngx__Container::init();
+			$arguments = func_get_args();
+			$is_empty = 2 === count( $arguments );
+
+			if ( $is_empty ) {
+				$callable = $container->callback( $slug, $method );
+			} else {
+				$callback = $container->callback( 'callback', 'get' );
+				$callable = call_user_func_array( $callback, $arguments );
+			}
+
+			return $callable;
+		}
+	}
+
+	if ( ! function_exists( 'pngx_callback_return' ) ) {
+		/**
+		 * Returns a pngx_callback for a very simple Return value method
+		 *
+		 * Example of Usage:
+		 *
+		 *      add_filter( 'admin_title', pngx_callback_return( __( 'Ready to work.' ) ) );
+		 *
+		 * @since  4.6.2
+		 *
+		 * @param  mixed    $value  The value to be returned
+		 *
+		 * @return callable A PHP Callable based on the Slug and Methods passed
+		 */
+		function pngx_callback_return( $value ) {
+			return pngx_callback( 'callback', 'return_value', $value );
+		}
+	}
+}

+ 126 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Context.php

@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * Class Pngx__Context
+ *
+ * Based off Modern Tribe's Tribe__Context
+ *
+ * @since 3.0
+ *
+ */
+class Pngx__Context {
+
+	/**
+	 * Whether the context of the current HTTP request is an AJAX one or not.
+	 *
+	 * @var bool
+	 */
+	protected $doing_ajax;
+
+	/**
+	 * Whether the context of the current HTTP request is a Cron one or not.
+	 *
+	 * @var bool
+	 */
+	protected $doing_cron;
+
+	/**
+	 * Whether we are currently creating a new post, a post of post type(s) or not.
+	 *
+	 * @since 3.0
+	 *
+	 * @param null $post_type The optional post type to check.
+	 *
+	 * @return bool Whether we are currently creating a new post, a post of post type(s) or not.
+	 */
+	public function is_new_post( $post_type = null ) {
+		global $pagenow;
+		$is_new = 'post-new.php' === $pagenow;
+
+		return $is_new && $this->is_editing_post( $post_type );
+	}
+
+	/**
+	 * Whether we are currently editing a post(s), post type(s) or not.
+	 *
+	 * @since 3.0
+	 *
+	 * @param null|array|string|int $post_or_type A post ID, post type, an array of post types or post IDs, `null`
+	 *                                            to just make sure we are currently editing a post.
+	 *
+	 * @return bool
+	 */
+	public function is_editing_post( $post_or_type = null ) {
+		global $pagenow;
+		$is_new  = 'post-new.php' === $pagenow;
+		$is_post = 'post.php' === $pagenow;
+		$is_editing = 'edit.php' === $pagenow;
+
+		if ( ! ( $is_new || $is_post || $is_editing ) ) {
+			return false;
+		}
+
+		if ( null !== $post_or_type ) {
+			$lookup = array( $_GET, $_POST, $_REQUEST );
+
+			$current_post = Pngx__Utilities__Array::get_in_any( $lookup, 'post', get_post() );
+
+			if ( is_numeric( $post_or_type ) ) {
+
+				$post = $is_post ? get_post( $post_or_type ) : null;
+
+				return ! empty( $post ) && $post == $current_post;
+			}
+
+			$post_types = is_array( $post_or_type ) ? $post_or_type : array( $post_or_type );
+
+			$post = $is_post ? $current_post : null;
+
+			if ( count( array_filter( $post_types, 'is_numeric' ) ) === count( $post_types ) ) {
+				return ! empty( $post ) && in_array( $post->ID, $post_types );
+			}
+
+			if ( $is_post && $post instanceof WP_Post ) {
+				$post_type = $post->post_type;
+			} else {
+				$post_type = Pngx__Utilities__Array::get_in_any( $lookup, 'post_type', 'post' );
+			}
+
+			return (bool) count( array_intersect( $post_types, array( $post_type ) ) );
+		}
+
+		return $is_new || $is_post;
+	}
+
+	/**
+	 * Helper function to indicate whether the current execution context is AJAX.
+	 *
+	 * This method exists to allow us test code that behaves differently depending on the execution
+	 * context.
+	 *
+	 * @since 4.7.12
+	 * @since 4.9.5 Removed the $doing_ajax parameter.
+	 *
+	 * @return boolean
+	 */
+	public function doing_ajax() {
+		return function_exists( 'wp_doing_ajax' )
+			? wp_doing_ajax()
+			: defined( 'DOING_AJAX' ) && DOING_AJAX;
+	}
+
+	/**
+	 * Checks whether the context of the current HTTP request is a Cron one or not.
+	 *
+	 * @since 4.7.23
+	 * @since 4.9.5 Removed the $doing_cron parameter.
+	 *
+	 * @return bool Whether the context of the current HTTP request is a Cron one or not.
+	 */
+	public function doing_cron() {
+		return function_exists( 'wp_doing_cron' )
+			? wp_doing_cron()
+			: defined( 'DOING_CRON' ) && DOING_CRON;
+	}
+
+}

+ 41 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Cron_20.php

@@ -0,0 +1,41 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Add Cron Schedule
+ *
+ *
+ */
+class Pngx__Cron_20 {
+
+	/**
+	 * Add filters to register custom cron schedules
+	 *
+	 * @return void
+	 */
+	public function filter_cron_schedules() {
+		add_filter( 'cron_schedules', array( $this, 'register_20min_interval' ) );
+	}
+
+	/**
+	 * Add a new scheduled task interval (of 20mins).
+	 *
+	 * @param  array $schedules
+	 *
+	 * @return array
+	 */
+	public function register_20min_interval( $schedules ) {
+
+		$schedules['every_20mins'] = array(
+			'interval' => 20 * MINUTE_IN_SECONDS,
+			'display'  => __( 'Once Every 20 Mins', 'plugin-engine' ),
+		);
+
+		return $schedules;
+	}
+
+}

+ 46 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Date.php

@@ -0,0 +1,46 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+
+/**
+ * Blog Date and Time
+ *
+ *
+ */
+class Pngx__Date {
+
+	public static function display_date( $format = false, $display_time = false, $custom_format = false ) {
+
+		//Blog Time According to WordPress
+		$blog_time = current_time( 'mysql' );
+
+		//Display Time with Date using WordPress Setting Format
+		$time = '';
+		if ( $display_time ) {
+			$time = ' ' . get_option( 'time_format' );
+		}
+
+		//Display Current Date and Time with Custom Format
+		if ( $custom_format ) {
+			return date( esc_attr( $custom_format ), strtotime( $blog_time ) );
+
+			//Display Month First
+		} elseif ( 0 == $format ) {
+			return date( 'm/d/Y' . $time, strtotime( $blog_time ) );
+
+			//Display Day First
+		} elseif ( 1 == $format ) {
+			return date( 'd/m/Y' . $time, strtotime( $blog_time ) );
+
+			//Default to Display by WordPres Date Format
+		} else {
+			return date( get_option( 'date_format' ) . $time, strtotime( $blog_time ) );
+		}
+
+
+	}
+
+}

+ 494 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Dependency.php

@@ -0,0 +1,494 @@
+<?php
+// Don't load directly
+defined( 'WPINC' ) or die;
+
+if ( ! class_exists( 'Pngx__Dependency' ) ) {
+	/**
+	 * Tracks which pngx plugins are currently activated
+	 */
+	class Pngx__Dependency {
+
+		/**
+		 * A multidimensional array of active pngx plugins in the following format
+		 *
+		 * array(
+		 *  'class'   => 'main class name',
+		 *  'version' => 'version num', (optional)
+		 *  'path'    => 'Path to the main plugin/bootstrap file' (optional)
+		 * )
+		 */
+		protected $active_plugins = array();
+
+		/**
+		 * A multidimensional array of active pngx plugins in the following format
+		 *
+		 * array(
+		 *  'class'             => 'main class name',
+		 *  'path'              => 'Path to the main plugin/bootstrap file'
+		 *  'version'           => 'version num', (optional)
+		 *  'dependencies'      => 'A multidimensional of dependencies' (optional)
+		 * )
+		 */
+		protected $registered_plugins = array();
+
+		/**
+		 * An array of class Pngx__Admin__Notice__Plugin_Download per plugin
+		 *
+		 * @since 4.9
+		 *
+		 */
+		protected $admin_messages = array();
+
+		/**
+		 * Static Singleton Holder
+		 *
+		 * @var self
+		 */
+		private static $instance;
+
+
+		/**
+		 * Static Singleton Factory Method
+		 *
+		 * @return self
+		 */
+		public static function instance() {
+			if ( ! self::$instance ) {
+				self::$instance = new self;
+			}
+			return self::$instance;
+		}
+
+		/**
+		 * Adds a plugin to the active list
+		 *
+		 * @since 4.9
+		 *
+		 * @param string        $main_class    Main/base class for this plugin
+		 * @param null|string   $version       Version number of plugin
+		 * @param null|string   $path          Path to the main plugin/bootstrap file
+		 * @param array         $dependencies  An array of dependencies for a plugin
+		 */
+		public function add_registered_plugin( $main_class, $version = null, $path = null, $dependencies = array() ) {
+
+			$plugin = array(
+				'class'        => $main_class,
+				'version'      => $version,
+				'path'         => $path,
+				'dependencies' => $dependencies,
+			);
+
+			$this->registered_plugins[ $main_class ] = $plugin;
+
+			if ( $path ) {
+				$this->admin_messages[ $main_class ] = new Pngx__Admin__Notice__Plugin_Download( $path );
+			}
+
+		}
+
+		/**
+		 * Retrieves registered plugin array
+		 *
+		 * @since 4.9
+		 *
+		 * @return array
+		 */
+		public function get_registered_plugins() {
+			return $this->registered_plugins;
+		}
+
+		/**
+		 * Adds a plugin to the active list
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 * @param string $version    Version number of plugin
+		 * @param string $path       Path to the main plugin/bootstrap file
+		 */
+		public function add_active_plugin( $main_class, $version = null, $path = null ) {
+
+			$plugin = array(
+				'class'        => $main_class,
+				'version'      => $version,
+				'path'         => $path,
+			);
+
+			$this->active_plugins[ $main_class ] = $plugin;
+		}
+
+		/**
+		 * Retrieves active plugin array
+		 *
+		 * @return array
+		 */
+		public function get_active_plugins() {
+			return $this->active_plugins;
+		}
+
+		/**
+		 * Searches the plugin list for key/value pair and return the full details for that plugin
+		 *
+		 * @param string $search_key The array key this value will appear in
+		 * @param string $search_val The value itself
+		 *
+		 * @return array|null
+		 */
+		public function get_plugin_by_key( $search_key, $search_val ) {
+			foreach ( $this->get_active_plugins() as $plugin ) {
+				if ( isset( $plugin[ $search_key ] ) && $plugin[ $search_key ] === $search_val ) {
+					return $plugin;
+				}
+			}
+
+			return null;
+		}
+
+		/**
+		 * Retrieves the plugins details by class name
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 *
+		 * @return array|null
+		 */
+		public function get_plugin_by_class( $main_class ) {
+			return $this->get_plugin_by_key( 'class', $main_class );
+		}
+
+		/**
+		 * Retrieves the version of the plugin
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 *
+		 * @return string|null Version
+		 */
+		public function get_plugin_version( $main_class ) {
+			$plugin = $this->get_plugin_by_class( $main_class );
+
+			return ( isset( $plugin['version'] ) ? $plugin['version'] : null );
+		}
+
+		/**
+		 * Checks if the plugin is active
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 *
+		 * @return bool
+		 */
+		public function is_plugin_active( $main_class ) {
+			return ( $this->get_plugin_by_class( $main_class ) !== null );
+		}
+
+		/**
+		 * Searches the registered plugin list for key/value pair and return the full details for that plugin
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $search_key The array key this value will appear in
+		 * @param string $search_val The value itself
+		 *
+		 * @return array|null
+		 */
+		public function get_registered_plugin_by_key( $search_key, $search_val ) {
+			foreach ( $this->get_registered_plugins() as $plugin ) {
+				if ( isset( $plugin[ $search_key ] ) && $plugin[ $search_key ] === $search_val ) {
+					return $plugin;
+				}
+			}
+
+			return null;
+		}
+
+		/**
+		 * Retrieves the registered plugins details by class name
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 *
+		 * @return array|null
+		 */
+		public function get_registered_plugin_by_class( $main_class ) {
+			return $this->get_registered_plugin_by_key( 'class', $main_class );
+		}
+
+		/**
+		 * Retrieves the version of the registered plugin
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 *
+		 * @return string|null Version
+		 */
+		public function get_registered_plugin_version( $main_class ) {
+			$plugin = $this->get_registered_plugin_by_class( $main_class );
+
+			return ( isset( $plugin['version'] ) ? $plugin['version'] : null );
+		}
+
+		/**
+		 * Checks if the plugin is active
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 *
+		 * @return bool
+		 */
+		public function is_plugin_registered( $main_class ) {
+			return ( $this->get_registered_plugin_by_class( $main_class ) !== null );
+		}
+
+
+		/**
+		 * Checks if a plugin is active and has the specified version
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 * @param string $version Version to do a compare against
+		 * @param string $compare Version compare string, defaults to >=
+		 *
+		 * @return bool
+		 */
+		public function is_plugin_version( $main_class, $version, $compare = '>=' ) {
+
+			//active plugin check to see if the correct version is active
+			if ( ! $this->is_plugin_active( $main_class ) ) {
+				return false;
+			} elseif ( version_compare( $this->get_plugin_version( $main_class ), $version, $compare ) ) {
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		 * Is the plugin registered with at least the minimum version
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $main_class Main/base class for this plugin
+		 * @param string $version Version to do a compare against
+		 * @param string $compare Version compare string, defaults to >=
+		 *
+		 * @return bool
+		 */
+		public function is_plugin_version_registered( $main_class, $version, $compare = '>=' ) {
+
+			//registered plugin check if addon as it tests if it might load
+			if ( ! $this->is_plugin_registered( $main_class ) ) {
+				return false;
+			} elseif ( version_compare( $this->get_registered_plugin_version( $main_class ), $version, $compare ) ) {
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		 * Checks if each plugin is active and exceeds the specified version number
+		 *
+		 * @param array $plugins_required Each item is a 'class_name' => 'min version' pair. Min ver can be null.
+		 *
+		 * @return bool
+		 */
+		public function has_requisite_plugins( $plugins_required = array() ) {
+
+			foreach ( $plugins_required as $class => $version ) {
+				// Return false if the plugin is not set or is a lesser version
+				if ( ! $this->is_plugin_active( $class ) ) {
+					return false;
+				}
+
+				if ( null !== $version && ! $this->is_plugin_version( $class, $version ) ) {
+					return false;
+				}
+			}
+
+			return true;
+		}
+
+		/**
+		 * Retrieves Registered Plugin by Class Name from Array
+		 *
+		 * @since 4.9
+		 *
+		 * @return array|boolean
+		 */
+		public function get_registered_plugin( $class ) {
+			$plugins = $this->registered_plugins;
+
+			return isset( $plugins[ $class ] ) ? $plugins[ $class ] : false;
+		}
+
+		/**
+		 * Gets all dependencies or single class requirements
+		 * if parent, co, add does not exist use array as is
+		 * if they do exist check each one in turn
+		 *
+		 * @since 4.9
+		 *
+		 * @param array  $plugin        An array of data for given registered plugin
+		 * @param array  $dependencies  An array of dependencies for a plugin
+		 * @param bool   $addon         Indicates if the plugin is an add-on for The Events Calendar or Event Tickets
+		 *
+		 * @return bool  returns false if any dependency is invalid
+		 */
+		public function has_valid_dependencies( $plugin, $dependencies = array(), $addon = false ) {
+
+			if ( empty( $dependencies ) ) {
+				return true;
+			}
+
+			$failed_dependency = 0;
+			$pngx_plugins    = new Pngx__Plugins();
+
+			foreach ( $dependencies as $class => $version ) {
+
+				// if no class for add-on
+				$checked_plugin    = $this->get_registered_plugin( $class );
+				if ( $addon && empty( $checked_plugin ) ) {
+					continue;
+				}
+
+				$is_registered = $this->is_plugin_version_registered( $class, $version );
+				if ( ! empty( $is_registered ) ) {
+					continue;
+				}
+
+				$dependent_plugin = $pngx_plugins->get_plugin_by_class( $class );
+				$this->admin_messages[ $plugin['class'] ]->add_required_plugin( $dependent_plugin['short_name'], $dependent_plugin['thickbox_url'], $is_registered, $version, $addon );
+				$failed_dependency++;
+			}
+
+			return $failed_dependency;
+		}
+
+		/**
+		 * Register a Plugin
+		 *
+		 * @since 4.9
+		 *
+		 * @param       $file_path
+		 * @param       $main_class
+		 * @param       $version
+		 * @param array $classes_req
+		 * @param array $dependencies
+		 */
+		public function register_plugin( $file_path, $main_class, $version, $classes_req = array(), $dependencies = array() ) {
+			/**
+			 * Filters the version string for a plugin.
+			 *
+			 * @since 4.9
+			 *
+			 * @param string $version The plugin version number, e.g. "4.0.4".
+			 * @param array $dependencies An array of dependencies for the plugins. These can include parent, add-on and other dependencies.
+			 * @param string $file_path The absolute path to the plugin main file.
+			 * @param array $classes_req Any Main class files/pngx plugins required for this to run.
+			 */
+			$version = apply_filters( "pngx_register_{$main_class}_plugin_version", $version, $dependencies, $file_path, $classes_req );
+			/**
+			 * Filters the dependencies array for a plugin.
+			 *
+			 * @since 4.9
+			 *
+			 * @param array $dependencies An array of dependencies for the plugins. These can include parent, add-on and other dependencies.
+			 * @param string $version The plugin version number, e.g. "4.0.4".
+			 * @param string $file_path The absolute path to the plugin main file.
+			 * @param array $classes_req Any Main class files/pngx plugins required for this to run.
+			 */
+			$dependencies = apply_filters( "pngx_register_{$main_class}_plugin_dependencies", $dependencies, $version, $file_path, $classes_req );
+
+			//add all plugins to registered_plugins
+			$this->add_registered_plugin( $main_class, $version, $file_path, $dependencies );
+
+			// Checks to see if the plugins are active for extensions
+			if ( ! empty( $classes_req ) && ! $this->has_requisite_plugins( $classes_req ) ) {
+				$pngx_plugins = new Pngx__Plugins();
+				foreach ( $classes_req as $class => $plugin_version ) {
+					$plugin    = $pngx_plugins->get_plugin_by_class( $class );
+					$is_active = $this->is_plugin_version( $class, $plugin_version );
+					$this->admin_messages[ $main_class ]->add_required_plugin( $plugin['short_name'], $plugin['thickbox_url'], $is_active, $plugin_version );
+				}
+			}
+
+			// only set The Events Calendar and Event Tickets to Active when registering
+			if ( 'Pngx__Events__Main' === $main_class || 'Pngx__Tickets__Main' === $main_class ) {
+				$this->add_active_plugin( $main_class, $version, $file_path );
+			}
+
+		}
+
+		/**
+		 * Checks if this plugin has permission to run, if not it notifies the admin
+		 *
+		 * @since 4.9
+		 *
+		 * @param string $file_path    Full file path to the base plugin file
+		 * @param string $main_class   The Main/base class for this plugin
+		 * @param string $version      The version
+		 * @param array  $classes_req  Any Main class files/pngx plugins required for this to run
+		 * @param array  $dependencies an array of dependencies to check
+		 *
+		 * @return bool Indicates if plugin should continue initialization
+		 */
+		public function check_plugin( $main_class ) {
+
+			$parent_dependencies = $co_dependencies = $addon_dependencies = 0;
+
+			//check if plugin is registered, if not return false
+			$plugin = $this->get_registered_plugin( $main_class );
+			if ( empty( $plugin ) ) {
+				return false;
+			}
+
+			// check parent dependencies in add-on
+			if ( ! empty( $plugin['dependencies']['parent-dependencies'] ) ) {
+				$parent_dependencies = $this->has_valid_dependencies( $plugin, $plugin['dependencies']['parent-dependencies'] );
+			}
+			//check co-dependencies in add-on
+			if ( ! empty( $plugin['dependencies']['co-dependencies'] ) ) {
+				$co_dependencies = $this->has_valid_dependencies( $plugin, $plugin['dependencies']['co-dependencies'] );
+			}
+
+			//check add-on dependencies from parent
+			$addon_dependencies = $this->check_addon_dependencies( $main_class );
+
+			//if good then we set as active plugin and continue to load
+			if ( ! $parent_dependencies && ! $co_dependencies && ! $addon_dependencies ) {
+				$this->add_active_plugin( $main_class, $plugin['version'], $plugin['path'] );
+
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		 * Check an add-on dependencies for its parent
+		 *
+		 * @since 4.9
+		 *
+		 * @param string  $main_class   a string of the main class for the plugin being checked
+		 *
+		 * @return bool  returns false if any dependency is invalid
+		 */
+		protected function check_addon_dependencies( $main_class ) {
+
+			$addon_dependencies = 0;
+
+			foreach ( $this->registered_plugins as $registered ) {
+				if ( empty( $registered['dependencies']['addon-dependencies'][ $main_class ] ) ) {
+					continue;
+				}
+
+				$addon_dependencies = $this->has_valid_dependencies( $registered, $registered['dependencies']['addon-dependencies'], true );
+			}
+
+			return $addon_dependencies;
+		}
+
+	}
+
+}

+ 126 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Editor.php

@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * Initialize Gutenberg editor blocks and styles
+ *
+ * @since 3.0
+ */
+class Pngx__Editor {
+
+	/**
+	 * Checks if we have Gutenberg Project online, only useful while
+	 * its a external plugin
+	 *
+	 * @todo   Revise when Gutenberg is merged into core
+	 *
+	 * @since  TBD
+	 *
+	 * @return boolean
+	 */
+	public function is_gutenberg_active() {
+		return function_exists( 'the_gutenberg_project' );
+	}
+
+	/**
+	 * Checks if we have Editor Block active
+	 *
+	 * @since  tbd
+	 *
+	 * @return boolean
+	 */
+	public function is_blocks_editor_active() {
+		return function_exists( 'register_block_type' ) && function_exists( 'unregister_block_type' );
+	}
+
+	/**
+	 * Adds the required fields into the Events Post Type so that we can use Block Editor
+	 *
+	 * @since  tbd
+	 *
+	 * @param  array $args Arguments used to setup the Post Type
+	 *
+	 * @return array
+	 */
+	public function add_support( $args = array() ) {
+		// Make sure we have the Support argument and it's an array
+		if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
+			$args['supports'] = array();
+		}
+
+		// Add Editor Support
+		if ( ! in_array( 'editor', $args['supports'] ) ) {
+			$args['supports'][] = 'editor';
+		}
+
+		return $args;
+	}
+
+	/**
+	 * Adds the required fields into the Post Type so that we can the Rest API to update it
+	 *
+	 * @since  tbd
+	 *
+	 * @param  array $args Arguments used to setup the Post Type
+	 *
+	 * @return array
+	 */
+	public function add_rest_support( $args = array() ) {
+		// Blocks Editor requires REST support
+		$args['show_in_rest'] = true;
+
+		// Make sure we have the Support argument and it's an array
+		if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
+			$args['supports'] = array();
+		}
+
+		// Add Custom Fields (meta) Support
+		if ( ! in_array( 'custom-fields', $args['supports'] ) ) {
+			$args['supports'][] = 'custom-fields';
+		}
+
+		return $args;
+	}
+
+	/**
+	 * Adds the required blocks
+	 *
+	 * @since  tbd
+	 *
+	 * @param  array $args Arguments used to setup the CPT template
+	 *
+	 * @return array
+	 */
+	public function add_template_blocks( $args = array() ) {
+		$template = array();
+
+		/**
+		 * @todo Have a good method from the block class to em here
+		 */
+		$template[] = array( 'pngx/blocks' );
+		$template[] = array(
+			'core/paragraph',
+			array(
+				'placeholder' => __( 'Add Description...', 'plugin-engine' ),
+			),
+		);
+
+		// Save into args
+ 		$args['template'] = $template;
+
+ 		return $args;
+	}
+
+	/**
+	 * Prevents us from using `init` to register our own blocks, allows us to move
+	 * it when the proper place shows up
+	 *
+	 * @since  tbd
+	 *
+	 * @return void
+	 */
+	public function register_blocks() {
+		do_action( 'pngx_editor_register_blocks' );
+	}
+
+}
+

+ 65 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Content.php

@@ -0,0 +1,65 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Field__Content' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Field__Content
+ * Title
+ */
+class Pngx__Field__Content {
+
+	public static function display( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		global $wp_version;
+
+		$class = $field['display']['class'] ? $field['display']['class'] : '';
+		$style = Pngx__Style__Linked::get_styles( $field, $post_id );
+		$tags  = isset( $field['display']['tags'] ) ? $field['display']['tags'] : 'title';
+
+		if ( ! empty( $var['repeating'] ) && ! empty( $var['value'] ) ) {
+			$meta = $var['value'];
+		}
+
+		//Apply all the_content filters manually
+		$meta = wptexturize( $meta );
+		$meta = convert_smilies( $meta );
+
+		/**
+		 * Filter Front End Content for WPAutoP
+		 *
+		 * @param string $meta    content to display
+		 * @param int    $post_id id of post
+		 * @param array  $field   field attributes
+		 */
+		$meta = apply_filters( 'pngx_filter_content', $meta, $post_id, $field );
+
+		$meta = shortcode_unautop( $meta );
+		$meta = prepend_attachment( $meta );
+
+		//Run Shortcodes
+		$meta = do_shortcode( $meta );
+
+		/**
+		 * Filter Front End Content Fields
+		 *
+		 * @param string $meta    content to display
+		 * @param int    $post_id id of post
+		 * @param array  $field   field attributes
+		 */
+		$meta = apply_filters( 'pngx_filter_content_field_output', $meta, $post_id, $field );
+
+		?>
+		<div class="pngx-content <?php echo esc_attr( $class ); ?>" <?php echo wp_strip_all_tags( $style ); ?>>
+			<?php echo strip_tags( $meta,  apply_filters( 'pngx_filter_content_allowed_tags', Pngx__Allowed_Tags::$tags() ) ); ?>
+		</div>
+		<?php
+
+	}
+
+}

+ 33 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Icon.php

@@ -0,0 +1,33 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Field__Icon' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Field__Expiration
+ * Text Field
+ */
+class Pngx__Field__Icon {
+
+	public static function display( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		$class = $field['display']['class'] ? $field['display']['class'] : '';
+		$style = Pngx__Style__Linked::get_styles( $field, $post_id );
+		?>
+
+		<div class="pngx-icon <?php echo esc_attr( $class ); ?>" <?php echo wp_strip_all_tags( $style ); ?>>
+
+			<?php echo '<i class="fa ' . esc_html( $meta ) . '"></i>'; ?>
+
+		</div>
+
+		<?php
+
+	}
+
+}

+ 40 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Image.php

@@ -0,0 +1,40 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Field__Image' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Field__Image
+ * Wysiwyg Field
+ */
+class Pngx__Field__Image {
+
+	public static function display( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		$class            = $field['display']['class'] ? $field['display']['class'] : '';
+		$style            = Pngx__Style__Linked::get_styles( $field, $post_id );
+		$display_img_size = $field['display']['image_size'] ? $field['display']['image_size'] : array();
+
+		$img_size = 'full';
+		if ( ! empty( $display_img_size['name'] ) ) {
+			$img_size = $display_img_size['name'];
+		}
+
+		$image_id  = get_post_meta( $post_id, $field['id'], true );
+		$image_id  = wp_get_attachment_image_src( $image_id, $img_size );
+		$image_src = isset( $image_id[0] ) ? wp_normalize_path( $image_id[0] ) : '';
+
+		if ( $image_src ) {
+			?>
+			<div class="pngx-image <?php echo esc_attr( $class ); ?>" <?php echo wp_strip_all_tags( $style ); ?>>
+				<img src='<?php echo esc_url( $image_src ); ?>' alt='<?php echo get_the_title(); ?>' title='<?php echo get_the_title(); ?>'>
+			</div>
+			<?php
+		}
+	}
+}

+ 39 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Title.php

@@ -0,0 +1,39 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Field__Title' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Field__Title
+ * Wysiwyg Field
+ */
+class Pngx__Field__Title {
+
+	public static function display( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		$class = $field['display']['class'] ? $field['display']['class'] : '';
+		$style = Pngx__Style__Linked::get_styles( $field, $post_id );
+		$tags  = isset( $field['display']['tags'] ) ? $field['display']['tags'] : 'title';
+		$wrap  = isset( $field['display']['wrap'] ) ? $field['display']['wrap'] : 'div';
+
+		if ( empty( $meta ) ) {
+			return;
+		}
+		?>
+
+		<?php echo $wrap ? '<' . esc_attr( $wrap ) . ' class="' . esc_attr( $class ) . '" ' . wp_strip_all_tags( $style ) . '>' : ''; ?>
+
+		<?php echo strip_tags( $meta, Pngx__Allowed_Tags::$tags() ); ?>
+
+		<?php echo $wrap ? '</' . esc_attr( $wrap ) . '>' : ''; ?>
+
+		<?php
+
+	}
+
+}

+ 48 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Variety.php

@@ -0,0 +1,48 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Field__Variety' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Field__Variety
+ * Text Field
+ */
+class Pngx__Field__Variety {
+
+	public static function display( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		if ( ! isset( $field['variety_choices'][ $meta ] ) ) {
+			return;
+		}
+
+		$class = $field['display']['class'] ? $field['display']['class'] : '';
+		$style = '';
+		if ( ! isset( $field['style-target'] ) ) {
+			$style = Pngx__Style__Linked::get_styles( $field, $post_id );
+		}
+
+		?>
+
+		<div class="pngx-variety <?php echo esc_attr( $class ); ?>" <?php echo wp_strip_all_tags( $style ); ?>>
+			<?php
+			foreach ( $field['variety_choices'][ $meta ] as $variety_fields ) {
+
+				if ( ! is_array( $variety_fields ) && isset( $template_fields[ $variety_fields ] ) ) {
+
+					Pngx__Fields::display_field( $template_fields[ $variety_fields ], $post_id, $template_fields, $var );
+
+				}
+
+			}
+			?>
+		</div>
+		<?php
+
+	}
+
+}

+ 37 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Field/Wrap.php

@@ -0,0 +1,37 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Field__Wrap' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Field__Wrap
+ * Title
+ */
+class Pngx__Field__Wrap {
+
+	public static function display_start( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		$class = $field['display']['class'] ? $field['display']['class'] : '';
+		$style = Pngx__Style__Linked::get_styles( $field, $post_id );
+
+		?>
+		<div class="pngx-content-wrap <?php echo esc_attr( $class ); ?>" <?php echo wp_strip_all_tags( $style ); ?>>
+		<?php
+
+	}
+
+
+	public static function display_end( $field = array(), $post_id = null, $meta = null, $template_fields = array(), $var = array() ) {
+
+		?>
+		</div>
+		<?php
+
+	}
+
+}

+ 92 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Fields.php

@@ -0,0 +1,92 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Fields' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Fields
+ * Front End Fields for Meta and Options
+ */
+class Pngx__Fields {
+
+	/**
+	 * Display Individual Fields
+	 *
+	 * @param array $field     meta field attributes
+	 * @param int   $post_id single post id
+	 */
+	public static function display_field( $field = array(), $post_id = null, $template_fields = array(), $var = array() ) {
+
+		//Only display fields with display index
+		if ( ! isset( $field['display'] ) ) {
+			return false;
+		}
+
+		// get value of this field if it exists for this post
+		$meta = get_post_meta( $post_id, $field['id'], true );
+
+		switch ( $field['display']['type'] ) {
+
+			case 'content':
+
+				Pngx__Field__Content::display( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+
+			case 'icon':
+
+				Pngx__Field__Icon::display( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+
+			case 'image':
+
+				Pngx__Field__Image::display( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+
+			case 'title':
+
+				Pngx__Field__Title::display( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+
+
+			case 'variety':
+
+				Pngx__Field__Variety::display( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+
+			case 'wrap-start':
+
+				Pngx__Field__Wrap::display_start( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+
+			case 'wrap-end':
+
+				Pngx__Field__Wrap::display_end( $field, $post_id, $meta, $template_fields, $var );
+
+				break;
+		}
+
+		if ( has_filter( 'pngx_front_field_types' ) ) {
+			/**
+			 * Filter the Plugin Engine Fields for Front End
+			 *
+			 * @param array $field     current field attributes
+			 * @param array $post_id current id
+			 * @param array $meta      current value of field
+			 */
+			apply_filters( 'pngx_front_field_types', $field, $post_id, $meta, $template_fields, $var );
+		}
+
+	}
+
+}

+ 310 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Main.php

@@ -0,0 +1,310 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+
+if ( class_exists( 'Pngx__Main' ) ) {
+	return;
+}
+
+
+/**
+ * Main Plugin Engine class.
+ */
+class Pngx__Main {
+
+	const VERSION    = '3.0';
+	const OPTIONS_ID = 'plugin_engine_options';
+
+	protected $plugin_context;
+	protected $plugin_context_class;
+	public    $doing_ajax = false;
+
+	public $plugin_dir;
+	public $plugin_path;
+	public $plugin_url;
+	public $resource_path;
+	public $resource_url;
+	public $vendor_path;
+	public $vendor_url;
+
+	/**
+	 * Static Singleton Holder
+	 * @var self
+	 */
+	protected static $instance;
+
+	/**
+	 * constructor
+	 */
+	public function __construct( $context = null ) {
+
+		if ( self::$instance ) {
+			return;
+		}
+
+		// the 5.2 compatible autoload file
+		if ( version_compare( PHP_VERSION, '5.2.17', '<=' ) ) {
+			require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload_52.php' );
+		} else {
+			require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload.php' );
+		}
+
+		// the DI container class
+		require_once dirname( __FILE__ ) . '/Container.php';
+
+		if ( is_object( $context ) ) {
+			$this->plugin_context       = $context;
+			$this->plugin_context_class = get_class( $context );
+		}
+
+		$this->plugin_path   = trailingslashit( dirname( dirname( dirname( __FILE__ ) ) ) );
+		$this->plugin_dir    = trailingslashit( basename( $this->plugin_path ) );
+		$this->plugin_url    = plugins_url( $this->plugin_dir );
+		$parent_plugin_dir   = trailingslashit( plugin_basename( $this->plugin_path ) );
+		$this->plugin_url    = plugins_url( $parent_plugin_dir === $this->plugin_dir ? $this->plugin_dir : $parent_plugin_dir );
+		$this->resource_path = $this->plugin_path . 'src/resources/';
+		$this->resource_url  = $this->plugin_url . 'src/resources/';
+		$this->vendor_path   = $this->plugin_path . 'vendor/';
+		$this->vendor_url    = $this->plugin_url . 'vendor/';
+
+		add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ), 1 );
+	}
+
+	/**
+	 *
+	 */
+	public function plugins_loaded() {
+
+		$this->load_text_domain( 'plugin-engine', basename( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) . '/plugin-engine/languages/' );
+
+		$this->init_autoloading();
+
+		$this->bind_implementations();
+		$this->loadLibraries();
+		$this->add_hooks();
+
+		/**
+		 * Runs once all common libs are loaded and initial hooks are in place.
+		 *
+		 * @since 3.0
+		 */
+		do_action( 'pngx_engine_loaded' );
+
+		/**
+		 * Runs to register loaded plugins
+		 *
+		 */
+		do_action( 'pngx_plugins_loaded' );
+
+		/**
+		 * Use pngx_plugins_loaded instead
+		 *
+		 * @deprecated 2.6
+		 */
+		do_action( 'plugin_engine_loaded' );
+	}
+
+	/**
+	 * Get's the instantiated context of this class. I.e. the object that instantiated this one.
+	 */
+	public function context() {
+		return $this->plugin_context;
+	}
+
+	/**
+	 * Setup the autoloader for common files
+	 */
+	protected function init_autoloading() {
+		if ( ! class_exists( 'Pngx__Autoloader' ) ) {
+			require_once dirname( __FILE__ ) . '/Autoloader.php';
+		}
+
+		$prefixes   = array( 'Pngx__' => dirname( __FILE__ ) );
+		$autoloader = Pngx__Autoloader::instance();
+		$autoloader->register_prefixes( $prefixes );
+		$autoloader->register_autoloader();
+
+	}
+
+	/**
+	 * Get's the class name of the instantiated plugin context of this class. I.e. the class name of the object that
+	 * instantiated this one.
+	 */
+	public function context_class() {
+		return $this->plugin_context_class;
+	}
+
+	/**
+	 * Registers the slug bound to the implementations in the container.
+	 */
+	public function bind_implementations() {
+		pngx_singleton( 'assets', 'Pngx__Assets' );
+		pngx_singleton( 'context', 'Pngx__Context' );
+
+		pngx_singleton( 'admin.assets', 'Pngx__Admin__Assets' );
+	}
+
+	/**
+	 * Load all the required library files.
+	 */
+	protected function loadLibraries() {
+
+		//Core Functions
+		require_once $this->plugin_path . 'src/functions/template-tags/general.php';
+
+	}
+
+	/**
+	 * Adds core hooks
+	 */
+	public function add_hooks() {
+
+		//Load Admin Class if in Admin Section
+		if ( is_admin() ) {
+			new Pngx__Admin__Main();
+		}
+
+		add_action( 'plugins_loaded', array( 'Pngx__Admin__Notices', 'instance' ), 1 );
+	}
+
+	/**
+	 * A Helper method to load text domain
+	 * First it tries to load the wp-content/languages translation then if falls to the
+	 * try to load $dir language files
+	 *
+	 * @param string $domain The text domain that will be loaded
+	 * @param string $dir    What directory should be used to try to load if the default doenst work
+	 *
+	 * @return bool  If it was able to load the text domain
+	 */
+	public function load_text_domain( $domain, $dir = false ) {
+
+		// Added safety just in case this runs twice...
+		if ( is_textdomain_loaded( $domain ) && ! is_a( $GLOBALS['l10n'][ $domain ], 'NOOP_Translations' ) ) {
+			return true;
+		}
+
+		$locale = get_locale();
+		$mofile = WP_LANG_DIR . '/plugins/' . $domain . '-' . $locale . '.mo';
+
+		/**
+		 * Allows users to filter which file will be loaded for a given text domain
+		 * Be careful when using this filter, it will apply across the whole plugin suite.
+		 *
+		 * @param string      $mofile The path for the .mo File
+		 * @param string      $domain Which plugin domain we are trying to load
+		 * @param string      $locale Which Language we will load
+		 * @param string|bool $dir    If there was a custom directory passed on the method call
+		 */
+		$mofile = apply_filters( 'pngx_load_text_domain', $mofile, $domain, $locale, $dir );
+
+		$loaded = load_plugin_textdomain( $domain, false, $mofile );
+
+		if ( false !== $dir && ! $loaded ) {
+			return load_plugin_textdomain( $domain, false, $dir );
+		}
+
+		return $loaded;
+	}
+
+	/**
+	 * Returns the post types registered with plugin engine
+	 */
+	public static function get_post_types() {
+		// we default the post type array to empty in plugin engine. Plugins like TEC add to it
+		return apply_filters( 'pngx_post_types', array() );
+
+	}
+
+	/**
+	 * Merge the Defaults with new values
+	 *
+	 * @param $defaults
+	 * @param $updates
+	 *
+	 * @return array
+	 */
+	public static function merge_defaults( $defaults, $updates ) {
+
+		$updates = (array) $updates;
+		$out     = array();
+		foreach ( $defaults as $name => $default ) {
+			if ( array_key_exists( $name, $updates ) ) {
+				$out[ $name ] = $updates[ $name ];
+			} else {
+				$out[ $name ] = $default;
+			}
+		}
+
+		return $out;
+
+	}
+
+	/**
+	 * Static Singleton Factory Method
+	 *
+	 * @return Pngx__Main
+	 */
+	public static function instance() {
+		static $instance;
+
+		if ( ! $instance ) {
+			$instance = new self;
+		}
+
+		return $instance;
+	}
+
+	/**
+	 * Insert an array after a specified key within another array.
+	 *
+	 * @deprecated 3.0
+	 *
+	 * @param $key
+	 * @param $source_array
+	 * @param $insert_array
+	 *
+	 * @return array
+	 *
+	 */
+	public static function array_insert_after_key( $key, $source_array, $insert_array ) {
+		_deprecated_function( __METHOD__, '3.0' );
+
+		if ( array_key_exists( $key, $source_array ) ) {
+			$position     = array_search( $key, array_keys( $source_array ) ) + 1;
+			$source_array = array_slice( $source_array, 0, $position, true ) + $insert_array + array_slice( $source_array, $position, null, true );
+		} else {
+			// If no key is found, then add it to the end of the array.
+			$source_array += $insert_array;
+		}
+
+		return $source_array;
+	}
+
+	/**
+	 * Insert an array immediately before a specified key within another array.
+	 *
+	 * @deprecated 3.0
+	 *
+	 * @param $key
+	 * @param $source_array
+	 * @param $insert_array
+	 *
+	 * @return array
+	 */
+	public static function array_insert_before_key( $key, $source_array, $insert_array ) {
+		_deprecated_function( __METHOD__, '3.0' );
+
+		if ( array_key_exists( $key, $source_array ) ) {
+			$position     = array_search( $key, array_keys( $source_array ) );
+			$source_array = array_slice( $source_array, 0, $position, true ) + $insert_array + array_slice( $source_array, $position, null, true );
+		} else {
+			// If no key is found, then add it to the end of the array.
+			$source_array += $insert_array;
+		}
+
+		return $source_array;
+	}
+}

+ 51 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Meta/Fields.php

@@ -0,0 +1,51 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Meta__Fields' ) ) {
+	return;
+}
+
+
+class Pngx__Meta__Fields {
+
+	//fields id prefix
+	public $fields_prefix = 'pngx_';
+
+	/*
+	* Get Fields ID Prefix
+	*/
+	public function get_fields_prefix() {
+		return $this->$fields_prefix;
+	}
+
+	/**
+	 * Set Meta Fields
+	 *
+	 * @return mixed
+	 */
+	public function get_fields() {
+
+		//Prefix for fields id
+		$prefix = $this->get_fields_prefix();
+
+		//Sample Field Array
+		$fields[ $prefix . 'heading_deal' ] = array(
+			'id'        => $prefix . 'heading_deal', //id
+			'title'     => 'PNGX Field Title', //Label  __( 'use translation', 'plugin-engine' )
+			'desc'      => 'PNGX Field Description',//description or header __( 'use translation', 'plugin-engine' )
+			'type'      => 'heading',//field type
+			'section'   => 'plugin_engine_meta_box',//meta box
+			'tab'       => 'content',//tab
+			'condition' => 'pngx-img',//optional condition used in some fields
+			'class'     => 'pngx-img',//optional field class
+			'wrapclass' => 'pngx-img',//optional wrap css class
+			'toggle'    => array()//field toggle infomation based on value or selection
+		);
+
+		return $fields;
+
+	}
+
+}

+ 98 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Plugins.php

@@ -0,0 +1,98 @@
+<?php
+// Don't load directly
+defined( 'WPINC' ) or die;
+
+
+/**
+ * Class Pngx__Plugins
+ *
+ * Basedd of Modern Tribe's Tribe__Plugin Class
+ */
+class Pngx__Plugins {
+
+	/**
+	 * A list of Plugin Engine plugin's details in this format:
+	 *
+	 * array(
+	 *  'short_name'   => Common name for the plugin, used in places such as WP Admin messages
+	 *  'class'        => Main plugin class
+	 *  'thickbox_url' => Download or purchase URL for plugin from within /wp-admin/ thickbox
+	 *  )
+	 */
+	private $pngx_plugins = array(
+		array(
+			'short_name'   => 'Coupon Creator',
+			'class'        => 'Cctor__Coupon__Main',
+			'thickbox_url' => 'plugin-install.php?tab=plugin-information&plugin=coupon-creator&TB_iframe=true',
+		),
+		array(
+			'short_name'   => 'Coupon Creator Pro',
+			'class'        => 'Cctor__Coupon__Pro__Main',
+			'thickbox_url' => '//couponcreatorplugin.com/products/wordpress-coupon-creator-pro/?TB_iframe=true',
+		),
+		array(
+			'short_name'   => 'Coupon Creator Add-ons',
+			'class'        => 'Cctor__Coupon__Addons__Main',
+			'thickbox_url' => '//couponcreatorplugin.com/products/wordpress-coupon-creator-pro/?TB_iframe=true',
+		),
+	);
+
+	/**
+	 * Searches the plugin list for key/value pair and return the full details for that plugin
+	 *
+	 * @param string $search_key The array key this value will appear in
+	 * @param string $search_val The value itself
+	 *
+	 * @return array|null
+	 */
+	public function get_plugin_by_key( $search_key, $search_val ) {
+		foreach ( $this->pngx_plugins as $plugin ) {
+			if ( isset( $plugin[ $search_key ] ) && $plugin[ $search_key ] === $search_val ) {
+				return $plugin;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Retrieves plugins details by plugin name
+	 *
+	 * @param string $name Common name for the plugin, not necessarily the lengthy name in the WP Admin Plugins list
+	 *
+	 * @return array|null
+	 */
+	public function get_plugin_by_name( $name ) {
+		return $this->get_plugin_by_key( 'short_name', $name );
+	}
+
+	/**
+	 * Retrieves plugins details by class name
+	 *
+	 * @param string $main_class Main/base class for this plugin
+	 *
+	 * @return array|null
+	 */
+	public function get_plugin_by_class( $main_class ) {
+		return $this->get_plugin_by_key( 'class', $main_class );
+	}
+
+	/**
+	 * Retrieves the entire list
+	 *
+	 * @return array
+	 */
+	public function get_list() {
+		/**
+		 * Gives an opportunity to filter the list of pngx plugins
+		 *
+		 * @param array Contains a list of all pngx plugins
+		 *
+		 * @since 3.0
+		 *
+		 */
+		return apply_filters( 'pngx_plugins_get_list', $this->pngx_plugins );
+	}
+
+}
+

+ 206 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Register_Post_Type.php

@@ -0,0 +1,206 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Register_Post_Type' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Register_Post_Type
+ * Register Custom Post Types in WordPress and Modify Messaging
+ */
+class Pngx__Register_Post_Type {
+
+	protected $post_type = '';
+	protected $title_msg = '';
+
+	/**
+	 * Construct to Modify Messaging for Post Type
+	 *
+	 * @param $cpt       is a string for the registered post type
+	 * @param $title_msg is string for title placeholder
+	 */
+	public function __construct( $cpt = null, $title_msg = null ) {
+		if ( ! $cpt ) {
+			return;
+		}
+		$this->post_type = $cpt;
+		$this->title_msg = $title_msg;
+
+		add_filter( 'post_updated_messages', array( $this, 'post_update_messages' ) );
+
+		add_filter( 'enter_title_here', array( $this, 'title_placeholders' ) );
+	}
+
+	/**
+	 * Modifies update messages for a custom post type
+	 *
+	 * @param $messages
+	 *
+	 * @return mixed
+	 */
+	public function post_update_messages( $messages ) {
+		global $post, $post_ID;
+
+		$post_types = get_post_types( array( 'show_ui' => true, '_builtin' => false ), 'objects' );
+
+		foreach ( $post_types as $post_type => $post_object ) {
+
+			if ( $this->post_type == $post_type ) {
+				$messages[ $post_type ] = array(
+					0  => '', // Unused. Messages start at index 1.
+					1  => sprintf( __( '%s updated. <a href="%s">View %s</a>', 'plugin-engine' ), $post_object->labels->singular_name, esc_url( get_permalink( $post_ID ) ), $post_object->labels->singular_name ),
+					2  => __( 'Custom field updated.', 'plugin-engine' ),
+					3  => __( 'Custom field deleted.', 'plugin-engine' ),
+					4  => sprintf( __( '%s updated.', 'plugin-engine' ), $post_object->labels->singular_name ),
+					5  => isset( $_GET['revision'] ) ? sprintf( __( '%s restored to revision from %s', 'plugin-engine' ), $post_object->labels->singular_name, wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
+					6  => sprintf( __( '%s published. <a href="%s">View %s</a>', 'plugin-engine' ), $post_object->labels->singular_name, esc_url( get_permalink( $post_ID ) ), $post_object->labels->singular_name ),
+					7  => sprintf( __( '%s saved.', 'plugin-engine' ), $post_object->labels->singular_name ),
+					8  => sprintf( __( '%s submitted. <a target="_blank" href="%s">Preview %s</a>', 'plugin-engine' ), $post_object->labels->singular_name, esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ), $post_object->labels->singular_name ),
+					9  => sprintf( __( '%s scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview %s</a>', 'plugin-engine' ), $post_object->labels->singular_name, date_i18n( __( 'M j, Y @ G:i', 'plugin-engine' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post_ID ) ), $post_object->labels->singular_name ),
+					10 => sprintf( __( '%s draft updated. <a target="_blank" href="%s">Preview %s</a>', 'plugin-engine' ), $post_object->labels->singular_name, esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ), $post_object->labels->singular_name ),
+				);
+			}
+		}
+
+		return $messages;
+	}
+
+	/**
+	 * Change Enter Title Here for the Post Type
+	 * http://stephanieleary.com/2016/06/wordpress-hidden-gem-enter_title_here-filter/
+	 *
+	 * @param $placeholder
+	 *
+	 * @return string
+	 */
+	public function title_placeholders( $placeholder ) {
+		$screen = get_current_screen();
+		switch ( $screen->post_type ) {
+			case $this->post_type:
+				$placeholder = $this->title_msg;
+				break;
+			default:
+				break;
+
+		}
+
+		return $placeholder;
+	}
+
+
+	/**
+	 * Generate Labels for Custom Post Type
+	 *
+	 * @param $singular_name
+	 * @param $plural_name
+	 * @param $lc_singular_name
+	 * @param $lc_plural_name
+	 * @param $text_domain
+	 *
+	 * @return array
+	 */
+	public static function generate_post_type_labels( $singular_name, $plural_name, $lc_singular_name, $lc_plural_name, $text_domain ) {
+
+		$labels = array(
+			'name'                  => sprintf( esc_html__( '%s', $text_domain ), $plural_name ),
+			'singular_name'         => sprintf( esc_html__( '%s', $text_domain ), $singular_name ),
+			'menu_name'             => sprintf( esc_html__( '%s', $text_domain ), $plural_name ),
+			'name_admin_bar'        => sprintf( esc_html__( '%s', $text_domain ), $plural_name ),
+			'add_new'               => sprintf( esc_html__( 'Add New', $text_domain ), $singular_name ),
+			'add_new_item'          => sprintf( esc_html__( 'Add New %s', $text_domain ), $singular_name ),
+			'edit_item'             => sprintf( esc_html__( 'Edit %s', $text_domain ), $singular_name ),
+			'new_item'              => sprintf( esc_html__( 'New %s', $text_domain ), $singular_name ),
+			'view_item'             => sprintf( esc_html__( 'View %s', $text_domain ), $singular_name ),
+			'search_items'          => sprintf( esc_html__( 'Search %s', $text_domain ), $plural_name ),
+			'not_found'             => sprintf( esc_html__( 'No %s found', $text_domain ), $lc_plural_name ),
+			'not_found_in_trash'    => sprintf( esc_html__( 'No %s found in Trash', $text_domain ), $lc_plural_name ),
+			'parent_item_colon'     => sprintf( esc_html__( 'Parent %s', $text_domain ), $singular_name ),
+			'all_items'             => sprintf( esc_html__( 'All %s', $text_domain ), $plural_name ),
+			'update_item'           => sprintf( esc_html__( 'Update %s', $text_domain ), $singular_name ),
+			'archives'              => sprintf( esc_html__( '%s Archives', $text_domain ), $singular_name ),
+			'insert_into_item'      => sprintf( esc_html__( 'Insert into %s', $text_domain ), $lc_singular_name ),
+			'uploaded_to_this_item' => sprintf( esc_html__( 'Uploaded to this %s', $text_domain ), $lc_singular_name ),
+			'items_list'            => sprintf( esc_html__( '%s list', $text_domain ), $plural_name ),
+			'items_list_navigation' => sprintf( esc_html__( '%s list navigation', $text_domain ), $plural_name ),
+			'filter_items_list'     => sprintf( esc_html__( 'Filter %s list', $text_domain ), $lc_plural_name ),
+		);
+
+		return $labels;
+
+	}
+
+
+	/**
+	 * Registers the Custom Post Type with WordPress
+	 *
+	 * @param $post_type
+	 * @param $cap_plural
+	 * @param $singular_name
+	 * @param $labels
+	 * @param $slug
+	 * @param $text_domain
+	 * @param $updates
+	 */
+	public static function register_post_types( $post_type, $capability_type, $singular_name, $labels, $slug, $text_domain, $updates ) {
+
+		$args = Pngx__Main::merge_defaults( array(
+			'label'                 => sprintf( esc_html__( '%s', $text_domain ), $singular_name ),
+			'description'           => sprintf( esc_html__( 'Creates a %s Custom Post Type', $text_domain ), $singular_name ),
+			'labels'                => $labels,
+			'supports'              => '',
+			'hierarchical'          => false,
+			'public'                => true,
+			'show_ui'               => true,
+			'show_in_menu'          => true,
+			'menu_icon'             => '',
+			'show_in_admin_bar'     => true,
+			'show_in_nav_menus'     => false,
+			'can_export'            => true,
+			'has_archive'           => false,
+			'map_meta_cap'          => true,
+			'exclude_from_search'   => false,
+			'publicly_queryable'    => true,
+			'capability_type'       => array( $post_type, "{$capability_type}s" ),
+			'capabilities'          => array(
+				// Meta capabilities
+				'edit_post'               => "edit_{$capability_type}",
+				'read_post'               => "read_{$capability_type}",
+				'delete_post'             => "delete_{$capability_type}",
+				// Primitive capabilities used outside of map_meta_cap():
+				'edit_posts'              => "edit_{$capability_type}s",
+				'edit_others_posts'       => "edit_others_{$capability_type}s",
+				'publish_posts'           => "publish_{$capability_type}s",
+				'read_private_posts'      => "read_private_{$capability_type}s",
+				// Primitive capabilities used within map_meta_cap():
+				'read '                   => 'read',
+				'delete_posts '           => "delete_{$capability_type}s",
+				'delete_private_posts '   => "delete_private_{$capability_type}s",
+				'delete_published_posts ' => "delete_published_{$capability_type}s",
+				'delete_others_posts'     => "delete_others_{$capability_type}s",
+				'edit_private_posts '     => "edit_private_{$capability_type}s",
+				'edit_published_posts '   => "edit_published_{$capability_type}s",
+				'create_posts '           => "edit_{$capability_type}s",
+			),
+			'rewrite'               => array( 'slug' => $slug ),
+			'show_in_rest'          => true,
+			'rest_base'             => $post_type,
+			'rest_controller_class' => 'WP_REST_Posts_Controller',
+		), $updates );
+
+		/**
+		 * Filter Plugin Engine Registered Post Type Arguements
+		 *
+		 * @since 3.0
+		 *
+		 */
+		$args = apply_filters( 'pngx_register_' . $post_type . '_type_args', $args );
+
+		register_post_type( $post_type, $args );
+
+	}
+
+}

+ 90 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Register_Taxonomy.php

@@ -0,0 +1,90 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Register_Taxonomy' ) ) {
+	return;
+}
+
+
+/**
+ * Register Taxonomies with WordPress
+ */
+class Pngx__Register_Taxonomy {
+
+	/**
+	 * Generate Labels for Taxonomy
+	 *
+	 * @param $singular_tax_name
+	 * @param $lc_singular_tax_name
+	 * @param $plural_tax_name
+	 * @param $lc_plural_tax_name
+	 * @param $text_domain
+	 *
+	 * @return array
+	 */
+	public static function generate_taxonomy_labels( $singular_tax_name, $lc_singular_tax_name, $plural_tax_name, $lc_plural_tax_name, $text_domain ) {
+
+		$labels = array(
+			'name'                       => sprintf( esc_html__( '%s', $text_domain ), $singular_tax_name ),
+			'singular_name'              => sprintf( esc_html__( '%s', $text_domain ), $plural_tax_name ),
+			'search_items'               => sprintf( esc_html__( 'Search %s', $text_domain ), $plural_tax_name ),
+			'all_items'                  => sprintf( esc_html__( 'All %s', $text_domain ), $plural_tax_name ),
+			'parent_item'                => sprintf( esc_html__( 'Parent %s', $text_domain ), $plural_tax_name ),
+			'parent_item_colon'          => sprintf( esc_html__( 'Parent %s:', $text_domain ), $plural_tax_name ),
+			'edit_item'                  => sprintf( esc_html__( 'Edit %s', $text_domain ), $singular_tax_name ),
+			'update_item'                => sprintf( esc_html__( 'Update %s', $text_domain ), $plural_tax_name ),
+			'add_new_item'               => sprintf( esc_html__( 'Add New %s', $text_domain ), $singular_tax_name ),
+			'new_item_name'              => sprintf( esc_html__( 'New %s Name', $text_domain ), $singular_tax_name ),
+			'menu_name'                  => sprintf( esc_html__( '%s', $text_domain ), $plural_tax_name ),
+			'popular_items'              => sprintf( esc_html__( 'Popular %s', $text_domain ), $plural_tax_name ),
+			'separate_items_with_commas' => sprintf( esc_html__( 'Separate %s with commas', $text_domain ), $lc_plural_tax_name ),
+			'add_or_remove_items'        => sprintf( esc_html__( 'Add or remove %s', $text_domain ), $lc_singular_tax_name ),
+			'choose_from_most_used'      => sprintf( esc_html__( 'Choose from the most used %s', $text_domain ), $lc_plural_tax_name ),
+		);
+
+		return $labels;
+
+	}
+
+
+	/**
+	 * Register Taxonomy with WordPress
+	 *
+	 * @param $taxonomy
+	 * @param $post_types
+	 * @param $labels
+	 * @param $slug
+	 * @param $updates
+	 */
+	public static function register_taxonomy( $taxonomy, $post_types, $labels, $slug, $updates ) {
+
+		$args = Pngx__Main::merge_defaults( array(
+			'labels'                => $labels,
+			'public'                => true,
+			'show_in_nav_menus'     => false,
+			'show_ui'               => true,
+			'show_tagcloud'         => false,
+			'show_admin_column'     => false,
+			'hierarchical'          => true,
+			'rewrite'               => array( 'slug' => $slug, 'with_front' => true ),
+			'query_var'             => true,
+			'show_in_rest'          => true,
+			'rest_base'             => $taxonomy,
+			'rest_controller_class' => 'WP_REST_Terms_Controller',
+		), $updates );
+
+		/**
+		 * Filter Plugin Engine Registered Taxonomy Arguements
+		 *
+		 * @since 3.0
+		 *
+		 */
+		$args = apply_filters( 'pngx_register_' . $taxonomy . '_taxonomy_args', $args );
+
+		register_taxonomy( $taxonomy, array( $post_types ), $args );
+
+	}
+
+}

+ 442 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Sanitize.php

@@ -0,0 +1,442 @@
+<?php
+//If Direct Access Kill the Script
+if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ ) {
+	die( 'Access denied.' );
+}
+
+if ( class_exists( 'Pngx__Sanitize' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Sanitize
+ */
+class Pngx__Sanitize {
+
+	/**
+	 * the field's type
+	 *
+	 * @var mixed
+	 */
+	private $type;
+
+	/**
+	 * the field's value
+	 *
+	 * @var mixed
+	 */
+	private $input;
+
+	/**
+	 * field variables
+	 *
+	 * @var array
+	 */
+	private $option;
+
+	/**
+	 * the result object of the validation
+	 *
+	 * @var stdClass
+	 */
+	public $result;
+
+	/**
+	 * constructer
+	 *
+	 * @param $type
+	 * @param $input
+	 * @param $option
+	 */
+	function __construct( $type, $input, $option ) {
+
+		$this->type   = $type;
+		$this->input  = $input;
+		$this->option = $option;
+
+		//Return Sanitized Input only if a method exists to sanitize the field type
+		if ( !empty( $this->option['sanitize'] ) && method_exists( $this, 'sanitize_' . $this->option['sanitize'] ) && is_callable( array(
+				$this,
+				'sanitize_' . $this->option['sanitize']
+			) )
+		) {
+
+			//result
+			$this->result = $this->{'sanitize_' . $this->option['sanitize']}();
+
+		} elseif ( method_exists( $this, 'sanitize_' . $this->type ) && is_callable( array(
+				$this,
+				'sanitize_' . $this->type
+			) )
+		) {
+
+			//result
+			$this->result = $this->{'sanitize_' . $this->type}();
+
+		} else {
+
+			$this->result = false;
+		}
+
+	}
+
+	/**
+	 * Icon Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_icon() {
+
+		return $this->sanitize_text();
+
+	}
+
+	/**
+	 * License Key Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_license() {
+
+		return $this->sanitize_text();
+
+	}
+
+	/*
+	* License Status Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_license_status() {
+
+		return $this->sanitize_text();
+
+	}
+
+	/**
+	 * Sanitize Text
+	 *
+	 * @return string
+	 */
+	private function sanitize_text() {
+
+		return sanitize_text_field( trim( $this->input ) );
+
+	}
+
+	/**
+	 * Sanitize Titles with some html
+	 *
+	 * @return string
+	 */
+	private function sanitize_titles() {
+
+		$terms_tags = array(
+			'b'      => array(),
+			'br'     => array(),
+			'em'     => array(),
+			'i'      => array(),
+			'span'   => array(),
+			'strong' => array(),
+			'sub'    => array(),
+			'sup'    => array(),
+		);
+
+		$input = wp_kses( $this->input, $terms_tags );
+
+		return $input;
+	}
+
+	/**
+	 * Sanitize Textarea
+	 *
+	 * @return string
+	 */
+	private function sanitize_textarea() {
+
+		if ( isset( $this->option['class'] ) && "code" != $this->option['class'] ) {
+
+			global $allowedtags;
+			$input = wp_kses( $this->input, $allowedtags );
+
+		} else {
+			$input = wp_kses_post( $this->input );
+		}
+
+		return $input;
+	}
+
+	/**
+	 * Wysiwyg Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_wysiwyg() {
+
+		if ( current_user_can( 'unfiltered_html' ) ) {
+			$input = $this->input;
+		} else {
+			global $allowedtags;
+			$input = wp_kses( $this->input, $allowedtags );
+		}
+
+		return $input;
+
+	}
+
+	/**
+	 * Sanitize urls
+	 *
+	 * @return string
+	 */
+	private function sanitize_url() {
+
+		return esc_url_raw( $this->input );
+
+	}
+
+	/**
+	 * Select Sanitize
+	 *
+	 * @return mixed|string
+	 */
+	private function sanitize_select() {
+
+		return $this->sanitize_enum();
+
+	}
+
+	/**
+	 * Select Variety Select
+	 *
+	 * @return mixed|string
+	 */
+	private function sanitize_variety() {
+
+		return $this->sanitize_enum();
+
+	}
+
+	/**
+	 * Select Page Sanitize
+	 *
+	 * @return mixed|string
+	 */
+	private function sanitize_selectpage() {
+
+		return $this->sanitize_enum();
+
+	}
+
+	/**
+	 * Radio Sanitize
+	 *
+	 * @return mixed|string
+	 */
+	private function sanitize_radio() {
+
+		return $this->sanitize_enum();
+
+	}
+
+	/**
+	 * Select and Radio Sanitize
+	 *
+	 * @return mixed|string
+	 */
+	private function sanitize_enum() {
+
+		if ( array_key_exists( $this->input, $this->option['choices'] ) ) {
+			$this->input = sanitize_text_field( $this->input );
+		}
+
+		return $this->input;
+	}
+
+	/**
+	 * Checkbox Sanitize
+	 *
+	 * @return bool|mixed|string
+	 */
+	private function sanitize_checkbox() {
+		if ( $this->input ) {
+			$this->input = '1';
+		} else {
+			$this->input = false;
+		}
+
+		return $this->input;
+	}
+
+	/**
+	 * Sanitize Date
+	 *
+	 * @return mixed
+	 */
+	private function sanitize_date() {
+
+		$this->input = preg_replace( "([^0-9/])", "", $this->input );
+
+		return $this->input;
+	}
+
+	/**
+	 * Color Sanitize
+	 *
+	 * @return bool|mixed
+	 */
+	private function sanitize_color() {
+
+		// If string does not start with 'rgba', then treat as hex
+		// sanitize the hex color and finally convert hex to rgba
+		if ( false === strpos( $this->input, 'rgba' ) ) {
+
+			$valid = $this->validate_hex( $this->input );
+
+			return $valid ? $this->input : false;
+		}
+
+		if ( $this->validate_rgba( $this->input ) ) {
+			return $this->input;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Hex Sanitize
+	 *
+	 * @param $hex
+	 *
+	 * @return bool
+	 */
+	private function validate_hex( $hex ) {
+		$hex = trim( $hex );
+		if ( 0 === strpos( $hex, '#' ) ) {
+			$hex = substr( $hex, 1 );
+		} elseif ( 0 === strpos( $hex, '%23' ) ) {
+			$hex = substr( $hex, 3 );
+		}
+		if ( 0 === preg_match( '/^[0-9a-fA-F]{6}$/', $hex ) ) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	/**
+	 * Validate RGBA Inputs
+	 *
+	 * @param $value
+	 *
+	 * @return bool
+	 */
+	private function validate_rgba( $rgba ) {
+
+		// If empty or an array return transparent
+		if ( empty( $rgba ) || is_array( $rgba ) ) {
+			$this->input = '';
+
+			return false;
+		}
+		$red  = $green = $blue = $alpha = '';
+		$rgba = str_replace( ' ', '', $rgba );
+
+		sscanf( $rgba, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
+		$this->input = 'rgba(' . $red . ',' . $green . ',' . $blue . ',' . $alpha . ')';
+
+		return true;
+
+	}
+
+	/**
+	 * Image ID Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_image() {
+
+		return $this->sanitize_absint();
+
+	}
+
+	/**
+	 * Pro Image ID Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_proimage() {
+
+		return $this->sanitize_absint();
+
+	}
+
+	/**
+	 * Numbers ID Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_number() {
+
+		return $this->sanitize_absint();
+
+	}
+
+	/**
+	 * Numbers ID Sanitize
+	 *
+	 * @return string
+	 */
+	private function sanitize_dimensions() {
+
+		return $this->sanitize_absint();
+
+	}
+
+	/**
+	 * A 32bit absolute integer method, returns as String
+	 *
+	 * @return bool|mixed
+	 */
+	private function sanitize_absint() {
+		// If it's not numeric we forget about it
+		if ( ! is_numeric( $this->input ) ) {
+			return false;
+		}
+
+		$this->input = preg_replace( '/[^0-9]/', '', $this->input );
+
+		// After the Replace return false if Empty
+		if ( empty( $this->input ) ) {
+			return false;
+		}
+
+		// After that it should be good to ship!
+		return $this->input;
+	}
+
+	/**
+	 * Sanitize Google Analytics
+	 *
+	 * @return bool|mixed
+	 */
+	private function sanitize_ga_analytics() {
+
+		$this->input = trim( esc_html( $this->input ) );
+		// en dash to minus, prevents issue with code copied from web with "fancy" dash
+		$this->input = str_replace( '�', '-', $this->input );
+
+		if ( ! preg_match( '|^UA-\d{4,}-\d+$|', $this->input ) ) {
+
+			return false;
+
+		} else {
+
+			return $this->input;
+
+		}
+
+	}
+
+} //end

+ 280 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Service_Providers/Processes.php

@@ -0,0 +1,280 @@
+<?php
+
+/**
+ * Class Pngx__Service_Providers__Processes
+ *
+ * Based off Modern Tribe's Tribe__Service_Providers__Processes
+ *
+ * @since 3.0
+ *
+ * Handles the registration and creation of our async process handlers.
+ */
+class Pngx__Service_Providers__Processes extends tad_DI52_ServiceProvider {
+
+	/**
+	 * An array of all handler actions registered in this HTTP request.
+	 *
+	 * This is an array cache with a request lifetime by design.
+	 *
+	 * @var array
+	 */
+	protected $handler_actions;
+
+	/**
+	 * An array of all queue actions registered in this HTTP request.
+	 *
+	 * This is an array cache with a request lifetime by design.
+	 *
+	 * @var array
+	 */
+	protected $queue_actions;
+
+	/**
+	 * An instance of the context abstraction layer.
+	 *
+	 * @var Pngx__Context
+	 */
+	protected $context;
+
+	/**
+	 * Hooks the filters and binds the implementations needed to handle processes.
+	 */
+	public function register() {
+		$this->context = pngx( 'context' );
+
+		// If the context of this request is neither AJAX or Cron bail.
+		if ( ! ( $this->context->doing_ajax() || $this->context->doing_cron() ) ) {
+			return;
+		}
+
+		/** @var Pngx__Feature_Detection $feature_detection */
+		$feature_detection         = pngx( 'feature-detection' );
+		$action                    = pngx_get_request_var( 'action', false );
+		$testing_for_async_support = $action === $this->get_handler_action( 'Pngx__Process__Tester' );
+
+		 // Dispatch in async mode if testing for it (w/o re-checking) or if async processes are supported.
+		if ( $testing_for_async_support || $feature_detection->supports_async_process() ) {
+			$this->dispatch_async();
+
+			return;
+		}
+
+		$this->dispatch_cron();
+	}
+
+	/**
+	 * Hooks the correct handler for the action.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $action
+	 */
+	protected function hook_handler_for( $action ) {
+		if ( null === $this->handler_actions ) {
+			$handlers = array(
+				'Pngx__Process__Tester',
+				'Pngx__Process__Post_Thumbnail_Setter',
+			);
+
+			/**
+			 * Filters the process handler classes the Service Provider should handle.
+			 *
+			 * All handlers should extend the `Pngx__Process__Handler` base class.
+			 *
+			 * @since 4.7.12
+			 *
+			 * @param array $handlers
+			 */
+			$handlers = array_unique( apply_filters( 'pngx_process_handlers', $handlers ) );
+
+			$this->handler_actions = array_combine(
+				$handlers,
+				array_map( array( $this, 'get_handler_action' ), $handlers )
+			);
+		}
+
+		$array_search = array_search( $action, $this->handler_actions, true );
+
+		if ( false === $handler_class = $array_search ) {
+			return;
+		}
+
+		// the handler will handle the hooking
+		$this->container->make( $handler_class );
+	}
+
+	/**
+	 * Hooks the correct queue for the action.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $action
+	 */
+	protected function hook_queue_for( $action ) {
+		if ( null === $this->queue_actions ) {
+			$queues = array(
+				'Pngx__Promise',
+			);
+
+			/**
+			 * Filters the queue processing classes the Service Provider should handle.
+			 *
+			 * All queues should extend the `Pngx__Process__Queue` base class.
+			 *
+			 * @since 3.0
+			 *
+			 * @param array $queues An array of class names, each extending the `Pngx__Process__Queue` base class.
+			 */
+			$queues = array_unique( apply_filters( 'pngx_process_queues', $queues ) );
+
+			$all_queues_actions = array_combine(
+				$queues,
+				array_map( array( $this, 'get_queue_action' ), $queues )
+			);
+		}
+
+		$array_search = array_search( $action, $all_queues_actions, true );
+
+		if ( false === $queue_class = $array_search ) {
+			return;
+		}
+
+		// the queue will handle the hooking
+		$this->container->make( $queue_class );
+	}
+
+	/**
+	 * Returns the action for the handler.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $handler_class
+	 *
+	 * @return string
+	 */
+	protected function get_handler_action( $handler_class ) {
+		/** @var Pngx__Process__Handler handler_class */
+		return 'pngx_process_' . call_user_func( array( $handler_class, 'action' ) );
+	}
+
+	/**
+	 * Returns the action for the queue.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $queue_class
+	 *
+	 * @return string
+	 */
+	protected function get_queue_action( $queue_class ) {
+		/** @var Pngx__Process__Queue queue_class */
+		return 'pngx_queue_' . call_user_func( array( $queue_class, 'action' ) );
+	}
+
+	/**
+	 * Dispatches the request, if in AJAX context of a valid queue processing request,
+	 *  to the correct handler.
+	 *
+	 * @since 3.0
+	 */
+	protected function dispatch_async() {
+		if ( ! (
+			$this->context->doing_ajax()
+			&& false !== $action = pngx_get_request_var( 'action', false )
+		) ) {
+			return;
+		}
+
+		$this->hook_handler_for_action( $action );
+	}
+
+	/**
+	 * Start the process handlers if in the context of a cron process and
+	 * if any is registered.
+	 *
+	 * @since 3.0
+	 */
+	protected function dispatch_cron() {
+		if ( ! $this->context->doing_cron() ) {
+			return;
+		}
+
+		/*
+		 * Here we parse the scheduled cron events to get those scheduled by a queue
+		 * or process handler.
+		 */
+		$hooks = $this->get_scheduled_like( array( 'pngx_process_', 'pngx_queue_' ) );
+
+		if ( empty( $hooks ) ) {
+			return;
+		}
+
+		foreach ( $hooks as $action ) {
+			/*
+			 * Building the queue or process handler for an action will make it
+			 * so the handler, in its `__construct` method, will hook on the action
+			 * triggered by its cron event.
+			 */
+			$this->hook_handler_for_action( $action );
+		}
+	}
+
+	/**
+	 * Hooks the correct queue or process handler for an action if any.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $action The action to hook the handler, or queue, for.
+	 */
+	protected function hook_handler_for_action( $action ) {
+		if (
+			0 !== strpos( $action, 'pngx_process_' )
+			&& 0 !== strpos( $action, 'pngx_queue_' )
+		) {
+			return;
+		}
+
+		if ( 0 === strpos( $action, 'pngx_process_' ) ) {
+			$this->hook_handler_for( $action );
+		} else {
+			$this->hook_queue_for( $action );
+		}
+	}
+
+	/**
+	 * Parses the `cron` array to return the hook names starting with a pattern.
+	 *
+	 * @since 3.0
+	 *
+	 * @param string|array $needles A pattern to look for or an array of patterns; if
+	 *                              this is an array then a match will be an hook that
+	 *                              matches at least one pattern.
+	 *
+	 * @return array An array of hook names matching the pattern.
+	 */
+	protected function get_scheduled_like( $needles ) {
+		$cron = get_option( 'cron', false );
+
+		if ( empty( $cron ) ) {
+			return array();
+		}
+
+		$needles  = (array) $needles;
+		$matching = array();
+
+		foreach ( $cron as $time ) {
+			if ( ! is_array( $time ) ) {
+				continue;
+			}
+			foreach ( $time as $hook => $entry ) {
+				foreach ( $needles as $needle ) {
+					if ( false !== strpos( $hook, $needle ) ) {
+						$matching[] = $hook;
+					}
+				}
+			}
+		}
+
+		return $matching;
+	}
+}

+ 88 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Style/Linked.php

@@ -0,0 +1,88 @@
+<?php
+// Don't load directly
+if ( ! defined( 'ABSPATH' ) ) {
+	die( '-1' );
+}
+if ( class_exists( 'Pngx__Style__Linked' ) ) {
+	return;
+}
+
+
+/**
+ * Class Pngx__Style__Linked
+ * Front End Linked Style Fields
+ */
+class Pngx__Style__Linked {
+
+	public static function get_styles( $field = array(), $post_id = null, $inline = true, $target = false ) {
+
+		$style = '';
+
+		if ( ! isset( $field['styles'] ) ) {
+			return false;
+		}
+
+		if ( ! is_array( $field['styles'] ) ) {
+			return false;
+		}
+
+		if ( $inline ) {
+			$style = ' style=" ';
+			foreach ( $field['styles'] as $type => $field_name ) {
+
+				if ( 'font-color' === $type && $color = get_post_meta( $post_id, $field_name, true ) ) {
+					$style .= 'color:' . $color . '; ';
+				}
+
+				if ( 'background-color' === $type && $color = get_post_meta( $post_id, $field_name, true ) ) {
+					$style .= 'background-color:' . $color . '; ';
+				}
+
+				if ( 'background-color:hover' === $type && $color = get_post_meta( $post_id, $field_name, true ) ) {
+					$style .= 'background-color:hover ' . $color . '; ';
+				}
+
+			}
+			$style .= ' " ';
+		} elseif ( ! $inline && is_array( $target ) ) {
+
+			$style = '<style>';
+
+			foreach ( $field['styles'] as $type => $field_name ) {
+
+				if ( 'font-color' === $type && $color = get_post_meta( $post_id, $field_name, true ) ) {
+					$style .= '.' . esc_attr( $target['wrap'] ) . absint( $post_id ) . ' .' . esc_attr( $target['selector'] ) . '{ color:' . esc_attr( $color ) . '; }';
+				}
+
+				if ( 'background-color' === $type && $color = get_post_meta( $post_id, $field_name, true ) ) {
+					$style .= '.' . esc_attr( $target['wrap'] ) . absint( $post_id ) . ' .' . esc_attr( $target['selector'] ) . '{ background-color:' . esc_attr( $color ) . '; }';
+				}
+
+				//todo create a filter here and modify the output using that instead of adding specific styling
+				if ( 'background-color-fold' === $type && $color = get_post_meta( $post_id, $field['styles']['background-color'], true ) ) {
+					$style .= '.' . esc_attr( $target['wrap'] ) . absint( $post_id ) . ' .' . esc_attr( $target['selector'] ) . ':after { 
+							border-left: solid 6px' . esc_attr( $color ) . '; 
+							border-top: solid 6px' . esc_attr( $color ) . '; 
+						}';
+
+					$style .= '.' . esc_attr( $target['wrap'] ) . absint( $post_id ) . ' .' . esc_attr( $target['selector'] ) . '.revealed:after { 
+							background: none;
+							border: none;
+							box-shadow: none;
+						}';
+				}
+
+				if ( 'background-color:hover' === $type && $color = get_post_meta( $post_id, $field_name, true ) ) {
+					$style .= '.' . esc_attr( $target['wrap'] ) . absint( $post_id ) . ' .' . esc_attr( $target['selector'] ) . ':hover' . '{ background-color:' . esc_attr( $color ) . '; }';
+				}
+
+			}
+			$style .= '</style>';
+
+		}
+
+		return $style;
+
+	}
+
+}

+ 480 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/Pngx/Utilities/Array.php

@@ -0,0 +1,480 @@
+<?php
+/**
+ * Array utilities
+ *
+ * Based off Modern Tribe's Tribe__Utils__Array
+ *
+ * @since 3.0
+ *
+ */
+class Pngx__Utilities__Array {
+
+	/**
+	 * Set key/value within an array, can set a key nested inside of a multidimensional array.
+	 *
+	 * Example: set( $a, [ 0, 1, 2 ], 'hi' ) sets $a[0][1][2] = 'hi' and returns $a.
+	 *
+	 * @since 3.0
+	 *
+	 * @param mixed        $array  The array containing the key this sets.
+	 * @param string|array $key    To set a key nested multiple levels deep pass an array
+	 *                             specifying each key in order as a value.
+	 *                             Example: array( 'lvl1', 'lvl2', 'lvl3' );
+	 * @param mixed         $value The value.
+	 *
+	 * @return array Full array with the key set to the specified value.
+	 */
+	public static function set( array $array, $key, $value ) {
+		// Convert strings and such to array.
+		$key = (array) $key;
+
+		// Setup a pointer that we can point to the key specified.
+		$key_pointer = &$array;
+
+		// Iterate through every key, setting the pointer one level deeper each time.
+		foreach ( $key as $i ) {
+
+			// Ensure current array depth can have children set.
+			if ( ! is_array( $key_pointer ) ) {
+				// $key_pointer is set but is not an array. Converting it to an array
+				// would likely lead to unexpected problems for whatever first set it.
+				$error = sprintf(
+					'Attempted to set $array[%1$s] but %2$s is already set and is not an array.',
+					implode( $key, '][' ),
+					$i
+				);
+
+				_doing_it_wrong( __FUNCTION__, esc_html( $error ), '4.3' );
+				break;
+			} elseif ( ! isset( $key_pointer[ $i ] ) ) {
+				$key_pointer[ $i ] = array();
+			}
+
+			// Dive one level deeper into the nested array.
+			$key_pointer = &$key_pointer[ $i ];
+		}
+
+		// Set the value for the specified key
+		$key_pointer = $value;
+
+		return $array;
+	}
+
+	/**
+	 * Find a value inside of an array or object, including one nested a few levels deep.
+	 *
+	 * Example: get( $a, [ 0, 1, 2 ] ) returns the value of $a[0][1][2] or the default.
+	 *
+	 * @since 3.0
+	 *
+	 * @param  array        $variable Array or object to search within.
+	 * @param  array|string $indexes  Specify each nested index in order.
+	 *                                Example: array( 'lvl1', 'lvl2' );
+	 * @param  mixed        $default  Default value if the search finds nothing.
+	 *
+	 * @return mixed The value of the specified index or the default if not found.
+	 */
+	public static function get( $variable, $indexes, $default = null ) {
+		if ( is_object( $variable ) ) {
+			$variable = (array) $variable;
+		}
+
+		if ( ! is_array( $variable ) ) {
+			return $default;
+		}
+
+		foreach ( (array) $indexes as $index ) {
+			if ( ! is_array( $variable ) || ! isset( $variable[ $index ] ) ) {
+				$variable = $default;
+				break;
+			}
+
+			$variable = $variable[ $index ];
+		}
+
+		return $variable;
+	}
+
+	/**
+	 * Find a value inside a list of array or objects, including one nested a few levels deep.
+	 *
+	 * @since 3.0
+	 *
+	 * Example: get( [$a, $b, $c], [ 0, 1, 2 ] ) returns the value of $a[0][1][2] found in $a, $b or $c
+	 * or the default.
+	 *
+	 * @param  array        $variables Array of arrays or objects to search within.
+	 * @param  array|string $indexes   Specify each nested index in order.
+	 *                                 Example: array( 'lvl1', 'lvl2' );
+	 * @param  mixed        $default   Default value if the search finds nothing.
+	 *
+	 * @return mixed The value of the specified index or the default if not found.
+	 */
+	public static function get_in_any( array $variables, $indexes, $default = null ) {
+		foreach ( $variables as $variable ) {
+			$found = self::get( $variable, $indexes, '__not_found__' );
+			if ( '__not_found__' !== $found ) {
+				return $found;
+			}
+		}
+
+		return $default;
+	}
+
+	/**
+	 * Behaves exactly like the native strpos(), but accepts an array of needles.
+	 *
+	 * @since 3.0
+	 *
+	 * @see strpos()
+	 *
+	 * @param string       $haystack String to search in.
+	 * @param array|string $needles  Strings to search for.
+	 * @param int          $offset   Starting position of search.
+	 *
+	 * @return false|int Integer position of first needle occurrence.
+	 */
+	public static function strpos( $haystack, $needles, $offset = 0 ) {
+		$needles = (array) $needles;
+
+		foreach ( $needles as $i ) {
+			$search = strpos( $haystack, $i, $offset );
+
+			if ( false !== $search ) {
+				return $search;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Converts a list to an array filtering out empty string elements.
+	 *
+	 * @since 3.0
+	 *
+	 * @param     mixed   $value A string representing a list of values separated by the specified separator
+	 *                           or an array. If the list is a string (e.g. a CSV list) then it will urldecoded
+	 *                           before processing.
+	 * @param string $sep The char(s) separating the list elements; will be ignored if the list is an array.
+	 *
+	 * @return array An array of list elements.
+	 */
+	public static function list_to_array( $value, $sep = ',' ) {
+		// since we might receive URL encoded strings for CSV lists let's URL decode them first
+		$value = is_array( $value ) ? $value : urldecode( $value );
+
+		$sep = is_string( $sep ) ? $sep : ',';
+
+		if ( $value === null || $value === '' ) {
+			return array();
+		}
+
+		if ( ! is_array( $value ) ) {
+			$value = preg_split( '/\\s*' . preg_quote( $sep ) . '\\s*/', $value );
+		}
+
+		$filtered = array();
+		foreach ( $value as $v ) {
+			if ( '' === $v ) {
+				continue;
+			}
+			$filtered[] = is_numeric( $v ) ? $v + 0 : $v;
+		}
+
+		return $filtered;
+	}
+
+	/**
+	 * Returns a list separated by the specified separator.
+	 *
+	 * @since 3.0
+	 *
+	 * @param mixed  $list
+	 * @param string $sep
+	 *
+	 * @return string The list separated by the specified separator or the original list if the list is empty.
+	 */
+	public static function to_list( $list, $sep = ',' ) {
+		if ( empty( $list ) ) {
+			return $list;
+		}
+
+		if ( is_array( $list ) ) {
+			return implode( $sep, $list );
+		}
+
+		return $list;
+	}
+
+	/**
+	 * Sanitize a multidimensional array.
+	 *
+	 * @since 3.0
+	 *
+	 * @param array $data The array to sanitize.
+	 *
+	 * @return array The sanitized array
+	 *
+	 * @link https://gist.github.com/esthezia/5804445
+	 */
+	public static function escape_multidimensional_array( $data = array() ) {
+
+		if ( ! is_array( $data ) || ! count( $data ) ) {
+			return array();
+		}
+
+		foreach ( $data as $key => $value ) {
+			if ( ! is_array( $value ) && ! is_object( $value ) ) {
+				$data[ $key ] = esc_attr( trim( $value ) );
+			}
+			if ( is_array( $value ) ) {
+				$data[ $key ] = self::escape_multidimensional_array( $value );
+			}
+		}
+
+		return $data;
+	}
+
+	/**
+	 * Returns an array of values obtained by using the keys on the map; keys
+	 * that do not have a match in map are discarded.
+	 *
+	 * To discriminate from not found results and legitimately `false`
+	 * values from the map the `$found` parameter will be set by reference.
+	 *
+	 * @since 3.0
+	 *
+	 * @param      string|array $keys  One or more keys that should be used to get
+	 *                                 the new values
+	 * @param array             $map   An associative array relating the keys to the new
+	 *                                 values.
+	 * @param bool              $found When using a single key this argument will be
+	 *                                 set to indicate whether the mapping was successful
+	 *                                 or not.
+	 *
+	 * @return array|mixed|false An array of mapped values, a single mapped value when passing
+	 *                           one key only or `false` if one key was passed but the key could
+	 *                           not be mapped.
+	 */
+	public static function map_or_discard( $keys, array $map, &$found = true ) {
+		$hash   = md5( time() );
+		$mapped = array();
+
+		foreach ( (array) $keys as $key ) {
+			$meta_key = Pngx__Utilities__Array::get( $map, $key, $hash );
+			if ( $hash === $meta_key ) {
+				continue;
+			}
+			$mapped[] = $meta_key;
+		}
+
+		$found = (bool) count( $mapped );
+
+		if ( is_array( $keys ) ) {
+			return $mapped;
+		}
+
+		return $found ? $mapped[0] : false;
+	}
+
+	/**
+	 * Duplicates any key prefixed with '_' creating an un-prefixed duplicate one.
+	 *
+	 * The un-prefixing and duplication is recursive.
+	 *
+	 * @since 3.0
+	 *
+	 * @param mixed $array     The array whose keys should be duplicated.
+	 * @param bool  $recursive Whether the un-prefixing and duplication should be
+	 *                         recursive or shallow.
+	 *
+	 * @return array The array with the duplicate, unprefixed, keys or the
+	 *               original input if not an array.
+	 */
+	public static function add_unprefixed_keys_to( $array, $recursive = false ) {
+		if ( ! is_array( $array ) ) {
+			return $array;
+		}
+
+		$unprefixed = array();
+		foreach ( $array as $key => $value ) {
+			if ( $recursive && is_array( $value ) ) {
+				$value = self::add_unprefixed_keys_to( $value, true );
+				// And also add it to the original array.
+				$array[ $key ] = array_merge( $array[ $key ], $value );
+			}
+
+			if ( 0 !== strpos( $key, '_' ) ) {
+				continue;
+			}
+			$unprefixed[ substr( $key, 1 ) ] = $value;
+		}
+
+		return array_merge( $array, $unprefixed );
+	}
+
+	/**
+	 * Filters an associative array non-recursively, keeping only the values attached
+	 * to keys starting with the specified prefix.
+	 *
+	 * @since 3.0
+	 *
+	 * @param array $array The array to filter.
+	 * @param string $prefix The prefix, or prefixes, of the keys to keep.
+	 *
+	 * @return array The filtered array.
+	 */
+	public static function filter_prefixed( array $array, $prefix ) {
+		$prefixes = implode( '|', array_map( 'preg_quote', (array) $prefix ) );
+		$pattern  = '/^(' . $prefixes . ')/';
+		$filtered = array();
+		foreach ( $array as $key => $value ) {
+			if ( ! preg_match( $pattern, $key ) ) {
+				continue;
+			}
+			$filtered[ $key ] = $value;
+		}
+
+		return $filtered;
+	}
+
+	/**
+	 * Flattens an array transforming each value that is an array and only contains one
+	 * element into that one element.
+	 *
+	 * Typical use case is to flatten arrays like those returned by `get_post_meta( $id )`.
+	 * Empty arrays are replaced with an empty string.
+	 *
+	 * @since 3.0
+	 *
+	 * @param array $array The array to flatten.
+	 *
+	 * @return array The flattened array.
+	 */
+	public static function flatten( array $array ) {
+		foreach ( $array as $key => &$value ) {
+			if ( ! is_array( $value ) ) {
+				continue;
+			}
+
+			$count = count( $value );
+
+			switch ( $count ) {
+				case 0:
+					$value = '';
+					break;
+				case 1:
+					$value = reset( $value );
+					break;
+				default:
+					break;
+			}
+		}
+
+		return $array;
+	}
+
+	/**
+	 * Duplicates any key not prefixed with '_' creating a prefixed duplicate one.
+	 *
+	 * The prefixing and duplication is recursive.
+	 *
+	 * @since 3.0
+	 *
+	 * @param mixed $array     The array whose keys should be duplicated.
+	 * @param bool  $recursive Whether the prefixing and duplication should be
+	 *                         recursive or shallow.
+	 *
+	 * @return array The array with the duplicate, prefixed, keys or the
+	 *               original input if not an array.
+	 */
+	public static function add_prefixed_keys_to( $array, $recursive = false ) {
+		if ( ! is_array( $array ) ) {
+			return $array;
+		}
+
+		$prefixed = array();
+		foreach ( $array as $key => $value ) {
+			if ( $recursive && is_array( $value ) ) {
+				$value = self::add_prefixed_keys_to( $value, true );
+				// And also add it to the original array.
+				$array[ $key ] = array_merge( $array[ $key ], $value );
+			}
+
+			if ( 0 === strpos( $key, '_' ) ) {
+				continue;
+			}
+
+			$prefixed[ '_' . $key ] = $value;
+		}
+
+		return array_merge( $array, $prefixed );
+	}
+
+	/**
+	 * Recursively key-sort an array.
+	 *
+	 * @since 3.0
+	 *
+	 * @param array $array The array to sort, modified by reference.
+	 *
+	 * @return bool The sorting result.
+	 */
+	public static function recursive_ksort( array &$array ) {
+		foreach ( $array as &$value ) {
+			if ( is_array( $value ) ) {
+				static::recursive_ksort( $value );
+			}
+		}
+
+		return ksort( $array );
+	}
+
+	/**
+	 * Insert an array after a specified key within another array.
+	 *
+	 * @since 3.0
+	 *
+	 * @param $key
+	 * @param $source_array
+	 * @param $insert_array
+	 *
+	 * @return array
+	 *
+	 */
+	public static function array_insert_after_key( $key, $source_array, $insert_array ) {
+		if ( array_key_exists( $key, $source_array ) ) {
+			$position     = array_search( $key, array_keys( $source_array ) ) + 1;
+			$source_array = array_slice( $source_array, 0, $position, true ) + $insert_array + array_slice( $source_array, $position, null, true );
+		} else {
+			// If no key is found, then add it to the end of the array.
+			$source_array += $insert_array;
+		}
+
+		return $source_array;
+	}
+
+	/**
+	 * Insert an array immediately before a specified key within another array.
+	 *
+	 * @since 3.0
+	 *
+	 * @param $key
+	 * @param $source_array
+	 * @param $insert_array
+	 *
+	 * @return array
+	 */
+	public static function array_insert_before_key( $key, $source_array, $insert_array ) {
+		if ( array_key_exists( $key, $source_array ) ) {
+			$position     = array_search( $key, array_keys( $source_array ) );
+			$source_array = array_slice( $source_array, 0, $position, true ) + $insert_array + array_slice( $source_array, $position, null, true );
+		} else {
+			// If no key is found, then add it to the end of the array.
+			$source_array += $insert_array;
+		}
+
+		return $source_array;
+	}
+}

+ 275 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/functions/template-tags/general.php

@@ -0,0 +1,275 @@
+<?php
+/**
+ * Plugin Engine Functions
+ */
+
+//If Direct Access Kill the Script
+if ( $_SERVER['SCRIPT_FILENAME'] == __FILE__ ) {
+	die( 'Access denied.' );
+}
+
+if ( ! class_exists( 'Pngx__Main' ) ) {
+	return;
+}
+
+if ( ! function_exists( 'pngx_sanitize_url' ) ) {
+	/**
+	 * Sanitize URL for display on Front End
+	 *
+	 * @param $url
+	 *
+	 * @return mixed
+	 */
+	function pngx_sanitize_url( $url ) {
+
+		$encode        = array( '&amp;', '&#038;', '&' );
+		$replacement   = '%%PNGXAMP%%';
+		$sanitized_url = $url;
+
+		//replace ampersand before escaping to prevent breaking url
+		$sanitized_url = str_replace( $encode, $replacement, $sanitized_url );
+		$sanitized_url = esc_url( $sanitized_url );
+
+		//add back ampersand after escaping
+		return str_replace( $replacement, '&', $sanitized_url );
+	}
+}
+
+
+if ( ! function_exists( 'pngx_detect_change' ) ) {
+	/**
+	 * Detect Changes to Meta Settings
+	 *
+	 * @param $_POST_arr
+	 * @param $post_id
+	 * @param $meta_key
+	 * @param $post_key
+	 *
+	 * @return bool
+	 */
+	function pngx_detect_change( $_POST_arr, $post_id, $meta_key, $post_key ) {
+
+		$current_val = get_post_meta( $post_id, $meta_key, true );
+		$updated_val = ! empty( $_POST_arr[$post_key] ) ? esc_attr( $_POST_arr[$post_key] ) : null;
+
+		if ( $current_val !== $updated_val ) {
+			return true;
+		}
+
+		return false;
+	}
+}
+
+if ( ! function_exists( 'pngx_wp_strtotime' ) ) {
+	/**
+	 * Set Time Based off WordPress Timezone
+	 *
+	 * https://gist.github.com/anthonyeden/0cf8eb86f7e634b3d5ded4debc59cb84#file-wordpress-strtotime-php
+	 *
+	 * @param $str
+	 *
+	 * @return string
+	 */
+	function pngx_wp_strtotime( $str ) {
+		// This function behaves a bit like PHP's StrToTime() function, but taking into account the Wordpress site's timezone
+		// CAUTION: It will throw an exception when it receives invalid input - please catch it accordingly
+		// From https://mediarealm.com.au/
+		$tz_string = get_option( 'timezone_string' );
+		$tz_offset = get_option( 'gmt_offset', 0 );
+		if ( ! empty( $tz_string ) ) {
+			// If site timezone option string exists, use it
+			$timezone = $tz_string;
+		} elseif ( $tz_offset == 0 ) {
+			// get UTC offset, if it isn’t set then return UTC
+			$timezone = 'UTC';
+		} else {
+			$timezone = $tz_offset;
+			if ( substr( $tz_offset, 0, 1 ) != "-" && substr( $tz_offset, 0, 1 ) != "+" && substr( $tz_offset, 0, 1 ) != "U" ) {
+				$timezone = "+" . $tz_offset;
+			}
+		}
+		$datetime = new DateTime( $str, new DateTimeZone( $timezone ) );
+
+		return $datetime->format( 'U' );
+	}
+}
+
+if ( ! function_exists( 'pngx_register_plugin' ) ) {
+	/**
+	 * Checks if this plugin has permission to run, if not it notifies the admin
+	 *
+	 * Based off Modern Tribe's tribe_register_plugin
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $file_path    Full file path to the base plugin file
+	 * @param string $main_class   The Main/base class for this plugin
+	 * @param string $version      The version
+	 * @param array  $classes_req  Any Main class files/pngx plugins required for this to run
+	 * @param array  $dependencies an array of dependencies to check
+	 *
+	 * @return bool Indicates if plugin should continue initialization
+	 */
+	function pngx_register_plugin( $file_path, $main_class, $version, $classes_req = array(), $dependencies = array() ) {
+
+		$pngx_dependency  = Pngx__Dependency::instance();
+		$pngx_dependency->register_plugin( $file_path, $main_class, $version, $classes_req, $dependencies );
+	}
+}
+
+if ( ! function_exists( 'pngx_check_plugin' ) ) {
+	/**
+	 * Checks if this plugin has permission to run, if not it notifies the admin
+	 *
+	 * Based off Modern Tribe's tribe_check_plugin
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $main_class   The Main/base class for this plugin
+	 *
+	 * @return bool Indicates if plugin should continue initialization
+	 */
+	function pngx_check_plugin( $main_class ) {
+
+		$pngx_dependency    = Pngx__Dependency::instance();
+		return $pngx_dependency->check_plugin( $main_class );
+
+	}
+}
+
+if ( ! function_exists( 'pngx_notice' ) ) {
+	/**
+	 * Shortcut for Pngx__Admin__Notices::register(), create a Admin Notice easily
+	 *
+	 * Based off Modern Tribe's tribe_notice
+	 *
+	 * @since 3.0
+	 *
+	 * @param string          $slug             Slug to save the notice
+	 * @param callable|string $callback         A callable Method/Fuction to actually display the notice
+	 * @param array           $arguments        Arguments to Setup a notice
+	 * @param callable|null   $active_callback  An optional callback that should return bool values
+	 *                                          to indicate whether the notice should display or not.
+	 *
+	 * @return stdClass Which notice was registered
+	 */
+	function pngx_notice( $slug, $callback, $arguments = array(), $active_callback = null ) {
+		return Pngx__Admin__Notices::instance()->register( $slug, $callback, $arguments, $active_callback );
+	}
+}
+
+if ( ! function_exists( 'pngx_get_request_var' ) ) {
+	/**
+	 * Tests to see if the requested variable is set either as a post field or as a URL
+	 * param and returns the value if so.
+	 *
+	 * Based off Modern Tribe's tribe_get_request_var
+	 *
+	 * @since 3.0
+	 *
+	 * Post data takes priority over fields passed in the URL query. If the field is not
+	 * set then $default (null unless a different value is specified) will be returned.
+	 *
+	 * The variable being tested for can be an array if you wish to find a nested value.
+	 *
+	 * @see Tribe__Utils__Array::get()
+	 *
+	 * @param string|array $var
+	 * @param mixed        $default
+	 *
+	 * @return mixed
+	 */
+	function pngx_get_request_var( $var, $default = null ) {
+		return Pngx__Utilities__Array::get_in_any( array( $_GET, $_POST ), $var, $default );
+	}
+}
+
+if ( ! function_exists( 'pngx_asset' ) ) {
+	/**
+	 * Shortcut for Pngx__Assets::register(), include a single asset
+	 *
+	 * Based off Modern Tribe's tribe_asset
+	 *
+	 * @since 3.0
+	 *
+	 * @param object $origin    The main Object for the plugin you are enqueueing the script/style for
+	 * @param string $slug      Slug to save the asset
+	 * @param string $file      Which file will be loaded, either CSS or JS
+	 * @param array  $deps      Dependencies
+	 * @param string $action    A WordPress Action, needs to happen after: `wp_enqueue_scripts`, `admin_enqueue_scripts`, or `login_enqueue_scripts`
+	 * @param array  $arguments Look at `Pngx__Assets::register()` for more info
+	 *
+	 * @return array             Which Assets was registered
+	 */
+	function pngx_asset( $origin, $slug, $file, $deps = array(), $action = null, $arguments = array() ) {
+		return pngx( 'assets' )->register( $origin, $slug, $file, $deps, $action, $arguments );
+	}
+}
+
+if ( ! function_exists( 'pngx_resource_url' ) ) {
+	/**
+	 * Returns or echoes a url to a file in the Events Calendar plugin resources directory
+	 *
+	 * Based off Modern Tribe's tribe_resource_url
+	 *
+	 * @since 3.0
+	 *
+	 * @param string $resource the filename of the resource
+	 * @param bool   $echo     whether or not to echo the url
+	 * @param string $root_dir directory to hunt for resource files (null or the actual path)
+	 * @param object $origin   Which plugin we are dealing with
+	 *
+	 * @return string
+	 **/
+	function pngx_resource_url( $resource, $echo = false, $root_dir = null, $origin = null ) {
+		$extension = pathinfo( $resource, PATHINFO_EXTENSION );
+		$resource_path = $root_dir;
+
+		if ( is_null( $resource_path ) ) {
+			$resources_path = 'src/resources/';
+			switch ( $extension ) {
+				case 'css':
+					$resource_path = $resources_path .'css/';
+					break;
+				case 'js':
+					$resource_path = $resources_path .'js/';
+					break;
+				case 'scss':
+					$resource_path = $resources_path .'scss/';
+					break;
+				default:
+					$resource_path = $resources_path;
+					break;
+			}
+		}
+
+		$path = $resource_path . $resource;
+
+		if ( is_object( $origin ) ) {
+			$plugin_path = trailingslashit( ! empty( $origin->plugin_path ) ? $origin->plugin_path : $origin->pluginPath );
+		} else {
+			$plugin_path = trailingslashit( dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) );
+		}
+
+		$file = wp_normalize_path( $plugin_path . $path );
+
+		// Turn the Path into a URL
+		$url = plugins_url( basename( $file ), $file );
+
+		/**
+		 * Filters the resource URL
+		 *
+		 * @since 3.0
+		 *
+		 * @param $url
+		 * @param $resource
+		 */
+		$url = apply_filters( 'pngx_resource_url', $url, $resource );
+
+		if ( $echo ) {
+			echo $url;
+		}
+
+		return $url;
+	}
+}

BIN
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.eot


Fichier diff supprimé car celui-ci est trop grand
+ 377 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.svg


BIN
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.ttf


BIN
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/fonts/glyphicons-halflings-regular.woff


Fichier diff supprimé car celui-ci est trop grand
+ 7 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/jquery-ui.min.css


Fichier diff supprimé car celui-ci est trop grand
+ 2024 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/pngx-admin.css


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/resources/css/pngx-admin.min.css


+ 0 - 0
wp-content/plugins/coupon-creator/plugin-engine/src/resources/images/pngx-loading.gif


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff