FEEDZY RSS Feeds Lite - Version 3.2.4

Version Description

  • 2017-10-13 =

  • Fix for assets enqueue, loading them where are needed only.

  • Removes duplicates readme.md files.

Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 FEEDZY RSS Feeds Lite
Version 3.2.4
Comparing to
See all releases

Code changes from version 1.2.0 to 3.2.4

Files changed (69) hide show
  1. CHANGELOG.md +152 -38
  2. LICENSE.txt +339 -0
  3. css/admin.css +0 -37
  4. css/bg.png +0 -0
  5. css/disable_controls.css +0 -29
  6. css/feedzy-rss-feeds.css +524 -0
  7. css/form.css +725 -0
  8. css/logo.png +0 -0
  9. css/metabox-settings.css +2026 -0
  10. css/security.png +0 -0
  11. customizer.php +0 -718
  12. feedzy-rss-feed.php +142 -0
  13. form/form.php +135 -0
  14. img/features-affiliate-ready.jpg +0 -0
  15. img/features-caching.jpg +0 -0
  16. img/features-feed-to-post.jpg +0 -0
  17. img/features-templates.jpg +0 -0
  18. img/features-widgets-support.jpg +0 -0
  19. img/feedzy-default-template.jpg +0 -0
  20. img/feedzy-default.jpg +0 -0
  21. img/feedzy-style1-template.jpg +0 -0
  22. img/feedzy-style2-template.jpg +0 -0
  23. img/feedzy.png +0 -0
  24. img/feedzy.svg +1 -0
  25. includes/abstract/feedzy-rss-feeds-admin-abstract.php +1022 -0
  26. includes/admin/feedzy-rss-feeds-admin.php +508 -0
  27. includes/admin/feedzy-rss-feeds-options.php +84 -0
  28. includes/admin/feedzy-rss-feeds-ui-lang.php +369 -0
  29. includes/admin/feedzy-rss-feeds-ui.php +146 -0
  30. includes/admin/feedzy-rss-feeds-upgrader.php +68 -0
  31. includes/admin/feedzy-wp-widget.php +244 -0
  32. includes/feedzy-rss-feeds-activator.php +49 -0
  33. includes/feedzy-rss-feeds-deactivator.php +36 -0
  34. includes/feedzy-rss-feeds-feed-tweaks.php +66 -0
  35. includes/feedzy-rss-feeds-i18n.php +49 -0
  36. includes/feedzy-rss-feeds-loader.php +155 -0
  37. includes/feedzy-rss-feeds.php +253 -0
  38. includes/layouts/css/upsell.css +236 -0
  39. includes/layouts/feedzy-upsell.php +47 -0
  40. includes/layouts/header.php +25 -0
  41. includes/layouts/settings.php +119 -0
  42. index.php +9 -0
  43. js/admin.js +0 -8
  44. js/feedzy-rss-feeds-ui-mce.js +96 -0
  45. languages/feedzy-rss-feeds-de_DE.mo +0 -0
  46. languages/feedzy-rss-feeds-de_DE.po +141 -0
  47. languages/feedzy-rss-feeds-es_ES.mo +0 -0
  48. languages/feedzy-rss-feeds-es_ES.po +163 -0
  49. languages/feedzy-rss-feeds-fr_FR.mo +0 -0
  50. languages/feedzy-rss-feeds-fr_FR.po +217 -0
  51. languages/feedzy-rss-feeds-ja.mo +0 -0
  52. languages/feedzy-rss-feeds-ja.po +189 -0
  53. languages/feedzy-rss-feeds-sr_RS.mo +0 -0
  54. languages/feedzy-rss-feeds-sr_RS.po +204 -0
  55. languages/feedzy-rss-feeds.pot +459 -0
  56. languages/login-customizer.pot +0 -263
  57. login-customizer.php +0 -52
  58. mailin.php +0 -868
  59. option-panel.php +0 -93
  60. readme.md +480 -27
  61. readme.txt +480 -27
  62. screenshot-1.png +0 -0
  63. screenshot-2.png +0 -0
  64. uninstall.php +24 -0
  65. vendor/autoload.php +1 -1
  66. vendor/autoload_52.php +1 -1
  67. vendor/composer/autoload_files.php +1 -1
  68. vendor/composer/autoload_real.php +5 -5
  69. vendor/composer/autoload_real_52.php +3 -3
CHANGELOG.md CHANGED
@@ -1,59 +1,177 @@
1
 
2
- ### v1.2.0 - 2017-10-16
3
  **Changes:**
4
 
5
- ### v1.2.0 - 2017-10-16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  **Changes:**
7
- * Adds tested up to wp 4.8.
8
- * Improvements to dashboard widget, rollback.
9
 
10
-
11
-
12
-
13
- Added dashboard widget
14
-
15
-
16
-
17
-
18
- Removed notification script
19
-
20
-
21
-
22
-
23
- Improved customizer settings
24
-
25
- Removed security addon mentions in the free version
26
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- ### 1.0.6 - 11/01/2016
29
 
30
- Changes:
31
 
32
 
33
- * added subscribe form
34
 
 
35
 
36
- ### 1.0.4 - 11/01/2016
37
 
38
- Changes:
39
 
 
40
 
41
- * * added notification for security addon
42
- * Improved code format
43
- * Merge pull request #7 from cristian-ungureanu/development
44
 
45
- Development
46
 
 
47
 
48
- ### 1.0.2 - 23/06/2015
49
 
50
- Changes:
51
 
 
52
 
53
- * Remove phpstorm files
54
- * Remove phpstorm files
55
- * Merge branch 'development' of https://github.com/Codeinwp/login-customizer into development
56
 
 
57
 
58
- ### 1.0.2 - 23/06/2015
59
 
60
- Changes:
61
 
 
62
 
63
- * * added support for pro version
1
 
2
+ ### v3.2.4 - 2017-10-16
3
  **Changes:**
4
 
5
+ ### v3.2.4 - 2017-10-13
6
+ **Changes:**
7
+ * Fix for assets enqueue, loading them where are needed only.
8
+ * Removes duplicates readme.md files.
9
+
10
+ ### v3.2.1 - 2017-10-12
11
+ **Changes:**
12
+ * Adds global settings page.
13
+ * Adds User Agent and Proxy settings.
14
+ * Fix for some edge cases regarding images in the feed.
15
+
16
+ ### v3.2.0 - 2017-08-17
17
+ **Changes:**
18
+ * Fix for image URL issue following some strange patterns.
19
+ * Added fallback for broken feed, now if one feed from the list is not working, others will will be used.
20
+ * Added shortcode parameter for feed cache control.
21
+
22
+ ### v3.1.10 - 2017-08-03
23
+ **Changes:**
24
+ * Fixed typos in shortcode builder.
25
+ * Fixed image encoding issue.
26
+
27
+ ### v3.1.9 - 2017-07-21
28
+ **Changes:**
29
+ * Fixed issue with fetching images containg GET parameters.
30
+
31
+ ### v3.1.8 - 2017-07-17
32
+ **Changes:**
33
+ * Fixed image fetching issues.
34
+ * Fixed link opening behaviour
35
+ * Improved description ( Thanks to @chesio )
36
+
37
+ ### v3.1.7 - 2017-06-21
38
+ **Changes:**
39
+ * Added new sdk logic.
40
+ * Improved compatibility with the pro version.
41
+
42
+ ### v3.1.6 - 2017-06-02
43
+ **Changes:**
44
+ - Added sdk test.
45
+
46
+ ### v3.1.5 - 2017-05-31
47
  **Changes:**
48
+ - Fixed sdk notifications issues.
49
+ - Added compatibility with pro version.
50
 
51
+ ### v3.1.4 - 2017-05-30
52
+ **Changes:**
53
+ - Added new doc for feedzy categories.
54
+ - Bump themeisle-sdk version.
55
+
56
+ ### v3.1.3 - 2017-05-29
57
+ **Changes:**
58
+ - * Added new SDK features.
59
+ - * Fixed some edge case issues on image parsing.
60
+
61
+ ### v3.1.2 - 2017-05-25
62
+ **Changes:**
63
+ - Release 3.1.2
64
+
65
+ ### v3.1.1 - 2017-05-22
66
+ **Changes:**
67
+ - Replace alt in span with title
68
+
69
+ ### v3.1.0 - 2017-05-17
70
+ **Changes:**
71
+ - Added feed to post compatibility
72
+ - Added categories to group urls
73
+ - Added filter for author url
74
+ - Fixed regex for jpeg images.
75
+
76
+ ### v3.0.12 - 2017-04-24
77
+ **Changes:**
78
+ - Fixed svn commit.
79
+
80
+ ### v3.0.11 - 2017-04-24
81
+ **Changes:**
82
+ - Changed deploy mechanism.
83
+
84
+
85
+ ### 3.0.10 - 24/04/2017
86
+
87
+ **Changes:**
88
+
89
+ - Fixed wrong image regex.
90
+ - Fixed image compression.
91
+ - Added wraith.
92
+
93
+
94
+ ### 3.0.9 - 21/02/2017
95
+
96
+ **Changes:**
97
+
98
+ - Fixed wrong empty title check.
99
+
100
+
101
+ ### 3.0.8 - 20/02/2017
102
+
103
+ **Changes:**
104
+
105
+ - Added sizes param to feedzy_thumb_output.
106
+
107
+ - Dont show items with empty title.
108
+
109
+
110
+ ### 3.0.7 - 03/02/2017
111
+
112
+ **Changes:**
113
+
114
+ - Fixed is_new when pro is active.
115
+
116
+ - Fixed redundant auto options.
117
+
118
+ - Fixed auto option in widget for image option.
119
+
120
+
121
+ ### 3.0.6 - 27/01/2017
122
+
123
+ **Changes:**
124
+
125
+ -
126
+
127
+ - Added feedzy_feed_timestamp filter.
128
+
129
+ - Fixed issue with edge cases feed urls.
130
+
131
+ - Fixed error when using [] on string vars.
132
+
133
+
134
+ ### 3.0.5 - 13/01/2017
135
+
136
+ **Changes:**
137
+
138
+ - Fixed issue with google news feeds
139
+
140
+
141
+ ### 3.0.4 - 11/01/2017
142
 
143
+ **Changes:**
144
 
145
+ - Release 3.0.4
146
 
147
 
148
+ ### 3.0.3 - 10/01/2017
149
 
150
+ **Changes:**
151
 
152
+ - Added compatibility with the new pro options
153
 
154
+ - Added new documentation help
155
 
156
+ - Added legacy filters and functions
157
 
 
 
 
158
 
159
+ ### 3.0.2 - 06/01/2017
160
 
161
+ **Changes:**
162
 
163
+ - Added default image class back
164
 
 
165
 
166
+ ### 3.0.1 - 05/01/2017
167
 
168
+ **Changes:**
 
 
169
 
170
+ - Fixed html markup error
171
 
 
172
 
173
+ ### 3.0.0 - 03/01/2017
174
 
175
+ **Changes:**
176
 
177
+ - Release 3.0.0 version
LICENSE.txt ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ <signature of Ty Coon>, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
css/admin.css DELETED
@@ -1,37 +0,0 @@
1
- .logincust-success {
2
- border: 2px solid #398f14;
3
- }
4
-
5
- .appearance_page_logincust_options #wpcontent #wrap h3,
6
- .appearance_page_logincust_options #wpcontent #wrap h2,
7
- .appearance_page_logincust_options #wpcontent #wrap a,
8
- .appearance_page_logincust_options #wpcontent #wrap {
9
- color: #777;
10
- }
11
-
12
- #logincust-logo {
13
- position: absolute;
14
- right: 13%;
15
- width: 123px;
16
- height: 85px;
17
- background: url("<?php echo LOGINCUST_FREE_URL; ?>/css/logo.png");
18
- background-repeat: no-repeat;
19
- background-position: center;
20
- }
21
-
22
- .appearance_page_logincust_options #submit:hover {
23
- border-color: #ff9d89 !important;
24
- background: #ff907a !important;
25
- }
26
-
27
- .appearance_page_logincust_options #submit {
28
- border-color: #ff5f3f !important;
29
- color: #fff !important;
30
- background: #ff7f66 !important;
31
- box-shadow: 0 1px 0 #ff9682 inset, 0 1px 0 rgba(0, 0, 0, 0.15);
32
- text-shadow: none;
33
- }
34
-
35
- .appearance_page_logincust_options #wpcontent {
36
- background: #fff;
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/bg.png DELETED
Binary file
css/disable_controls.css DELETED
@@ -1,29 +0,0 @@
1
- .logincust_pro_text a {
2
- color: #a00;
3
- }
4
-
5
- .logincust_pro_text {
6
- width: 94%;
7
- margin-top: 0;
8
- margin-top: -10px;
9
- margin-left: -21px;
10
- padding: 10px;
11
- padding: 0;
12
- padding-top: 3px;
13
- padding-right: 28px;
14
- padding-left: 28px;
15
- background-color: #f5f5f5;
16
- font-size: 12px;
17
- font-weight: bold;
18
- text-align: center;
19
- }
20
-
21
- #accordion-section-logincust_security_section h3:hover,
22
- #accordion-section-logincust_security_section h3 {
23
- background-image: url("security.png") !important;
24
- background-repeat: no-repeat!important;
25
- background-position: 85% !important;
26
- background-size: 25% !important;
27
- ;
28
- ;
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/feedzy-rss-feeds.css ADDED
@@ -0,0 +1,524 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * feedzy-rss-feeds.css
3
+ * Feedzy RSS Feed
4
+ * Copyright: (c) 2016 Themeisle, themeisle.com
5
+ * Version: 3.2.4
6
+ * Plugin Name: FEEDZY RSS Feeds
7
+ * Plugin URI: http://themeisle.com/plugins/feedzy-rss-feeds/
8
+ * Author: Themeisle
9
+ */
10
+ .feedzy-rss > ul {
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+
15
+ /*noinspection CssUnusedSymbol*/
16
+ .feedzy-rss .rss_item {
17
+ border-bottom: 1px solid #eee;
18
+ list-style: none;
19
+ }
20
+
21
+ .feedzy-rss .rss_item .title {
22
+ font-weight: bold;
23
+ }
24
+
25
+ /*noinspection CssUnusedSymbol*/
26
+ .feedzy-rss .rss_item:after {
27
+ display: block;
28
+ clear: both;
29
+ content: "";
30
+ }
31
+
32
+ /*noinspection CssUnusedSymbol*/
33
+ .feedzy-rss .rss_item .rss_image {
34
+ float: left;
35
+ position: relative;
36
+ border: none;
37
+ text-decoration: none;
38
+ }
39
+
40
+ .feedzy-rss .rss_item .rss_image span {
41
+ display: inline-block;
42
+ position: absolute;
43
+ width: 100%;
44
+ height: 100%;
45
+ background-position: 50%;
46
+ background-size: cover;
47
+ }
48
+
49
+ /*noinspection CssUnusedSymbol*/
50
+ .feedzy-rss .rss_item .rss_image .fetched {
51
+ z-index: 9;
52
+ }
53
+
54
+ .feedzy-rss .rss_item .rss_image {
55
+ margin: 0.3em 1em 0 0;
56
+ }
57
+
58
+ .feedzy-rss .rss_item .rss_content small {
59
+ display: block;
60
+ font-size: 0.9em;
61
+ font-style: italic;
62
+ }
63
+
64
+ /*TinyMce UI button*/
65
+ /*noinspection CssUnusedSymbol*/
66
+ i.mce-i-feedzy-icon {
67
+ background-image: none, url("../img/feedzy.svg"), url("../img/feedzy.png");
68
+ }
69
+
70
+ #feedzy-rss-button-insert {
71
+ border-color: #4cae4c;
72
+ color: #fff;
73
+ background-color: #5cb85c;
74
+ }
75
+
76
+ #feedzy-rss-button-insert button {
77
+ color: #fff;
78
+ }
79
+
80
+ #feedzy-rss-button-insert:hover,
81
+ #feedzy-rss-button-insert:focus {
82
+ border-color: #398439;
83
+ color: #fff;
84
+ background-color: #449d44;
85
+ }
86
+
87
+ #feedzy-rss-button-cancel {
88
+ border-color: #ccc;
89
+ color: #333;
90
+ background-color: #fff;
91
+ }
92
+
93
+ #feedzy-rss-button-cancel button {
94
+ color: #333;
95
+ }
96
+
97
+ #feedzy-rss-button-cancel:hover,
98
+ #feedzy-rss-button-cancel:focus {
99
+ border-color: #adadad;
100
+ color: #333;
101
+ background-color: #e6e6e6;
102
+ }
103
+
104
+ #feedzy-rss-button-pro {
105
+ position: absolute;
106
+ left: 10px !important;
107
+ border-color: #46b8da;
108
+ color: #fff;
109
+ background-color: #5bc0de;
110
+ }
111
+
112
+ #feedzy-rss-button-pro button {
113
+ color: #fff;
114
+ }
115
+
116
+ #feedzy-rss-button-pro:hover,
117
+ #feedzy-rss-button-pro:focus {
118
+ border-color: #269abc;
119
+ color: #fff;
120
+ background-color: #31b0d5;
121
+ }
122
+
123
+ #feedzy-rss-insert-dialog-title {
124
+ font-weight: 300;
125
+ text-align: center;
126
+ }
127
+
128
+ /* PRO */
129
+ .feedzy-rss ul {
130
+ margin: 0 -2%;
131
+ }
132
+
133
+ .feedzy-rss ul:before,
134
+ .feedzy-rss ul:after {
135
+ display: table;
136
+ content: " ";
137
+ }
138
+
139
+ .feedzy-rss ul:after {
140
+ clear: both;
141
+ }
142
+
143
+ .feedzy-rss .rss_item {
144
+ margin: 2%;
145
+ padding: 0;
146
+ }
147
+
148
+ /* Default */
149
+ /*
150
+ .feedzy-rss .feedzy-default .rss_image,
151
+ .feedzy-rss .feedzy-default .rss_content_wrap {
152
+ display: inline-block;
153
+ width: 100%;
154
+ }
155
+
156
+ .feedzy-rss .feedzy-default .rss_image {
157
+ float: none;
158
+ padding: 0;
159
+ text-align: center;
160
+ width: 100%;
161
+ }
162
+
163
+ .feedzy-rss .feedzy-default .rss_content_wrap {
164
+ margin: 10px 0 0;
165
+ padding: 0;
166
+ }*/
167
+
168
+ /* Style1 */
169
+ .feedzy-rss .feedzy-style1 .rss_image,
170
+ .feedzy-rss .feedzy-style1 .rss_content_wrap {
171
+ display: inline-block;
172
+ width: 100%;
173
+ }
174
+
175
+ .feedzy-rss .feedzy-style1 .rss_item .rss_image span {
176
+ width: 100%;
177
+ }
178
+
179
+ .feedzy-rss .feedzy-style1 .rss_content_wrap {
180
+ text-align: left;
181
+ }
182
+
183
+ .feedzy-rss .feedzy-style1 .rss_item {
184
+ text-align: center;
185
+ }
186
+
187
+ .feedzy-rss .feedzy-style2 .rss_item .rss_image {
188
+ float: none;
189
+ }
190
+
191
+ .feedzy-rss .feedzy-style2 .rss_item .rss_image span {
192
+ width: 100%;
193
+ }
194
+
195
+ .feedzy-rss .feedzy-style2 .rss_content_wrap {
196
+ text-align: left;
197
+ }
198
+
199
+ .feedzy-rss .feedzy-style2 .rss_item {
200
+ text-align: center;
201
+ }
202
+
203
+ .feedzy-rss .feedzy-style1 .rss_image {
204
+ float: none;
205
+ width: 100%;
206
+ padding: 0;
207
+ text-align: center;
208
+ -webkit-transition: 0.75s ease;
209
+ transition: 0.75s ease;
210
+ }
211
+
212
+ .feedzy-rss .feedzy-style1 .rss_image a {
213
+ border: 3px solid transparent;
214
+ border-radius: 50%;
215
+ -webkit-transition: 0.5s ease;
216
+ transition: 0.5s ease;
217
+ }
218
+
219
+ .feedzy-rss .feedzy-style1 .rss_image a span {
220
+ display: inline-block;
221
+ left: 0;
222
+ border-radius: 50%;
223
+ }
224
+
225
+ .feedzy-rss .feedzy-style1 .rss_item:hover .rss_image a {
226
+ box-shadow: 0 0 10px rgba(0,0,0,0.25);
227
+ }
228
+
229
+ .feedzy-rss .feedzy-style1 .rss_content_wrap {
230
+ margin: 10px 0 0;
231
+ padding: 0;
232
+ }
233
+
234
+ .feedzy-rss .feedzy-style1 .rss_content_wrap .title a {
235
+ text-decoration: none;
236
+ }
237
+
238
+ .feedzy-rss .feedzy-style1 .rss_content_wrap .title a:hover {
239
+ text-decoration: underline;
240
+ }
241
+
242
+ .feedzy-rss .feedzy-style1 .rss_content .description {
243
+ margin: 0;
244
+ padding: 0;
245
+ font-size: 90%;
246
+ }
247
+
248
+ .feedzy-rss .feedzy-style1 .rss_content .price-wrap {
249
+ margin: 10px 0 0;
250
+ text-align: center;
251
+ }
252
+
253
+ .feedzy-rss .feedzy-style1 .rss_content .price {
254
+ display: inline-block;
255
+ padding: 5px 10px;
256
+ border-radius: 5px;
257
+ color: #fff;
258
+ background: #4f6d8d;
259
+ font-weight: 700;
260
+ }
261
+
262
+ /* Style2 */
263
+ .feedzy-rss .feedzy-style2 .rss_item {
264
+ padding: 0 !important;
265
+ border: 1px solid #e3edeb;
266
+ border-radius: 5px;
267
+ }
268
+
269
+ .feedzy-rss .feedzy-style2 .rss_image span {
270
+ left: 0;
271
+ }
272
+
273
+ .feedzy-rss .feedzy-style2 .rss_image,
274
+ .feedzy-rss .feedzy-style2 .rss_content_wrap {
275
+ display: inline-block;
276
+ width: 100%;
277
+ }
278
+
279
+ .feedzy-rss .feedzy-style2 .rss_image {
280
+ overflow: hidden;
281
+ width: 100%;
282
+ padding: 0;
283
+ border-bottom: 7px solid #355c7d;
284
+ line-height: 0;
285
+ text-align: center;
286
+ }
287
+
288
+ .feedzy-rss .feedzy-style2 .rss_image a span {
289
+ display: inline-block;
290
+ -webkit-transition: 0.3s ease;
291
+ transition: 0.3s ease;
292
+ }
293
+
294
+ .feedzy-rss .feedzy-style2 .rss_item:hover .rss_image a span {
295
+ -webkit-transform: scale(1.2);
296
+ -ms-transform: scale(1.2);
297
+ transform: scale(1.2);
298
+ }
299
+
300
+ .feedzy-rss .feedzy-style2 .rss_content_wrap {
301
+ margin: 0;
302
+ padding: 0;
303
+ letter-spacing: 0;
304
+ }
305
+
306
+ .feedzy-rss .feedzy-style2 .rss_content_wrap .title {
307
+ display: block;
308
+ padding: 10px 15px;
309
+ }
310
+
311
+ .feedzy-rss .feedzy-style2 .rss_content_wrap .title a {
312
+ /*color: #355c7d;*/
313
+ text-decoration: none;
314
+ }
315
+
316
+ .feedzy-rss .feedzy-style2 .rss_content_wrap .title a:hover {
317
+ text-decoration: underline;
318
+ }
319
+
320
+ .feedzy-rss .feedzy-style2 .rss_content .meta {
321
+ padding: 10px 15px;
322
+ border-top: 1px solid #e3edeb;
323
+ border-bottom: 1px solid #e3edeb;
324
+ background-color: #f1f5f4;
325
+ }
326
+
327
+ .feedzy-rss .feedzy-style2 .rss_content .description {
328
+ margin: 0;
329
+ padding: 10px 15px;
330
+ font-size: 90%;
331
+ line-height: 1.5;
332
+ }
333
+
334
+ .feedzy-rss .feedzy-style2 .rss_content .price-wrap {
335
+ margin: 10px 0 15px;
336
+ text-align: center;
337
+ }
338
+
339
+ .feedzy-rss .feedzy-style2 .rss_content .price {
340
+ display: inline-block;
341
+ padding: 8px 15px;
342
+ color: #fff;
343
+ background: #355c7d;
344
+ font-weight: 700;
345
+ }
346
+
347
+ /* Columns */
348
+ .feedzy-rss .feedzy-rss-col-1 {
349
+ width: 96%;
350
+ }
351
+
352
+ /* SCHIMBAT DIN ID in CLASA */
353
+ .feedzy-rss .feedzy-rss-col-2,
354
+ .feedzy-rss .feedzy-rss-col-3,
355
+ .feedzy-rss .feedzy-rss-col-4,
356
+ .feedzy-rss .feedzy-rss-col-5,
357
+ .feedzy-rss .feedzy-rss-col-6 {
358
+ float: left;
359
+ width: 96%;
360
+ }
361
+
362
+ @media screen and (min-width: 768px) {
363
+ .feedzy-rss .feedzy-rss-col-2,
364
+ .feedzy-rss .feedzy-rss-col-3,
365
+ .feedzy-rss .feedzy-rss-col-4,
366
+ .feedzy-rss .feedzy-rss-col-5,
367
+ .feedzy-rss .feedzy-rss-col-6 {
368
+ width: 46%;
369
+ }
370
+
371
+ .feedzy-rss .feedzy-rss-col-2:nth-child(2n+1),
372
+ .feedzy-rss .feedzy-rss-col-3:nth-child(2n+1),
373
+ .feedzy-rss .feedzy-rss-col-4:nth-child(2n+1),
374
+ .feedzy-rss .feedzy-rss-col-5:nth-child(2n+1),
375
+ .feedzy-rss .feedzy-rss-col-6:nth-child(2n+1) {
376
+ clear: both;
377
+ }
378
+ }
379
+
380
+ @media screen and (min-width: 992px) {
381
+ .feedzy-rss .feedzy-rss-col-3,
382
+ .feedzy-rss .feedzy-rss-col-4,
383
+ .feedzy-rss .feedzy-rss-col-5,
384
+ .feedzy-rss .feedzy-rss-col-6 {
385
+ width: 29.33333%;
386
+ }
387
+
388
+ .feedzy-rss .feedzy-rss-col-3:nth-child(2n+1),
389
+ .feedzy-rss .feedzy-rss-col-4:nth-child(2n+1),
390
+ .feedzy-rss .feedzy-rss-col-5:nth-child(2n+1),
391
+ .feedzy-rss .feedzy-rss-col-6:nth-child(2n+1) {
392
+ clear: none;
393
+ }
394
+
395
+ .feedzy-rss .feedzy-rss-col-3:nth-child(3n+1),
396
+ .feedzy-rss .feedzy-rss-col-4:nth-child(3n+1),
397
+ .feedzy-rss .feedzy-rss-col-5:nth-child(3n+1),
398
+ .feedzy-rss .feedzy-rss-col-6:nth-child(3n+1) {
399
+ clear: both;
400
+ }
401
+ }
402
+
403
+ @media screen and (min-width: 1200px) {
404
+ .feedzy-rss .feedzy-rss-col-4 {
405
+ width: 21%;
406
+ }
407
+
408
+ .feedzy-rss .feedzy-rss-col-5 {
409
+ width: 16%;
410
+ }
411
+
412
+ .feedzy-rss .feedzy-rss-col-6 {
413
+ width: 12.66666%;
414
+ }
415
+
416
+ .feedzy-rss .feedzy-rss-col-4:nth-child(3n+1),
417
+ .feedzy-rss .feedzy-rss-col-5:nth-child(3n+1),
418
+ .feedzy-rss .feedzy-rss-col-6:nth-child(3n+1) {
419
+ clear: none;
420
+ }
421
+
422
+ .feedzy-rss .feedzy-rss-col-4:nth-child(4n+1),
423
+ .feedzy-rss .feedzy-rss-col-5:nth-child(5n+1),
424
+ .feedzy-rss .feedzy-rss-col-6:nth-child(6n+1) {
425
+ /* PANA AICI INCLUSIV */
426
+ clear: both;
427
+ }
428
+ }
429
+
430
+ /* The switch - the box around the slider */
431
+ .feedzy-switch {
432
+ display: inline-block;
433
+ position: relative;
434
+ width: 30px;
435
+ height: 18px;
436
+ margin-left: 20px;
437
+ }
438
+
439
+ /* Hide default HTML checkbox */
440
+ .feedzy-switch input {
441
+ display: none;
442
+ }
443
+
444
+ /* The slider */
445
+ .feedzy-tracking sup {
446
+ vertical-align: 3px;
447
+ }
448
+
449
+ .feedzy-track {
450
+ position: absolute;
451
+ top: 0;
452
+ right: 0;
453
+ bottom: 0;
454
+ left: 0;
455
+ background-color: #ccc;
456
+ cursor: pointer;
457
+ -webkit-transition: 0.4s;
458
+ transition: 0.4s;
459
+ }
460
+
461
+ .feedzy-track:before {
462
+ position: absolute;
463
+ bottom: 1.5px;
464
+ left: 2px;
465
+ width: 15px;
466
+ height: 15px;
467
+ background-color: white;
468
+ content: "";
469
+ -webkit-transition: 0.4s;
470
+ transition: 0.4s;
471
+ }
472
+
473
+ input:checked + .feedzy-track {
474
+ background-color: #0085ba;
475
+ }
476
+
477
+ input:focus + .feedzy-track {
478
+ box-shadow: 0 0 1px #0085ba;
479
+ }
480
+
481
+ input:checked + .feedzy-track:before {
482
+ -webkit-transform: translateX(11px);
483
+ -ms-transform: translateX(11px);
484
+ transform: translateX(11px);
485
+ }
486
+
487
+ /* Rounded sliders */
488
+ .feedzy-track.visualizer-round {
489
+ border-radius: 34px;
490
+ }
491
+
492
+ .feedzy-track.visualizer-round:before {
493
+ border-radius: 50%;
494
+ }
495
+
496
+ .feedzy-tracking p small sup {
497
+ margin-left: -3px;
498
+ }
499
+
500
+ .feedzy-tracking p {
501
+ padding-left: 14px;
502
+ color: #23282d;
503
+ font-size: 12px;
504
+ line-height: 12px;
505
+ text-align: left;
506
+ }
507
+
508
+ .feedzy-tracking span {
509
+ margin-left: 10px;
510
+ color: #23282d;
511
+ background: none;
512
+ font-size: 14px;
513
+ font-weight: bold;
514
+ }
515
+
516
+
517
+ .post-type-feedzy_categories .postbox-container div#submitdiv,
518
+ .post-type-feedzy_categories #feedzy_category_feeds_rn {
519
+ display: block !important;
520
+ }
521
+
522
+ .post-type-feedzy_categories .postbox-container > div > .postbox:not(#feedzy_category_feeds) {
523
+ display: none;
524
+ }
css/form.css ADDED
@@ -0,0 +1,725 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * form.css
3
+ * Feedzy RSS Feeds Form CSS
4
+ */
5
+
6
+ html {
7
+ box-sizing: border-box;
8
+ font-size: 62.5%;
9
+ }
10
+
11
+ body {
12
+ color: #606c76;
13
+ font-family: "Roboto", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
14
+ font-size: 1.6em;
15
+ font-weight: 300;
16
+ line-height: 1.6;
17
+ letter-spacing: 0.01em;
18
+ }
19
+
20
+ *,
21
+ *:after,
22
+ *:before {
23
+ box-sizing: inherit;
24
+ }
25
+
26
+ .button,
27
+ button,
28
+ input[type="button"],
29
+ input[type="reset"],
30
+ input[type="submit"] {
31
+ display: inline-block;
32
+ height: 3.8rem;
33
+ padding: 0 3.0rem;
34
+ border: 0.1rem solid #31b0d5;
35
+ border-radius: 0.4rem;
36
+ color: #fff;
37
+ background-color: #31b0d5;
38
+ font-size: 1.1rem;
39
+ font-weight: 700;
40
+ line-height: 3.8rem;
41
+ text-align: center;
42
+ white-space: nowrap;
43
+ text-decoration: none;
44
+ letter-spacing: 0.1rem;
45
+ text-transform: uppercase;
46
+ cursor: pointer;
47
+ }
48
+
49
+ .button:focus,
50
+ .button:hover,
51
+ button:focus,
52
+ button:hover,
53
+ input[type="button"]:focus,
54
+ input[type="button"]:hover,
55
+ input[type="reset"]:focus,
56
+ input[type="reset"]:hover,
57
+ input[type="submit"]:focus,
58
+ input[type="submit"]:hover {
59
+ border-color: #606c76;
60
+ outline: 0;
61
+ color: #fff;
62
+ background-color: #606c76;
63
+ }
64
+
65
+ .button[disabled],
66
+ button[disabled],
67
+ input[type="button"][disabled],
68
+ input[type="reset"][disabled],
69
+ input[type="submit"][disabled] {
70
+ opacity: 0.5;
71
+ cursor: default;
72
+ }
73
+
74
+ .button[disabled]:focus,
75
+ .button[disabled]:hover,
76
+ button[disabled]:focus,
77
+ button[disabled]:hover,
78
+ input[type="button"][disabled]:focus,
79
+ input[type="button"][disabled]:hover,
80
+ input[type="reset"][disabled]:focus,
81
+ input[type="reset"][disabled]:hover,
82
+ input[type="submit"][disabled]:focus,
83
+ input[type="submit"][disabled]:hover {
84
+ border-color: #31b0d5;
85
+ background-color: #31b0d5;
86
+ }
87
+
88
+ .button.button-outline,
89
+ button.button-outline,
90
+ input[type="button"].button-outline,
91
+ input[type="reset"].button-outline,
92
+ input[type="submit"].button-outline {
93
+ color: #31b0d5;
94
+ background-color: transparent;
95
+ }
96
+
97
+ .button.button-outline:focus,
98
+ .button.button-outline:hover,
99
+ button.button-outline:focus,
100
+ button.button-outline:hover,
101
+ input[type="button"].button-outline:focus,
102
+ input[type="button"].button-outline:hover,
103
+ input[type="reset"].button-outline:focus,
104
+ input[type="reset"].button-outline:hover,
105
+ input[type="submit"].button-outline:focus,
106
+ input[type="submit"].button-outline:hover {
107
+ border-color: #606c76;
108
+ color: #606c76;
109
+ background-color: transparent;
110
+ }
111
+
112
+ .button.button-outline[disabled]:focus,
113
+ .button.button-outline[disabled]:hover,
114
+ button.button-outline[disabled]:focus,
115
+ button.button-outline[disabled]:hover,
116
+ input[type="button"].button-outline[disabled]:focus,
117
+ input[type="button"].button-outline[disabled]:hover,
118
+ input[type="reset"].button-outline[disabled]:focus,
119
+ input[type="reset"].button-outline[disabled]:hover,
120
+ input[type="submit"].button-outline[disabled]:focus,
121
+ input[type="submit"].button-outline[disabled]:hover {
122
+ border-color: inherit;
123
+ color: #31b0d5;
124
+ }
125
+
126
+ .button.button-clear,
127
+ button.button-clear,
128
+ input[type="button"].button-clear,
129
+ input[type="reset"].button-clear,
130
+ input[type="submit"].button-clear {
131
+ border-color: transparent;
132
+ color: #31b0d5;
133
+ background-color: transparent;
134
+ }
135
+
136
+ .button.button-clear:focus,
137
+ .button.button-clear:hover,
138
+ button.button-clear:focus,
139
+ button.button-clear:hover,
140
+ input[type="button"].button-clear:focus,
141
+ input[type="button"].button-clear:hover,
142
+ input[type="reset"].button-clear:focus,
143
+ input[type="reset"].button-clear:hover,
144
+ input[type="submit"].button-clear:focus,
145
+ input[type="submit"].button-clear:hover {
146
+ border-color: transparent;
147
+ color: #606c76;
148
+ background-color: transparent;
149
+ }
150
+
151
+ .button.button-clear[disabled]:focus,
152
+ .button.button-clear[disabled]:hover,
153
+ button.button-clear[disabled]:focus,
154
+ button.button-clear[disabled]:hover,
155
+ input[type="button"].button-clear[disabled]:focus,
156
+ input[type="button"].button-clear[disabled]:hover,
157
+ input[type="reset"].button-clear[disabled]:focus,
158
+ input[type="reset"].button-clear[disabled]:hover,
159
+ input[type="submit"].button-clear[disabled]:focus,
160
+ input[type="submit"].button-clear[disabled]:hover {
161
+ color: #31b0d5;
162
+ }
163
+
164
+ hr {
165
+ margin: 3.0rem 0;
166
+ border: 0;
167
+ border-top: 0.1rem solid #f4f5f6;
168
+ }
169
+
170
+ input[type="email"],
171
+ input[type="number"],
172
+ input[type="password"],
173
+ input[type="search"],
174
+ input[type="tel"],
175
+ input[type="text"],
176
+ input[type="url"],
177
+ textarea,
178
+ select {
179
+ box-sizing: inherit;
180
+ width: 100%;
181
+ height: 3.8rem;
182
+ padding: 0.6rem 1.0rem;
183
+ border: 0.1rem solid #d1d1d1;
184
+ border-radius: 0.4rem;
185
+ background-color: transparent;
186
+ box-shadow: none;
187
+
188
+ -webkit-appearance: none;
189
+ -moz-appearance: none;
190
+ appearance: none;
191
+ }
192
+
193
+ input[type="email"]:focus,
194
+ input[type="number"]:focus,
195
+ input[type="password"]:focus,
196
+ input[type="search"]:focus,
197
+ input[type="tel"]:focus,
198
+ input[type="text"]:focus,
199
+ input[type="url"]:focus,
200
+ textarea:focus,
201
+ select:focus {
202
+ border-color: #31b0d5;
203
+ outline: 0;
204
+ }
205
+
206
+ select {
207
+ padding-right: 3.0rem;
208
+ background: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"14\" viewBox=\"0 0 29 14\" width=\"29\"><path fill=\"#d1d1d1\" d=\"M9.37727 3.625l5.08154 6.93523L19.54036 3.625\"/></svg>") center right no-repeat;
209
+ }
210
+
211
+ select:focus {
212
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"14\" viewBox=\"0 0 29 14\" width=\"29\"><path fill=\"#31b0d5\" d=\"M9.37727 3.625l5.08154 6.93523L19.54036 3.625\"/></svg>");
213
+ }
214
+
215
+ textarea {
216
+ min-height: 6.5rem;
217
+ }
218
+
219
+ label,
220
+ legend {
221
+ display: block;
222
+ margin-bottom: 0.5rem;
223
+ font-size: 1.2rem;
224
+ font-weight: 300;
225
+ }
226
+
227
+ fieldset {
228
+ padding: 0;
229
+ border-width: 0;
230
+ }
231
+
232
+ input[type="checkbox"],
233
+ input[type="radio"] {
234
+ display: inline;
235
+ }
236
+
237
+ .label-inline {
238
+ display: inline-block;
239
+ margin-left: 0.5rem;
240
+ font-weight: normal;
241
+ }
242
+
243
+ .container {
244
+ position: relative;
245
+ width: 100%;
246
+ max-width: 112.0rem;
247
+ margin: 0 auto;
248
+ padding: 0 2.0rem;
249
+ }
250
+
251
+ .row {
252
+ display: -webkit-box;
253
+ display: -webkit-flex;
254
+ display: -ms-flexbox;
255
+ display: flex;
256
+ flex-direction: column;
257
+ width: 100%;
258
+ padding: 0;
259
+
260
+ -webkit-box-direction: normal;
261
+ -webkit-box-orient: vertical;
262
+ -webkit-flex-direction: column;
263
+ -ms-flex-direction: column;
264
+ }
265
+
266
+ .row.row-no-padding {
267
+ padding: 0;
268
+ }
269
+
270
+ .row.row-no-padding > .column {
271
+ padding: 0;
272
+ }
273
+
274
+ .row.row-wrap {
275
+ -webkit-flex-wrap: wrap;
276
+ -ms-flex-wrap: wrap;
277
+ flex-wrap: wrap;
278
+ }
279
+
280
+ .row.row-top {
281
+ -webkit-align-items: flex-start;
282
+ align-items: flex-start;
283
+ -webkit-box-align: start;
284
+ -ms-flex-align: start;
285
+ }
286
+
287
+ .row.row-bottom {
288
+ -webkit-align-items: flex-end;
289
+ align-items: flex-end;
290
+ -webkit-box-align: end;
291
+ -ms-flex-align: end;
292
+ }
293
+
294
+ .row.row-center {
295
+ -webkit-align-items: center;
296
+ align-items: center;
297
+ -webkit-box-align: center;
298
+ -ms-flex-align: center;
299
+ }
300
+
301
+ .row.row-stretch {
302
+ -webkit-align-items: stretch;
303
+ align-items: stretch;
304
+ -webkit-box-align: stretch;
305
+ -ms-flex-align: stretch;
306
+ }
307
+
308
+ .row.row-baseline {
309
+ -webkit-align-items: baseline;
310
+ align-items: baseline;
311
+ -webkit-box-align: baseline;
312
+ -ms-flex-align: baseline;
313
+ }
314
+
315
+ .row .column {
316
+ display: block;
317
+ width: 100%;
318
+ max-width: 100%;
319
+ margin-left: 0;
320
+
321
+ -webkit-box-flex: 1;
322
+ -webkit-flex: 1;
323
+ -ms-flex: 1;
324
+ flex: 1;
325
+ }
326
+
327
+ .row .column.column-offset-10 {
328
+ margin-left: 10%;
329
+ }
330
+
331
+ .row .column.column-offset-20 {
332
+ margin-left: 20%;
333
+ }
334
+
335
+ .row .column.column-offset-25 {
336
+ margin-left: 25%;
337
+ }
338
+
339
+ .row .column.column-offset-33,
340
+ .row .column.column-offset-34 {
341
+ margin-left: 33.3333%;
342
+ }
343
+
344
+ .row .column.column-offset-50 {
345
+ margin-left: 50%;
346
+ }
347
+
348
+ .row .column.column-offset-66,
349
+ .row .column.column-offset-67 {
350
+ margin-left: 66.6666%;
351
+ }
352
+
353
+ .row .column.column-offset-75 {
354
+ margin-left: 75%;
355
+ }
356
+
357
+ .row .column.column-offset-80 {
358
+ margin-left: 80%;
359
+ }
360
+
361
+ .row .column.column-offset-90 {
362
+ margin-left: 90%;
363
+ }
364
+
365
+ .row .column.column-10 {
366
+ max-width: 10%;
367
+
368
+ -webkit-box-flex: 0;
369
+ -webkit-flex: 0 0 10%;
370
+ -ms-flex: 0 0 10%;
371
+ flex: 0 0 10%;
372
+ }
373
+
374
+ .row .column.column-20 {
375
+ max-width: 20%;
376
+
377
+ -webkit-box-flex: 0;
378
+ -webkit-flex: 0 0 20%;
379
+ -ms-flex: 0 0 20%;
380
+ flex: 0 0 20%;
381
+ }
382
+
383
+ .row .column.column-25 {
384
+ max-width: 25%;
385
+
386
+ -webkit-box-flex: 0;
387
+ -webkit-flex: 0 0 25%;
388
+ -ms-flex: 0 0 25%;
389
+ flex: 0 0 25%;
390
+ }
391
+
392
+ .row .column.column-33,
393
+ .row .column.column-34 {
394
+ max-width: 33.3333%;
395
+
396
+ -webkit-box-flex: 0;
397
+ -webkit-flex: 0 0 33.3333%;
398
+ -ms-flex: 0 0 33.3333%;
399
+ flex: 0 0 33.3333%;
400
+ }
401
+
402
+ .row .column.column-40 {
403
+ max-width: 40%;
404
+
405
+ -webkit-box-flex: 0;
406
+ -webkit-flex: 0 0 40%;
407
+ -ms-flex: 0 0 40%;
408
+ flex: 0 0 40%;
409
+ }
410
+
411
+ .row .column.column-50 {
412
+ max-width: 50%;
413
+
414
+ -webkit-box-flex: 0;
415
+ -webkit-flex: 0 0 50%;
416
+ -ms-flex: 0 0 50%;
417
+ flex: 0 0 50%;
418
+ }
419
+
420
+ .row .column.column-60 {
421
+ max-width: 60%;
422
+
423
+ -webkit-box-flex: 0;
424
+ -webkit-flex: 0 0 60%;
425
+ -ms-flex: 0 0 60%;
426
+ flex: 0 0 60%;
427
+ }
428
+
429
+ .row .column.column-66,
430
+ .row .column.column-67 {
431
+ max-width: 66.6666%;
432
+
433
+ -webkit-box-flex: 0;
434
+ -webkit-flex: 0 0 66.6666%;
435
+ -ms-flex: 0 0 66.6666%;
436
+ flex: 0 0 66.6666%;
437
+ }
438
+
439
+ .row .column.column-75 {
440
+ max-width: 75%;
441
+
442
+ -webkit-box-flex: 0;
443
+ -webkit-flex: 0 0 75%;
444
+ -ms-flex: 0 0 75%;
445
+ flex: 0 0 75%;
446
+ }
447
+
448
+ .row .column.column-80 {
449
+ max-width: 80%;
450
+
451
+ -webkit-box-flex: 0;
452
+ -webkit-flex: 0 0 80%;
453
+ -ms-flex: 0 0 80%;
454
+ flex: 0 0 80%;
455
+ }
456
+
457
+ .row .column.column-90 {
458
+ max-width: 90%;
459
+
460
+ -webkit-box-flex: 0;
461
+ -webkit-flex: 0 0 90%;
462
+ -ms-flex: 0 0 90%;
463
+ flex: 0 0 90%;
464
+ }
465
+
466
+ .row .column .column-top {
467
+ -webkit-align-self: flex-start;
468
+ align-self: flex-start;
469
+ -ms-flex-item-align: start;
470
+ }
471
+
472
+ .row .column .column-bottom {
473
+ -webkit-align-self: flex-end;
474
+ align-self: flex-end;
475
+ -ms-flex-item-align: end;
476
+ }
477
+
478
+ .row .column .column-center {
479
+ -webkit-align-self: center;
480
+ align-self: center;
481
+ -ms-flex-item-align: center;
482
+ -ms-grid-row-align: center;
483
+ }
484
+
485
+ @media (min-width: 40rem) {
486
+ .row {
487
+ flex-direction: row;
488
+ width: -webkit-calc(100% + 2.0rem);
489
+ width: calc(100% + 2.0rem);
490
+ margin-left: -1.0rem;
491
+
492
+ -webkit-box-direction: normal;
493
+ -webkit-box-orient: horizontal;
494
+ -webkit-flex-direction: row;
495
+ -ms-flex-direction: row;
496
+ }
497
+
498
+ .row .column {
499
+ margin-bottom: inherit;
500
+ padding: 0 1.0rem;
501
+ }
502
+ }
503
+
504
+ a {
505
+ color: #31b0d5;
506
+ text-decoration: none;
507
+ }
508
+
509
+ a:focus,
510
+ a:hover {
511
+ color: #606c76;
512
+ }
513
+
514
+ dl,
515
+ ol,
516
+ ul {
517
+ margin-top: 0;
518
+ padding-left: 0;
519
+ list-style: none;
520
+ }
521
+
522
+ dl dl,
523
+ dl ol,
524
+ dl ul,
525
+ ol dl,
526
+ ol ol,
527
+ ol ul,
528
+ ul dl,
529
+ ul ol,
530
+ ul ul {
531
+ margin: 1.5rem 0 1.5rem 3.0rem;
532
+ font-size: 90%;
533
+ }
534
+
535
+ ol {
536
+ list-style: decimal inside;
537
+ }
538
+
539
+ ul {
540
+ list-style: circle inside;
541
+ }
542
+
543
+ .button,
544
+ button,
545
+ dd,
546
+ dt,
547
+ li {
548
+ margin-bottom: 1.0rem;
549
+ }
550
+
551
+ fieldset,
552
+ input,
553
+ select,
554
+ textarea {
555
+ margin-bottom: 1.5rem;
556
+ }
557
+
558
+ blockquote,
559
+ dl,
560
+ figure,
561
+ form,
562
+ ol,
563
+ p,
564
+ pre,
565
+ table,
566
+ ul {
567
+ margin-bottom: 2.5rem;
568
+ }
569
+
570
+ table {
571
+ width: 100%;
572
+ }
573
+
574
+ td,
575
+ th {
576
+ padding: 1.2rem 1.5rem;
577
+ border-bottom: 0.1rem solid #e1e1e1;
578
+ text-align: left;
579
+ }
580
+
581
+ td:first-child,
582
+ th:first-child {
583
+ padding-left: 0;
584
+ }
585
+
586
+ td:last-child,
587
+ th:last-child {
588
+ padding-right: 0;
589
+ }
590
+
591
+ p {
592
+ margin-top: 0;
593
+ font-size: 1.4rem;
594
+ }
595
+
596
+ h1,
597
+ h2,
598
+ h3,
599
+ h4,
600
+ h5,
601
+ h6 {
602
+ margin-top: 0;
603
+ margin-bottom: 2.0rem;
604
+ font-weight: 300;
605
+ letter-spacing: -0.1rem;
606
+ }
607
+
608
+ h1 {
609
+ font-size: 4.0rem;
610
+ line-height: 1.2;
611
+ }
612
+
613
+ h2 {
614
+ font-size: 3.6rem;
615
+ line-height: 1.25;
616
+ }
617
+
618
+ h3 {
619
+ font-size: 3.0rem;
620
+ line-height: 1.3;
621
+ }
622
+
623
+ h4 {
624
+ font-size: 2.4rem;
625
+ line-height: 1.35;
626
+ letter-spacing: -0.08rem;
627
+ }
628
+
629
+ h5 {
630
+ border-bottom: 1px solid #31b0d5;
631
+ font-size: 1.8rem;
632
+ line-height: 1.5;
633
+ letter-spacing: -0.05rem;
634
+ }
635
+
636
+ h6 {
637
+ font-size: 1.6rem;
638
+ line-height: 1.4;
639
+ letter-spacing: 0;
640
+ }
641
+
642
+ @media (min-width: 40rem) {
643
+ h1 {
644
+ font-size: 5.0rem;
645
+ }
646
+
647
+ h2 {
648
+ font-size: 4.2rem;
649
+ }
650
+
651
+ h3 {
652
+ font-size: 3.6rem;
653
+ }
654
+
655
+ h4 {
656
+ font-size: 3.0rem;
657
+ }
658
+
659
+ h5 {
660
+ font-size: 2.4rem;
661
+ }
662
+
663
+ h6 {
664
+ font-size: 1.5rem;
665
+ }
666
+ }
667
+
668
+ img {
669
+ max-width: 100%;
670
+ }
671
+
672
+ .clearfix:after {
673
+ display: table;
674
+ clear: both;
675
+ content: " ";
676
+ }
677
+
678
+ .float-left {
679
+ float: left;
680
+ }
681
+
682
+ .float-right {
683
+ float: right;
684
+ }
685
+
686
+ .feedzy_section_pro {
687
+ background-color: #fefefe;
688
+ }
689
+
690
+ .feedzy_section_pro h5 {
691
+ border-bottom-color: #d9a404;
692
+ color: #d9a404;
693
+ }
694
+
695
+ .feedzy_pro_tag {
696
+ margin-left: 10px;
697
+ padding: 3px 6px;
698
+ border-radius: 3px;
699
+ color: #fff;
700
+ background-color: #d9a404;
701
+ }
702
+
703
+ .feedzy-radio-image {
704
+ display: inline-block;
705
+ width: 100px;
706
+ margin-right: 20px;
707
+ padding-bottom: 60px;
708
+ }
709
+
710
+ .feedzy-template-default {
711
+ background: url(../img/feedzy-default-template.jpg) no-repeat bottom center;
712
+ }
713
+
714
+ .feedzy-template-style1 {
715
+ background: url(../img/feedzy-style1-template.jpg) no-repeat bottom center;
716
+ }
717
+
718
+ .feedzy-template-style2 {
719
+ background: url(../img/feedzy-style2-template.jpg) no-repeat bottom center;
720
+ }
721
+
722
+ input[disabled],
723
+ select[disabled] {
724
+ cursor: not-allowed;
725
+ }
css/logo.png DELETED
Binary file
css/metabox-settings.css ADDED
@@ -0,0 +1,2026 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * import-metabox-edit.css
3
+ *
4
+ * @since 1.2.0
5
+ * @package feedzy-rss-feeds-pro
6
+ */
7
+ .fz-form-control {
8
+ display: block;
9
+ width: 100%;
10
+ height: 34px;
11
+ padding: 6px 12px;
12
+ border: 1px solid #ccc;
13
+ border-radius: 4px;
14
+ color: #555;
15
+ background-color: #fff;
16
+ background-image: none;
17
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
18
+ font-size: 14px;
19
+ line-height: 1.42857143;
20
+ -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
21
+ -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
22
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
23
+ }
24
+
25
+ .fz-form-control:focus {
26
+ border-color: #66afe9;
27
+ outline: 0;
28
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 8px rgba(102, 175, 233, 0.6);
29
+ }
30
+
31
+ .fz-form-control::-moz-placeholder {
32
+ opacity: 1;
33
+ color: #999;
34
+ }
35
+
36
+ .fz-form-control:-ms-input-placeholder {
37
+ color: #999;
38
+ }
39
+
40
+ .fz-form-control::-webkit-input-placeholder {
41
+ color: #999;
42
+ }
43
+
44
+ .fz-form-control::-ms-expand {
45
+ border: 0;
46
+ background-color: transparent;
47
+ }
48
+
49
+ .fz-form-control[disabled],
50
+ .fz-form-control[readonly],
51
+ fieldset[disabled] .fz-form-control {
52
+ opacity: 1;
53
+ background-color: #eee;
54
+ }
55
+
56
+ .fz-form-control[disabled],
57
+ fieldset[disabled] .fz-form-control {
58
+ cursor: not-allowed;
59
+ }
60
+
61
+ textarea.fz-form-control {
62
+ height: auto;
63
+ }
64
+
65
+ input[type="search"] {
66
+ -webkit-appearance: none;
67
+ }
68
+
69
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
70
+ input[type="date"].fz-form-control,
71
+ input[type="time"].fz-form-control,
72
+ input[type="datetime-local"].fz-form-control,
73
+ input[type="month"].fz-form-control {
74
+ line-height: 34px;
75
+ }
76
+
77
+ input[type="date"].input-sm,
78
+ input[type="time"].input-sm,
79
+ input[type="datetime-local"].input-sm,
80
+ input[type="month"].input-sm,
81
+ .fz-input-group-sm input[type="date"],
82
+ .fz-input-group-sm input[type="time"],
83
+ .fz-input-group-sm input[type="datetime-local"],
84
+ .fz-input-group-sm input[type="month"] {
85
+ line-height: 30px;
86
+ }
87
+
88
+ input[type="date"].input-lg,
89
+ input[type="time"].input-lg,
90
+ input[type="datetime-local"].input-lg,
91
+ input[type="month"].input-lg,
92
+ .fz-input-group-lg input[type="date"],
93
+ .fz-input-group-lg input[type="time"],
94
+ .fz-input-group-lg input[type="datetime-local"],
95
+ .fz-input-group-lg input[type="month"] {
96
+ line-height: 46px;
97
+ }
98
+ }
99
+
100
+ .fz-form-group {
101
+ margin-bottom: 15px;
102
+ }
103
+
104
+ .radio,
105
+ .checkbox {
106
+ display: block;
107
+ position: relative;
108
+ margin-top: 10px;
109
+ margin-bottom: 10px;
110
+ }
111
+
112
+ .radio label,
113
+ .checkbox label {
114
+ min-height: 20px;
115
+ margin-bottom: 0;
116
+ padding-left: 20px;
117
+ font-weight: normal;
118
+ cursor: pointer;
119
+ }
120
+
121
+ .radio input[type="radio"],
122
+ .radio-inline input[type="radio"],
123
+ .checkbox input[type="checkbox"],
124
+ .checkbox-inline input[type="checkbox"] {
125
+ position: absolute;
126
+ margin-top: 4px \9;
127
+ margin-left: -20px;
128
+ }
129
+
130
+ .radio + .radio,
131
+ .checkbox + .checkbox {
132
+ margin-top: -5px;
133
+ }
134
+
135
+ .radio-inline,
136
+ .checkbox-inline {
137
+ display: inline-block;
138
+ position: relative;
139
+ margin-bottom: 0;
140
+ padding-left: 20px;
141
+ font-weight: normal;
142
+ vertical-align: middle;
143
+ cursor: pointer;
144
+ }
145
+
146
+ .radio-inline + .radio-inline,
147
+ .checkbox-inline + .checkbox-inline {
148
+ margin-top: 0;
149
+ margin-left: 10px;
150
+ }
151
+
152
+ input[type="radio"][disabled],
153
+ input[type="checkbox"][disabled],
154
+ input[type="radio"].disabled,
155
+ input[type="checkbox"].disabled,
156
+ fieldset[disabled] input[type="radio"],
157
+ fieldset[disabled] input[type="checkbox"] {
158
+ cursor: not-allowed;
159
+ }
160
+
161
+ .radio-inline.disabled,
162
+ .checkbox-inline.disabled,
163
+ fieldset[disabled] .radio-inline,
164
+ fieldset[disabled] .checkbox-inline {
165
+ cursor: not-allowed;
166
+ }
167
+
168
+ .radio.disabled label,
169
+ .checkbox.disabled label,
170
+ fieldset[disabled] .radio label,
171
+ fieldset[disabled] .checkbox label {
172
+ cursor: not-allowed;
173
+ }
174
+
175
+ .fz-form-control-static {
176
+ min-height: 34px;
177
+ margin-bottom: 0;
178
+ padding-top: 7px;
179
+ padding-bottom: 7px;
180
+ }
181
+
182
+ .fz-form-control-static.input-lg,
183
+ .fz-form-control-static.input-sm {
184
+ padding-right: 0;
185
+ padding-left: 0;
186
+ }
187
+
188
+ .input-sm {
189
+ height: 30px;
190
+ padding: 5px 10px;
191
+ border-radius: 3px;
192
+ font-size: 12px;
193
+ line-height: 1.5;
194
+ }
195
+
196
+ select.input-sm {
197
+ height: 30px;
198
+ line-height: 30px;
199
+ }
200
+
201
+ textarea.input-sm,
202
+ select[multiple].input-sm {
203
+ height: auto;
204
+ }
205
+
206
+ .fz-form-group-sm .fz-form-control {
207
+ height: 30px;
208
+ padding: 5px 10px;
209
+ border-radius: 3px;
210
+ font-size: 12px;
211
+ line-height: 1.5;
212
+ }
213
+
214
+ .fz-form-group-sm select.fz-form-control {
215
+ height: 30px;
216
+ line-height: 30px;
217
+ }
218
+
219
+ .fz-form-group-sm textarea.fz-form-control,
220
+ .fz-form-group-sm select[multiple].fz-form-control {
221
+ height: auto;
222
+ }
223
+
224
+ .fz-form-group-sm .fz-form-control-static {
225
+ height: 30px;
226
+ min-height: 32px;
227
+ padding: 6px 10px;
228
+ font-size: 12px;
229
+ line-height: 1.5;
230
+ }
231
+
232
+ .input-lg {
233
+ height: 46px;
234
+ padding: 10px 16px;
235
+ border-radius: 6px;
236
+ font-size: 18px;
237
+ line-height: 1.3333333;
238
+ }
239
+
240
+ select.input-lg {
241
+ height: 46px;
242
+ line-height: 46px;
243
+ }
244
+
245
+ textarea.input-lg,
246
+ select[multiple].input-lg {
247
+ height: auto;
248
+ }
249
+
250
+ .fz-form-group-lg .fz-form-control {
251
+ height: 46px;
252
+ padding: 10px 16px;
253
+ border-radius: 6px;
254
+ font-size: 18px;
255
+ line-height: 1.3333333;
256
+ }
257
+
258
+ .fz-form-group-lg select.fz-form-control {
259
+ height: 46px;
260
+ line-height: 46px;
261
+ }
262
+
263
+ .fz-form-group-lg textarea.fz-form-control,
264
+ .fz-form-group-lg select[multiple].fz-form-control {
265
+ height: auto;
266
+ }
267
+
268
+ .fz-form-group-lg .fz-form-control-static {
269
+ height: 46px;
270
+ min-height: 38px;
271
+ padding: 11px 16px;
272
+ font-size: 18px;
273
+ line-height: 1.3333333;
274
+ }
275
+
276
+ .has-feedback {
277
+ position: relative;
278
+ }
279
+
280
+ .has-feedback .fz-form-control {
281
+ padding-right: 42.5px;
282
+ }
283
+
284
+ .fz-form-control-feedback {
285
+ display: block;
286
+ position: absolute;
287
+ z-index: 2;
288
+ top: 0;
289
+ right: 0;
290
+ width: 34px;
291
+ height: 34px;
292
+ line-height: 34px;
293
+ text-align: center;
294
+ pointer-events: none;
295
+ }
296
+
297
+ .input-lg + .fz-form-control-feedback,
298
+ .fz-input-group-lg + .fz-form-control-feedback,
299
+ .fz-form-group-lg .fz-form-control + .fz-form-control-feedback {
300
+ width: 46px;
301
+ height: 46px;
302
+ line-height: 46px;
303
+ }
304
+
305
+ .input-sm + .fz-form-control-feedback,
306
+ .fz-input-group-sm + .fz-form-control-feedback,
307
+ .fz-form-group-sm .fz-form-control + .fz-form-control-feedback {
308
+ width: 30px;
309
+ height: 30px;
310
+ line-height: 30px;
311
+ }
312
+
313
+ .has-success .help-block,
314
+ .has-success .control-label,
315
+ .has-success .radio,
316
+ .has-success .checkbox,
317
+ .has-success .radio-inline,
318
+ .has-success .checkbox-inline,
319
+ .has-success.radio label,
320
+ .has-success.checkbox label,
321
+ .has-success.radio-inline label,
322
+ .has-success.checkbox-inline label {
323
+ color: #3c763d;
324
+ }
325
+
326
+ .has-success .fz-form-control {
327
+ border-color: #3c763d;
328
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
329
+ }
330
+
331
+ .has-success .fz-form-control:focus {
332
+ border-color: #2b542c;
333
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
334
+ }
335
+
336
+ .has-success .fz-input-group-addon {
337
+ border-color: #3c763d;
338
+ color: #3c763d;
339
+ background-color: #dff0d8;
340
+ }
341
+
342
+ .has-success .fz-form-control-feedback {
343
+ color: #3c763d;
344
+ }
345
+
346
+ .has-warning .help-block,
347
+ .has-warning .control-label,
348
+ .has-warning .radio,
349
+ .has-warning .checkbox,
350
+ .has-warning .radio-inline,
351
+ .has-warning .checkbox-inline,
352
+ .has-warning.radio label,
353
+ .has-warning.checkbox label,
354
+ .has-warning.radio-inline label,
355
+ .has-warning.checkbox-inline label {
356
+ color: #8a6d3b;
357
+ }
358
+
359
+ .has-warning .fz-form-control {
360
+ border-color: #8a6d3b;
361
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
362
+ }
363
+
364
+ .has-warning .fz-form-control:focus {
365
+ border-color: #66512c;
366
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
367
+ }
368
+
369
+ .has-warning .fz-input-group-addon {
370
+ border-color: #8a6d3b;
371
+ color: #8a6d3b;
372
+ background-color: #fcf8e3;
373
+ }
374
+
375
+ .has-warning .fz-form-control-feedback {
376
+ color: #8a6d3b;
377
+ }
378
+
379
+ .has-error .help-block,
380
+ .has-error .control-label,
381
+ .has-error .radio,
382
+ .has-error .checkbox,
383
+ .has-error .radio-inline,
384
+ .has-error .checkbox-inline,
385
+ .has-error.radio label,
386
+ .has-error.checkbox label,
387
+ .has-error.radio-inline label,
388
+ .has-error.checkbox-inline label {
389
+ color: #a94442;
390
+ }
391
+
392
+ .has-error .fz-form-control {
393
+ border-color: #a94442;
394
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
395
+ }
396
+
397
+ .has-error .fz-form-control:focus {
398
+ border-color: #843534;
399
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
400
+ }
401
+
402
+ .has-error .fz-input-group-addon {
403
+ border-color: #a94442;
404
+ color: #a94442;
405
+ background-color: #f2dede;
406
+ }
407
+
408
+ .has-error .fz-form-control-feedback {
409
+ color: #a94442;
410
+ }
411
+
412
+ .has-feedback label ~ .fz-form-control-feedback {
413
+ top: 25px;
414
+ }
415
+
416
+ .has-feedback label.feedzy-sr-only ~ .fz-form-control-feedback {
417
+ top: 0;
418
+ }
419
+
420
+ .help-block {
421
+ display: block;
422
+ margin-top: 5px;
423
+ margin-bottom: 10px;
424
+ color: #737373;
425
+ }
426
+
427
+ @media (min-width: 768px) {
428
+ .form-inline .fz-form-group {
429
+ display: inline-block;
430
+ margin-bottom: 0;
431
+ vertical-align: middle;
432
+ }
433
+
434
+ .form-inline .fz-form-control {
435
+ display: inline-block;
436
+ width: auto;
437
+ vertical-align: middle;
438
+ }
439
+
440
+ .form-inline .fz-form-control-static {
441
+ display: inline-block;
442
+ }
443
+
444
+ .form-inline .fz-input-group {
445
+ display: inline-table;
446
+ vertical-align: middle;
447
+ }
448
+
449
+ .form-inline .fz-input-group .fz-input-group-addon,
450
+ .form-inline .fz-input-group .fz-input-group-btn,
451
+ .form-inline .fz-input-group .fz-form-control {
452
+ width: auto;
453
+ }
454
+
455
+ .form-inline .fz-input-group > .fz-form-control {
456
+ width: 100%;
457
+ }
458
+
459
+ .form-inline .control-label {
460
+ margin-bottom: 0;
461
+ vertical-align: middle;
462
+ }
463
+
464
+ .form-inline .radio,
465
+ .form-inline .checkbox {
466
+ display: inline-block;
467
+ margin-top: 0;
468
+ margin-bottom: 0;
469
+ vertical-align: middle;
470
+ }
471
+
472
+ .form-inline .radio label,
473
+ .form-inline .checkbox label {
474
+ padding-left: 0;
475
+ }
476
+
477
+ .form-inline .radio input[type="radio"],
478
+ .form-inline .checkbox input[type="checkbox"] {
479
+ position: relative;
480
+ margin-left: 0;
481
+ }
482
+
483
+ .form-inline .has-feedback .fz-form-control-feedback {
484
+ top: 0;
485
+ }
486
+ }
487
+
488
+ .form-horizontal .radio,
489
+ .form-horizontal .checkbox,
490
+ .form-horizontal .radio-inline,
491
+ .form-horizontal .checkbox-inline {
492
+ margin-top: 0;
493
+ margin-bottom: 0;
494
+ padding-top: 7px;
495
+ }
496
+
497
+ .form-horizontal .radio,
498
+ .form-horizontal .checkbox {
499
+ min-height: 27px;
500
+ }
501
+
502
+ .form-horizontal .fz-form-group {
503
+ margin-right: -15px;
504
+ margin-left: -15px;
505
+ }
506
+
507
+ @media (min-width: 768px) {
508
+ .form-horizontal .control-label {
509
+ margin-bottom: 0;
510
+ padding-top: 7px;
511
+ text-align: right;
512
+ }
513
+ }
514
+
515
+ .form-horizontal .has-feedback .fz-form-control-feedback {
516
+ right: 15px;
517
+ }
518
+
519
+ @media (min-width: 768px) {
520
+ .form-horizontal .fz-form-group-lg .control-label {
521
+ padding-top: 11px;
522
+ font-size: 18px;
523
+ }
524
+ }
525
+
526
+ @media (min-width: 768px) {
527
+ .form-horizontal .fz-form-group-sm .control-label {
528
+ padding-top: 6px;
529
+ font-size: 12px;
530
+ }
531
+ }
532
+
533
+ .fz-btn {
534
+ display: inline-block;
535
+ margin-bottom: 0;
536
+ padding: 6px 12px;
537
+ border: 1px solid transparent;
538
+ border-radius: 4px;
539
+ background-image: none;
540
+ font-size: 14px;
541
+ font-weight: normal;
542
+ line-height: 1.42857143;
543
+ text-align: center;
544
+ vertical-align: middle;
545
+ white-space: nowrap;
546
+ cursor: pointer;
547
+ -webkit-user-select: none;
548
+ -moz-user-select: none;
549
+ -ms-user-select: none;
550
+ user-select: none;
551
+
552
+ -ms-touch-action: manipulation;
553
+ touch-action: manipulation;
554
+ }
555
+
556
+ .fz-btn:focus,
557
+ .fz-btn:active:focus,
558
+ .fz-btn.active:focus,
559
+ .fz-btn.focus,
560
+ .fz-btn:active.focus,
561
+ .fz-btn.active.focus {
562
+ outline: 5px auto -webkit-focus-ring-color;
563
+ outline-offset: -2px;
564
+ }
565
+
566
+ .fz-btn:hover,
567
+ .fz-btn:focus,
568
+ .fz-btn.focus {
569
+ color: #333;
570
+ text-decoration: none;
571
+ }
572
+
573
+ .fz-btn:active,
574
+ .fz-btn.active {
575
+ outline: 0;
576
+ background-image: none;
577
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
578
+ }
579
+
580
+ .fz-btn.disabled,
581
+ .fz-btn[disabled],
582
+ fieldset[disabled] .fz-btn {
583
+ opacity: 0.65;
584
+ box-shadow: none;
585
+ cursor: not-allowed;
586
+
587
+ filter: alpha(opacity=65);
588
+ }
589
+
590
+ a.fz-btn.disabled,
591
+ fieldset[disabled] a.fz-btn {
592
+ pointer-events: none;
593
+ }
594
+
595
+ .fz-btn-default {
596
+ border-color: #ccc;
597
+ color: #333;
598
+ background-color: #fff;
599
+ }
600
+
601
+ .fz-btn-default:focus,
602
+ .fz-btn-default.focus {
603
+ border-color: #8c8c8c;
604
+ color: #333;
605
+ background-color: #e6e6e6;
606
+ }
607
+
608
+ .fz-btn-default:hover {
609
+ border-color: #adadad;
610
+ color: #333;
611
+ background-color: #e6e6e6;
612
+ }
613
+
614
+ .fz-btn-default:active,
615
+ .fz-btn-default.active,
616
+ .open > .dropdown-toggle.fz-btn-default {
617
+ border-color: #adadad;
618
+ color: #333;
619
+ background-color: #e6e6e6;
620
+ }
621
+
622
+ .fz-btn-default:active:hover,
623
+ .fz-btn-default.active:hover,
624
+ .open > .dropdown-toggle.fz-btn-default:hover,
625
+ .fz-btn-default:active:focus,
626
+ .fz-btn-default.active:focus,
627
+ .open > .dropdown-toggle.fz-btn-default:focus,
628
+ .fz-btn-default:active.focus,
629
+ .fz-btn-default.active.focus,
630
+ .open > .dropdown-toggle.fz-btn-default.focus {
631
+ border-color: #8c8c8c;
632
+ color: #333;
633
+ background-color: #d4d4d4;
634
+ }
635
+
636
+ .fz-btn-default:active,
637
+ .fz-btn-default.active,
638
+ .open > .dropdown-toggle.fz-btn-default {
639
+ background-image: none;
640
+ }
641
+
642
+ .fz-btn-default.disabled:hover,
643
+ .fz-btn-default[disabled]:hover,
644
+ fieldset[disabled] .fz-btn-default:hover,
645
+ .fz-btn-default.disabled:focus,
646
+ .fz-btn-default[disabled]:focus,
647
+ fieldset[disabled] .fz-btn-default:focus,
648
+ .fz-btn-default.disabled.focus,
649
+ .fz-btn-default[disabled].focus,
650
+ fieldset[disabled] .fz-btn-default.focus {
651
+ border-color: #ccc;
652
+ background-color: #fff;
653
+ }
654
+
655
+ .fz-btn-default .badge {
656
+ color: #fff;
657
+ background-color: #333;
658
+ }
659
+
660
+ .fz-btn-primary {
661
+ border-color: #2e6da4;
662
+ color: #fff;
663
+ background-color: #337ab7;
664
+ }
665
+
666
+ .fz-btn-primary:focus,
667
+ .fz-btn-primary.focus {
668
+ border-color: #122b40;
669
+ color: #fff;
670
+ background-color: #286090;
671
+ }
672
+
673
+ .fz-btn-primary:hover {
674
+ border-color: #204d74;
675
+ color: #fff;
676
+ background-color: #286090;
677
+ }
678
+
679
+ .fz-btn-primary:active,
680
+ .fz-btn-primary.active,
681
+ .open > .dropdown-toggle.fz-btn-primary {
682
+ border-color: #204d74;
683
+ color: #fff;
684
+ background-color: #286090;
685
+ }
686
+
687
+ .fz-btn-primary:active:hover,
688
+ .fz-btn-primary.active:hover,
689
+ .open > .dropdown-toggle.fz-btn-primary:hover,
690
+ .fz-btn-primary:active:focus,
691
+ .fz-btn-primary.active:focus,
692
+ .open > .dropdown-toggle.fz-btn-primary:focus,
693
+ .fz-btn-primary:active.focus,
694
+ .fz-btn-primary.active.focus,
695
+ .open > .dropdown-toggle.fz-btn-primary.focus {
696
+ border-color: #122b40;
697
+ color: #fff;
698
+ background-color: #204d74;
699
+ }
700
+
701
+ .fz-btn-primary:active,
702
+ .fz-btn-primary.active,
703
+ .open > .dropdown-toggle.fz-btn-primary {
704
+ background-image: none;
705
+ }
706
+
707
+ .fz-btn-primary.disabled:hover,
708
+ .fz-btn-primary[disabled]:hover,
709
+ fieldset[disabled] .fz-btn-primary:hover,
710
+ .fz-btn-primary.disabled:focus,
711
+ .fz-btn-primary[disabled]:focus,
712
+ fieldset[disabled] .fz-btn-primary:focus,
713
+ .fz-btn-primary.disabled.focus,
714
+ .fz-btn-primary[disabled].focus,
715
+ fieldset[disabled] .fz-btn-primary.focus {
716
+ border-color: #2e6da4;
717
+ background-color: #337ab7;
718
+ }
719
+
720
+ .fz-btn-primary .badge {
721
+ color: #337ab7;
722
+ background-color: #fff;
723
+ }
724
+
725
+ .fz-btn-success {
726
+ border-color: #4cae4c;
727
+ color: #fff;
728
+ background-color: #5cb85c;
729
+ }
730
+
731
+ .fz-btn-success:focus,
732
+ .fz-btn-success.focus {
733
+ border-color: #255625;
734
+ color: #fff;
735
+ background-color: #449d44;
736
+ }
737
+
738
+ .fz-btn-success:hover {
739
+ border-color: #398439;
740
+ color: #fff;
741
+ background-color: #449d44;
742
+ }
743
+
744
+ .fz-btn-success:active,
745
+ .fz-btn-success.active,
746
+ .open > .dropdown-toggle.fz-btn-success {
747
+ border-color: #398439;
748
+ color: #fff;
749
+ background-color: #449d44;
750
+ }
751
+
752
+ .fz-btn-success:active:hover,
753
+ .fz-btn-success.active:hover,
754
+ .open > .dropdown-toggle.fz-btn-success:hover,
755
+ .fz-btn-success:active:focus,
756
+ .fz-btn-success.active:focus,
757
+ .open > .dropdown-toggle.fz-btn-success:focus,
758
+ .fz-btn-success:active.focus,
759
+ .fz-btn-success.active.focus,
760
+ .open > .dropdown-toggle.fz-btn-success.focus {
761
+ border-color: #255625;
762
+ color: #fff;
763
+ background-color: #398439;
764
+ }
765
+
766
+ .fz-btn-success:active,
767
+ .fz-btn-success.active,
768
+ .open > .dropdown-toggle.fz-btn-success {
769
+ background-image: none;
770
+ }
771
+
772
+ .fz-btn-success.disabled:hover,
773
+ .fz-btn-success[disabled]:hover,
774
+ fieldset[disabled] .fz-btn-success:hover,
775
+ .fz-btn-success.disabled:focus,
776
+ .fz-btn-success[disabled]:focus,
777
+ fieldset[disabled] .fz-btn-success:focus,
778
+ .fz-btn-success.disabled.focus,
779
+ .fz-btn-success[disabled].focus,
780
+ fieldset[disabled] .fz-btn-success.focus {
781
+ border-color: #4cae4c;
782
+ background-color: #5cb85c;
783
+ }
784
+
785
+ .fz-btn-success .badge {
786
+ color: #5cb85c;
787
+ background-color: #fff;
788
+ }
789
+
790
+ .fz-btn-info {
791
+ border-color: #46b8da;
792
+ color: #fff;
793
+ background-color: #5bc0de;
794
+ }
795
+
796
+ .fz-btn-info:focus,
797
+ .fz-btn-info.focus {
798
+ border-color: #1b6d85;
799
+ color: #fff;
800
+ background-color: #31b0d5;
801
+ }
802
+
803
+ .fz-btn-info:hover {
804
+ border-color: #269abc;
805
+ color: #fff;
806
+ background-color: #31b0d5;
807
+ }
808
+
809
+ .fz-btn-info:active,
810
+ .fz-btn-info.active,
811
+ .open > .dropdown-toggle.fz-btn-info {
812
+ border-color: #269abc;
813
+ color: #fff;
814
+ background-color: #31b0d5;
815
+ }
816
+
817
+ .fz-btn-info:active:hover,
818
+ .fz-btn-info.active:hover,
819
+ .open > .dropdown-toggle.fz-btn-info:hover,
820
+ .fz-btn-info:active:focus,
821
+ .fz-btn-info.active:focus,
822
+ .open > .dropdown-toggle.fz-btn-info:focus,
823
+ .fz-btn-info:active.focus,
824
+ .fz-btn-info.active.focus,
825
+ .open > .dropdown-toggle.fz-btn-info.focus {
826
+ border-color: #1b6d85;
827
+ color: #fff;
828
+ background-color: #269abc;
829
+ }
830
+
831
+ .fz-btn-info:active,
832
+ .fz-btn-info.active,
833
+ .open > .dropdown-toggle.fz-btn-info {
834
+ background-image: none;
835
+ }
836
+
837
+ .fz-btn-info.disabled:hover,
838
+ .fz-btn-info[disabled]:hover,
839
+ fieldset[disabled] .fz-btn-info:hover,
840
+ .fz-btn-info.disabled:focus,
841
+ .fz-btn-info[disabled]:focus,
842
+ fieldset[disabled] .fz-btn-info:focus,
843
+ .fz-btn-info.disabled.focus,
844
+ .fz-btn-info[disabled].focus,
845
+ fieldset[disabled] .fz-btn-info.focus {
846
+ border-color: #46b8da;
847
+ background-color: #5bc0de;
848
+ }
849
+
850
+ .fz-btn-info .badge {
851
+ color: #5bc0de;
852
+ background-color: #fff;
853
+ }
854
+
855
+ .fz-btn-warning {
856
+ border-color: #eea236;
857
+ color: #fff;
858
+ background-color: #f0ad4e;
859
+ }
860
+
861
+ .fz-btn-warning:focus,
862
+ .fz-btn-warning.focus {
863
+ border-color: #985f0d;
864
+ color: #fff;
865
+ background-color: #ec971f;
866
+ }
867
+
868
+ .fz-btn-warning:hover {
869
+ border-color: #d58512;
870
+ color: #fff;
871
+ background-color: #ec971f;
872
+ }
873
+
874
+ .fz-btn-warning:active,
875
+ .fz-btn-warning.active,
876
+ .open > .dropdown-toggle.fz-btn-warning {
877
+ border-color: #d58512;
878
+ color: #fff;
879
+ background-color: #ec971f;
880
+ }
881
+
882
+ .fz-btn-warning:active:hover,
883
+ .fz-btn-warning.active:hover,
884
+ .open > .dropdown-toggle.fz-btn-warning:hover,
885
+ .fz-btn-warning:active:focus,
886
+ .fz-btn-warning.active:focus,
887
+ .open > .dropdown-toggle.fz-btn-warning:focus,
888
+ .fz-btn-warning:active.focus,
889
+ .fz-btn-warning.active.focus,
890
+ .open > .dropdown-toggle.fz-btn-warning.focus {
891
+ border-color: #985f0d;
892
+ color: #fff;
893
+ background-color: #d58512;
894
+ }
895
+
896
+ .fz-btn-warning:active,
897
+ .fz-btn-warning.active,
898
+ .open > .dropdown-toggle.fz-btn-warning {
899
+ background-image: none;
900
+ }
901
+
902
+ .fz-btn-warning.disabled:hover,
903
+ .fz-btn-warning[disabled]:hover,
904
+ fieldset[disabled] .fz-btn-warning:hover,
905
+ .fz-btn-warning.disabled:focus,
906
+ .fz-btn-warning[disabled]:focus,
907
+ fieldset[disabled] .fz-btn-warning:focus,
908
+ .fz-btn-warning.disabled.focus,
909
+ .fz-btn-warning[disabled].focus,
910
+ fieldset[disabled] .fz-btn-warning.focus {
911
+ border-color: #eea236;
912
+ background-color: #f0ad4e;
913
+ }
914
+
915
+ .fz-btn-warning .badge {
916
+ color: #f0ad4e;
917
+ background-color: #fff;
918
+ }
919
+
920
+ .fz-btn-danger {
921
+ border-color: #d43f3a;
922
+ color: #fff;
923
+ background-color: #d9534f;
924
+ }
925
+
926
+ .fz-btn-danger:focus,
927
+ .fz-btn-danger.focus {
928
+ border-color: #761c19;
929
+ color: #fff;
930
+ background-color: #c9302c;
931
+ }
932
+
933
+ .fz-btn-danger:hover {
934
+ border-color: #ac2925;
935
+ color: #fff;
936
+ background-color: #c9302c;
937
+ }
938
+
939
+ .fz-btn-danger:active,
940
+ .fz-btn-danger.active,
941
+ .open > .dropdown-toggle.fz-btn-danger {
942
+ border-color: #ac2925;
943
+ color: #fff;
944
+ background-color: #c9302c;
945
+ }
946
+
947
+ .fz-btn-danger:active:hover,
948
+ .fz-btn-danger.active:hover,
949
+ .open > .dropdown-toggle.fz-btn-danger:hover,
950
+ .fz-btn-danger:active:focus,
951
+ .fz-btn-danger.active:focus,
952
+ .open > .dropdown-toggle.fz-btn-danger:focus,
953
+ .fz-btn-danger:active.focus,
954
+ .fz-btn-danger.active.focus,
955
+ .open > .dropdown-toggle.fz-btn-danger.focus {
956
+ border-color: #761c19;
957
+ color: #fff;
958
+ background-color: #ac2925;
959
+ }
960
+
961
+ .fz-btn-danger:active,
962
+ .fz-btn-danger.active,
963
+ .open > .dropdown-toggle.fz-btn-danger {
964
+ background-image: none;
965
+ }
966
+
967
+ .fz-btn-danger.disabled:hover,
968
+ .fz-btn-danger[disabled]:hover,
969
+ fieldset[disabled] .fz-btn-danger:hover,
970
+ .fz-btn-danger.disabled:focus,
971
+ .fz-btn-danger[disabled]:focus,
972
+ fieldset[disabled] .fz-btn-danger:focus,
973
+ .fz-btn-danger.disabled.focus,
974
+ .fz-btn-danger[disabled].focus,
975
+ fieldset[disabled] .fz-btn-danger.focus {
976
+ border-color: #d43f3a;
977
+ background-color: #d9534f;
978
+ }
979
+
980
+ .fz-btn-danger .badge {
981
+ color: #d9534f;
982
+ background-color: #fff;
983
+ }
984
+
985
+ .fz-btn-link {
986
+ border-radius: 0;
987
+ color: #337ab7;
988
+ font-weight: normal;
989
+ }
990
+
991
+ .fz-btn-link,
992
+ .fz-btn-link:active,
993
+ .fz-btn-link.active,
994
+ .fz-btn-link[disabled],
995
+ fieldset[disabled] .fz-btn-link {
996
+ background-color: transparent;
997
+ box-shadow: none;
998
+ }
999
+
1000
+ .fz-btn-link,
1001
+ .fz-btn-link:hover,
1002
+ .fz-btn-link:focus,
1003
+ .fz-btn-link:active {
1004
+ border-color: transparent;
1005
+ }
1006
+
1007
+ .fz-btn-link:hover,
1008
+ .fz-btn-link:focus {
1009
+ color: #23527c;
1010
+ background-color: transparent;
1011
+ text-decoration: underline;
1012
+ }
1013
+
1014
+ .fz-btn-link[disabled]:hover,
1015
+ fieldset[disabled] .fz-btn-link:hover,
1016
+ .fz-btn-link[disabled]:focus,
1017
+ fieldset[disabled] .fz-btn-link:focus {
1018
+ color: #777;
1019
+ text-decoration: none;
1020
+ }
1021
+
1022
+ .fz-btn-lg,
1023
+ .fz-btn-group-lg > .fz-btn {
1024
+ padding: 10px 16px;
1025
+ border-radius: 6px;
1026
+ font-size: 18px;
1027
+ line-height: 1.3333333;
1028
+ }
1029
+
1030
+ .fz-btn-sm,
1031
+ .fz-btn-group-sm > .fz-btn {
1032
+ padding: 5px 10px;
1033
+ border-radius: 3px;
1034
+ font-size: 12px;
1035
+ line-height: 1.5;
1036
+ }
1037
+
1038
+ .fz-btn-xs,
1039
+ .fz-btn-group-xs > .fz-btn {
1040
+ padding: 1px 5px;
1041
+ border-radius: 3px;
1042
+ font-size: 12px;
1043
+ line-height: 1.5;
1044
+ }
1045
+
1046
+ .fz-btn-block {
1047
+ display: block;
1048
+ width: 100%;
1049
+ }
1050
+
1051
+ .fz-btn-block + .fz-btn-block {
1052
+ margin-top: 5px;
1053
+ }
1054
+
1055
+ input[type="submit"].fz-btn-block,
1056
+ input[type="reset"].fz-btn-block,
1057
+ input[type="button"].fz-btn-block {
1058
+ width: 100%;
1059
+ }
1060
+
1061
+ .caret {
1062
+ display: inline-block;
1063
+ width: 0;
1064
+ height: 0;
1065
+ margin-left: 2px;
1066
+ border-top: 4px dashed;
1067
+ border-top: 4px solid \9;
1068
+ border-right: 4px solid transparent;
1069
+ border-left: 4px solid transparent;
1070
+ vertical-align: middle;
1071
+ }
1072
+
1073
+ .dropup,
1074
+ .dropdown {
1075
+ position: relative;
1076
+ }
1077
+
1078
+ .dropdown-toggle:focus {
1079
+ outline: 0;
1080
+ }
1081
+
1082
+ .dropdown-menu {
1083
+ display: none;
1084
+ float: left;
1085
+ position: absolute;
1086
+ z-index: 1000;
1087
+ top: 40px;
1088
+ left: 0;
1089
+ min-width: 160px;
1090
+ /* fallback if 100% not supported */
1091
+ min-width: 100%;
1092
+ margin: 2px 0 0;
1093
+ padding: 5px 0;
1094
+ border: 1px solid #ccc;
1095
+ border: 1px solid rgba(0, 0, 0, 0.15);
1096
+ border-radius: 4px;
1097
+ background-color: #fff;
1098
+ background-clip: padding-box;
1099
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
1100
+ font-size: 14px;
1101
+ text-align: left;
1102
+ list-style: none;
1103
+ }
1104
+
1105
+ .dropdown-menu.pull-right {
1106
+ right: 0;
1107
+ left: auto;
1108
+ }
1109
+
1110
+ .dropdown-menu .divider {
1111
+ overflow: hidden;
1112
+ height: 1px;
1113
+ margin: 9px 0;
1114
+ background-color: #e5e5e5;
1115
+ }
1116
+
1117
+ .dropdown-menu > li > a {
1118
+ display: block;
1119
+ clear: both;
1120
+ padding: 3px 20px;
1121
+ color: #333;
1122
+ font-weight: normal;
1123
+ line-height: 1.42857143;
1124
+ white-space: nowrap;
1125
+ }
1126
+
1127
+ .dropdown-menu > li > a:hover,
1128
+ .dropdown-menu > li > a:focus {
1129
+ color: #262626;
1130
+ background-color: #f5f5f5;
1131
+ text-decoration: none;
1132
+ }
1133
+
1134
+ .dropdown-menu > .active > a,
1135
+ .dropdown-menu > .active > a:hover,
1136
+ .dropdown-menu > .active > a:focus {
1137
+ outline: 0;
1138
+ color: #fff;
1139
+ background-color: #337ab7;
1140
+ text-decoration: none;
1141
+ }
1142
+
1143
+ .dropdown-menu > .disabled > a,
1144
+ .dropdown-menu > .disabled > a:hover,
1145
+ .dropdown-menu > .disabled > a:focus {
1146
+ color: #777;
1147
+ }
1148
+
1149
+ .dropdown-menu > .disabled > a:hover,
1150
+ .dropdown-menu > .disabled > a:focus {
1151
+ background-color: transparent;
1152
+ background-image: none;
1153
+ text-decoration: none;
1154
+ cursor: not-allowed;
1155
+
1156
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
1157
+ }
1158
+
1159
+ .open > .dropdown-menu {
1160
+ display: block;
1161
+ }
1162
+
1163
+ .open > a {
1164
+ outline: 0;
1165
+ }
1166
+
1167
+ .dropdown-menu-right {
1168
+ right: 0;
1169
+ left: auto;
1170
+ }
1171
+
1172
+ .dropdown-menu-left {
1173
+ right: auto;
1174
+ left: 0;
1175
+ }
1176
+
1177
+ .dropdown-header {
1178
+ display: block;
1179
+ padding: 3px 20px;
1180
+ color: #777;
1181
+ font-size: 12px;
1182
+ line-height: 1.42857143;
1183
+ white-space: nowrap;
1184
+ }
1185
+
1186
+ .dropdown-backdrop {
1187
+ position: fixed;
1188
+ z-index: 990;
1189
+ top: 0;
1190
+ right: 0;
1191
+ bottom: 0;
1192
+ left: 0;
1193
+ }
1194
+
1195
+ .pull-right > .dropdown-menu {
1196
+ right: 0;
1197
+ left: auto;
1198
+ }
1199
+
1200
+ .dropup .caret,
1201
+ .navbar-fixed-bottom .dropdown .caret {
1202
+ border-top: 0;
1203
+ border-bottom: 4px dashed;
1204
+ border-bottom: 4px solid \9;
1205
+ content: "";
1206
+ }
1207
+
1208
+ .dropup .dropdown-menu,
1209
+ .navbar-fixed-bottom .dropdown .dropdown-menu {
1210
+ top: auto;
1211
+ bottom: 100%;
1212
+ margin-bottom: 2px;
1213
+ }
1214
+
1215
+ @media (min-width: 768px) {
1216
+ .navbar-right .dropdown-menu {
1217
+ right: 0;
1218
+ left: auto;
1219
+ }
1220
+
1221
+ .navbar-right .dropdown-menu-left {
1222
+ right: auto;
1223
+ left: 0;
1224
+ }
1225
+ }
1226
+
1227
+ .fz-btn-group,
1228
+ .fz-btn-group-vertical {
1229
+ display: inline-block;
1230
+ position: relative;
1231
+ vertical-align: middle;
1232
+ }
1233
+
1234
+ .fz-btn-group > .fz-btn,
1235
+ .fz-btn-group-vertical > .fz-btn {
1236
+ float: left;
1237
+ position: relative;
1238
+ }
1239
+
1240
+ .fz-btn-group > .fz-btn:hover,
1241
+ .fz-btn-group-vertical > .fz-btn:hover,
1242
+ .fz-btn-group > .fz-btn:focus,
1243
+ .fz-btn-group-vertical > .fz-btn:focus,
1244
+ .fz-btn-group > .fz-btn:active,
1245
+ .fz-btn-group-vertical > .fz-btn:active,
1246
+ .fz-btn-group > .fz-btn.active,
1247
+ .fz-btn-group-vertical > .fz-btn.active {
1248
+ z-index: 2;
1249
+ }
1250
+
1251
+ .fz-btn-group .fz-btn + .fz-btn,
1252
+ .fz-btn-group .fz-btn + .fz-btn-group,
1253
+ .fz-btn-group .fz-btn-group + .fz-btn,
1254
+ .fz-btn-group .fz-btn-group + .fz-btn-group {
1255
+ margin-left: -1px;
1256
+ }
1257
+
1258
+ .fz-btn-toolbar {
1259
+ margin-left: -5px;
1260
+ }
1261
+
1262
+ .fz-btn-toolbar .fz-btn,
1263
+ .fz-btn-toolbar .fz-btn-group,
1264
+ .fz-btn-toolbar .fz-input-group {
1265
+ float: left;
1266
+ }
1267
+
1268
+ .fz-btn-toolbar > .fz-btn,
1269
+ .fz-btn-toolbar > .fz-btn-group,
1270
+ .fz-btn-toolbar > .fz-input-group {
1271
+ margin-left: 5px;
1272
+ }
1273
+
1274
+ .fz-btn-group > .fz-btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
1275
+ border-radius: 0;
1276
+ }
1277
+
1278
+ .fz-btn-group > .fz-btn:first-child {
1279
+ margin-left: 0;
1280
+ }
1281
+
1282
+ .fz-btn-group > .fz-btn:first-child:not(:last-child):not(.dropdown-toggle) {
1283
+ border-top-right-radius: 0;
1284
+ border-bottom-right-radius: 0;
1285
+ }
1286
+
1287
+ .fz-btn-group > .fz-btn:last-child:not(:first-child),
1288
+ .fz-btn-group > .dropdown-toggle:not(:first-child) {
1289
+ border-top-left-radius: 0;
1290
+ border-bottom-left-radius: 0;
1291
+ }
1292
+
1293
+ .fz-btn-group > .fz-btn-group {
1294
+ float: left;
1295
+ }
1296
+
1297
+ .fz-btn-group > .fz-btn-group:not(:first-child):not(:last-child) > .fz-btn {
1298
+ border-radius: 0;
1299
+ }
1300
+
1301
+ .fz-btn-group > .fz-btn-group:first-child:not(:last-child) > .fz-btn:last-child,
1302
+ .fz-btn-group > .fz-btn-group:first-child:not(:last-child) > .dropdown-toggle {
1303
+ border-top-right-radius: 0;
1304
+ border-bottom-right-radius: 0;
1305
+ }
1306
+
1307
+ .fz-btn-group > .fz-btn-group:last-child:not(:first-child) > .fz-btn:first-child {
1308
+ border-top-left-radius: 0;
1309
+ border-bottom-left-radius: 0;
1310
+ }
1311
+
1312
+ .fz-btn-group .dropdown-toggle:active,
1313
+ .fz-btn-group.open .dropdown-toggle {
1314
+ outline: 0;
1315
+ }
1316
+
1317
+ .fz-btn-group > .fz-btn + .dropdown-toggle {
1318
+ padding-right: 8px;
1319
+ padding-left: 8px;
1320
+ }
1321
+
1322
+ .fz-btn-group > .fz-btn-lg + .dropdown-toggle {
1323
+ padding-right: 12px;
1324
+ padding-left: 12px;
1325
+ }
1326
+
1327
+ .fz-btn-group.open .dropdown-toggle {
1328
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
1329
+ }
1330
+
1331
+ .fz-btn-group.open .dropdown-toggle.fz-btn-link {
1332
+ box-shadow: none;
1333
+ }
1334
+
1335
+ .fz-btn .caret {
1336
+ margin-left: 0;
1337
+ }
1338
+
1339
+ .fz-btn-lg .caret {
1340
+ border-width: 5px 5px 0;
1341
+ border-bottom-width: 0;
1342
+ }
1343
+
1344
+ .dropup .fz-btn-lg .caret {
1345
+ border-width: 0 5px 5px;
1346
+ }
1347
+
1348
+ .fz-btn-group-vertical > .fz-btn,
1349
+ .fz-btn-group-vertical > .fz-btn-group,
1350
+ .fz-btn-group-vertical > .fz-btn-group > .fz-btn {
1351
+ display: block;
1352
+ float: none;
1353
+ width: 100%;
1354
+ max-width: 100%;
1355
+ }
1356
+
1357
+ .fz-btn-group-vertical > .fz-btn-group > .fz-btn {
1358
+ float: none;
1359
+ }
1360
+
1361
+ .fz-btn-group-vertical > .fz-btn + .fz-btn,
1362
+ .fz-btn-group-vertical > .fz-btn + .fz-btn-group,
1363
+ .fz-btn-group-vertical > .fz-btn-group + .fz-btn,
1364
+ .fz-btn-group-vertical > .fz-btn-group + .fz-btn-group {
1365
+ margin-top: -1px;
1366
+ margin-left: 0;
1367
+ }
1368
+
1369
+ .fz-btn-group-vertical > .fz-btn:not(:first-child):not(:last-child) {
1370
+ border-radius: 0;
1371
+ }
1372
+
1373
+ .fz-btn-group-vertical > .fz-btn:first-child:not(:last-child) {
1374
+ border-top-left-radius: 4px;
1375
+ border-top-right-radius: 4px;
1376
+ border-bottom-right-radius: 0;
1377
+ border-bottom-left-radius: 0;
1378
+ }
1379
+
1380
+ .fz-btn-group-vertical > .fz-btn:last-child:not(:first-child) {
1381
+ border-top-left-radius: 0;
1382
+ border-top-right-radius: 0;
1383
+ border-bottom-right-radius: 4px;
1384
+ border-bottom-left-radius: 4px;
1385
+ }
1386
+
1387
+ .fz-btn-group-vertical > .fz-btn-group:not(:first-child):not(:last-child) > .fz-btn {
1388
+ border-radius: 0;
1389
+ }
1390
+
1391
+ .fz-btn-group-vertical > .fz-btn-group:first-child:not(:last-child) > .fz-btn:last-child,
1392
+ .fz-btn-group-vertical > .fz-btn-group:first-child:not(:last-child) > .dropdown-toggle {
1393
+ border-bottom-right-radius: 0;
1394
+ border-bottom-left-radius: 0;
1395
+ }
1396
+
1397
+ .fz-btn-group-vertical > .fz-btn-group:last-child:not(:first-child) > .fz-btn:first-child {
1398
+ border-top-left-radius: 0;
1399
+ border-top-right-radius: 0;
1400
+ }
1401
+
1402
+ .fz-btn-group-justified {
1403
+ display: table;
1404
+ width: 100%;
1405
+ table-layout: fixed;
1406
+ border-collapse: separate;
1407
+ }
1408
+
1409
+ .fz-btn-group-justified > .fz-btn,
1410
+ .fz-btn-group-justified > .fz-btn-group {
1411
+ display: table-cell;
1412
+ float: none;
1413
+ width: 1%;
1414
+ }
1415
+
1416
+ .fz-btn-group-justified > .fz-btn-group .fz-btn {
1417
+ width: 100%;
1418
+ }
1419
+
1420
+ .fz-btn-group-justified > .fz-btn-group .dropdown-menu {
1421
+ left: auto;
1422
+ }
1423
+
1424
+ [data-toggle="buttons"] > .fz-btn input[type="radio"],
1425
+ [data-toggle="buttons"] > .fz-btn-group > .fz-btn input[type="radio"],
1426
+ [data-toggle="buttons"] > .fz-btn input[type="checkbox"],
1427
+ [data-toggle="buttons"] > .fz-btn-group > .fz-btn input[type="checkbox"] {
1428
+ clip: rect(0, 0, 0, 0);
1429
+ position: absolute;
1430
+ pointer-events: none;
1431
+ }
1432
+
1433
+ .fz-input-group {
1434
+ display: table;
1435
+ position: relative;
1436
+ border-collapse: separate;
1437
+ }
1438
+
1439
+ .fz-input-group[class*="col-"] {
1440
+ float: none;
1441
+ padding-right: 0;
1442
+ padding-left: 0;
1443
+ }
1444
+
1445
+ .fz-input-group .fz-form-control {
1446
+ float: left;
1447
+ position: relative;
1448
+ z-index: 2;
1449
+ width: 100%;
1450
+ margin-bottom: 0;
1451
+ }
1452
+
1453
+ .fz-input-group .fz-form-control:focus {
1454
+ z-index: 3;
1455
+ }
1456
+
1457
+ .fz-input-group-lg > .fz-form-control,
1458
+ .fz-input-group-lg > .fz-input-group-addon,
1459
+ .fz-input-group-lg > .fz-input-group-btn > .fz-btn {
1460
+ height: 46px;
1461
+ padding: 10px 16px;
1462
+ border-radius: 6px;
1463
+ font-size: 18px;
1464
+ line-height: 1.3333333;
1465
+ }
1466
+
1467
+ select.fz-input-group-lg > .fz-form-control,
1468
+ select.fz-input-group-lg > .fz-input-group-addon,
1469
+ select.fz-input-group-lg > .fz-input-group-btn > .fz-btn {
1470
+ height: 46px;
1471
+ line-height: 46px;
1472
+ }
1473
+
1474
+ textarea.fz-input-group-lg > .fz-form-control,
1475
+ textarea.fz-input-group-lg > .fz-input-group-addon,
1476
+ textarea.fz-input-group-lg > .fz-input-group-btn > .fz-btn,
1477
+ select[multiple].fz-input-group-lg > .fz-form-control,
1478
+ select[multiple].fz-input-group-lg > .fz-input-group-addon,
1479
+ select[multiple].fz-input-group-lg > .fz-input-group-btn > .fz-btn {
1480
+ height: auto;
1481
+ }
1482
+
1483
+ .fz-input-group-sm > .fz-form-control,
1484
+ .fz-input-group-sm > .fz-input-group-addon,
1485
+ .fz-input-group-sm > .fz-input-group-btn > .fz-btn {
1486
+ height: 30px;
1487
+ padding: 5px 10px;
1488
+ border-radius: 3px;
1489
+ font-size: 12px;
1490
+ line-height: 1.5;
1491
+ }
1492
+
1493
+ select.fz-input-group-sm > .fz-form-control,
1494
+ select.fz-input-group-sm > .fz-input-group-addon,
1495
+ select.fz-input-group-sm > .fz-input-group-btn > .fz-btn {
1496
+ height: 30px;
1497
+ line-height: 30px;
1498
+ }
1499
+
1500
+ textarea.fz-input-group-sm > .fz-form-control,
1501
+ textarea.fz-input-group-sm > .fz-input-group-addon,
1502
+ textarea.fz-input-group-sm > .fz-input-group-btn > .fz-btn,
1503
+ select[multiple].fz-input-group-sm > .fz-form-control,
1504
+ select[multiple].fz-input-group-sm > .fz-input-group-addon,
1505
+ select[multiple].fz-input-group-sm > .fz-input-group-btn > .fz-btn {
1506
+ height: auto;
1507
+ }
1508
+
1509
+ .fz-input-group-addon,
1510
+ .fz-input-group-btn,
1511
+ .fz-input-group .fz-form-control {
1512
+ display: table-cell;
1513
+ }
1514
+
1515
+ .fz-input-group-addon:not(:first-child):not(:last-child),
1516
+ .fz-input-group-btn:not(:first-child):not(:last-child),
1517
+ .fz-input-group .fz-form-control:not(:first-child):not(:last-child) {
1518
+ border-radius: 0;
1519
+ }
1520
+
1521
+ .fz-input-group-addon,
1522
+ .fz-input-group-btn {
1523
+ width: 1%;
1524
+ vertical-align: top;
1525
+ white-space: nowrap;
1526
+ }
1527
+
1528
+ .fz-input-group-addon {
1529
+ padding: 6px 12px;
1530
+ border: 1px solid #ccc;
1531
+ border-radius: 4px;
1532
+ color: #555;
1533
+ background-color: #eee;
1534
+ font-size: 14px;
1535
+ font-weight: normal;
1536
+ line-height: 1;
1537
+ text-align: center;
1538
+ }
1539
+
1540
+ .fz-input-group-addon.input-sm {
1541
+ padding: 5px 10px;
1542
+ border-radius: 3px;
1543
+ font-size: 12px;
1544
+ }
1545
+
1546
+ .fz-input-group-addon.input-lg {
1547
+ padding: 10px 16px;
1548
+ border-radius: 6px;
1549
+ font-size: 18px;
1550
+ }
1551
+
1552
+ .fz-input-group-addon input[type="radio"],
1553
+ .fz-input-group-addon input[type="checkbox"] {
1554
+ margin-top: 0;
1555
+ }
1556
+
1557
+ .fz-input-group .fz-form-control:first-child,
1558
+ .fz-input-group-addon:first-child,
1559
+ .fz-input-group-btn:first-child > .fz-btn,
1560
+ .fz-input-group-btn:first-child > .fz-btn-group > .fz-btn,
1561
+ .fz-input-group-btn:first-child > .dropdown-toggle,
1562
+ .fz-input-group-btn:last-child > .fz-btn:not(:last-child):not(.dropdown-toggle),
1563
+ .fz-input-group-btn:last-child > .fz-btn-group:not(:last-child) > .fz-btn {
1564
+ border-top-right-radius: 0;
1565
+ border-bottom-right-radius: 0;
1566
+ }
1567
+
1568
+ .fz-input-group-addon:first-child {
1569
+ border-right: 0;
1570
+ }
1571
+
1572
+ .fz-input-group .fz-form-control:last-child,
1573
+ .fz-input-group-addon:last-child,
1574
+ .fz-input-group-btn:last-child > .fz-btn,
1575
+ .fz-input-group-btn:last-child > .fz-btn-group > .fz-btn,
1576
+ .fz-input-group-btn:last-child > .dropdown-toggle,
1577
+ .fz-input-group-btn:first-child > .fz-btn:not(:first-child),
1578
+ .fz-input-group-btn:first-child > .fz-btn-group:not(:first-child) > .fz-btn {
1579
+ border-top-left-radius: 0;
1580
+ border-bottom-left-radius: 0;
1581
+ }
1582
+
1583
+ .fz-input-group-addon:last-child {
1584
+ border-left: 0;
1585
+ }
1586
+
1587
+ .fz-input-group-btn {
1588
+ position: relative;
1589
+ font-size: 0;
1590
+ white-space: nowrap;
1591
+ }
1592
+
1593
+ .fz-input-group-btn > .fz-btn {
1594
+ position: relative;
1595
+ }
1596
+
1597
+ .fz-input-group-btn > .fz-btn + .fz-btn {
1598
+ margin-left: -1px;
1599
+ }
1600
+
1601
+ .fz-input-group-btn > .fz-btn:hover,
1602
+ .fz-input-group-btn > .fz-btn:focus,
1603
+ .fz-input-group-btn > .fz-btn:active {
1604
+ z-index: 2;
1605
+ }
1606
+
1607
+ .fz-input-group-btn:first-child > .fz-btn,
1608
+ .fz-input-group-btn:first-child > .fz-btn-group {
1609
+ margin-right: -1px;
1610
+ }
1611
+
1612
+ .fz-input-group-btn:last-child > .fz-btn,
1613
+ .fz-input-group-btn:last-child > .fz-btn-group {
1614
+ z-index: 2;
1615
+ margin-left: -1px;
1616
+ }
1617
+
1618
+ .col-left,
1619
+ .col-right {
1620
+ display: inline-block;
1621
+ float: left;
1622
+ position: relative;
1623
+ width: -webkit-calc( 50% - 34px );
1624
+ width: calc( 50% - 34px );
1625
+ min-height: 36px;
1626
+ }
1627
+
1628
+ .col-left::after {
1629
+ position: absolute;
1630
+ top: calc( 50% - 18px );
1631
+ top: -webkit-calc( 50% - 18px );
1632
+ left: -webkit-calc( 100% + 5px );
1633
+ left: calc( 100% + 5px );
1634
+ left: -webkit-calc( 100% + 8px );
1635
+ width: 36px;
1636
+ height: 36px;
1637
+ color: #ccc;
1638
+ font-family: "dashicons";
1639
+ font-size: 36px;
1640
+ line-height: 36px;
1641
+ content: "\f503";
1642
+ }
1643
+
1644
+ .col-left.fields::after {
1645
+ content: "\f229";
1646
+ }
1647
+
1648
+ .col-left {
1649
+ padding: 8px 8px 8px 0;
1650
+ border-right: 1px solid #ccc;
1651
+ }
1652
+
1653
+ .col-right {
1654
+ margin-left: 50px;
1655
+ padding: 8px 0 8px 8px;
1656
+ border-left: 1px solid #ccc;
1657
+ }
1658
+
1659
+ .label_description,
1660
+ .form_item {
1661
+ margin-top: 8px;
1662
+ margin-bottom: 8px;
1663
+ }
1664
+
1665
+ .label_description {
1666
+ border-bottom: 1px solid #efefef;
1667
+ }
1668
+
1669
+ .form_item {
1670
+ padding-top: 12px;
1671
+ }
1672
+
1673
+ a.dropdown-item {
1674
+ display: block;
1675
+ padding: 5px 8px;
1676
+ color: #f35b3f;
1677
+ text-align: center;
1678
+ text-decoration: none;
1679
+ }
1680
+
1681
+ a:hover.dropdown-item,
1682
+ a:focus.dropdown-item {
1683
+ color: #f89c8b;
1684
+ background-color: #f8f8f8;
1685
+ }
1686
+
1687
+ .fz-btn.fz-btn-add-fields {
1688
+ background-color: #099bb2;
1689
+ }
1690
+
1691
+ .fz-btn.fz-btn-add-fields:hover {
1692
+ background-color: #14b2cc;
1693
+ }
1694
+
1695
+ .fz-btn.fz-btn-remove-fields {
1696
+ color: #f35b3f;
1697
+ }
1698
+
1699
+ .fz-btn.fz-btn-remove-fields:hover {
1700
+ color: #f89c8b;
1701
+ }
1702
+
1703
+ .fz-btn > span.dashicons {
1704
+ vertical-align: middle;
1705
+ }
1706
+
1707
+ .f1 {
1708
+ padding: 25px;
1709
+ border-radius: 4px;
1710
+ background: #fff;
1711
+ }
1712
+
1713
+ .f1 h3 {
1714
+ margin-top: 0;
1715
+ margin-bottom: 5px;
1716
+ text-transform: uppercase;
1717
+ }
1718
+
1719
+ .f1-steps {
1720
+ overflow: hidden;
1721
+ position: relative;
1722
+ margin-top: 20px;
1723
+ }
1724
+
1725
+ .f1-progress {
1726
+ position: absolute;
1727
+ top: 24px;
1728
+ left: 0;
1729
+ width: 100%;
1730
+ height: 1px;
1731
+ background: #ddd;
1732
+ }
1733
+
1734
+ .f1-progress-line {
1735
+ position: absolute;
1736
+ top: 0;
1737
+ left: 0;
1738
+ height: 1px;
1739
+ background: #f35b3f;
1740
+ }
1741
+
1742
+ .f1-step {
1743
+ display: inline-block;
1744
+ position: relative;
1745
+ width: calc(100%/3 - 10px);
1746
+ width: -webkit-calc(100%/3 - 10px);
1747
+ text-align: center;
1748
+ }
1749
+
1750
+ .f1-step-icon {
1751
+ display: inline-block;
1752
+ width: 40px;
1753
+ height: 40px;
1754
+ margin-top: 4px;
1755
+ border-radius: 50%;
1756
+ color: #fff;
1757
+ background: #ddd;
1758
+ font-size: 16px;
1759
+ line-height: 40px;
1760
+ }
1761
+
1762
+ .f1-step-icon span {
1763
+ display: inline-block;
1764
+ width: 18px;
1765
+ height: 18px;
1766
+ padding: 11px;
1767
+ font-size: 18px;
1768
+ }
1769
+
1770
+ .f1-step.activated .f1-step-icon span {
1771
+ width: 20px;
1772
+ height: 20px;
1773
+ margin-top: -2px;
1774
+ margin-left: -1px;
1775
+ padding: 12px;
1776
+ font-size: 20px;
1777
+ }
1778
+
1779
+ .f1-step.active .f1-step-icon span {
1780
+ width: 24px;
1781
+ height: 24px;
1782
+ padding: 12px;
1783
+ font-size: 24px;
1784
+ }
1785
+
1786
+ .f1-step.activated .f1-step-icon {
1787
+ border: 1px solid #f35b3f;
1788
+ color: #f35b3f;
1789
+ background: #fff;
1790
+ line-height: 48px;
1791
+ }
1792
+
1793
+ .f1-step.active .f1-step-icon {
1794
+ width: 48px;
1795
+ height: 48px;
1796
+ margin-top: 0;
1797
+ background: #f35b3f;
1798
+ font-size: 22px;
1799
+ line-height: 48px;
1800
+ }
1801
+
1802
+ .f1-step p {
1803
+ color: #ccc;
1804
+ }
1805
+
1806
+ .f1-step.activated p {
1807
+ color: #f35b3f;
1808
+ }
1809
+
1810
+ .f1-step.active p {
1811
+ color: #f35b3f;
1812
+ }
1813
+
1814
+ .f1 fieldset {
1815
+ display: none;
1816
+ text-align: left;
1817
+ }
1818
+
1819
+ .f1-buttons {
1820
+ text-align: right;
1821
+ }
1822
+
1823
+ .f1 .input-error {
1824
+ border-color: #f35b3f;
1825
+ }
1826
+
1827
+ input[type="password"].fz-form-control,
1828
+ textarea.fz-form-control {
1829
+ width: 100%;
1830
+ height: 44px;
1831
+ margin: 0;
1832
+ padding: 0 20px;
1833
+ border: 1px solid #ddd;
1834
+ border-radius: 4px;
1835
+ color: #888;
1836
+ background: #fff;
1837
+ box-shadow: none;
1838
+ font-family: "Roboto", sans-serif;
1839
+ font-size: 16px;
1840
+ font-weight: 300;
1841
+ line-height: 44px;
1842
+ vertical-align: middle;
1843
+ -webkit-transition: all 0.3s;
1844
+ transition: all 0.3s;
1845
+ }
1846
+
1847
+ textarea.fz-form-control {
1848
+ height: 90px;
1849
+ padding-top: 8px;
1850
+ padding-bottom: 8px;
1851
+ line-height: 30px;
1852
+ }
1853
+
1854
+ textarea.fz-form-control:focus {
1855
+ border: 1px solid #ccc;
1856
+ outline: 0;
1857
+ background: #fff;
1858
+ box-shadow: none;
1859
+ }
1860
+
1861
+ textarea.fz-form-control:-moz-placeholder {
1862
+ color: #888;
1863
+ }
1864
+
1865
+ textarea.fz-form-control:-ms-input-placeholder {
1866
+ color: #888;
1867
+ }
1868
+
1869
+ textarea.fz-form-control::-webkit-input-placeholder {
1870
+ color: #888;
1871
+ }
1872
+
1873
+
1874
+ button.fz-btn {
1875
+ min-width: 105px;
1876
+ height: 44px;
1877
+ margin: 0;
1878
+ padding: 0 20px;
1879
+ border: 0;
1880
+ border-radius: 4px;
1881
+ color: #fff;
1882
+ box-shadow: none;
1883
+ text-shadow: none;
1884
+ font-family: "Roboto", sans-serif;
1885
+ font-size: 16px;
1886
+ font-weight: 300;
1887
+ line-height: 40px;
1888
+ vertical-align: middle;
1889
+ -webkit-transition: all 0.3s;
1890
+ transition: all 0.3s;
1891
+ }
1892
+
1893
+ button.fz-btn:hover {
1894
+ opacity: 0.6;
1895
+ color: #fff;
1896
+ }
1897
+
1898
+ button.fz-btn:active {
1899
+ outline: 0;
1900
+ opacity: 0.6;
1901
+ color: #fff;
1902
+ box-shadow: none;
1903
+ }
1904
+
1905
+ button.fz-btn:focus,
1906
+ button.fz-btn:active:focus,
1907
+ button.fz-btn.active:focus {
1908
+ outline: 0;
1909
+ opacity: 0.6;
1910
+ color: #fff;
1911
+ }
1912
+
1913
+ button.fz-btn.fz-btn-next,
1914
+ button.fz-btn.fz-btn-next:focus,
1915
+ button.fz-btn.fz-btn-next:active:focus,
1916
+ button.fz-btn.fz-btn-next.active:focus {
1917
+ background: #f35b3f;
1918
+ }
1919
+
1920
+ button.fz-btn.fz-btn-submit,
1921
+ button.fz-btn.fz-btn-submit:focus,
1922
+ button.fz-btn.fz-btn-submit:active:focus,
1923
+ button.fz-btn.fz-btn-submit.active:focus {
1924
+ background: #f35b3f;
1925
+ }
1926
+
1927
+ button.fz-btn.fz-btn-previous,
1928
+ button.fz-btn.fz-btn-previous:focus,
1929
+ button.fz-btn.fz-btn-previous:active:focus,
1930
+ button.fz-btn.fz-btn-previous.active:focus {
1931
+ background: #bbb;
1932
+ }
1933
+
1934
+ button.fz-btn.fz-btn-submit.fz-btn-activate,
1935
+ button.fz-btn.fz-btn-submit.fz-btn-activate:focus,
1936
+ button.fz-btn.fz-btn-submit.fz-btn-activate:active:focus,
1937
+ button.fz-btn.fz-btn-submit.fz-btn-activate.active:focus {
1938
+ background: #8ce196;
1939
+ }
1940
+
1941
+ /*
1942
+ Toggle switches
1943
+ */
1944
+ .feedzy-toggle {
1945
+ visibility: hidden;
1946
+ position: absolute;
1947
+ margin-left: -9999px;
1948
+ }
1949
+
1950
+ .feedzy-toggle + label {
1951
+ display: block;
1952
+ position: relative;
1953
+ outline: none;
1954
+ cursor: pointer;
1955
+ -webkit-user-select: none;
1956
+ -moz-user-select: none;
1957
+ -ms-user-select: none;
1958
+ user-select: none;
1959
+ }
1960
+
1961
+ input.feedzy-toggle-round + label {
1962
+ padding: 2px;
1963
+ background-color: #ddd;
1964
+ }
1965
+
1966
+ input.feedzy-toggle-round + label:before,
1967
+ input.feedzy-toggle-round + label:after {
1968
+ display: block;
1969
+ position: absolute;
1970
+ top: 1px;
1971
+ bottom: 1px;
1972
+ left: 1px;
1973
+ content: "";
1974
+ }
1975
+
1976
+ input.feedzy-toggle-round + label:before {
1977
+ right: 1px;
1978
+ border-radius: 15px;
1979
+ background-color: #f1f1f1;
1980
+ -webkit-transition: background 0.4s;
1981
+ transition: background 0.4s;
1982
+ }
1983
+
1984
+ input.feedzy-toggle-round + label:after {
1985
+ width: 28px;
1986
+ border-radius: 100%;
1987
+ background-color: #fff;
1988
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
1989
+ -webkit-transition: margin 0.4s;
1990
+ transition: margin 0.4s;
1991
+ }
1992
+
1993
+ input.feedzy-toggle-round:checked + label:before {
1994
+ background-color: #8ce196;
1995
+ }
1996
+
1997
+ input.feedzy-toggle-round:checked + label:after {
1998
+ margin-left: 34px;
1999
+ }
2000
+
2001
+ /*
2002
+ !!! CAUTION -- Hides Core WordPress Post Elements
2003
+ */
2004
+
2005
+ .post-type-feedzy_imports #poststuff #post-body.columns-2 {
2006
+ margin-right: 0;
2007
+ }
2008
+
2009
+ .post-type-feedzy_imports div#side-sortables {
2010
+ display: none;
2011
+ }
2012
+
2013
+ .post-type-feedzy_imports #titlediv .inside {
2014
+ display: none;
2015
+ }
2016
+
2017
+ .post-type-feedzy_imports div#advanced-sortables {
2018
+ display: none;
2019
+ }
2020
+
2021
+ .fz-feature-features button.fz-btn.fz-btn-submit.fz-btn-activate,
2022
+ .fz-feature-features button.fz-btn.fz-btn-submit.fz-btn-activate:focus,
2023
+ .fz-feature-features button.fz-btn.fz-btn-submit.fz-btn-activate:active:focus,
2024
+ .fz-feature-features button.fz-btn.fz-btn-submit.fz-btn-activate.active:focus {
2025
+ background-color: #62c370;
2026
+ }
css/security.png DELETED
Binary file
customizer.php DELETED
@@ -1,718 +0,0 @@
1
- <?php
2
-
3
-
4
- function logincust_customize_register( $wp_customize ) {
5
- $wp_customize->add_panel(
6
- 'logincust_panel', array(
7
- 'priority' => 30,
8
- 'capability' => 'edit_theme_options',
9
- 'title' => __( 'Login Customizer', 'login-customizer' ),
10
- 'description' => __( 'This section allows you to customize the login page of your website.<br/>Login Customizer by <a target="_blank" rel="nofollow" href="https://themeisle.com">ThemeIsle</a>', 'login-customizer' ),
11
- )
12
- );
13
-
14
- $wp_customize->add_section(
15
- 'logincust_logo_section', array(
16
- 'priority' => 5,
17
- 'title' => __( 'Logo', 'login-customizer' ),
18
- 'panel' => 'logincust_panel',
19
- )
20
- );
21
-
22
- $wp_customize->add_section(
23
- 'logincust_background_section', array(
24
- 'priority' => 10,
25
- 'title' => __( 'Background', 'login-customizer' ),
26
- 'panel' => 'logincust_panel',
27
- )
28
- );
29
-
30
- $wp_customize->add_section(
31
- 'logincust_form_bg_section', array(
32
- 'priority' => 15,
33
- 'title' => __( 'Form Background', 'login-customizer' ),
34
- 'panel' => 'logincust_panel',
35
- )
36
- );
37
-
38
- $wp_customize->add_section(
39
- 'logincust_form_section', array(
40
- 'priority' => 20,
41
- 'title' => __( 'Form Styling', 'login-customizer' ),
42
- 'panel' => 'logincust_panel',
43
- )
44
- );
45
-
46
- $wp_customize->add_section(
47
- 'logincust_field_section', array(
48
- 'priority' => 25,
49
- 'title' => __( 'Fields Styling', 'login-customizer' ),
50
- 'panel' => 'logincust_panel',
51
- )
52
- );
53
-
54
- $wp_customize->add_section(
55
- 'logincust_button_section', array(
56
- 'priority' => 30,
57
- 'title' => __( 'Button Styling', 'login-customizer' ),
58
- 'panel' => 'logincust_panel',
59
- )
60
- );
61
-
62
- $wp_customize->add_section(
63
- 'logincust_other_section', array(
64
- 'priority' => 35,
65
- 'title' => __( 'Other', 'login-customizer' ),
66
- 'panel' => 'logincust_panel',
67
- )
68
- );
69
-
70
- $wp_customize->add_section(
71
- 'logincust_security_section', array(
72
- 'priority' => 40,
73
- 'title' => __( 'Security', 'login-customizer' ),
74
- 'panel' => 'logincust_panel',
75
- )
76
- );
77
-
78
- $wp_customize->add_setting(
79
- 'logincust_logo', array(
80
- 'type' => 'option',
81
- 'capability' => 'edit_theme_options',
82
- )
83
- );
84
-
85
- $wp_customize->add_control(
86
- new WP_Customize_Image_Control(
87
- $wp_customize, 'logincust_logo', array(
88
- 'label' => __( 'Login Logo', 'login-customizer' ),
89
- 'section' => 'logincust_logo_section',
90
- 'priority' => 5,
91
- 'settings' => 'logincust_logo',
92
- )
93
- )
94
- );
95
-
96
- $wp_customize->add_setting(
97
- 'logincust_logo_width', array(
98
- 'default' => '84px',
99
- 'type' => 'option',
100
- 'capability' => 'edit_theme_options',
101
- )
102
- );
103
-
104
- $wp_customize->add_control(
105
- 'logincust_logo_width', array(
106
- 'label' => __( 'Logo Width', 'login-customizer' ),
107
- 'section' => 'logincust_logo_section',
108
- 'priority' => 10,
109
- 'settings' => 'logincust_logo_width',
110
- )
111
- );
112
-
113
- $wp_customize->add_setting(
114
- 'logincust_logo_height', array(
115
- 'default' => '84px',
116
- 'type' => 'option',
117
- 'capability' => 'edit_theme_options',
118
- )
119
- );
120
-
121
- $wp_customize->add_control(
122
- 'logincust_logo_height', array(
123
- 'label' => __( 'Logo Height', 'login-customizer' ),
124
- 'section' => 'logincust_logo_section',
125
- 'priority' => 15,
126
- 'settings' => 'logincust_logo_height',
127
- )
128
- );
129
-
130
- $wp_customize->add_setting(
131
- 'logincust_logo_padding', array(
132
- 'default' => '5px',
133
- 'type' => 'option',
134
- 'capability' => 'edit_theme_options',
135
- )
136
- );
137
-
138
- $wp_customize->add_control(
139
- 'logincust_logo_padding', array(
140
- 'label' => __( 'Padding Bottom', 'login-customizer' ),
141
- 'section' => 'logincust_logo_section',
142
- 'priority' => 20,
143
- 'settings' => 'logincust_logo_padding',
144
- )
145
- );
146
-
147
- $wp_customize->add_setting(
148
- 'logincust_bg_image', array(
149
- 'type' => 'option',
150
- 'capability' => 'edit_theme_options',
151
- )
152
- );
153
-
154
- $wp_customize->add_control(
155
- new WP_Customize_Image_Control(
156
- $wp_customize, 'logincust_bg_image', array(
157
- 'label' => __( 'Background Image', 'login-customizer' ),
158
- 'section' => 'logincust_background_section',
159
- 'priority' => 5,
160
- 'settings' => 'logincust_bg_image',
161
- )
162
- )
163
- );
164
-
165
- $wp_customize->add_setting(
166
- 'logincust_bg_color', array(
167
- 'default' => '#F1F1F1',
168
- 'type' => 'option',
169
- 'capability' => 'edit_theme_options',
170
- )
171
- );
172
-
173
- $wp_customize->add_control(
174
- new WP_Customize_Color_Control(
175
- $wp_customize, 'logincust_bg_color', array(
176
- 'label' => __( 'Background Color', 'login-customizer' ),
177
- 'section' => 'logincust_background_section',
178
- 'priority' => 10,
179
- 'settings' => 'logincust_bg_color',
180
- )
181
- )
182
- );
183
-
184
- $wp_customize->add_setting(
185
- 'logincust_bg_size', array(
186
- 'type' => 'option',
187
- 'capability' => 'edit_theme_options',
188
- )
189
- );
190
-
191
- $wp_customize->add_control(
192
- 'logincust_bg_size', array(
193
- 'label' => __( 'Background Size', 'login-customizer' ),
194
- 'section' => 'logincust_background_section',
195
- 'priority' => 15,
196
- 'settings' => 'logincust_bg_size',
197
- )
198
- );
199
-
200
- $wp_customize->add_setting(
201
- 'logincust_form_bg_image', array(
202
- 'type' => 'option',
203
- 'capability' => 'edit_theme_options',
204
- )
205
- );
206
-
207
- $wp_customize->add_control(
208
- new WP_Customize_Image_Control(
209
- $wp_customize, 'logincust_form_bg_image', array(
210
- 'label' => __( 'Background Image', 'login-customizer' ),
211
- 'section' => 'logincust_form_bg_section',
212
- 'priority' => 5,
213
- 'settings' => 'logincust_form_bg_image',
214
- )
215
- )
216
- );
217
-
218
- $wp_customize->add_setting(
219
- 'logincust_form_bg_color', array(
220
- 'default' => '#FFF',
221
- 'type' => 'option',
222
- 'capability' => 'edit_theme_options',
223
- )
224
- );
225
-
226
- $wp_customize->add_control(
227
- new WP_Customize_Color_Control(
228
- $wp_customize, 'logincust_form_bg_color', array(
229
- 'label' => __( 'Background Color', 'login-customizer' ),
230
- 'section' => 'logincust_form_bg_section',
231
- 'priority' => 10,
232
- 'settings' => 'logincust_form_bg_color',
233
- )
234
- )
235
- );
236
-
237
- $wp_customize->add_setting(
238
- 'logincust_form_width', array(
239
- 'default' => '320px',
240
- 'type' => 'option',
241
- 'capability' => 'edit_theme_options',
242
- )
243
- );
244
-
245
- $wp_customize->add_control(
246
- 'logincust_form_width', array(
247
- 'label' => __( 'Width', 'login-customizer' ),
248
- 'section' => 'logincust_form_section',
249
- 'priority' => 15,
250
- 'settings' => 'logincust_form_width',
251
- )
252
- );
253
-
254
- $wp_customize->add_setting(
255
- 'logincust_form_height', array(
256
- 'default' => '194px',
257
- 'type' => 'option',
258
- 'capability' => 'edit_theme_options',
259
- )
260
- );
261
-
262
- $wp_customize->add_control(
263
- 'logincust_form_height', array(
264
- 'label' => __( 'Height', 'login-customizer' ),
265
- 'section' => 'logincust_form_section',
266
- 'priority' => 20,
267
- 'settings' => 'logincust_form_height',
268
- )
269
- );
270
-
271
- $wp_customize->add_setting(
272
- 'logincust_form_padding', array(
273
- 'default' => '26px 24px 46px',
274
- 'type' => 'option',
275
- 'capability' => 'edit_theme_options',
276
- )
277
- );
278
-
279
- $wp_customize->add_control(
280
- 'logincust_form_padding', array(
281
- 'label' => __( 'Padding', 'login-customizer' ),
282
- 'section' => 'logincust_form_section',
283
- 'priority' => 25,
284
- 'settings' => 'logincust_form_padding',
285
- )
286
- );
287
-
288
- $wp_customize->add_setting(
289
- 'logincust_form_border', array(
290
- 'type' => 'option',
291
- 'capability' => 'edit_theme_options',
292
- )
293
- );
294
-
295
- $wp_customize->add_control(
296
- 'logincust_form_border', array(
297
- 'label' => __( 'Border (Example: 2px dotted black) ', 'login-customizer' ),
298
- 'section' => 'logincust_form_section',
299
- 'priority' => 30,
300
- 'settings' => 'logincust_form_border',
301
- )
302
- );
303
-
304
- $wp_customize->add_setting(
305
- 'logincust_field_width', array(
306
- 'default' => '100%',
307
- 'type' => 'option',
308
- 'capability' => 'edit_theme_options',
309
- )
310
- );
311
-
312
- $wp_customize->add_control(
313
- 'logincust_field_width', array(
314
- 'label' => __( 'Input Field Width', 'login-customizer' ),
315
- 'section' => 'logincust_field_section',
316
- 'priority' => 5,
317
- 'settings' => 'logincust_field_width',
318
- )
319
- );
320
-
321
- $wp_customize->add_setting(
322
- 'logincust_field_margin', array(
323
- 'default' => '2px 6px 16px 0px',
324
- 'type' => 'option',
325
- 'capability' => 'edit_theme_options',
326
- )
327
- );
328
-
329
- $wp_customize->add_control(
330
- 'logincust_field_margin', array(
331
- 'label' => __( 'Input Field Margin', 'login-customizer' ),
332
- 'section' => 'logincust_field_section',
333
- 'priority' => 10,
334
- 'settings' => 'logincust_field_margin',
335
- )
336
- );
337
-
338
- $wp_customize->add_setting(
339
- 'logincust_field_bg', array(
340
- 'default' => '#FFF',
341
- 'type' => 'option',
342
- 'capability' => 'edit_theme_options',
343
- )
344
- );
345
-
346
- $wp_customize->add_control(
347
- new WP_Customize_Color_Control(
348
- $wp_customize, 'logincust_field_bg', array(
349
- 'label' => __( 'Input Field Background', 'login-customizer' ),
350
- 'section' => 'logincust_field_section',
351
- 'priority' => 15,
352
- 'settings' => 'logincust_field_bg',
353
- )
354
- )
355
- );
356
-
357
- $wp_customize->add_setting(
358
- 'logincust_field_color', array(
359
- 'default' => '#333',
360
- 'type' => 'option',
361
- 'capability' => 'edit_theme_options',
362
- )
363
- );
364
-
365
- $wp_customize->add_control(
366
- new WP_Customize_Color_Control(
367
- $wp_customize, 'logincust_field_color', array(
368
- 'label' => __( 'Input Field Color', 'login-customizer' ),
369
- 'section' => 'logincust_field_section',
370
- 'priority' => 20,
371
- 'settings' => 'logincust_field_color',
372
- )
373
- )
374
- );
375
-
376
- $wp_customize->add_setting(
377
- 'logincust_field_label', array(
378
- 'default' => '#777',
379
- 'type' => 'option',
380
- 'capability' => 'edit_theme_options',
381
- )
382
- );
383
-
384
- $wp_customize->add_control(
385
- new WP_Customize_Color_Control(
386
- $wp_customize, 'logincust_field_label', array(
387
- 'label' => __( 'Label Color', 'login-customizer' ),
388
- 'section' => 'logincust_field_section',
389
- 'priority' => 25,
390
- 'settings' => 'logincust_field_label',
391
- )
392
- )
393
- );
394
-
395
- $wp_customize->add_setting(
396
- 'logincust_button_bg', array(
397
- 'default' => '#2EA2CC',
398
- 'type' => 'option',
399
- 'capability' => 'edit_theme_options',
400
- )
401
- );
402
-
403
- $wp_customize->add_control(
404
- new WP_Customize_Color_Control(
405
- $wp_customize, 'logincust_button_bg', array(
406
- 'label' => __( 'Button Background', 'login-customizer' ),
407
- 'section' => 'logincust_button_section',
408
- 'priority' => 5,
409
- 'settings' => 'logincust_button_bg',
410
- )
411
- )
412
- );
413
-
414
- $wp_customize->add_setting(
415
- 'logincust_button_border', array(
416
- 'default' => '#0074A2',
417
- 'type' => 'option',
418
- 'capability' => 'edit_theme_options',
419
- )
420
- );
421
-
422
- $wp_customize->add_control(
423
- new WP_Customize_Color_Control(
424
- $wp_customize, 'logincust_button_border', array(
425
- 'label' => __( 'Button Border', 'login-customizer' ),
426
- 'section' => 'logincust_button_section',
427
- 'priority' => 10,
428
- 'settings' => 'logincust_button_border',
429
- )
430
- )
431
- );
432
-
433
- $wp_customize->add_setting(
434
- 'logincust_button_hover_bg', array(
435
- 'default' => '#1E8CBE',
436
- 'type' => 'option',
437
- 'capability' => 'edit_theme_options',
438
- )
439
- );
440
-
441
- $wp_customize->add_control(
442
- new WP_Customize_Color_Control(
443
- $wp_customize, 'logincust_button_hover_bg', array(
444
- 'label' => __( 'Button Background (Hover)', 'login-customizer' ),
445
- 'section' => 'logincust_button_section',
446
- 'priority' => 15,
447
- 'settings' => 'logincust_button_hover_bg',
448
- )
449
- )
450
- );
451
-
452
- $wp_customize->add_setting(
453
- 'logincust_button_hover_border', array(
454
- 'default' => '#0074A2',
455
- 'type' => 'option',
456
- 'capability' => 'edit_theme_options',
457
- )
458
- );
459
-
460
- $wp_customize->add_control(
461
- new WP_Customize_Color_Control(
462
- $wp_customize, 'logincust_button_hover_border', array(
463
- 'label' => __( 'Button Border (Hover)', 'login-customizer' ),
464
- 'section' => 'logincust_button_section',
465
- 'priority' => 20,
466
- 'settings' => 'logincust_button_hover_border',
467
- )
468
- )
469
- );
470
-
471
- $wp_customize->add_setting(
472
- 'logincust_button_shadow', array(
473
- 'default' => '#78C8E6',
474
- 'type' => 'option',
475
- 'capability' => 'edit_theme_options',
476
- )
477
- );
478
-
479
- $wp_customize->add_control(
480
- new WP_Customize_Color_Control(
481
- $wp_customize, 'logincust_button_shadow', array(
482
- 'label' => __( 'Button Box Shadow', 'login-customizer' ),
483
- 'section' => 'logincust_button_section',
484
- 'priority' => 25,
485
- 'settings' => 'logincust_button_shadow',
486
- )
487
- )
488
- );
489
-
490
- $wp_customize->add_setting(
491
- 'logincust_button_color', array(
492
- 'default' => '#FFF',
493
- 'type' => 'option',
494
- 'capability' => 'edit_theme_options',
495
- )
496
- );
497
-
498
- $wp_customize->add_control(
499
- new WP_Customize_Color_Control(
500
- $wp_customize, 'logincust_button_color', array(
501
- 'label' => __( 'Button Color', 'login-customizer' ),
502
- 'section' => 'logincust_button_section',
503
- 'priority' => 30,
504
- 'settings' => 'logincust_button_color',
505
- )
506
- )
507
- );
508
-
509
- $wp_customize->add_setting(
510
- 'logincust_other_color', array(
511
- 'default' => '#999',
512
- 'type' => 'option',
513
- 'capability' => 'edit_theme_options',
514
- )
515
- );
516
-
517
- $wp_customize->add_control(
518
- new WP_Customize_Color_Control(
519
- $wp_customize, 'logincust_other_color', array(
520
- 'label' => __( 'Text Color', 'login-customizer' ),
521
- 'section' => 'logincust_other_section',
522
- 'priority' => 5,
523
- 'settings' => 'logincust_other_color',
524
- )
525
- )
526
- );
527
-
528
- $wp_customize->add_setting(
529
- 'logincust_other_color_hover', array(
530
- 'default' => '#2EA2CC',
531
- 'type' => 'option',
532
- 'capability' => 'edit_theme_options',
533
- )
534
- );
535
-
536
- $wp_customize->add_control(
537
- new WP_Customize_Color_Control(
538
- $wp_customize, 'logincust_other_color_hover', array(
539
- 'label' => __( 'Text Color (Hover)', 'login-customizer' ),
540
- 'section' => 'logincust_other_section',
541
- 'priority' => 10,
542
- 'settings' => 'logincust_other_color_hover',
543
- )
544
- )
545
- );
546
-
547
- $wp_customize->add_setting(
548
- 'logincust_other_css', array(
549
- 'type' => 'option',
550
- 'capability' => 'edit_theme_options',
551
- )
552
- );
553
-
554
- $wp_customize->add_control(
555
- 'logincust_other_css', array(
556
- 'label' => __( 'Custom CSS', 'login-customizer' ),
557
- 'type' => 'textarea',
558
- 'section' => 'logincust_other_section',
559
- 'priority' => 15,
560
- 'settings' => 'logincust_other_css',
561
- )
562
- );
563
-
564
- }
565
- add_action( 'customize_register', 'logincust_customize_register' );
566
-
567
- function logincust_customizer() {
568
- $logo_url = get_option( 'logincust_logo' );
569
- $logo_width = get_option( 'logincust_logo_width' );
570
- $logo_height = get_option( 'logincust_logo_height' );
571
- $logo_padding = get_option( 'logincust_logo_padding' );
572
- $bg_img = get_option( 'logincust_bg_image' );
573
- $bg_color = get_option( 'logincust_bg_color' );
574
- $bg_size = get_option( 'logincust_bg_size' );
575
- $form_bg_image = get_option( 'logincust_form_bg_image' );
576
- $form_bg_color = get_option( 'logincust_form_bg_color' );
577
- $form_width = get_option( 'logincust_form_width' );
578
- $form_height = get_option( 'logincust_form_height' );
579
- $form_padding = get_option( 'logincust_form_padding' );
580
- $form_border = get_option( 'logincust_form_border' );
581
- $field_width = get_option( 'logincust_field_width' );
582
- $field_margin = get_option( 'logincust_field_margin' );
583
- $field_bg = get_option( 'logincust_field_bg' );
584
- $field_color = get_option( 'logincust_field_color' );
585
- $field_label = get_option( 'logincust_field_label' );
586
- $button_bg = get_option( 'logincust_button_bg' );
587
- $button_border = get_option( 'logincust_button_border' );
588
- $button_shadow = get_option( 'logincust_button_shadow' );
589
- $button_color = get_option( 'logincust_button_color' );
590
- $button_hover_bg = get_option( 'logincust_button_hover_bg' );
591
- $button_hover_border = get_option( 'logincust_button_hover_border' );
592
- $other_color = get_option( 'logincust_other_color' );
593
- $other_color_hover = get_option( 'logincust_other_color_hover' );
594
- $other_css = get_option( 'logincust_other_css' );
595
- ?>
596
- <style type="text/css">
597
- html, body {
598
- <?php if ( ! empty( $bg_img ) ) : ?>
599
- background-image: url(<?php echo $bg_img; ?>) !important;
600
- <?php endif; ?>
601
- <?php if ( ! empty( $bg_color ) ) : ?>
602
- background-color: <?php echo $bg_color; ?> !important;
603
- <?php endif; ?>
604
- <?php if ( ! empty( $bg_url ) ) : ?>
605
- background-size: <?php echo $bg_size; ?> !important;
606
- <?php endif; ?>
607
- }
608
- body.login div#login h1 a {
609
- <?php if ( ! empty( $logo_url ) ) : ?>
610
- background-image: url(<?php echo $logo_url; ?>) !important;
611
- <?php endif; ?>
612
- <?php if ( ! empty( $logo_width ) ) : ?>
613
- width: <?php echo $logo_width; ?> !important;
614
- <?php endif; ?>
615
- <?php if ( ! empty( $logo_height ) ) : ?>
616
- height: <?php echo $logo_height; ?> !important;
617
- <?php endif; ?>
618
- <?php if ( ! empty( $logo_width ) || ! empty( $logo_height ) ) : ?>
619
- background-size: <?php echo $logo_width; ?> <?php echo $logo_height; ?> !important;
620
- <?php endif; ?>
621
- <?php if ( ! empty( $logo_padding ) ) : ?>
622
- padding-bottom: <?php echo $logo_padding; ?> !important;
623
- <?php endif; ?>
624
- }
625
- #loginform {
626
- <?php if ( ! empty( $form_bg_image ) ) : ?>
627
- background-image: url(<?php echo $form_bg_image; ?>) !important;
628
- <?php endif; ?>
629
- <?php if ( ! empty( $form_bg_color ) ) : ?>
630
- background-color: <?php echo $form_bg_color; ?> !important;
631
- <?php endif; ?>
632
- <?php if ( ! empty( $form_height ) ) : ?>
633
- height: <?php echo $form_height; ?> !important;
634
- <?php endif; ?>
635
- <?php if ( ! empty( $form_padding ) ) : ?>
636
- padding: <?php echo $form_padding; ?> !important;
637
- <?php endif; ?>
638
- <?php if ( ! empty( $form_border ) ) : ?>
639
- border: <?php echo $form_border; ?> !important;
640
- <?php endif; ?>
641
- }
642
- #login {
643
- <?php if ( ! empty( $form_width ) ) : ?>
644
- width: <?php echo $form_width; ?> !important;
645
- <?php endif; ?>
646
- }
647
- .login form .input, .login input[type="text"] {
648
- <?php if ( ! empty( $field_width ) ) : ?>
649
- width: <?php echo $field_width; ?> !important;
650
- <?php endif; ?>
651
- <?php if ( ! empty( $field_margin ) ) : ?>
652
- margin: <?php echo $field_margin; ?> !important;
653
- <?php endif; ?>
654
- <?php if ( ! empty( $field_bg ) ) : ?>
655
- background: <?php echo $field_bg; ?> !important;
656
- <?php endif; ?>
657
- <?php if ( ! empty( $field_color ) ) : ?>
658
- color: <?php echo $field_color; ?> !important;
659
- <?php endif; ?>
660
- }
661
- .login label {
662
- <?php if ( ! empty( $field_label ) ) : ?>
663
- color: <?php echo $field_label; ?> !important;
664
- <?php endif; ?>
665
- }
666
- .wp-core-ui .button-primary {
667
- <?php if ( ! empty( $button_bg ) ) : ?>
668
- background: <?php echo $button_bg; ?> !important;
669
- <?php endif; ?>
670
- <?php if ( ! empty( $button_border ) ) : ?>
671
- border-color: <?php echo $button_border; ?> !important;
672
- <?php endif; ?>
673
- <?php if ( ! empty( $button_shadow ) ) : ?>
674
- box-shadow: 0px 1px 0px <?php echo $button_shadow; ?> inset, 0px 1px 0px rgba(0, 0, 0, 0.15);
675
- <?php endif; ?>
676
- <?php if ( ! empty( $button_color ) ) : ?>
677
- color: <?php echo $button_color; ?> !important;
678
- <?php endif; ?>
679
- }
680
- .wp-core-ui .button-primary.focus, .wp-core-ui .button-primary.hover, .wp-core-ui .button-primary:focus, .wp-core-ui .button-primary:hover {
681
- <?php if ( ! empty( $button_hover_bg ) ) : ?>
682
- background: <?php echo $button_hover_bg; ?> !important;
683
- <?php endif; ?>
684
- <?php if ( ! empty( $button_hover_border ) ) : ?>
685
- border-color: <?php echo $button_hover_border; ?> !important;
686
- <?php endif; ?>
687
- }
688
- .login #backtoblog a, .login #nav a {
689
- <?php if ( ! empty( $other_color ) ) : ?>
690
- color: <?php echo $other_color; ?> !important;
691
- <?php endif; ?>
692
- }
693
- .login #backtoblog a:hover, .login #nav a:hover, .login h1 a:hover {
694
- <?php if ( ! empty( $other_color_hover ) ) : ?>
695
- color: <?php echo $other_color_hover; ?> !important;
696
- <?php endif; ?>
697
- }
698
- <?php if ( ! empty( $other_css ) ) : ?>
699
- <?php echo $other_css; ?>
700
- <?php endif; ?>
701
- </style>
702
- <?php
703
- }
704
-
705
- add_action( 'login_enqueue_scripts', 'logincust_customizer' );
706
-
707
- function logincust_login_logo_url() {
708
- return get_bloginfo( 'url' );
709
- }
710
- add_filter( 'login_headerurl', 'logincust_login_logo_url' );
711
-
712
- function logincust_login_logo_url_title() {
713
- $title = get_bloginfo( 'name', 'display' );
714
- return $title;
715
- }
716
- add_filter( 'login_headertitle', 'logincust_login_logo_url_title' );
717
-
718
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
feedzy-rss-feed.php ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The plugin bootstrap file
4
+ *
5
+ * This file is read by WordPress to generate the plugin information in the plugin
6
+ * admin area. This file also includes all of the dependencies used by the plugin,
7
+ * registers the activation and deactivation functions, and defines a function
8
+ * that starts the plugin.
9
+ *
10
+ * @link http://themeisle.com
11
+ * @since 3.0.0
12
+ * @package feedzy-rss-feeds
13
+ *
14
+ * @wordpress-plugin
15
+ * Plugin Name: Feedzy RSS Feeds Lite
16
+ * Plugin URI: https://themeisle.com/plugins/feedzy-rss-feeds-lite/
17
+ * Description: A small and lightweight RSS aggregator plugin. Fast and very easy to use, it allows you to aggregate multiple RSS feeds into your WordPress site through fully customizable shortcodes & widgets.
18
+ * Version: 3.2.4
19
+ * Author: Themeisle
20
+ * Author URI: http://themeisle.com
21
+ * License: GPL-2.0+
22
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
23
+ * Text Domain: feedzy-rss-feeds
24
+ * Domain Path: /languages
25
+ * WordPress Available: yes
26
+ * Pro Slug: feedzy-rss-feeds-pro
27
+ * Requires License: no
28
+ */
29
+ // If this file is called directly, abort.
30
+ if ( ! defined( 'WPINC' ) ) {
31
+ die;
32
+ }
33
+ /**
34
+ * The code that runs during plugin activation.
35
+ * This action is documented in includes/feedzy-rss-feeds-activator.php
36
+ */
37
+ function activate_feedzy_rss_feeds() {
38
+ Feedzy_Rss_Feeds_Activator::activate();
39
+ }
40
+
41
+ /**
42
+ * The code that runs during plugin deactivation.
43
+ * This action is documented in includes/feedzy-rss-feeds-deactivator.php
44
+ *
45
+ * @since 3.0.0
46
+ */
47
+ function deactivate_feedzy_rss_feeds() {
48
+ Feedzy_Rss_Feeds_Deactivator::deactivate();
49
+ }
50
+
51
+ register_activation_hook( __FILE__, 'activate_feedzy_rss_feeds' );
52
+ register_deactivation_hook( __FILE__, 'deactivate_feedzy_rss_feeds' );
53
+ /**
54
+ * The function that will handle the queue for autoloader.
55
+ *
56
+ * @since 3.0.0
57
+ */
58
+ function feedzy_rss_feeds_autoload( $class ) {
59
+ $namespaces = array( 'Feedzy_Rss_Feeds' );
60
+ foreach ( $namespaces as $namespace ) {
61
+ if ( substr( $class, 0, strlen( $namespace ) ) == $namespace ) {
62
+ $filename = plugin_dir_path( __FILE__ ) . 'includes/' . str_replace( '_', '-', strtolower( $class ) ) . '.php';
63
+ if ( is_readable( $filename ) ) {
64
+ require_once $filename;
65
+
66
+ return true;
67
+ }
68
+ $filename = plugin_dir_path( __FILE__ ) . 'includes/abstract/' . str_replace( '_', '-', strtolower( $class ) ) . '.php';
69
+ if ( is_readable( $filename ) ) {
70
+ require_once $filename;
71
+
72
+ return true;
73
+ }
74
+ $filename = plugin_dir_path( __FILE__ ) . 'includes/admin/' . str_replace( '_', '-', strtolower( $class ) ) . '.php';
75
+ if ( is_readable( $filename ) ) {
76
+ require_once $filename;
77
+
78
+ return true;
79
+ }
80
+ }
81
+ }
82
+ if ( is_readable( plugin_dir_path( __FILE__ ) . 'includes/admin/feedzy-wp-widget.php' ) ) {
83
+ require_once plugin_dir_path( __FILE__ ) . 'includes/admin/feedzy-wp-widget.php';
84
+
85
+ return true;
86
+ }
87
+
88
+ return false;
89
+ }
90
+
91
+ /**
92
+ * Begins execution of the plugin.
93
+ *
94
+ * Since everything within the plugin is registered via hooks,
95
+ * then kicking off the plugin from this point in the file does
96
+ * not affect the page life cycle.
97
+ *
98
+ * @since 3.0.0
99
+ */
100
+ function run_feedzy_rss_feeds() {
101
+ define( 'FEEDZY_BASEFILE', __FILE__ );
102
+ define( 'FEEDZY_ABSURL', plugins_url( '/', __FILE__ ) );
103
+ define( 'FEEDZY_ABSPATH', dirname( __FILE__ ) );
104
+ define( 'FEEDZY_UPSELL_LINK', 'https://themeisle.com/plugins/feedzy-rss-feeds/' );
105
+ define( 'FEEDZY_NAME', 'Feedzy RSS Feeds' );
106
+
107
+ // always make this true before testing
108
+ define( 'FEEDZY_DISABLE_CACHE_FOR_TESTING', false );
109
+ $feedzy = Feedzy_Rss_Feeds::instance();
110
+ $feedzy->run();
111
+ $vendor_file = FEEDZY_ABSPATH . '/vendor/autoload_52.php';
112
+ if ( is_readable( $vendor_file ) ) {
113
+ require_once $vendor_file;
114
+ }
115
+
116
+ add_filter( 'themeisle_sdk_products', 'feedzy_register_sdk', 10, 1 );
117
+ add_filter( 'pirate_parrot_log', 'feedzy_register_parrot', 10, 1 );
118
+
119
+ }
120
+
121
+ /**
122
+ * Registers with the SDK
123
+ *
124
+ * @since 1.0.0
125
+ */
126
+ function feedzy_register_sdk( $products ) {
127
+ $products[] = FEEDZY_BASEFILE;
128
+ return $products;
129
+ }
130
+
131
+ /**
132
+ * Registers with the parrot plugin
133
+ *
134
+ * @since 1.0.0
135
+ */
136
+ function feedzy_register_parrot( $plugins ) {
137
+ $plugins[] = FEEDZY_NAME;
138
+ return $plugins;
139
+ }
140
+
141
+ spl_autoload_register( 'feedzy_rss_feeds_autoload' );
142
+ run_feedzy_rss_feeds();
form/form.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The file that defines the core plugin class
4
+ *
5
+ * A class definition that includes attributes and functions used across both the
6
+ * public-facing side of the site and the admin area.
7
+ *
8
+ * @link http://themeisle.com
9
+ * @since 3.0.0
10
+ *
11
+ * @package feedzy-rss-feeds
12
+ * @subpackage feedzy-rss-feeds/form
13
+ */
14
+
15
+ $html_parts = Feedzy_Rss_Feeds_Ui_Lang::get_form_elements();
16
+ ?>
17
+ <!DOCTYPE html>
18
+ <html>
19
+ <head>
20
+ <!-- Disable browser caching of dialog window -->
21
+ <meta http-equiv="cache-control" content="no-cache" />
22
+ <meta http-equiv="expires" content="0" />
23
+ <meta http-equiv="pragma" content="no-cache" />
24
+ <link rel="stylesheet" href="<?php echo FEEDZY_ABSURL . 'css/form.css?h=' . date( 'dmYHis' ); ?>" type="text/css" media="all" />
25
+ </head>
26
+ <body>
27
+ <div class="feedzy-popup-form container">
28
+ <?php
29
+ $output = '';
30
+ if ( ! empty( $html_parts ) ) {
31
+ foreach ( $html_parts as $item => $section ) {
32
+ $output .= '<div class="container feedzy_' . $item . '">';
33
+ $output .= '<h5>' . $section['title'] . '</h5>';
34
+ if ( isset( $section['description'] ) ) {
35
+ $output .= '<p>' . $section['description'] . '</p>';
36
+ }
37
+ if ( ! empty( $section['elements'] ) ) {
38
+ foreach ( $section['elements'] as $name => $props ) {
39
+ $element = '';
40
+ $disabled = '';
41
+ $badge = '';
42
+ if ( isset( $props['disabled'] ) && $props['disabled'] ) {
43
+ $disabled = 'disabled="true"';
44
+ $badge = '<small class="feedzy_pro_tag">' . __( 'Premium', 'feedzy-rss-feeds' ) . '</small>';
45
+ }
46
+ switch ( $props['type'] ) {
47
+ case 'select':
48
+ $element = '<select name="' . $name . '" data-feedzy="' . $name . '" ' . $disabled . ' >';
49
+ foreach ( $props['opts'] as $opt => $values ) {
50
+ $checked = '';
51
+ if ( $props['value'] == $values['value'] ) {
52
+ $checked = 'selected';
53
+ }
54
+ $element .= '<option value="' . $values['value'] . '" ' . $checked . ' > ' . $values['label'] . '</option>';
55
+ }
56
+ $element .= '</select>';
57
+ break;
58
+ case 'radio':
59
+ foreach ( $props['opts'] as $opt => $values ) {
60
+ $checked = '';
61
+ if ( $props['value'] == $values['value'] ) {
62
+ $checked = 'checked="checked"';
63
+ }
64
+ $element .= '<label class="feedzy-radio-image feedzy-template-' . $values['value']
65
+ . '"><input type="radio" name="' . $name . '" data-feedzy="' . $name . '" value="' . $values['value'] . '" ' . $checked . ' ' . $disabled . ' />' .
66
+ $values['label'] . '</label>';
67
+ }
68
+ break;
69
+ case 'checkbox':
70
+ foreach ( $props['opts'] as $opt => $values ) {
71
+ $checked = '';
72
+ if ( $props['value'] == $values['value'] ) {
73
+ $checked = 'checked="checked"';
74
+ }
75
+ $element .= '<input type="checkbox" name="' . $name . '" data-feedzy="' . $name . '" value="' . $values['value'] . '" ' . $checked . ' ' . $disabled . ' /> ' . $values['label'];
76
+ }
77
+ break;
78
+ case 'file':
79
+ $element = '
80
+ <input type="text" class="column column-50 float-left" name="' . $name . '" data-feedzy="' . $name . '" id="feedzy_image_url" placeholder="' . $props['placeholder'] . '" value="' . $props['value'] . '">
81
+ <input type="button" class="column column-50 float-right button-outline" name="upload-btn" id="feedzy_upload_btn" value="' . $props['button']['button_text'] . '">
82
+ ';
83
+ break;
84
+ default:
85
+ $element = '<input type="text" name="' . $name . '" data-feedzy="' . $name . '" value="' . $props['value'] . '" placeholder="' . $props['placeholder'] . '" ' . $disabled . ' />';
86
+ break;
87
+ } // End switch().
88
+ $output .= '
89
+ <div class="row feedzy_element_' . $name . '">
90
+ <div class="column column-50">
91
+ <label for="' . $name . '">' . $props['label'] . $badge . '</label>
92
+ </div>
93
+ <div class="column column-50">
94
+ ' . $element . '
95
+ </div>
96
+ <hr/>
97
+ </div>
98
+ ';
99
+ } // End foreach().
100
+ } // End if().
101
+ $output .= '</div>';
102
+ } // End foreach().
103
+ } // End if().
104
+ echo $output;
105
+ ?>
106
+ </div>
107
+ <script type="text/javascript">
108
+ var args = top.tinymce.activeEditor.windowManager.getParams();
109
+ var $ = args.jquery;
110
+ var editor = args.editor;
111
+ var wp = args.wp;
112
+ var custom_uploader;
113
+ $(document).ready(function($) {
114
+ $(document).on('click', '#feedzy_upload_btn', function (e) {
115
+ e.preventDefault();
116
+ var upload_button = $(this);
117
+ custom_uploader = wp.media.frames.file_frame = wp.media({
118
+ title: editor.getLang( 'feedzy_tinymce_plugin.image_button' ),
119
+ button: {
120
+ text: editor.getLang( 'feedzy_tinymce_plugin.image_button' )
121
+ },
122
+ multiple: false
123
+ });
124
+
125
+ custom_uploader.on('select', function () {
126
+ var attachment = custom_uploader.state().get('selection').first().toJSON();
127
+ upload_button.siblings('input[type="text"]').val(attachment.url);
128
+ });
129
+
130
+ custom_uploader.open();
131
+ });
132
+ });
133
+ </script>
134
+ </body>
135
+ </html>
img/features-affiliate-ready.jpg ADDED
Binary file
img/features-caching.jpg ADDED
Binary file
img/features-feed-to-post.jpg ADDED
Binary file
img/features-templates.jpg ADDED
Binary file
img/features-widgets-support.jpg ADDED
Binary file
img/feedzy-default-template.jpg ADDED
Binary file
img/feedzy-default.jpg ADDED
Binary file
img/feedzy-style1-template.jpg ADDED
Binary file
img/feedzy-style2-template.jpg ADDED
Binary file
img/feedzy.png ADDED
Binary file
img/feedzy.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="850.39" height="850.39"><path fill="#DB3939" d="M425.2 2C190.36 2 0 191.92 0 426.2c0 234.27 190.37 424.2 425.2 424.2 234.82 0 425.2-189.93 425.2-424.2C850.4 191.9 660 2 425.2 2zm-46.55 668.66h-91.58v-57.1L237.5 564.1h-57.26v-91.24h95.25l103.15 102.8v95zm152.52 0H439.6v-133.3L313.85 411.94h-133.6v-91.36H351.7L531.18 499.6v171.06zm152.55 0h-91.58V461.2L390.06 259.74H180.24v-91.36h247.8l255.68 255.07v247.22z"/></svg>
includes/abstract/feedzy-rss-feeds-admin-abstract.php ADDED
@@ -0,0 +1,1022 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Abstract class with reusable functionality of the plugin.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/abstract
10
+ */
11
+
12
+ /**
13
+ * The Feedzy RSS functions of the plugin.
14
+ *
15
+ * Abstract class containing functions for the Feedzy Admin Class
16
+ *
17
+ * @package feedzy-rss-feeds
18
+ * @subpackage feedzy-rss-feeds/includes/abstract
19
+ * @author Themeisle <friends@themeisle.com>
20
+ * @abstract
21
+ */
22
+ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
23
+
24
+ /**
25
+ * Defines the default image to use on RSS Feeds
26
+ *
27
+ * @since 3.0.0
28
+ * @access public
29
+ *
30
+ * @param string $imageSrc The image source, currently not used.
31
+ *
32
+ * @return string
33
+ */
34
+ public function feedzy_define_default_image( $imageSrc ) {
35
+ $defaultImg = FEEDZY_ABSURL . '/img/feedzy-default.jpg';
36
+
37
+ return apply_filters( 'feedzy_define_default_image_filter', $defaultImg );
38
+ }
39
+
40
+ /**
41
+ * Defines the default error notice
42
+ *
43
+ * Logs error to the log file
44
+ * Returns the error message
45
+ *
46
+ * @since 3.0.0
47
+ * @access public
48
+ *
49
+ * @param object $error The error Object.
50
+ * @param string $feedURL The feed URL.
51
+ *
52
+ * @return string
53
+ */
54
+ public function feedzy_default_error_notice( $error, $feedURL ) {
55
+ error_log( 'Feedzy RSS Feeds - related feed: ' . print_r( $feedURL ) . ' - Error message: ' . $this->feedzy_array_obj_string( $error ) );
56
+
57
+ return '<div id="message" class="error" data-error"' . esc_attr( $this->feedzy_array_obj_string( $error ) ) . '"><p>' . __( 'Sorry, this feed is currently unavailable or does not exists anymore.', 'feedzy-rss-feeds' ) . '</p></div>';
58
+ }
59
+
60
+ /**
61
+ * Converts an object to string
62
+ *
63
+ * @since 3.0.0
64
+ * @access public
65
+ *
66
+ * @param object $error The error Object.
67
+ *
68
+ * @return string
69
+ */
70
+ public function feedzy_array_obj_string( $error ) {
71
+ if ( is_array( $error ) || is_object( $error ) ) {
72
+ return print_r( $error, true );
73
+ } else {
74
+ return $error;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Padding ratio based on image size
80
+ *
81
+ * @since 3.0.0
82
+ * @access public
83
+ *
84
+ * @param string $itemAttr The item attribute.
85
+ * @param array $sizes An array with the current sizes.
86
+ *
87
+ * @return string
88
+ */
89
+ public function feedzy_add_item_padding( $itemAttr, $sizes ) {
90
+ $paddinTop = number_format( ( 15 / 150 ) * $sizes['height'], 0 );
91
+ $paddinBottom = number_format( ( 25 / 150 ) * $sizes['height'], 0 );
92
+ $stylePadding = ' style="padding: ' . $paddinTop . 'px 0 ' . $paddinBottom . 'px"';
93
+
94
+ return $itemAttr . $stylePadding;
95
+ }
96
+
97
+ /**
98
+ * Appends classes to the feed item
99
+ *
100
+ * @since 3.0.0
101
+ * @access public
102
+ *
103
+ * @param string $itemAttr The item attribute.
104
+ * @param string $sizes The item sizes.
105
+ * @param string $item The feed item.
106
+ * @param string $feedURL The feed URL.
107
+ * @param string $sc The short code attributes.
108
+ *
109
+ * @return string
110
+ */
111
+ public function feedzy_classes_item( $itemAttr = '', $sizes = '', $item = '', $feedURL = '', $sc = '' ) {
112
+ $classes = array( 'rss_item' );
113
+ $classes = apply_filters( 'feedzy_add_classes_item', $classes, $sc );
114
+ $classes = ' class="' . implode( ' ', $classes ) . '"';
115
+
116
+ return $itemAttr . $classes;
117
+ }
118
+
119
+ /**
120
+ * Filter feed description input
121
+ *
122
+ * @since 3.0.0
123
+ * @access public
124
+ *
125
+ * @param string $description The feed description.
126
+ * @param string $content The feed description.
127
+ * @param string $feedURL The feed URL.
128
+ *
129
+ * @return string
130
+ */
131
+ public function feedzy_summary_input_filter( $description, $content, $feedURL ) {
132
+ $description = trim( strip_tags( $description ) );
133
+ $description = trim( chop( $description, '[&hellip;]' ) );
134
+
135
+ return $description;
136
+ }
137
+
138
+ /**
139
+ * Check title for keywords
140
+ *
141
+ * @since 3.0.0
142
+ * @access public
143
+ *
144
+ * @param boolean $continue A boolean to stop the script.
145
+ * @param array $sc The shortcode attributes.
146
+ * @param object $item The feed item.
147
+ * @param string $feedURL The feed URL.
148
+ *
149
+ * @return boolean
150
+ */
151
+ public function feedzy_feed_item_keywords_title( $continue, $sc, $item, $feedURL ) {
152
+ if ( feedzy_is_new() && ! feedzy_is_pro() ) {
153
+ return true;
154
+ }
155
+ $keywords_title = $sc['keywords_title'];
156
+ if ( ! empty( $keywords_title ) ) {
157
+ $continue = false;
158
+ foreach ( $keywords_title as $keyword ) {
159
+ if ( strpos( $item->get_title(), $keyword ) !== false ) {
160
+ $continue = true;
161
+ }
162
+ }
163
+ }
164
+
165
+ return $continue;
166
+ }
167
+
168
+ /**
169
+ * Include cover picture (medium) to rss feed enclosure
170
+ * and media:content
171
+ *
172
+ * @since 3.0.0
173
+ * @access public
174
+ */
175
+ public function feedzy_include_thumbnail_rss() {
176
+ global $post;
177
+ if ( has_post_thumbnail( $post->ID ) ) {
178
+ $postThumbnailId = get_post_thumbnail_id( $post->ID );
179
+ $attachmentMeta = wp_get_attachment_metadata( $postThumbnailId );
180
+ $imageUrl = wp_get_attachment_image_src( $postThumbnailId, 'medium' );
181
+ echo '<enclosure url="' . $imageUrl[0] . '" length="' . filesize( get_attached_file( $postThumbnailId ) ) . '" type="image/jpg" />';
182
+ echo '<media:content url="' . $imageUrl[0] . '" width="' . $attachmentMeta['sizes']['medium']['width'] . '" height="' . $attachmentMeta['sizes']['medium']['height'] . '" medium="image" type="' . $attachmentMeta['sizes']['medium']['mime-type'] . '" />';
183
+
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Utility method to check if source is a URL's string
189
+ * or if is a post type slug.
190
+ *
191
+ * @since 3.0.12
192
+ * @access public
193
+ *
194
+ * @param string $src The feeds source string.
195
+ *
196
+ * @return bool|string
197
+ */
198
+ public function process_feed_source( $src ) {
199
+ $regex = '((https?|ftp)\:\/\/)?'; // Contains Protocol
200
+ $regex .= '([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?'; // Uses User and Pass
201
+ $regex .= '([a-z0-9-.]*)\.([a-z]{2,3})'; // Has Host or IP
202
+ $regex .= '(\:[0-9]{2,5})?'; // Uses Port
203
+ $regex .= '(\/([a-z0-9+\$_-]\.?)+)*\/?'; // Has Path
204
+ $regex .= '(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?'; // Has GET Query
205
+ $regex .= '(#[a-z_.-][a-z0-9+\$_.-]*)?'; // Uses Anchor
206
+ if ( preg_match( "/^$regex$/", $src ) ) {
207
+ // If it matches Regex ( it's not a slug ) so return the sources.
208
+ return $src;
209
+ } else {
210
+ $src = trim( $src );
211
+ if ( $post = get_page_by_path( $src, OBJECT, 'feedzy_categories' ) ) {
212
+ return trim( preg_replace( '/\s+/', ' ', get_post_meta( $post->ID, 'feedzy_category_feed', true ) ) );
213
+ } else {
214
+ return $src;
215
+ }
216
+ }
217
+
218
+ }
219
+
220
+ /**
221
+ * Main shortcode function
222
+ *
223
+ * @since 3.0.0
224
+ * @access public
225
+ *
226
+ * @param array $atts Shortcode attributes.
227
+ * @param string $content The item feed content.
228
+ *
229
+ * @return mixed
230
+ */
231
+ public function feedzy_rss( $atts, $content = '' ) {
232
+ $sc = $this->get_short_code_attributes( $atts );
233
+ $feedURL = $this->normalize_urls( $sc['feeds'] );
234
+ $cache = $sc['refresh'];
235
+ $feed = $this->fetch_feed( $feedURL, $cache );
236
+ if ( is_string( $feed ) ) {
237
+ return $feed;
238
+ }
239
+ $sc = $this->sanitize_attr( $sc, $feedURL );
240
+ $content = $this->render_content( $sc, $feed, $content, $feedURL );
241
+
242
+ return $content;
243
+ }
244
+
245
+ /**
246
+ * Returns the attributes of the shortcode
247
+ *
248
+ * @since 3.0.0
249
+ * @access public
250
+ *
251
+ * @param array $atts The attributes passed by WordPress.
252
+ *
253
+ * @return array
254
+ */
255
+ public function get_short_code_attributes( $atts ) {
256
+ // Retrieve & extract shorcode parameters
257
+ $sc = shortcode_atts(
258
+ array(
259
+ 'feeds' => '',
260
+ // comma separated feeds url
261
+ 'max' => '5',
262
+ // number of feeds items (0 for unlimited)
263
+ 'feed_title' => 'yes',
264
+ // display feed title yes/no
265
+ 'target' => '_blank',
266
+ // _blank, _self
267
+ 'title' => '',
268
+ // strip title after X char
269
+ 'meta' => 'yes',
270
+ // yes, no
271
+ 'summary' => 'yes',
272
+ // strip title
273
+ 'summarylength' => '',
274
+ // strip summary after X char
275
+ 'thumb' => 'auto',
276
+ // yes, no, auto
277
+ 'default' => '',
278
+ // default thumb URL if no image found (only if thumb is set to yes or auto)
279
+ 'size' => '',
280
+ // thumbs pixel size
281
+ 'keywords_title' => '',
282
+ // cache refresh
283
+ 'refresh' => '12_hours',
284
+ // only display item if title contains specific keywords (comma-separated list/case sensitive)
285
+ ), $atts, 'feedzy_default'
286
+ );
287
+ $sc = array_merge( $sc, apply_filters( 'feedzy_get_short_code_attributes_filter', $atts ) );
288
+
289
+ return $sc;
290
+ }
291
+
292
+ /**
293
+ * Validate feeds attribute.
294
+ *
295
+ * @since 3.0.0
296
+ * @updated 3.1.7 Take into account $feedURL as array from PRO version.
297
+ *
298
+ * @param string $raw Url or list of urls.
299
+ *
300
+ * @return mixed|void Urls of the feeds.
301
+ */
302
+ public function normalize_urls( $raw ) {
303
+ $feeds = apply_filters( 'feedzy_process_feed_source', $raw );
304
+ $feedURL = apply_filters( 'feedzy_get_feed_url', $feeds );
305
+ if ( is_array( $feedURL ) ) {
306
+ foreach ( $feedURL as $index => $url ) {
307
+ $feedURL[ $index ] = htmlspecialchars_decode( $url );
308
+ }
309
+ } else {
310
+ $feedURL = htmlspecialchars_decode( $feedURL );
311
+ }
312
+
313
+ return $feedURL;
314
+ }
315
+
316
+ /**
317
+ * Fetch the content feed from a group of urls.
318
+ *
319
+ * @since 3.0.0
320
+ * @access public
321
+ * @updated 3.2.0
322
+ *
323
+ * @param array $feedURL The feeds urls to fetch content from.
324
+ * @param string $cache The cache string (eg. 1_hour, 30_min etc.).
325
+ *
326
+ * @return SimplePie|string|void|WP_Error The feed resource.
327
+ */
328
+ public function fetch_feed( $feedURL, $cache = '12_hours' ) {
329
+ // Load SimplePie if not already
330
+ do_action( 'feedzy_pre_http_setup', $feedURL );
331
+
332
+ // Load SimplePie Instance
333
+ $feed = $this->init_feed( $feedURL, $cache ); // Not used as log as #41304 is Opened.
334
+
335
+ // Report error when is an error loading the feed
336
+ if ( is_wp_error( $feed ) ) {
337
+ // Fallback for different edge cases.
338
+ if ( is_array( $feedURL ) ) {
339
+ $feedURL = array_map( 'html_entity_decode', $feedURL );
340
+ } else {
341
+ $feedURL = html_entity_decode( $feedURL );
342
+ }
343
+
344
+ $feedURL = $this->get_valid_feed_urls( $feedURL, $cache );
345
+
346
+ $feed = $this->init_feed( $feedURL, $cache ); // Not used as log as #41304 is Opened.
347
+
348
+ }
349
+
350
+ do_action( 'feedzy_post_http_teardown', $feedURL );
351
+
352
+ // var_dump( $feed );
353
+ return $feed;
354
+ }
355
+
356
+ /**
357
+ *
358
+ * Method to avoid using core implementation in order
359
+ * order to fix issues reported here: https://core.trac.wordpress.org/ticket/41304
360
+ * Bug: #41304 with WP wp_kses sanitizer used by WP SimplePie implementation.
361
+ *
362
+ * NOTE: This is temporary should be removed as soon as #41304 is patched.
363
+ *
364
+ * @since 3.1.7
365
+ * @access private
366
+ *
367
+ * @param string $feedURL The feed URL.
368
+ * @param string $cache The cache string (eg. 1_hour, 30_min etc.).
369
+ *
370
+ * @return SimplePie
371
+ */
372
+ private function init_feed( $feedURL, $cache ) {
373
+ if ( ! class_exists( 'SimplePie' ) ) {
374
+ require_once( ABSPATH . WPINC . '/class-simplepie.php' );
375
+ require_once( ABSPATH . WPINC . '/class-wp-feed-cache.php' );
376
+ require_once( ABSPATH . WPINC . '/class-wp-feed-cache-transient.php' );
377
+ require_once( ABSPATH . WPINC . '/class-wp-simplepie-file.php' );
378
+ }
379
+ $unit_defaults = array(
380
+ 'mins' => MINUTE_IN_SECONDS,
381
+ 'hours' => HOUR_IN_SECONDS,
382
+ 'days' => DAY_IN_SECONDS,
383
+ );
384
+ $cache_time = 12 * HOUR_IN_SECONDS;
385
+ if ( isset( $cache ) && $cache != '' ) {
386
+ list( $value, $unit ) = explode( '_', $cache );
387
+ if ( isset( $value ) && is_numeric( $value ) && $value >= 1 && $value <= 100 ) {
388
+ if ( isset( $unit ) && in_array( strtolower( $unit ), array( 'mins', 'hours', 'days' ) ) ) {
389
+ $cache_time = $value * $unit_defaults[ $unit ];
390
+ }
391
+ }
392
+ }
393
+
394
+ $feed = new SimplePie();
395
+ $feed->set_file_class( 'WP_SimplePie_File' );
396
+ $feed->set_useragent( apply_filters( 'http_headers_useragent', SIMPLEPIE_USERAGENT ) );
397
+ if ( ! FEEDZY_DISABLE_CACHE_FOR_TESTING ) {
398
+ $feed->set_cache_class( 'WP_Feed_Cache' );
399
+ $feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', $cache_time, $feedURL ) );
400
+ }
401
+ $feed->set_feed_url( $feedURL );
402
+ $feed->init();
403
+ $feed->handle_content_type();
404
+
405
+ return $feed;
406
+ }
407
+
408
+ /**
409
+ * Returns only valid URLs for fetching.
410
+ *
411
+ * @since 3.2.0
412
+ * @access private
413
+ *
414
+ * @param array|string $feedURL The feeds URL/s.
415
+ * @param string $cache The cache string (eg. 1_hour, 30_min etc.).
416
+ *
417
+ * @return array
418
+ */
419
+ private function get_valid_feed_urls( $feedURL, $cache ) {
420
+ $validFeedURL = array();
421
+ if ( is_array( $feedURL ) ) {
422
+ foreach ( $feedURL as $url ) {
423
+ if ( $this->check_valid_xml( $url, $cache ) ) {
424
+ $validFeedURL[] = $url;
425
+ } else {
426
+ echo sprintf( __( 'Feed URL: %s not valid and removed from fetch.', 'feedzy-rss-feeds' ), '<b>' . $url . '</b>' );
427
+ }
428
+ }
429
+ } else {
430
+ if ( $this->check_valid_xml( $feedURL, $cache ) ) {
431
+ $validFeedURL[] = $feedURL;
432
+ } else {
433
+ echo sprintf( __( 'Feed URL: %s not valid and removed from fetch.', 'feedzy-rss-feeds' ), '<b>' . $feedURL . '</b>' );
434
+ }
435
+ }
436
+
437
+ return $validFeedURL;
438
+ }
439
+
440
+ /**
441
+ * Checks if a url is a valid feed.
442
+ *
443
+ * @since 3.2.0
444
+ * @access private
445
+ *
446
+ * @param string $url The URL to validate.
447
+ * @param string $cache The cache string (eg. 1_hour, 30_min etc.).
448
+ *
449
+ * @return bool
450
+ */
451
+ private function check_valid_xml( $url, $cache ) {
452
+ $feed = $this->init_feed( $url, $cache );
453
+ if ( $feed->error() ) {
454
+ return false;
455
+ }
456
+
457
+ return true;
458
+ }
459
+
460
+ /**
461
+ * Sanitizes the shortcode array and sets the defaults
462
+ *
463
+ * @since 3.0.0
464
+ * @access public
465
+ *
466
+ * @param array $sc The shorcode attributes array.
467
+ * @param string $feedURL The feed url.
468
+ *
469
+ * @return mixed
470
+ */
471
+ public function sanitize_attr( $sc, $feedURL ) {
472
+ if ( $sc['max'] == '0' ) {
473
+ $sc['max'] = '999';
474
+ } elseif ( empty( $sc['max'] ) || ! ctype_digit( $sc['max'] ) ) {
475
+ $sc['max'] = '5';
476
+ }
477
+ if ( empty( $sc['size'] ) || ! ctype_digit( $sc['size'] ) ) {
478
+ $sc['size'] = '150';
479
+ }
480
+ if ( ! empty( $sc['title'] ) && ! ctype_digit( $sc['title'] ) ) {
481
+ $sc['title'] = '';
482
+ }
483
+ if ( ! empty( $sc['keywords_title'] ) ) {
484
+ $sc['keywords_title'] = rtrim( $sc['keywords_title'], ',' );
485
+ $sc['keywords_title'] = array_map( 'trim', explode( ',', $sc['keywords_title'] ) );
486
+ }
487
+ if ( ! empty( $sc['keywords_ban'] ) ) {
488
+ $sc['keywords_ban'] = rtrim( $sc['keywords_ban'], ',' );
489
+ $sc['keywords_ban'] = array_map( 'trim', explode( ',', $sc['keywords_ban'] ) );
490
+ }
491
+ if ( ! empty( $sc['summarylength'] ) && ! ctype_digit( $sc['summarylength'] ) ) {
492
+ $sc['summarylength'] = '';
493
+ }
494
+ if ( empty( $sc['default'] ) ) {
495
+ $sc['default'] = apply_filters( 'feedzy_default_image', $sc['default'], $feedURL );
496
+ }
497
+
498
+ return $sc;
499
+ }
500
+
501
+ /**
502
+ * Render the content to be displayed
503
+ *
504
+ * @since 3.0.0
505
+ * @access public
506
+ *
507
+ * @param array $sc The shorcode attributes array.
508
+ * @param object $feed The feed object.
509
+ * @param string $content The original content.
510
+ * @param string $feedURL The feed url.
511
+ *
512
+ * @return string
513
+ */
514
+ public function render_content( $sc, $feed, $content = '', $feedURL ) {
515
+ $count = 0;
516
+ $sizes = array(
517
+ 'width' => $sc['size'],
518
+ 'height' => $sc['size'],
519
+ );
520
+ $sizes = apply_filters( 'feedzy_thumb_sizes', $sizes, $feedURL );
521
+ $feed_title['use_title'] = false;
522
+ if ( $sc['feed_title'] == 'yes' ) {
523
+ $feed_title = $this->get_feed_title_filter( $feed );
524
+ $feed_title['use_title'] = true;
525
+ }
526
+ // Display the error message
527
+ if ( $feed->error() ) {
528
+ $content .= apply_filters( 'feedzy_default_error', $feed->error(), $feedURL );
529
+ }
530
+ $feed_items = apply_filters( 'feedzy_get_feed_array', array(), $sc, $feed, $feedURL, $sizes );
531
+ $content = '<div class="feedzy-rss">';
532
+ if ( $feed_title['use_title'] ) {
533
+ $content .= '<div class="rss_header">';
534
+ $content .= '<h2><a href="' . $feed->get_permalink() . '" class="rss_title">' . html_entity_decode( $feed->get_title() ) . '</a> <span class="rss_description"> ' . $feed->get_description() . '</span></h2>';
535
+ $content .= '</div>';
536
+ }
537
+ $content .= '<ul>';
538
+ foreach ( $feed_items as $item ) {
539
+ $content .= '
540
+ <li ' . $item['itemAttr'] . '>
541
+ ' . ( ( ! empty( $item['item_img'] ) && $sc['thumb'] != 'no' ) ? '
542
+ <div class="' . $item['item_img_class'] . '" style="' . $item['item_img_style'] . '">
543
+ <a href="' . $item['item_url'] . '" target="' . $item['item_url_target'] . '" title="' . $item['item_url_title'] . '" style="' . $item['item_img_style'] . '">
544
+ ' . $item['item_img'] . '
545
+ </a>
546
+ </div>' : '' ) . '
547
+ <span class="title">
548
+ <a href="' . $item['item_url'] . '" target="' . $item['item_url_target'] . '">
549
+ ' . $item['item_title'] . '
550
+ </a>
551
+ </span>
552
+ <div class="' . $item['item_content_class'] . '" style="' . $item['item_content_style'] . '">
553
+ ' . ( ! empty( $item['item_meta'] ) ? '<small>
554
+ ' . $item['item_meta'] . '
555
+ </small>' : '' ) . '
556
+ ' . ( ! empty( $item['item_description'] ) ? '<p>' . $item['item_description'] . '</p>' : '' ) . '
557
+ </div>
558
+ </li>
559
+ ';
560
+ }
561
+ $content .= '</ul> </div>';
562
+ $content = apply_filters( 'feedzy_global_output', $content, $sc, $feed_title, $feed_items );
563
+
564
+ return $content;
565
+ }
566
+
567
+ /**
568
+ * Retrive the filter rss title array
569
+ *
570
+ * @since 3.0.0
571
+ * @access private
572
+ *
573
+ * @param object $feed The feed object.
574
+ *
575
+ * @return array
576
+ */
577
+ private function get_feed_title_filter( $feed ) {
578
+ return array(
579
+ 'rss_url' => $feed->get_permalink(),
580
+ 'rss_title_class' => 'rss_title',
581
+ 'rss_title' => html_entity_decode( $feed->get_title() ),
582
+ 'rss_description_class' => 'rss_description',
583
+ 'rss_description' => $feed->get_description(),
584
+ );
585
+ }
586
+
587
+ /**
588
+ * Get the feed url based on the feeds passed from the shortcode attribute.
589
+ *
590
+ * @since 3.0.0
591
+ * @access public
592
+ *
593
+ * @param string $feeds The feeds from the shortcode attribute.
594
+ *
595
+ * @return array|mixed
596
+ */
597
+ public function get_feed_url( $feeds ) {
598
+ $feedURL = '';
599
+ if ( ! empty( $feeds ) ) {
600
+ $feeds = rtrim( $feeds, ',' );
601
+ $feeds = explode( ',', $feeds );
602
+ $feedURL = array();
603
+ // Remove SSL from HTTP request to prevent fetching errors
604
+ foreach ( $feeds as $feed ) {
605
+ $feedURL[] = preg_replace( '/^https:/i', 'http:', $feed );
606
+ }
607
+ if ( count( $feedURL ) === 1 ) {
608
+ $feedURL = $feedURL[0];
609
+ }
610
+ }
611
+
612
+ return $feedURL;
613
+ }
614
+
615
+ /**
616
+ * Utility method to return feed in array format
617
+ * before content render.
618
+ *
619
+ * @since 3.0.12
620
+ * @access public
621
+ *
622
+ * @param array $feed_items The feed items array.
623
+ * @param array $sc The short code attributes.
624
+ * @param object $feed The feed object.
625
+ * @param string $feedURL The feed URL source/s.
626
+ * @param array $sizes Sizes array.
627
+ *
628
+ * @return array
629
+ */
630
+ public function get_feed_array( $feed_items, $sc, $feed, $feedURL, $sizes ) {
631
+ $count = 0;
632
+ $items = apply_filters( 'feedzy_feed_items', $feed->get_items(), $feedURL );
633
+ foreach ( (array) $items as $item ) {
634
+ if ( trim( $item->get_title() ) != '' ) {
635
+ $continue = apply_filters( 'feedzy_item_keyword', true, $sc, $item, $feedURL );
636
+ if ( $continue == true ) {
637
+ // Count items
638
+ if ( $count >= $sc['max'] ) {
639
+ break;
640
+ }
641
+ $itemAttr = apply_filters( 'feedzy_item_attributes', $itemAttr = '', $sizes, $item, $feedURL, $sc );
642
+ $feed_items[ $count ] = $this->get_feed_item_filter( $sc, $sizes, $item, $feedURL );
643
+ $feed_items[ $count ]['itemAttr'] = $itemAttr;
644
+ $count ++;
645
+ }
646
+ }
647
+ }
648
+
649
+ return $feed_items;
650
+ }
651
+
652
+ /**
653
+ * Retrive the filter item array
654
+ *
655
+ * @since 3.0.0
656
+ * @access private
657
+ *
658
+ * @param array $sc The shorcode attributes array.
659
+ * @param array $sizes The sizes array.
660
+ * @param object $item The feed item object.
661
+ * @param string $feedURL The feed url.
662
+ *
663
+ * @return array
664
+ */
665
+ private function get_feed_item_filter( $sc, $sizes, $item, $feedURL ) {
666
+ $itemLink = $item->get_permalink();
667
+ $newLink = apply_filters( 'feedzy_item_url_filter', $itemLink, $sc );
668
+ // Fetch image thumbnail
669
+ if ( $sc['thumb'] == 'yes' || $sc['thumb'] == 'auto' ) {
670
+ $theThumbnail = $this->feedzy_retrieve_image( $item );
671
+ }
672
+ if ( $sc['thumb'] == 'yes' || $sc['thumb'] == 'auto' ) {
673
+ $contentThumb = '';
674
+ if ( ( ! empty( $theThumbnail ) && $sc['thumb'] == 'auto' ) || $sc['thumb'] == 'yes' ) {
675
+ if ( ! empty( $theThumbnail ) ) {
676
+ $theThumbnail = $this->feedzy_image_encode( $theThumbnail );
677
+ $contentThumb .= '<span class="fetched" style="background-image: url(\'' . $theThumbnail . '\');" title="' . $item->get_title() . '"></span>';
678
+ }
679
+ if ( $sc['thumb'] == 'yes' ) {
680
+ $contentThumb .= '<span class="default" style="background-image:url(' . $sc['default'] . ');" title="' . $item->get_title() . '"></span>';
681
+ }
682
+ }
683
+ $contentThumb = apply_filters( 'feedzy_thumb_output', $contentThumb, $feedURL, $sizes );
684
+ } else {
685
+ $contentThumb = '';
686
+ $contentThumb .= '<span class="default" style="width:' . $sizes['width'] . 'px; height:' . $sizes['height'] . 'px; background-image:url(' . $sc['default'] . ');" title="' . $item->get_title() . '"></span>';
687
+ $contentThumb = apply_filters( 'feedzy_thumb_output', $contentThumb, $feedURL, $sizes );
688
+ }
689
+ $contentTitle = '';
690
+ if ( is_numeric( $sc['title'] ) && strlen( $item->get_title() ) > $sc['title'] ) {
691
+ $contentTitle .= preg_replace( '/\s+?(\S+)?$/', '', substr( $item->get_title(), 0, $sc['title'] ) ) . '...';
692
+ } else {
693
+ $contentTitle .= $item->get_title();
694
+ }
695
+ $contentTitle = apply_filters( 'feedzy_title_output', $contentTitle, $feedURL );
696
+ // Define Meta args
697
+ $metaArgs = array(
698
+ 'author' => true,
699
+ 'date' => true,
700
+ 'date_format' => get_option( 'date_format' ),
701
+ 'time_format' => get_option( 'time_format' ),
702
+ );
703
+ // Filter: feedzy_meta_args
704
+ $metaArgs = apply_filters( 'feedzy_meta_args', $metaArgs, $feedURL );
705
+ $contentMeta = '';
706
+ if ( $sc['meta'] == 'yes' && ( $metaArgs['author'] || $metaArgs['date'] ) ) {
707
+ $contentMeta = '';
708
+ if ( $item->get_author() && $metaArgs['author'] ) {
709
+ $author = $item->get_author();
710
+ if ( ! $authorName = $author->get_name() ) {
711
+ $authorName = $author->get_email();
712
+ }
713
+ if ( $authorName ) {
714
+ $domain = parse_url( $newLink );
715
+ $authorURL = '//' . $domain['host'];
716
+ $authorURL = apply_filters( 'feedzy_author_url', $authorURL, $authorName, $feedURL );
717
+ $contentMeta .= __( 'by', 'feedzy-rss-feeds' ) . ' <a href="' . $authorURL . '" target="' . $sc['target'] . '" title="' . $domain['host'] . '" >' . $authorName . '</a> ';
718
+ }
719
+ }
720
+ if ( $metaArgs['date'] ) {
721
+ $date_time = $item->get_date( 'U' );
722
+ $date_time = apply_filters( 'feedzy_feed_timestamp', $date_time, $feedURL );
723
+ $contentMeta .= __( 'on', 'feedzy-rss-feeds' ) . ' ' . date_i18n( $metaArgs['date_format'], $date_time );
724
+ $contentMeta .= ' ';
725
+ $contentMeta .= __( 'at', 'feedzy-rss-feeds' ) . ' ' . date_i18n( $metaArgs['time_format'], $date_time );
726
+ }
727
+ }
728
+ $contentMeta = apply_filters( 'feedzy_meta_output', $contentMeta, $feedURL );
729
+ $contentSummary = '';
730
+ if ( $sc['summary'] == 'yes' ) {
731
+ $contentSummary = '';
732
+ $description = $item->get_description();
733
+ $description = apply_filters( 'feedzy_summary_input', $description, $item->get_content(), $feedURL );
734
+ if ( is_numeric( $sc['summarylength'] ) && strlen( $description ) > $sc['summarylength'] ) {
735
+ $contentSummary .= preg_replace( '/\s+?(\S+)?$/', '', substr( $description, 0, $sc['summarylength'] ) ) . ' […]';
736
+ } else {
737
+ $contentSummary .= $description . ' […]';
738
+ }
739
+ $contentSummary = apply_filters( 'feedzy_summary_output', $contentSummary, $newLink, $feedURL );
740
+ }
741
+ $itemArray = array(
742
+ 'item_img_class' => 'rss_image',
743
+ 'item_img_style' => 'width:' . $sizes['width'] . 'px; height:' . $sizes['height'] . 'px;',
744
+ 'item_url' => $newLink,
745
+ 'item_url_target' => $sc['target'],
746
+ 'item_url_title' => $item->get_title(),
747
+ 'item_img' => $contentThumb,
748
+ 'item_img_path' => $this->feedzy_retrieve_image( $item ),
749
+ 'item_title' => $contentTitle,
750
+ 'item_content_class' => 'rss_content',
751
+ 'item_content_style' => '',
752
+ 'item_meta' => $contentMeta,
753
+ 'item_date' => $item->get_date( 'U' ),
754
+ 'item_author' => $item->get_author(),
755
+ 'item_description' => $contentSummary,
756
+ );
757
+ $itemArray = apply_filters( 'feedzy_item_filter', $itemArray, $item );
758
+
759
+ return $itemArray;
760
+ }
761
+
762
+ /**
763
+ * Retrive image from the item object
764
+ *
765
+ * @since 3.0.0
766
+ * @access public
767
+ *
768
+ * @param object $item The item object.
769
+ *
770
+ * @return string
771
+ */
772
+ public function feedzy_retrieve_image( $item ) {
773
+ $theThumbnail = '';
774
+ if ( $enclosures = $item->get_enclosures() ) {
775
+ foreach ( (array) $enclosures as $enclosure ) {
776
+ // Item thumbnail
777
+ if ( $thumbnail = $enclosure->get_thumbnail() ) {
778
+ $theThumbnail = $thumbnail;
779
+ }
780
+ if ( isset( $enclosure->thumbnails ) ) {
781
+ foreach ( (array) $enclosure->thumbnails as $thumbnail ) {
782
+ $theThumbnail = $thumbnail;
783
+ }
784
+ }
785
+ if ( $thumbnail = $enclosure->embed() ) {
786
+ $pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpeg|JPEG|jpe|JPE|gif|GIF|png|PNG)/i';
787
+ if ( preg_match( $pattern, $thumbnail, $matches ) ) {
788
+ $theThumbnail = $matches[0];
789
+ }
790
+ }
791
+ foreach ( (array) $enclosure->get_link() as $thumbnail ) {
792
+ $pattern = '/https?:\/\/.*\.(?:jpg|JPG|jpeg|JPEG|jpe|JPE|gif|GIF|png|PNG)/i';
793
+ $imgsrc = $thumbnail;
794
+ if ( preg_match( $pattern, $imgsrc, $matches ) ) {
795
+ $theThumbnail = $thumbnail;
796
+ break;
797
+ }
798
+ }
799
+ // Break loop if thumbnail is found
800
+ if ( ! empty( $theThumbnail ) ) {
801
+ break;
802
+ }
803
+ }
804
+ }
805
+ // xmlns:itunes podcast
806
+ if ( empty( $theThumbnail ) ) {
807
+ $data = $item->get_item_tags( 'http://www.itunes.com/dtds/podcast-1.0.dtd', 'image' );
808
+ if ( isset( $data['0']['attribs']['']['href'] ) && ! empty( $data['0']['attribs']['']['href'] ) ) {
809
+ $theThumbnail = $data['0']['attribs']['']['href'];
810
+ }
811
+ }
812
+ // Content image
813
+ if ( empty( $theThumbnail ) ) {
814
+ $feedDescription = $item->get_content();
815
+ $theThumbnail = $this->feedzy_return_image( $feedDescription );
816
+ }
817
+ // Description image
818
+ if ( empty( $theThumbnail ) ) {
819
+ $feedDescription = $item->get_description();
820
+ $theThumbnail = $this->feedzy_return_image( $feedDescription );
821
+ }
822
+
823
+ return $theThumbnail;
824
+ }
825
+
826
+ /**
827
+ * Get an image from a string
828
+ *
829
+ * @since 3.0.0
830
+ * @access public
831
+ *
832
+ * @param string $string A string with an <img/> tag.
833
+ *
834
+ * @return string
835
+ */
836
+ public function feedzy_return_image( $string ) {
837
+ $img = html_entity_decode( $string, ENT_QUOTES, 'UTF-8' );
838
+ $pattern = '/<img[^>]+\>/i';
839
+ preg_match( $pattern, $img, $matches );
840
+ if ( isset( $matches[0] ) ) {
841
+ $blacklistCount = 0;
842
+ foreach ( $matches as $matche ) {
843
+ $link = $this->feedzy_scrape_image( $matche );
844
+ $blacklist = array();
845
+ $blacklist = apply_filters( 'feedzy_feed_blacklist_images', $this->feedzy_blacklist_images( $blacklist ) );
846
+ foreach ( $blacklist as $string ) {
847
+ if ( strpos( (string) $link, $string ) !== false ) {
848
+ $blacklistCount ++;
849
+ }
850
+ }
851
+ if ( $blacklistCount == 0 ) {
852
+ break;
853
+ }
854
+ }
855
+ if ( $blacklistCount == 0 ) {
856
+ return $link;
857
+ }
858
+ }
859
+
860
+ return '';
861
+ }
862
+
863
+ /**
864
+ * Scrape an image for link from a string with an <img/>
865
+ *
866
+ * @since 3.0.0
867
+ * @access public
868
+ *
869
+ * @param string $string A string with an <img/> tag.
870
+ * @param string $link The link to search for.
871
+ *
872
+ * @return string
873
+ */
874
+ public function feedzy_scrape_image( $string, $link = '' ) {
875
+ $pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
876
+ $match = $link;
877
+ preg_match( $pattern, $string, $link );
878
+ if ( ! empty( $link ) && isset( $link[1] ) ) {
879
+ $match = $link[1];
880
+ }
881
+
882
+ return $match;
883
+ }
884
+
885
+ /**
886
+ * List blacklisted images to prevent fetching emoticons
887
+ *
888
+ * @since 3.0.0
889
+ * @access public
890
+ *
891
+ * @param array $blacklist An array with blacklisted resources.
892
+ *
893
+ * @return array
894
+ */
895
+ public function feedzy_blacklist_images( $blacklist ) {
896
+ $blacklist = array(
897
+ 'frownie.png',
898
+ 'icon_arrow.gif',
899
+ 'icon_biggrin.gif',
900
+ 'icon_confused.gif',
901
+ 'icon_cool.gif',
902
+ 'icon_cry.gif',
903
+ 'icon_eek.gif',
904
+ 'icon_evil.gif',
905
+ 'icon_exclaim.gif',
906
+ 'icon_idea.gif',
907
+ 'icon_lol.gif',
908
+ 'icon_mad.gif',
909
+ 'icon_mrgreen.gif',
910
+ 'icon_neutral.gif',
911
+ 'icon_question.gif',
912
+ 'icon_razz.gif',
913
+ 'icon_redface.gif',
914
+ 'icon_rolleyes.gif',
915
+ 'icon_sad.gif',
916
+ 'icon_smile.gif',
917
+ 'icon_surprised.gif',
918
+ 'icon_twisted.gif',
919
+ 'icon_wink.gif',
920
+ 'mrgreen.png',
921
+ 'rolleyes.png',
922
+ 'simple-smile.png',
923
+ );
924
+
925
+ return $blacklist;
926
+ }
927
+
928
+ /**
929
+ * Image name encoder and url retrive if in url param
930
+ *
931
+ * @since 3.0.0
932
+ * @access public
933
+ *
934
+ * @param string $string A string containing the image URL.
935
+ *
936
+ * @return string
937
+ */
938
+ public function feedzy_image_encode( $string ) {
939
+ // Check if img url is set as an URL parameter
940
+ $url_tab = parse_url( $string );
941
+ if ( isset( $url_tab['query'] ) ) {
942
+ preg_match_all( '/(http|https):\/\/[^ ]+(\.gif|\.GIF|\.jpg|\.JPG|\.jpeg|\.JPEG|\.png|\.PNG)/', $url_tab['query'], $imgUrl );
943
+ if ( isset( $imgUrl[0][0] ) ) {
944
+ $string = $imgUrl[0][0];
945
+ }
946
+ }
947
+ // Encode image name only en keep extra parameters
948
+ $query = '';
949
+ if ( isset( $url_tab['query'] ) ) {
950
+ $query = '?' . $url_tab['query'];
951
+ }
952
+ $path = $url_tab['path'];
953
+
954
+ // Return a well encoded image url
955
+ return $url_tab['scheme'] . '://' . $url_tab['host'] . '/' . $path . $query;
956
+ }
957
+
958
+ /**
959
+ * Render the form template for tinyMCE popup.
960
+ * Called via ajax.
961
+ *
962
+ * @since 3.0.0
963
+ * @access public
964
+ */
965
+ public function get_tinymce_form() {
966
+ die( include FEEDZY_ABSPATH . '/form/form.php' );
967
+ }
968
+
969
+ /**
970
+ * Method used to render upsell page.
971
+ *
972
+ * @since 3.0.12
973
+ * @access public
974
+ */
975
+ public function render_upsell() {
976
+ $this->load_layout( 'feedzy-upsell' );
977
+ }
978
+
979
+ /**
980
+ * Method used to render pages
981
+ *
982
+ * @since 3.0.12
983
+ * @access public
984
+ *
985
+ * @param string $layout_name The name of the layout.
986
+ *
987
+ * @return mixed
988
+ */
989
+ public function load_layout( $layout_name ) {
990
+ include( FEEDZY_ABSPATH . '/includes/layouts/' . $layout_name . '.php' );
991
+ }
992
+
993
+ /**
994
+ * Utility method to insert before specific key
995
+ * in an associative array.
996
+ *
997
+ * @since 3.0.12
998
+ * @access public
999
+ *
1000
+ * @param string $key The key before to insert.
1001
+ * @param array $array The array in which to insert the new key.
1002
+ * @param string $new_key The new key name.
1003
+ * @param mixed $new_value The new key value.
1004
+ *
1005
+ * @return array|bool
1006
+ */
1007
+ protected function array_insert_before( $key, &$array, $new_key, $new_value ) {
1008
+ if ( array_key_exists( $key, $array ) ) {
1009
+ $new = array();
1010
+ foreach ( $array as $k => $value ) {
1011
+ if ( $k === $key ) {
1012
+ $new[ $new_key ] = $new_value;
1013
+ }
1014
+ $new[ $k ] = $value;
1015
+ }
1016
+
1017
+ return $new;
1018
+ }
1019
+
1020
+ return false;
1021
+ }
1022
+ }
includes/admin/feedzy-rss-feeds-admin.php ADDED
@@ -0,0 +1,508 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The admin-specific functionality of the plugin.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/admin
10
+ */
11
+ /**
12
+ * The admin-specific functionality of the plugin.
13
+ *
14
+ * Defines the plugin name, version, and two examples hooks for how to
15
+ * enqueue the admin-specific stylesheet and JavaScript.
16
+ *
17
+ * @package feedzy-rss-feeds
18
+ * @subpackage feedzy-rss-feeds/includes/admin
19
+ * @author Themeisle <friends@themeisle.com>
20
+ */
21
+
22
+ /**
23
+ * Class Feedzy_Rss_Feeds_Admin
24
+ */
25
+ class Feedzy_Rss_Feeds_Admin extends Feedzy_Rss_Feeds_Admin_Abstract {
26
+
27
+ /**
28
+ * Any notice we want to show in the settings screen.
29
+ *
30
+ * @access public
31
+ * @var string $notice The notice.
32
+ */
33
+ public $notice;
34
+ /**
35
+ * Any error we want to show in the settings screen.
36
+ *
37
+ * @access public
38
+ * @var string $error The error.
39
+ */
40
+ public $error;
41
+ /**
42
+ * The version of this plugin.
43
+ *
44
+ * @since 3.0.0
45
+ * @access protected
46
+ * @var string $version The current version of this plugin.
47
+ */
48
+ protected $version;
49
+ /**
50
+ * The ID of this plugin.
51
+ *
52
+ * @since 3.0.0
53
+ * @access private
54
+ * @var string $plugin_name The ID of this plugin.
55
+ */
56
+ private $plugin_name;
57
+
58
+ /**
59
+ * Initialize the class and set its properties.
60
+ *
61
+ * @since 3.0.0
62
+ * @access public
63
+ *
64
+ * @param string $plugin_name The name of this plugin.
65
+ * @param string $version The version of this plugin.
66
+ */
67
+ public function __construct( $plugin_name, $version ) {
68
+ $this->plugin_name = $plugin_name;
69
+ $this->version = $version;
70
+ }
71
+
72
+ /**
73
+ * Register the stylesheets for the admin area.
74
+ *
75
+ * @since 3.0.0
76
+ * @access public
77
+ */
78
+ public function enqueue_styles() {
79
+ /**
80
+ * This function is provided for demonstration purposes only.
81
+ *
82
+ * An instance of this class should be passed to the run() function
83
+ * defined in Feedzy_Rss_Feeds_Loader as all of the hooks are defined
84
+ * in that particular class.
85
+ *
86
+ * The Feedzy_Rss_Feeds_Loader will then create the relationship
87
+ * between the defined hooks and the functions defined in this
88
+ * class.
89
+ */
90
+
91
+ wp_enqueue_style( $this->plugin_name, FEEDZY_ABSURL . 'css/feedzy-rss-feeds.css', array(), $this->version, 'all' );
92
+ if ( ! is_admin() ) {
93
+ return;
94
+ }
95
+ $screen = get_current_screen();
96
+ if ( empty( $screen ) ) {
97
+ return;
98
+ }
99
+ if ( ! isset( $screen->base ) ) {
100
+ return;
101
+ }
102
+
103
+ $upsell_screens = array( 'feedzy-rss_page_feedzy-settings', 'feedzy-rss_page_feedzy-admin-menu-pro-upsell' );
104
+
105
+ if ( ! in_array( $screen->base, $upsell_screens ) && strpos( $screen->id, 'feedzy' ) === false ) {
106
+ return;
107
+ }
108
+ wp_enqueue_style( $this->plugin_name . '-upsell', FEEDZY_ABSURL . 'includes/layouts/css/upsell.css' );
109
+ wp_enqueue_style( $this->plugin_name . '-settings', FEEDZY_ABSURL . 'css/metabox-settings.css', array( $this->plugin_name . '-upsell' ) );
110
+ }
111
+
112
+ /**
113
+ * Register the JavaScript for the admin area.
114
+ *
115
+ * @since 3.0.0
116
+ * @access public
117
+ */
118
+ public function enqueue_scripts() {
119
+
120
+ /**
121
+ * This function is provided for demonstration purposes only.
122
+ *
123
+ * An instance of this class should be passed to the run() function
124
+ * defined in Feedzy_Rss_Feeds_Loader as all of the hooks are defined
125
+ * in that particular class.
126
+ *
127
+ * The Feedzy_Rss_Feeds_Loader will then create the relationship
128
+ * between the defined hooks and the functions defined in this
129
+ * class.
130
+ */
131
+ }
132
+
133
+ /**
134
+ * Method to register custom post type for
135
+ * Feedzy RSS Feeds Categories.
136
+ *
137
+ * @since 3.0.12
138
+ * @access public
139
+ */
140
+ public function register_post_type() {
141
+ $labels = array(
142
+ 'name' => __( 'Feed Categories', 'feedzy-rss-feeds' ),
143
+ 'singular_name' => __( 'Feed Category', 'feedzy-rss-feeds' ),
144
+ 'add_new' => __( 'Add Category', 'feedzy-rss-feeds' ),
145
+ 'add_new_item' => __( 'Add Category', 'feedzy-rss-feeds' ),
146
+ 'edit_item' => __( 'Edit Category', 'feedzy-rss-feeds' ),
147
+ 'new_item' => __( 'New Feed Category', 'feedzy-rss-feeds' ),
148
+ 'view_item' => __( 'View Category', 'feedzy-rss-feeds' ),
149
+ 'search_items' => __( 'Search Category', 'feedzy-rss-feeds' ),
150
+ 'not_found' => __( 'No categories found', 'feedzy-rss-feeds' ),
151
+ 'not_found_in_trash' => __( 'No categories in the trash', 'feedzy-rss-feeds' ),
152
+ );
153
+ $supports = array(
154
+ 'title',
155
+ );
156
+ $args = array(
157
+ 'labels' => $labels,
158
+ 'supports' => $supports,
159
+ 'public' => true,
160
+ 'exclude_from_search' => true,
161
+ 'publicly_queryable' => false,
162
+ 'show_in_nav_menus' => false,
163
+ 'capability_type' => 'post',
164
+ 'rewrite' => array( 'slug' => 'feedzy-category' ),
165
+ 'show_in_menu' => 'feedzy-admin-menu',
166
+ 'register_meta_box_cb' => array( $this, 'add_feedzy_post_type_metaboxes' ),
167
+ );
168
+ $args = apply_filters( 'feedzy_post_type_args', $args );
169
+ register_post_type( 'feedzy_categories', $args );
170
+ }
171
+
172
+ /**
173
+ * Method to add a meta box to `feedzy_categories`
174
+ * custom post type.
175
+ *
176
+ * @since 3.0.12
177
+ * @access public
178
+ */
179
+ public function add_feedzy_post_type_metaboxes() {
180
+ add_meta_box(
181
+ 'feedzy_category_feeds', __( 'Category Feeds', 'feedzy-rss-feeds' ), array(
182
+ $this,
183
+ 'feedzy_category_feed',
184
+ ), 'feedzy_categories', 'normal', 'high'
185
+ );
186
+ add_meta_box(
187
+ 'feedzy_category_feeds_rn', __( 'Increase your social media presence', 'feedzy-rss-feeds' ), array(
188
+ $this,
189
+ 'render_upsell_rn',
190
+ ), 'feedzy_categories', 'side', 'low'
191
+ );
192
+ }
193
+
194
+ /**
195
+ * Render RN upsell metabox.
196
+ */
197
+ public function render_upsell_rn() {
198
+ echo '<p>Learn how you can connect with people by sharing content from RSS feeds on your social media accounts. </p>';
199
+ echo '<a class="button button-primary " href="https://revive.social/plugins/revive-network/" target="_blank">View more details</a>';
200
+
201
+ }
202
+
203
+ /**
204
+ * Meta box callback function to display a textarea
205
+ * inside the custom post edit page.
206
+ *
207
+ * @since 3.0.12
208
+ * @access public
209
+ * @return mixed
210
+ */
211
+ public function feedzy_category_feed() {
212
+ global $post;
213
+ $nonce = wp_create_nonce( FEEDZY_BASEFILE );
214
+ $feed = get_post_meta( $post->ID, 'feedzy_category_feed', true );
215
+ $output = '
216
+ <input type="hidden" name="feedzy_category_meta_noncename" id="feedzy_category_meta_noncename" value="' . $nonce . '" />
217
+ <textarea name="feedzy_category_feed" rows="15" class="widefat" placeholder="' . __( 'Place your URL\'s here followed by a comma.', 'feedzy-rss-feeds' ) . '" >' . $feed . '</textarea>
218
+ ';
219
+ echo $output;
220
+ }
221
+
222
+ /**
223
+ * Utility method to save metabox data to
224
+ * custom post type.
225
+ *
226
+ * @since 3.0.12
227
+ * @access public
228
+ *
229
+ * @param integer $post_id The active post ID.
230
+ * @param object $post The post object.
231
+ *
232
+ * @return mixed|integer
233
+ */
234
+ public function save_feedzy_post_type_meta( $post_id, $post ) {
235
+ if (
236
+ empty( $_POST ) ||
237
+ ( isset( $_POST['feedzy_category_meta_noncename'] ) && ! wp_verify_nonce( $_POST['feedzy_category_meta_noncename'], FEEDZY_BASEFILE ) ) ||
238
+ ! current_user_can( 'edit_post', $post_id )
239
+ ) {
240
+ return $post_id;
241
+ }
242
+ $category_meta['feedzy_category_feed'] = array();
243
+ if ( isset( $_POST['feedzy_category_feed'] ) ) {
244
+ $category_meta['feedzy_category_feed'] = $_POST['feedzy_category_feed'];
245
+ }
246
+ if ( $post->post_type == 'revision' ) {
247
+ return true;
248
+ } else {
249
+ foreach ( $category_meta as $key => $value ) {
250
+ $value = implode( ',', (array) $value );
251
+ if ( get_post_meta( $post_id, $key, false ) ) {
252
+ update_post_meta( $post_id, $key, $value );
253
+ } else {
254
+ add_post_meta( $post_id, $key, $value );
255
+ }
256
+ if ( ! $value ) {
257
+ delete_post_meta( $post_id, $key );
258
+ }
259
+ }
260
+
261
+ return true;
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Method for adding `slug` column to post type
267
+ * table and internalize the `title`. Used for
268
+ * table head.
269
+ *
270
+ * @since 3.0.12
271
+ * @access public
272
+ *
273
+ * @param array $columns The default columns array.
274
+ *
275
+ * @return array
276
+ */
277
+ public function feedzy_category_columns( $columns ) {
278
+ $columns['title'] = __( 'Category Title', 'feedzy-rss-feeds' );
279
+ if ( $new_columns = $this->array_insert_before( 'date', $columns, 'slug', __( 'Slug', 'feedzy-rss-feeds' ) ) ) {
280
+ $columns = $new_columns;
281
+ } else {
282
+ $columns['slug'] = __( 'Slug', 'feedzy-rss-feeds' );
283
+ }
284
+
285
+ return $columns;
286
+ }
287
+
288
+ /**
289
+ * Method for displaying post type data in custom
290
+ * added columns.
291
+ *
292
+ * @since 3.0.12
293
+ * @access public
294
+ *
295
+ * @param string $column The column string.
296
+ * @param integer $post_id The active post ID.
297
+ *
298
+ * @return mixed
299
+ */
300
+ public function manage_feedzy_category_columns( $column, $post_id ) {
301
+ global $post;
302
+ switch ( $column ) {
303
+ case 'slug':
304
+ $slug = $post->post_name;
305
+ if ( empty( $slug ) ) {
306
+ echo __( 'Undefined', 'feedzy-rss-feeds' );
307
+ } else {
308
+ echo '<code>' . $slug . '</code>';
309
+ }
310
+ break;
311
+ default:
312
+ break;
313
+ }
314
+ }
315
+
316
+ /**
317
+ * The custom plugin_row_meta function
318
+ * Adds additional links on the plugins page for this plugin
319
+ *
320
+ * @since 3.0.0
321
+ * @access public
322
+ *
323
+ * @param array $links The array having default links for the plugin.
324
+ * @param string $file The name of the plugin file.
325
+ *
326
+ * @return array
327
+ */
328
+ public function feedzy_filter_plugin_row_meta( $links, $file ) {
329
+ if ( strpos( $file, 'feedzy-rss-feed.php' ) !== false ) {
330
+ $new_links = array(
331
+ 'doc' => '<a href="http://docs.themeisle.com/article/277-feedzy-rss-feeds-hooks" target="_blank" title="' . __( 'Documentation and examples', 'feedzy-rss-feeds' ) . '">' . __( 'Documentation and examples', 'feedzy-rss-feeds' ) . '</a>',
332
+ 'more_features' => '<a href="' . FEEDZY_UPSELL_LINK . '" target="_blank" title="' . __( 'More Plugins', 'feedzy-rss-feeds' ) . '">' . __( 'More Features', 'feedzy-rss-feeds' ) . '<i style="width: 17px; height: 17px; margin-left: 4px; color: #ffca54; font-size: 17px; vertical-align: -3px;" class="dashicons dashicons-unlock more-features-icon"></i></a>',
333
+ );
334
+ $links = array_merge( $links, $new_links );
335
+ }
336
+
337
+ return $links;
338
+ }
339
+
340
+ /**
341
+ * Method to register pages for admin menu.
342
+ *
343
+ * @since 3.0.12
344
+ * @access public
345
+ */
346
+ public function feedzy_menu_pages() {
347
+ $svg_base64_icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4NTAuMzkiIGhlaWdodD0iODUwLjM5Ij48cGF0aCBmaWxsPSIjREIzOTM5IiBkPSJNNDI1LjIgMkMxOTAuMzYgMiAwIDE5MS45MiAwIDQyNi4yYzAgMjM0LjI3IDE5MC4zNyA0MjQuMiA0MjUuMiA0MjQuMiAyMzQuODIgMCA0MjUuMi0xODkuOTMgNDI1LjItNDI0LjJDODUwLjQgMTkxLjkgNjYwIDIgNDI1LjIgMnptLTQ2LjU1IDY2OC42NmgtOTEuNTh2LTU3LjFMMjM3LjUgNTY0LjFoLTU3LjI2di05MS4yNGg5NS4yNWwxMDMuMTUgMTAyLjh2OTV6bTE1Mi41MiAwSDQzOS42di0xMzMuM0wzMTMuODUgNDExLjk0aC0xMzMuNnYtOTEuMzZIMzUxLjdMNTMxLjE4IDQ5OS42djE3MS4wNnptMTUyLjU1IDBoLTkxLjU4VjQ2MS4yTDM5MC4wNiAyNTkuNzRIMTgwLjI0di05MS4zNmgyNDcuOGwyNTUuNjggMjU1LjA3djI0Ny4yMnoiLz48L3N2Zz4=';
348
+ add_menu_page( __( 'Feedzy RSS Feeds', 'feedzy-rss-feeds' ), __( 'Feedzy RSS', 'feedzy-rss-feeds' ), 'manage_options', 'feedzy-admin-menu', '', $svg_base64_icon, 98.7666 );
349
+ if ( ! class_exists( 'Feedzy_Rss_Feeds_Pro' ) ) {
350
+ add_submenu_page(
351
+ 'feedzy-admin-menu', __( 'More Features', 'feedzy-rss-feeds' ), __( 'More Features', 'feedzy-rss-feeds' ) . '<span class="dashicons
352
+ dashicons-star-filled more-features-icon" style="width: 17px; height: 17px; margin-left: 4px; color: #ffca54; font-size: 17px; vertical-align: -3px;"></span>', 'manage_options', 'feedzy-admin-menu-pro-upsell',
353
+ array(
354
+ $this,
355
+ 'render_upsell',
356
+ )
357
+ );
358
+ } else {
359
+ $is_business = apply_filters( 'feedzy_is_business_filter', false );
360
+ if ( $is_business != false ) {
361
+ add_submenu_page( 'feedzy-admin-menu', __( 'Import Posts', 'feedzy-rss-feeds' ), __( 'Import Posts', 'feedzy-rss-feeds' ), 'manage_options', 'edit.php?post_type=feedzy_imports' );
362
+ }
363
+ }
364
+ add_submenu_page(
365
+ 'feedzy-admin-menu', __( 'Settings', 'feedzy-rss-feeds' ), __( 'Settings', 'feedzy-rss-feeds' ), 'manage_options', 'feedzy-settings', array(
366
+ $this,
367
+ 'feedzy_settings_page',
368
+ )
369
+ );
370
+ }
371
+
372
+ /**
373
+ * Method to register the settings page.
374
+ *
375
+ * @access public
376
+ */
377
+ public function feedzy_settings_page() {
378
+ if ( isset( $_POST['feedzy-settings-submit'] ) && isset( $_POST['tab'] ) && wp_verify_nonce( $_POST['nonce'], $_POST['tab'] ) ) {
379
+ $this->save_settings();
380
+ $this->notice = __( 'Your settings were saved.', 'feedzy-rss-feeds' );
381
+ }
382
+
383
+ $settings = apply_filters( 'feedzy_get_settings', array() );
384
+ include( FEEDZY_ABSPATH . '/includes/layouts/settings.php' );
385
+ }
386
+
387
+ /**
388
+ * Method to save the settings.
389
+ *
390
+ * @access private
391
+ */
392
+ private function save_settings() {
393
+ $settings = apply_filters( 'feedzy_get_settings', array() );
394
+ switch ( $_POST['tab'] ) {
395
+ case 'headers':
396
+ $settings['header']['user-agent'] = $_POST['user-agent'];
397
+ break;
398
+ case 'proxy':
399
+ $settings['proxy'] = array(
400
+ 'host' => $_POST['proxy-host'],
401
+ 'port' => $_POST['proxy-port'],
402
+ 'user' => $_POST['proxy-user'],
403
+ 'pass' => $_POST['proxy-pass'],
404
+ );
405
+ break;
406
+ }
407
+
408
+ update_option( 'feedzy-settings', $settings );
409
+ }
410
+
411
+ /**
412
+ * Method to get the settings.
413
+ *
414
+ * @access public
415
+ */
416
+ public function get_settings() {
417
+ $settings = get_option( 'feedzy-settings' );
418
+
419
+ return $settings;
420
+ }
421
+
422
+ /**
423
+ * Set up the HTTP parameters/headers.
424
+ *
425
+ * @access public
426
+ */
427
+ public function pre_http_setup( $url ) {
428
+ $this->add_proxy( $url );
429
+ add_filter( 'http_headers_useragent', array( $this, 'add_user_agent' ) );
430
+ }
431
+
432
+ /**
433
+ * Add the proxy settings as specified in the settings.
434
+ *
435
+ * @access private
436
+ */
437
+ private function add_proxy( $url ) {
438
+ $settings = apply_filters( 'feedzy_get_settings', null );
439
+ if ( $settings && is_array( $settings['proxy'] ) && ! empty( $settings['proxy'] ) ) {
440
+ // if even one constant is defined, escape.
441
+ if ( defined( 'WP_PROXY_HOST' ) || defined( 'WP_PROXY_PORT' ) || defined( 'WP_PROXY_USERNAME' ) || defined( 'WP_PROXY_PASSWORD' ) ) {
442
+ do_action( 'themeisle_log_event', FEEDZY_NAME, 'Some proxy constants already defined; ignoring proxy settings', 'info', __FILE__, __LINE__ );
443
+
444
+ return;
445
+ }
446
+ if ( isset( $settings['proxy']['host'] ) ) {
447
+ define( 'WP_PROXY_HOST', $settings['proxy']['host'] );
448
+ }
449
+ if ( isset( $settings['proxy']['port'] ) ) {
450
+ define( 'WP_PROXY_PORT', $settings['proxy']['port'] );
451
+ }
452
+ if ( isset( $settings['proxy']['user'] ) ) {
453
+ define( 'WP_PROXY_USERNAME', $settings['proxy']['user'] );
454
+ }
455
+ if ( isset( $settings['proxy']['pass'] ) ) {
456
+ define( 'WP_PROXY_PASSWORD', $settings['proxy']['pass'] );
457
+ }
458
+
459
+ // temporary constant for use in the pre_http_send_through_proxy filter.
460
+ if ( ! defined( 'FEEZY_URL_THRU_PROXY' ) ) {
461
+ define( 'FEEZY_URL_THRU_PROXY', $url );
462
+ }
463
+ add_filter( 'pre_http_send_through_proxy', array( $this, 'send_through_proxy' ), 10, 4 );
464
+ }
465
+ }
466
+
467
+ /**
468
+ * Add the user agent if specified in the settings.
469
+ *
470
+ * @access public
471
+ */
472
+ public function add_user_agent( $ua ) {
473
+ $settings = apply_filters( 'feedzy_get_settings', null );
474
+ if ( $settings && isset( $settings['header']['user-agent'] ) && ! empty( $settings['header']['user-agent'] ) ) {
475
+ do_action( 'themeisle_log_event', FEEDZY_NAME, sprintf( 'Override user-agent from %s to %s', $ua, $settings['header']['user-agent'] ), 'info', __FILE__, __LINE__ );
476
+ $ua = $settings['header']['user-agent'];
477
+ }
478
+
479
+ return $ua;
480
+ }
481
+
482
+ /**
483
+ * Check if the uri should go through the proxy.
484
+ *
485
+ * @access public
486
+ */
487
+ public function send_through_proxy( $return, $uri, $check, $home ) {
488
+ $proxied = defined( 'FEEZY_URL_THRU_PROXY' ) ? FEEZY_URL_THRU_PROXY : null;
489
+ if ( $proxied && ( ( is_array( $proxied ) && in_array( $uri, $proxied ) ) || $uri === $proxied ) ) {
490
+ do_action( 'themeisle_log_event', FEEDZY_NAME, sprintf( 'sending %s through proxy', $uri ), 'info', __FILE__, __LINE__ );
491
+
492
+ return true;
493
+ }
494
+
495
+ return false;
496
+ }
497
+
498
+ /**
499
+ * Teardown the HTTP parameters/headers.
500
+ *
501
+ * @access public
502
+ */
503
+ public function post_http_teardown( $url ) {
504
+ remove_filter( 'http_headers_useragent', array( $this, 'add_user_agent' ) );
505
+ }
506
+
507
+
508
+ }
includes/admin/feedzy-rss-feeds-options.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Options main wrapper class.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.3
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/admin
10
+ */
11
+ if ( ! class_exists( 'Feedy_Rss_Feeds_Options' ) ) {
12
+ /**
13
+ * Singleton class for options wrapper
14
+ */
15
+ class Feedzy_Rss_Feeds_Options {
16
+
17
+ /**
18
+ * The main instance var.
19
+ *
20
+ * @var Feedzy_Rss_Feeds_Options The one Feedy_Rss_Feeds_Options istance.
21
+ * @since 3.0.3
22
+ */
23
+ private static $instance;
24
+
25
+ /**
26
+ * The main options array.
27
+ *
28
+ * @var array The options array.
29
+ * @since 3.0.3
30
+ */
31
+ private $options;
32
+
33
+ /**
34
+ * Init the main singleton instance class.
35
+ *
36
+ * @return Feedzy_Rss_Feeds_Options Return the instance class
37
+ */
38
+ public static function instance() {
39
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Feedzy_Rss_Feeds_Options ) ) {
40
+ self::$instance = new Feedzy_Rss_Feeds_Options;
41
+ self::$instance->init();
42
+ }
43
+
44
+ return self::$instance;
45
+ }
46
+
47
+ /**
48
+ * Init the default values of the options class.
49
+ */
50
+ public function init() {
51
+ self::$instance->options = get_option( Feedzy_Rss_Feeds::get_plugin_name() );
52
+ }
53
+
54
+ /**
55
+ * Get the key option value from DB.
56
+ *
57
+ * @param string $key The key name of the option.
58
+ *
59
+ * @return bool|mixed The value of the option
60
+ */
61
+ public function get_var( $key ) {
62
+ if ( isset( self::$instance->options[ $key ] ) ) {
63
+ return self::$instance->options[ $key ];
64
+ }
65
+
66
+ return false;
67
+ }
68
+
69
+ /**
70
+ * Setter method for updating the options array.
71
+ *
72
+ * @param string $key The name of option.
73
+ * @param string $value The value of the option.
74
+ *
75
+ * @return bool|mixed The value of the option.
76
+ */
77
+ public function set_var( $key, $value = '' ) {
78
+ self::$instance->options[ $key ] = apply_filters( 'feedzy_pre_set_option_' . $key, $value );
79
+
80
+ return update_option( Feedzy_Rss_Feeds::get_plugin_name(), self::$instance->options );
81
+
82
+ }
83
+ }
84
+ }// End if().
includes/admin/feedzy-rss-feeds-ui-lang.php ADDED
@@ -0,0 +1,369 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Language function file for tinymce.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/admin
10
+ */
11
+ /**
12
+ *
13
+ * SECURITY : Exit if accessed directly
14
+ */
15
+ if ( ! defined( 'ABSPATH' ) ) {
16
+ die( 'Direct access not allowed!' );
17
+ }
18
+
19
+ /**
20
+ *
21
+ * Translation for TinyMCE
22
+ */
23
+
24
+ if ( ! class_exists( '_WP_Editors' ) ) {
25
+ require( ABSPATH . WPINC . '/class-wp-editor.php' );
26
+ }
27
+
28
+ /**
29
+ * Class Feedzy_Rss_Feeds_Ui_Lang
30
+ */
31
+ class Feedzy_Rss_Feeds_Ui_Lang {
32
+
33
+ /**
34
+ * The strings for translation.
35
+ *
36
+ * @since 3.0.0
37
+ * @access protected
38
+ * @var array $strings The ID of this plugin.
39
+ */
40
+ protected $strings;
41
+
42
+ /**
43
+ * Initialize the class and set its properties.
44
+ *
45
+ * @since 3.0.0
46
+ * @access public
47
+ */
48
+ public function __construct() {
49
+ $this->strings = array(
50
+ 'popup_url' => wp_nonce_url( 'admin-ajax.php', 'feedzy_ajax_token', 'feedzy_request_form_token' ),
51
+ 'pro_url' => FEEDZY_UPSELL_LINK,
52
+ 'plugin_label' => __( 'Feedzy Lite', 'feedzy-rss-feeds' ),
53
+ 'plugin_title' => __( 'Insert Feedzy RSS Feeds Shortcode', 'feedzy-rss-feeds' ),
54
+ 'image_button' => __( 'Use Image', 'feedzy-rss-feeds' ),
55
+ 'insert_button' => __( 'Insert Shortcode', 'feedzy-rss-feeds' ),
56
+ 'cancel_button' => __( 'Cancel', 'feedzy-rss-feeds' ),
57
+ 'pro_button' => __( 'Get Feedzy RSS Feeds Premium', 'feedzy-rss-feeds' ),
58
+ );
59
+ }
60
+
61
+ /**
62
+ * Return the default values of the forms elements
63
+ *
64
+ * @return array The default values of shortcode elements
65
+ */
66
+ public static function get_form_defaults() {
67
+
68
+ $html_parts = self::get_form_elements();
69
+ $all_options = wp_list_pluck( array_values( $html_parts ), 'elements' );
70
+ $all_options = call_user_func_array( 'array_merge', $all_options );
71
+ $defaults = array();
72
+
73
+ foreach ( $all_options as $id => $option ) {
74
+ $defaults[ $id ] = $option['value'];
75
+ }
76
+
77
+ return $defaults;
78
+ }
79
+
80
+ /**
81
+ * The method for localizing and generating of the tinyMCE popup form.
82
+ *
83
+ * It returns an array, use it to add more options to the popup window.
84
+ * Can be hook-ed into via 'feedzy_get_form_elements'.
85
+ *
86
+ * @since 3.0.0
87
+ * @access public
88
+ * @return array|mixed|void
89
+ */
90
+ public static function get_form_elements() {
91
+ $elements = array(
92
+ 'section_feed' => array(
93
+ 'title' => __( 'Feed Source', 'feedzy-rss-feeds' ),
94
+ 'elements' => array(
95
+ 'feeds' => array(
96
+ 'label' => __( 'The feed(s) URL (comma-separated list).', 'feedzy-rss-feeds' ) . ' ' . __( 'Check feed before insert.', 'feedzy-rss-feeds' ),
97
+ 'placeholder' => __( 'Feed URL', 'feedzy-rss-feeds' ),
98
+ 'type' => 'text',
99
+ 'value' => '',
100
+ ),
101
+ 'max' => array(
102
+ 'label' => __( 'Number of items to display.', 'feedzy-rss-feeds' ),
103
+ 'placeholder' => __( '(eg: 5)', 'feedzy-rss-feeds' ),
104
+ 'type' => 'text',
105
+ 'value' => '',
106
+ ),
107
+ 'feed_title' => array(
108
+ 'label' => __( 'Should we display the RSS title?', 'feedzy-rss-feeds' ),
109
+ 'type' => 'select',
110
+ 'value' => '',
111
+ 'opts' => array(
112
+ 'yes' => array(
113
+ 'label' => __( 'Yes', 'feedzy-rss-feeds' ),
114
+ 'value' => 'yes',
115
+ ),
116
+ 'no' => array(
117
+ 'label' => __( 'No', 'feedzy-rss-feeds' ),
118
+ 'value' => 'no',
119
+ ),
120
+ ),
121
+ ),
122
+ 'refresh' => array(
123
+ 'label' => __( 'For how long we will cache the feed results.', 'feedzy-rss-feeds' ),
124
+ 'placeholder' => __( '(eg: 1_days, defaults: 12_hours)', 'feedzy-rss-feeds' ),
125
+ 'type' => 'select',
126
+ 'value' => '12_hours',
127
+ 'opts' => array(
128
+ '1_hours' => array(
129
+ 'label' => '1' . ' ' . __( 'Hour', 'feedzy-rss-feeds' ),
130
+ 'value' => '1_hours',
131
+ ),
132
+ '3_hours' => array(
133
+ 'label' => '3' . ' ' . __( 'Hours', 'feedzy-rss-feeds' ),
134
+ 'value' => '3_hours',
135
+ ),
136
+ '12_hours' => array(
137
+ 'label' => '12' . ' ' . __( 'Hours', 'feedzy-rss-feeds' ),
138
+ 'value' => '12_hours',
139
+ ),
140
+ '1_days' => array(
141
+ 'label' => '1' . ' ' . __( 'Day', 'feedzy-rss-feeds' ),
142
+ 'value' => '1_days',
143
+ ),
144
+ '3_days' => array(
145
+ 'label' => '3' . ' ' . __( 'Days', 'feedzy-rss-feeds' ),
146
+ 'value' => '3_days',
147
+ ),
148
+ '15_days' => array(
149
+ 'label' => '15' . ' ' . __( 'Days', 'feedzy-rss-feeds' ),
150
+ 'value' => '15_days',
151
+ ),
152
+ ),
153
+ ),
154
+ ),
155
+ ),
156
+ 'section_item' => array(
157
+ 'title' => __( 'Item Options', 'feedzy-rss-feeds' ),
158
+ 'elements' => array(
159
+ 'target' => array(
160
+ 'label' => __( 'Links may be opened in the same window or a new tab.', 'feedzy-rss-feeds' ),
161
+ 'type' => 'select',
162
+ 'value' => '',
163
+ 'opts' => array(
164
+ 'auto' => array(
165
+ 'label' => __( 'Auto', 'feedzy-rss-feeds' ),
166
+ 'value' => '',
167
+ ),
168
+ '_blank' => array(
169
+ 'label' => __( '_blank', 'feedzy-rss-feeds' ),
170
+ 'value' => '_blank',
171
+ ),
172
+ '_self' => array(
173
+ 'label' => __( '_self', 'feedzy-rss-feeds' ),
174
+ 'value' => '_self',
175
+ ),
176
+ '_parent' => array(
177
+ 'label' => __( '_parent', 'feedzy-rss-feeds' ),
178
+ 'value' => '_parent',
179
+ ),
180
+ '_top' => array(
181
+ 'label' => __( '_top', 'feedzy-rss-feeds' ),
182
+ 'value' => '_top',
183
+ ),
184
+ 'framename' => array(
185
+ 'label' => __( 'framename', 'feedzy-rss-feeds' ),
186
+ 'value' => 'framename',
187
+ ),
188
+ ),
189
+ ),
190
+ 'title' => array(
191
+ 'label' => __( 'Trim the title of the item after X characters.', 'feedzy-rss-feeds' ),
192
+ 'placeholder' => __( '(eg: 160)', 'feedzy-rss-feeds' ),
193
+ 'type' => 'text',
194
+ 'value' => '',
195
+ ),
196
+ 'meta' => array(
197
+ 'label' => __( 'Should we display the date of publication and the author name?', 'feedzy-rss-feeds' ),
198
+ 'type' => 'select',
199
+ 'value' => '',
200
+ 'opts' => array(
201
+ 'yes' => array(
202
+ 'label' => __( 'Yes', 'feedzy-rss-feeds' ),
203
+ 'value' => 'yes',
204
+ ),
205
+ 'no' => array(
206
+ 'label' => __( 'No', 'feedzy-rss-feeds' ),
207
+ 'value' => 'no',
208
+ ),
209
+ ),
210
+ ),
211
+ 'summary' => array(
212
+ 'label' => __( 'Should we display a description (abstract) of the retrieved item?', 'feedzy-rss-feeds' ),
213
+ 'type' => 'select',
214
+ 'value' => '',
215
+ 'opts' => array(
216
+ 'yes' => array(
217
+ 'label' => __( 'Yes', 'feedzy-rss-feeds' ),
218
+ 'value' => 'yes',
219
+ ),
220
+ 'no' => array(
221
+ 'label' => __( 'No', 'feedzy-rss-feeds' ),
222
+ 'value' => 'no',
223
+ ),
224
+ ),
225
+ ),
226
+ 'summarylength' => array(
227
+ 'label' => __( 'Crop description (summary) of the element after X characters.', 'feedzy-rss-feeds' ),
228
+ 'type' => 'text',
229
+ 'placeholder' => __( '(eg: 160)', 'feedzy-rss-feeds' ),
230
+ 'value' => '',
231
+ ),
232
+ 'keywords_title' => array(
233
+ 'label' => __( 'Only display item if title contains specific keyword(s) (comma-separated list/case sensitive).', 'feedzy-rss-feeds' ),
234
+ 'placeholder' => __( '(eg: news, sports etc.)', 'feedzy-rss-feeds' ),
235
+ 'type' => 'text',
236
+ 'value' => '',
237
+ 'disabled' => feedzy_is_new(),
238
+ ),
239
+ 'keywords_ban' => array(
240
+ 'label' => __( 'Exclude items if title or content contains specific keyword(s) (comma-separated list/case sensitive). ', 'feedzy-rss-feeds' ),
241
+ 'placeholder' => __( '(eg: politics, gossip etc.)', 'feedzy-rss-feeds' ),
242
+ 'type' => 'text',
243
+ 'value' => '',
244
+ 'disabled' => true,
245
+ ),
246
+ ),
247
+ ),
248
+ 'section_image' => array(
249
+ 'title' => __( 'Item Image Options', 'feedzy-rss-feeds' ),
250
+ 'elements' => array(
251
+ 'thumb' => array(
252
+ 'label' => __( 'Should we display the first image of the content if it is available?', 'feedzy-rss-feeds' ),
253
+ 'type' => 'select',
254
+ 'value' => '',
255
+ 'opts' => array(
256
+ 'auto' => array(
257
+ 'label' => __( 'Auto', 'feedzy-rss-feeds' ),
258
+ 'value' => '',
259
+ ),
260
+ 'yes' => array(
261
+ 'label' => __( 'Yes', 'feedzy-rss-feeds' ),
262
+ 'value' => 'yes',
263
+ ),
264
+ 'no' => array(
265
+ 'label' => __( 'No', 'feedzy-rss-feeds' ),
266
+ 'value' => 'no',
267
+ ),
268
+ ),
269
+ ),
270
+ 'default' => array(
271
+ 'label' => __( 'Default thumbnail URL if no image is found.', 'feedzy-rss-feeds' ),
272
+ 'placeholder' => __( 'Image URL', 'feedzy-rss-feeds' ),
273
+ 'type' => 'file',
274
+ 'value' => '',
275
+ 'button' => array(
276
+ 'button_text' => __( 'Select from Gallery', 'feedzy-rss-feeds' ),
277
+ ),
278
+ ),
279
+ 'size' => array(
280
+ 'label' => __( 'Thumbnails dimension. Do not include "px". Eg: 150', 'feedzy-rss-feeds' ),
281
+ 'placeholder' => __( '(eg: 150)', 'feedzy-rss-feeds' ),
282
+ 'type' => 'text',
283
+ 'value' => '',
284
+ ),
285
+ ),
286
+ ),
287
+ 'section_pro' => array(
288
+ 'title' => __( 'PRO Options', 'feedzy-rss-feeds' ),
289
+ 'description' => __( 'Get access to more options and customizations with full version of Feedzy RSS Feeds . Use existing templates or extend them and make them your own.', 'feedzy-rss-feeds' ) . '<br/>' . '<a href="' . FEEDZY_UPSELL_LINK . '" target="_blank"><small>' . __( 'See more features of Feedzy RSS Feeds ', 'feedzy-rss-feeds' ) . '</small></a>',
290
+ 'elements' => array(
291
+ 'price' => array(
292
+ 'label' => __( 'Should we display the price from the feed if it is available?', 'feedzy-rss-feeds' ),
293
+ 'type' => 'select',
294
+ 'disabled' => true,
295
+ 'value' => '',
296
+ 'opts' => array(
297
+ 'yes' => array(
298
+ 'label' => __( 'Yes', 'feedzy-rss-feeds' ),
299
+ 'value' => 'yes',
300
+ ),
301
+ 'no' => array(
302
+ 'label' => __( 'No', 'feedzy-rss-feeds' ),
303
+ 'value' => 'no',
304
+ ),
305
+ ),
306
+ ),
307
+ 'referral_url' => array(
308
+ 'label' => __( 'Referral URL parameters (w/o "?").', 'feedzy-rss-feeds' ),
309
+ 'placeholder' => __( '(eg. promo_code=feedzy_is_awesome)', 'feedzy-rss-feeds' ),
310
+ 'type' => 'text',
311
+ 'disabled' => true,
312
+ 'value' => '',
313
+ ),
314
+ 'columns' => array(
315
+ 'label' => __( 'How many columns we should use to display the feed items', 'feedzy-rss-feeds' ),
316
+ 'placeholder' => __( '(eg. 1, 2, ..., 6)', 'feedzy-rss-feeds' ),
317
+ 'type' => 'number',
318
+ 'disabled' => true,
319
+ 'value' => '1',
320
+ ),
321
+ 'template' => array(
322
+ 'label' => __( 'Template to use when displaying the feed.', 'feedzy-rss-feeds' ),
323
+ 'type' => 'radio',
324
+ 'disabled' => true,
325
+ 'value' => '',
326
+ 'opts' => array(
327
+ 'auto' => array(
328
+ 'label' => __( 'Default', 'feedzy-rss-feeds' ),
329
+ 'value' => 'default',
330
+ ),
331
+ 'yes' => array(
332
+ 'label' => __( 'Style 1', 'feedzy-rss-feeds' ),
333
+ 'value' => 'style1',
334
+ ),
335
+ 'no' => array(
336
+ 'label' => __( 'Style 2', 'feedzy-rss-feeds' ),
337
+ 'value' => 'style2',
338
+ ),
339
+ ),
340
+ ),
341
+ ),
342
+ ),
343
+ );
344
+
345
+ $elements = apply_filters( 'feedzy_get_form_elements_filter', $elements );
346
+
347
+ return $elements;
348
+ }
349
+
350
+ /**
351
+ *
352
+ * The method that returns the translation array
353
+ *
354
+ * @since 3.0.0
355
+ * @access public
356
+ * @return string
357
+ */
358
+ public function feedzy_tinymce_translation() {
359
+
360
+ $locale = _WP_Editors::$mce_locale;
361
+ $translated = 'tinyMCE.addI18n("' . $locale . '.feedzy_tinymce_plugin", ' . json_encode( $this->strings ) . ");\n";
362
+
363
+ return $translated;
364
+ }
365
+
366
+ }
367
+
368
+ $feedzyLangClass = new Feedzy_Rss_Feeds_Ui_Lang();
369
+ $strings = $feedzyLangClass->feedzy_tinymce_translation();
includes/admin/feedzy-rss-feeds-ui.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The UI functionality of the plugin.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/admin
10
+ */
11
+
12
+ /**
13
+ * The UI functionality of the plugin.
14
+ *
15
+ * @package feedzy-rss-feeds
16
+ * @subpackage feedzy-rss-feeds/includes/admin
17
+ * @author Themeisle <friends@themeisle.com>
18
+ */
19
+ class Feedzy_Rss_Feeds_Ui {
20
+
21
+ /**
22
+ * The ID of this plugin.
23
+ *
24
+ * @since 3.0.0
25
+ * @access private
26
+ * @var string $plugin_name The ID of this plugin.
27
+ */
28
+ private $plugin_name;
29
+
30
+ /**
31
+ * The version of this plugin.
32
+ *
33
+ * @since 3.0.0
34
+ * @access private
35
+ * @var string $version The current version of this plugin.
36
+ */
37
+ private $version;
38
+
39
+ /**
40
+ * The loader class.
41
+ *
42
+ * @since 3.0.0
43
+ * @access private
44
+ * @var Feedzy_Rss_Feeds_Loader $loader The loader class of the plugin.
45
+ */
46
+ private $loader;
47
+
48
+ /**
49
+ * Initialize the class and set its properties.
50
+ *
51
+ * @since 3.0.0
52
+ * @access public
53
+ * @param string $plugin_name The name of this plugin.
54
+ * @param string $version The version of this plugin.
55
+ * @param Feedzy_Rss_Feeds_Loader $loader The version of this plugin.
56
+ */
57
+ public function __construct( $plugin_name, $version, Feedzy_Rss_Feeds_Loader $loader ) {
58
+
59
+ $this->plugin_name = $plugin_name;
60
+ $this->version = $version;
61
+ $this->loader = $loader;
62
+
63
+ }
64
+
65
+ /**
66
+ * Initialize the hooks and filters for the tinymce button
67
+ *
68
+ * @since 3.0.0
69
+ * @access public
70
+ */
71
+ public function register_init() {
72
+ if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) ) {
73
+ if ( 'true' == get_user_option( 'rich_editing' ) ) {
74
+
75
+ $this->loader->add_filter( 'mce_external_plugins', $this, 'feedzy_tinymce_plugin', 10, 1 );
76
+ $this->loader->add_filter( 'mce_buttons', $this, 'feedzy_register_mce_button', 10, 1 );
77
+
78
+ $this->loader->add_action( 'admin_enqueue_scripts', $this, 'enqueue_scripts', 10 );
79
+
80
+ $this->loader->run();
81
+ }
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Register the JavaScript for the admin area.
87
+ *
88
+ * @since 3.0.0
89
+ * @access public
90
+ */
91
+ public function enqueue_scripts() {
92
+
93
+ /**
94
+ * This function is provided for demonstration purposes only.
95
+ *
96
+ * An instance of this class should be passed to the run() function
97
+ * defined in Feedzy_Rss_Feeds_Loader as all of the hooks are defined
98
+ * in that particular class.
99
+ *
100
+ * The Feedzy_Rss_Feeds_Loader will then create the relationship
101
+ * between the defined hooks and the functions defined in this
102
+ * class.
103
+ */
104
+ }
105
+
106
+ /**
107
+ * Load plugin translation for - TinyMCE API
108
+ *
109
+ * @since 3.0.0
110
+ * @access public
111
+ * @param array $arr The tinymce_lang array.
112
+ * @return array
113
+ */
114
+ public function feedzy_add_tinymce_lang( $arr ) {
115
+ $feedzy_rss_feeds_ui_lang = FEEDZY_ABSPATH . '/includes/admin/feedzy-rss-feeds-ui-lang.php';
116
+ $feedzy_rss_feeds_ui_lang = apply_filters( 'feedzy_rss_feeds_ui_lang_filter', $feedzy_rss_feeds_ui_lang );
117
+ $arr[] = $feedzy_rss_feeds_ui_lang;
118
+ return $arr;
119
+ }
120
+
121
+ /**
122
+ * Load custom js options - TinyMCE API
123
+ *
124
+ * @since 3.0.0
125
+ * @access public
126
+ * @param array $plugin_array The tinymce plugin array.
127
+ * @return array
128
+ */
129
+ public function feedzy_tinymce_plugin( $plugin_array ) {
130
+ $plugin_array['feedzy_mce_button'] = FEEDZY_ABSURL . 'js/feedzy-rss-feeds-ui-mce.js';
131
+ return $plugin_array;
132
+ }
133
+
134
+ /**
135
+ * Register new button in the editor
136
+ *
137
+ * @since 3.0.0
138
+ * @access public
139
+ * @param array $buttons The tinymce buttons array.
140
+ * @return array
141
+ */
142
+ public function feedzy_register_mce_button( $buttons ) {
143
+ array_push( $buttons, 'feedzy_mce_button' );
144
+ return $buttons;
145
+ }
146
+ }
includes/admin/feedzy-rss-feeds-upgrader.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Options main wrapper class.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.3
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/admin
10
+ */
11
+ if ( ! class_exists( 'Feedzy_Rss_Feeds_Upgrader' ) ) {
12
+ /**
13
+ * Class Feedzy_Rss_Feeds_Upgrader for upgrading processes
14
+ */
15
+ class Feedzy_Rss_Feeds_Upgrader {
16
+ /**
17
+ * Store the database version of the plugin.
18
+ *
19
+ * @var string $db_version Version from the database of the plugin.
20
+ */
21
+ public $db_version;
22
+
23
+ /**
24
+ * Stores the plugin php version.
25
+ *
26
+ * @var string $php_version The plugin php version
27
+ */
28
+ public $php_version;
29
+
30
+ /**
31
+ * Feedzy_Rss_Feeds_Upgrader constructor.
32
+ */
33
+ public function __construct() {
34
+ $php_version = Feedzy_Rss_Feeds::get_version();
35
+ $db_version = feedzy_options()->get_var( 'db_version' );
36
+ if ( $db_version === false ) {
37
+ feedzy_options()->set_var( 'db_version', $php_version );
38
+ $this->db_version = $php_version;
39
+ } else {
40
+ if ( feedzy_options()->get_var( 'is_new' ) === false ) {
41
+ feedzy_options()->set_var( 'is_new', 'no' );
42
+ }
43
+ $this->db_version = $db_version;
44
+ }
45
+ $this->php_version = $php_version;
46
+ }
47
+
48
+ /**
49
+ * Check if we need to run an upgrade or not.
50
+ */
51
+ public function check() {
52
+ if ( version_compare( $this->db_version, $this->php_version ) === - 1 ) {
53
+ do_action( 'feedzy_upgrade_to_' . self::version_to_hook( $this->php_version ), $this->db_version );
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Normalize version to be used in hooks.
59
+ *
60
+ * @param string $version In format 2.0.0.
61
+ *
62
+ * @return string Version format 2_0_0.
63
+ */
64
+ public static function version_to_hook( $version ) {
65
+ return str_replace( '.', '_', $version );
66
+ }
67
+ }
68
+ }// End if().
includes/admin/feedzy-wp-widget.php ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Widget functionality of the plugin.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes/admin
10
+ */
11
+
12
+ /**
13
+ * The Widget functionality of the plugin.
14
+ *
15
+ * @package feedzy-rss-feeds
16
+ * @subpackage feedzy-rss-feeds/includes/admin
17
+ * @author Themeisle <friends@themeisle.com>
18
+ */
19
+ // @codingStandardsIgnoreStart
20
+ class feedzy_wp_widget extends WP_Widget {
21
+ // @codingStandardsIgnoreEnd
22
+ /**
23
+ * The class instance.
24
+ *
25
+ * @since 3.0.0
26
+ * @access public
27
+ * @var feedzy_wp_widget $instance The instance of the class.
28
+ */
29
+ public static $instance;
30
+
31
+ /**
32
+ * The feedzy_wp_widget constructor method
33
+ *
34
+ * @since 3.0.0
35
+ * @access public
36
+ *
37
+ * @param Feedzy_Rss_Feeds_Admin $plugin_admin The Feedzy_Rss_Feeds_Admin object.
38
+ */
39
+ public function __construct( $plugin_admin = null ) {
40
+ parent::__construct( false, $name = __( 'Feedzy RSS Feeds', 'feedzy-rss-feeds' ) );
41
+ self::$instance = $this;
42
+
43
+ }
44
+
45
+ /**
46
+ * Returns the instance of this class as in the singleton pattern
47
+ *
48
+ * @since 3.0.0
49
+ * @access public
50
+ * @return feedzy_wp_widget
51
+ */
52
+ public static function get_instance() {
53
+ if ( self::$instance === null ) {
54
+ self::$instance = new self();
55
+ }
56
+
57
+ return self::$instance;
58
+ }
59
+
60
+ /**
61
+ * The register method for registering this widget class
62
+ *
63
+ * @since 3.0.0
64
+ * @access public
65
+ */
66
+ public function registerWidget() {
67
+ register_widget( 'feedzy_wp_widget' );
68
+ }
69
+
70
+ /**
71
+ * The widget form creation
72
+ *
73
+ * @since 3.0.0
74
+ * @access public
75
+ *
76
+ * @param string $instance The Widget instance.
77
+ *
78
+ * @return mixed
79
+ */
80
+ public function form( $instance ) {
81
+ $instance = wp_parse_args( $instance, $this->get_widget_defaults() );
82
+ $widget_form = '<p>
83
+ <label for="' . $this->get_field_id( 'title' ) . '">' . __( 'Widget Title', 'feedzy-rss-feeds' ) . '</label>
84
+ <input class="widefat" id="' . $this->get_field_id( 'title' ) . '" name="' . $this->get_field_name( 'title' ) . '" type="text" value="' . esc_attr( $instance['title'] ) . '" />
85
+ </p>
86
+ <p>
87
+ <label for="' . $this->get_field_id( 'textarea' ) . '">' . __( 'Intro text', 'feedzy-rss-feeds' ) . '</label>
88
+ <textarea class="widefat" id="' . $this->get_field_id( 'textarea' ) . '" name="' . $this->get_field_name( 'textarea' ) . '">' . esc_attr( $instance['textarea'] ) . '</textarea>
89
+ </p>';
90
+ foreach ( Feedzy_Rss_Feeds_Ui_Lang::get_form_elements() as $key_section => $section ) {
91
+ $widget_form .= '<hr/><h4>' . $section['title'] . '</h4>';
92
+ if ( isset( $section['description'] ) ) {
93
+ $widget_form .= '<small>' . $section['description'] . '</small>';
94
+ }
95
+ foreach ( $section['elements'] as $id => $element ) {
96
+ if ( isset( $element['disabled'] ) && $element['disabled'] ) {
97
+ continue;
98
+ }
99
+ if ( $id == 'feed_title' ) {
100
+ continue;
101
+ }
102
+ if ( $id == 'title' ) {
103
+ $id = 'titlelength';
104
+ }
105
+ $widget_form .= '<p>';
106
+ $widget_form .= '<label for="' . $this->get_field_id( $id ) . '">' . $element['label'] . '</label>';
107
+ if ( $element['type'] == 'text' || $element['type'] == 'file' ) {
108
+ $widget_form .= '<input class="widefat" id="' . $this->get_field_id( $id ) . '" name="' . $this->get_field_name( $id ) . '" type="text" value="' . esc_attr( $instance[ $id ] ) . '" />';
109
+ }
110
+ if ( $element['type'] == 'number' ) {
111
+ $widget_form .= '<input class="widefat" id="' . $this->get_field_id( $id ) . '" name="' . $this->get_field_name( $id ) . '" type="number" value="' . esc_attr( $instance[ $id ] ) . '" />';
112
+ }
113
+ if ( $element['type'] == 'select' || $element['type'] == 'radio' ) {
114
+ $widget_form .= '<select class="widefat" id="' . $this->get_field_id( $id ) . '" name="' . $this->get_field_name( $id ) . '" >';
115
+ foreach ( $element['opts'] as $select_option ) {
116
+ $widget_form .= '<option ' . selected( esc_attr( $select_option['value'] ), self::bool_to_enum( $instance[ $id ] ), false ) . 'value="' . esc_attr( $select_option['value'] ) . '">' . esc_html( $select_option['label'] ) . '</option>';
117
+ }
118
+ $widget_form .= '</select>';
119
+ }
120
+ $widget_form .= '</p>';
121
+
122
+ }
123
+ }
124
+ $widget_form .= '<hr/>';
125
+ $widget_form = apply_filters( 'feedzy_widget_form_filter', $widget_form, $instance, $this->get_widget_defaults() );
126
+ echo $widget_form;
127
+
128
+ }
129
+
130
+ /**
131
+ * Get widget default values for params
132
+ *
133
+ * @return array List of defaults values
134
+ */
135
+ public function get_widget_defaults() {
136
+ $defaults = Feedzy_Rss_Feeds_Ui_Lang::get_form_defaults();
137
+ // rename title to title length as widget instance already have one
138
+ $defaults['titlelength'] = $defaults['title'];
139
+ $defaults['title'] = '';
140
+ $defaults['textarea'] = '';
141
+
142
+ return $defaults;
143
+ }
144
+
145
+ /**
146
+ * Convert binary values to yes/no touple.
147
+ *
148
+ * @param mixed $value string Value to convert to yes/no.
149
+ *
150
+ * @return bool
151
+ */
152
+ public static function bool_to_enum( $value ) {
153
+ if ( in_array( $value, array( 'yes', 'no' ) ) ) {
154
+ return $value;
155
+ }
156
+ $value = strval( $value );
157
+ if ( $value == '1' || $value == 'true' ) {
158
+ return 'yes';
159
+ }
160
+ if ( $value == '0' || $value == 'false' ) {
161
+ return 'no';
162
+ }
163
+ if ( $value == '' ) {
164
+ return 'auto';
165
+ }
166
+ return $value;
167
+
168
+ }
169
+
170
+ /**
171
+ *
172
+ * The update method
173
+ *
174
+ * @since 3.0.0
175
+ * @access public
176
+ *
177
+ * @param array $new_instance The new widget instance.
178
+ * @param array $old_instance The old widget instance.
179
+ *
180
+ * @return array
181
+ */
182
+ public function update( $new_instance, $old_instance ) {
183
+ $instance = $old_instance;
184
+ $instance['title'] = strip_tags( $new_instance['title'] );
185
+ if ( current_user_can( 'unfiltered_html' ) ) {
186
+ $instance['textarea'] = $new_instance['textarea'];
187
+ } else {
188
+ $instance['textarea'] = stripslashes( wp_filter_post_kses( addslashes( $new_instance['textarea'] ) ) );
189
+ }
190
+ $forms_ids = array_keys( $this->get_widget_defaults() );
191
+ foreach ( $forms_ids as $key ) {
192
+ $instance[ $key ] = strip_tags( isset( $new_instance[ $key ] ) ? $new_instance[ $key ] : '' );
193
+ }
194
+ $instance = apply_filters( 'feedzy_widget_update_filter', $instance, $new_instance );
195
+
196
+ return $instance;
197
+
198
+ }
199
+
200
+ /**
201
+ *
202
+ * The widget function
203
+ *
204
+ * @since 3.0.0
205
+ * @access public
206
+ *
207
+ * @param array $args The args to use.
208
+ * @param array $instance The widget instance.
209
+ */
210
+ public function widget( $args, $instance ) {
211
+ $title = apply_filters( 'widget_title', $instance['title'] );
212
+ $textarea = apply_filters( 'widget_textarea', empty( $instance['textarea'] ) ? '' : $instance['textarea'], $instance );
213
+ // Display the widget body
214
+ echo $args['before_widget'];
215
+ // Check if title is set
216
+ if ( $title ) {
217
+ echo $args['before_title'] . $title . $args['after_title'];
218
+ }
219
+ // Check if text intro is set
220
+ if ( isset( $instance['textarea'] ) && ! empty( $instance['textarea'] ) ) {
221
+ echo '<p class="feedzy-widget-intro">' . wpautop( $textarea ) . '</p>';
222
+ }
223
+ $feedzy_widget_shortcode_attributes = array(
224
+ 'feeds' => $instance['feeds'],
225
+ 'max' => $instance['max'],
226
+ 'feed_title' => 'no',
227
+ 'target' => $instance['target'],
228
+ 'title' => $instance['titlelength'],
229
+ 'meta' => self::bool_to_enum( $instance['meta'] ),
230
+ 'summary' => self::bool_to_enum( $instance['summary'] ),
231
+ 'summarylength' => $instance['summarylength'],
232
+ 'thumb' => self::bool_to_enum( $instance['thumb'] ),
233
+ 'default' => $instance['default'],
234
+ 'size' => $instance['size'],
235
+ 'keywords_title' => $instance['keywords_title'],
236
+ );
237
+ $feedzy_widget_shortcode_attributes = apply_filters( 'feedzy_widget_shortcode_attributes_filter', $feedzy_widget_shortcode_attributes, $args, $instance );
238
+
239
+ echo feedzy_rss( $feedzy_widget_shortcode_attributes );
240
+ echo $args['after_widget'];
241
+
242
+ }
243
+
244
+ }
includes/feedzy-rss-feeds-activator.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Fired during plugin activation
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes
10
+ */
11
+
12
+ /**
13
+ * Fired during plugin activation.
14
+ *
15
+ * This class defines all code necessary to run during the plugin's activation.
16
+ *
17
+ * @since 3.0.0
18
+ * @package feedzy-rss-feeds
19
+ * @subpackage feedzy-rss-feeds/includes
20
+ * @author Themeisle <friends@themeisle.com>
21
+ */
22
+ class Feedzy_Rss_Feeds_Activator {
23
+
24
+ /**
25
+ * Plugin activation action.
26
+ *
27
+ * Triggers the plugin activation action on plugin activate.
28
+ *
29
+ * @since 3.0.0
30
+ * @access public
31
+ */
32
+ public static function activate() {
33
+ $options = get_option( Feedzy_Rss_Feeds::get_plugin_name(), array() );
34
+ $old_logger_option = get_option( 'feedzy_logger_flag', 'no' );
35
+ if ( $old_logger_option == 'yes' ) {
36
+ update_option( 'feedzy_rss_feeds_logger_flag', 'yes' );
37
+ update_option( 'feedzy_logger_flag', 'no' );
38
+ }
39
+ if ( ! isset( $options['is_new'] ) ) {
40
+ update_option(
41
+ Feedzy_Rss_Feeds::get_plugin_name(), array(
42
+ 'is_new' => 'yes',
43
+ )
44
+ );
45
+ }
46
+
47
+ }
48
+
49
+ }
includes/feedzy-rss-feeds-deactivator.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Fired during plugin deactivation
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes
10
+ */
11
+
12
+ /**
13
+ * Fired during plugin deactivation.
14
+ *
15
+ * This class defines all code necessary to run during the plugin's deactivation.
16
+ *
17
+ * @since 3.0.0
18
+ * @package feedzy-rss-feeds
19
+ * @subpackage feedzy-rss-feeds/includes
20
+ * @author Themeisle <friends@themeisle.com>
21
+ */
22
+ class Feedzy_Rss_Feeds_Deactivator {
23
+
24
+ /**
25
+ * Short Description. (use period)
26
+ *
27
+ * Long Description.
28
+ *
29
+ * @since 3.0.0
30
+ * @access public
31
+ */
32
+ public static function deactivate() {
33
+
34
+ }
35
+
36
+ }
includes/feedzy-rss-feeds-feed-tweaks.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Useful helper functions for plugin.
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes
10
+ */
11
+ // @codingStandardsIgnoreStart
12
+ /**
13
+ * @param string $content
14
+ *
15
+ * @return string
16
+ */
17
+ function feedzy_insert_thumbnail_RSS( $content ) {
18
+ // @codingStandardsIgnoreEnd
19
+ global $post;
20
+ if ( has_post_thumbnail( $post->ID ) ) {
21
+ $content = '' . get_the_post_thumbnail( $post->ID, 'thumbnail' ) . '' . $content;
22
+ }
23
+
24
+ return $content;
25
+ }
26
+
27
+ // Alter the main blog feed to insert the thumbnail image.
28
+ add_filter( 'the_excerpt_rss', 'feedzy_insert_thumbnail_RSS' );
29
+ add_filter( 'the_content_feed', 'feedzy_insert_thumbnail_RSS' );
30
+
31
+ /**
32
+ * Boostrap the plugin view.
33
+ *
34
+ * @param array $options The shortcode attributes.
35
+ */
36
+ function feedzy_rss( $options = array() ) {
37
+ $admin = Feedzy_Rss_Feeds::instance()->get_admin();
38
+ return $admin->feedzy_rss( $options );
39
+ }
40
+
41
+ /**
42
+ * The helper method for options wrapper
43
+ *
44
+ * @return Feedzy_Rss_Feeds_Options
45
+ */
46
+ function feedzy_options() {
47
+ return Feedzy_Rss_Feeds_Options::instance();
48
+ }
49
+
50
+ /**
51
+ * Check if the user is before 3.0.3 or not.
52
+ *
53
+ * @return bool If the users is before 3.0.3 or after
54
+ */
55
+ function feedzy_is_new() {
56
+ return feedzy_options()->get_var( 'is_new' ) === 'yes' && ! feedzy_is_pro();
57
+ }
58
+
59
+ /**
60
+ * Check if the user is pro or not.
61
+ *
62
+ * @return bool If the users is pro or not
63
+ */
64
+ function feedzy_is_pro() {
65
+ return defined( 'FEEDZY_PRO_ABSPATH' );
66
+ }
includes/feedzy-rss-feeds-i18n.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Define the internationalization functionality
4
+ *
5
+ * Loads and defines the internationalization files for this plugin
6
+ * so that it is ready for translation.
7
+ *
8
+ * @link http://themeisle.com
9
+ * @since 3.0.0
10
+ *
11
+ * @package feedzy-rss-feeds
12
+ * @subpackage feedzy-rss-feeds/includes
13
+ */
14
+
15
+ /**
16
+ * Define the internationalization functionality.
17
+ *
18
+ * Loads and defines the internationalization files for this plugin
19
+ * so that it is ready for translation.
20
+ *
21
+ * @since 3.0.0
22
+ * @package feedzy-rss-feeds
23
+ * @subpackage feedzy-rss-feeds/includes
24
+ * @author Themeisle <friends@themeisle.com>
25
+ */
26
+
27
+ // @codingStandardsIgnoreStart
28
+ class Feedzy_Rss_Feeds_i18n {
29
+ // @codingStandardsIgnoreEnd
30
+
31
+ /**
32
+ * Load the plugin text domain for translation.
33
+ *
34
+ * @since 3.0.0
35
+ * @access public
36
+ */
37
+ public function load_plugin_textdomain() {
38
+
39
+ load_plugin_textdomain(
40
+ 'feedzy-rss-feeds',
41
+ false,
42
+ dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/'
43
+ );
44
+
45
+ }
46
+
47
+
48
+
49
+ }
includes/feedzy-rss-feeds-loader.php ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Register all actions and filters for the plugin
4
+ *
5
+ * @link http://themeisle.com
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ * @subpackage feedzy-rss-feeds/includes
10
+ */
11
+
12
+ /**
13
+ * Register all actions and filters for the plugin.
14
+ *
15
+ * Maintain a list of all hooks that are registered throughout
16
+ * the plugin, and register them with the WordPress API. Call the
17
+ * run function to execute the list of actions and filters.
18
+ *
19
+ * @package feedzy-rss-feeds
20
+ * @subpackage feedzy-rss-feeds/includes
21
+ * @author Themeisle <friends@themeisle.com>
22
+ */
23
+ class Feedzy_Rss_Feeds_Loader {
24
+
25
+ /**
26
+ * The array of actions registered with WordPress.
27
+ *
28
+ * @since 3.0.0
29
+ * @access protected
30
+ * @var array $actions The actions registered with WordPress to fire when the plugin loads.
31
+ */
32
+ protected $actions;
33
+
34
+ /**
35
+ * The array of filters registered with WordPress.
36
+ *
37
+ * @since 3.0.0
38
+ * @access protected
39
+ * @var array $filters The filters registered with WordPress to fire when the plugin loads.
40
+ */
41
+ protected $filters;
42
+
43
+ /**
44
+ * Initialize the collections used to maintain the actions and filters.
45
+ *
46
+ * @since 3.0.0
47
+ * @access public
48
+ */
49
+ public function __construct() {
50
+
51
+ $this->actions = array();
52
+ $this->filters = array();
53
+
54
+ }
55
+
56
+ /**
57
+ * Add a new action to the collection to be registered with WordPress.
58
+ *
59
+ * @since 3.0.0
60
+ * @access public
61
+ * @param string $hook The name of the WordPress action that is being registered.
62
+ * @param object $component A reference to the instance of the object on which the action is defined.
63
+ * @param string $callback The name of the function definition on the $component.
64
+ * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
65
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
66
+ */
67
+ public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
68
+ $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
69
+ }
70
+
71
+ /**
72
+ * Add a new filter to the collection to be registered with WordPress.
73
+ *
74
+ * @since 3.0.0
75
+ * @access public
76
+ * @param string $hook The name of the WordPress filter that is being registered.
77
+ * @param object $component A reference to the instance of the object on which the filter is defined.
78
+ * @param string $callback The name of the function definition on the $component.
79
+ * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
80
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
81
+ */
82
+ public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
83
+ $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
84
+ }
85
+
86
+ /**
87
+ * Registers AJAX action hook.
88
+ *
89
+ * @since 3.0.0
90
+ * @access public
91
+ * @param string $tag The name of the AJAX action to which the $method is hooked.
92
+ * @param object $component A reference to the instance of the object on which the filter is defined.
93
+ * @param string $callback The name of the function definition on the $component.
94
+ * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
95
+ * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
96
+ * @param boolean $private Optional. Determines if we should register hook for logged in users.
97
+ * @param boolean $public Optional. Determines if we should register hook for not logged in users.
98
+ */
99
+ public function add_ajax_action( $tag, $component, $callback, $priority = 10, $accepted_args = 1, $private = true, $public = false ) {
100
+ if ( $private ) {
101
+ $this->actions = $this->add( $this->actions, 'wp_ajax_' . $tag, $component, $callback, $priority, $accepted_args );
102
+ }
103
+
104
+ if ( $public ) {
105
+ $this->actions = $this->add( $this->actions, 'wp_ajax_nopriv_' . $tag, $component, $callback, $priority, $accepted_args );
106
+ }
107
+ }
108
+
109
+ /**
110
+ * A utility function that is used to register the actions and hooks into a single
111
+ * collection.
112
+ *
113
+ * @since 3.0.0
114
+ * @access private
115
+ * @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
116
+ * @param string $hook The name of the WordPress filter that is being registered.
117
+ * @param object $component A reference to the instance of the object on which the filter is defined.
118
+ * @param string $callback The name of the function definition on the $component.
119
+ * @param int $priority The priority at which the function should be fired.
120
+ * @param int $accepted_args The number of arguments that should be passed to the $callback.
121
+ * @return array The collection of actions and filters registered with WordPress.
122
+ */
123
+ private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {
124
+
125
+ $hooks[] = array(
126
+ 'hook' => $hook,
127
+ 'component' => $component,
128
+ 'callback' => $callback,
129
+ 'priority' => $priority,
130
+ 'accepted_args' => $accepted_args,
131
+ );
132
+
133
+ return $hooks;
134
+
135
+ }
136
+
137
+ /**
138
+ * Register the filters and actions with WordPress.
139
+ *
140
+ * @since 3.0.0
141
+ * @access public
142
+ */
143
+ public function run() {
144
+
145
+ foreach ( $this->filters as $hook ) {
146
+ add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
147
+ }
148
+
149
+ foreach ( $this->actions as $hook ) {
150
+ add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
151
+ }
152
+
153
+ }
154
+
155
+ }
includes/feedzy-rss-feeds.php ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The file that defines the core plugin class
4
+ *
5
+ * A class definition that includes attributes and functions used across both the
6
+ * public-facing side of the site and the admin area.
7
+ *
8
+ * @link http://themeisle.com
9
+ * @since 3.0.0
10
+ *
11
+ * @package feedzy-rss-feeds
12
+ * @subpackage feedzy-rss-feeds/includes
13
+ */
14
+
15
+ /**
16
+ * The core plugin class.
17
+ *
18
+ * This is used to define internationalization, admin-specific hooks, and
19
+ * public-facing site hooks.
20
+ *
21
+ * Also maintains the unique identifier of this plugin as well as the current
22
+ * version of the plugin.
23
+ *
24
+ * @since 3.0.0
25
+ * @package feedzy-rss-feeds
26
+ * @subpackage feedzy-rss-feeds/includes
27
+ * @author Themeisle <friends@themeisle.com>
28
+ */
29
+ class Feedzy_Rss_Feeds {
30
+
31
+ /**
32
+ * The unique identifier of this plugin.
33
+ *
34
+ * @since 3.0.0
35
+ * @access protected
36
+ * @var string $plugin_name The string used to uniquely identify this plugin.
37
+ */
38
+ protected static $plugin_name;
39
+ /**
40
+ * The current version of the plugin.
41
+ *
42
+ * @since 3.0.0
43
+ * @access protected
44
+ * @var string $version The current version of the plugin.
45
+ */
46
+ protected static $version;
47
+
48
+ /**
49
+ * The main instance var.
50
+ *
51
+ * @var Feedzy_Rss_Feeds The one Feedzy_Rss_Feeds instance.
52
+ * @since 3.0.4
53
+ */
54
+ private static $instance;
55
+ /**
56
+ * The loader that's responsible for maintaining and registering all hooks that power
57
+ * the plugin.
58
+ *
59
+ * @since 3.0.0
60
+ * @access protected
61
+ * @var Feedzy_Rss_Feeds_Loader $loader Maintains and registers all hooks for the plugin.
62
+ */
63
+ protected $loader;
64
+ /**
65
+ * The class responsible for all upgrading proceses.
66
+ *
67
+ * @since 3.0.3
68
+ * @access protected
69
+ * @var Feedzy_Rss_Feeds_Upgrader $upgrader Responsible for the upgrading processes.
70
+ */
71
+ protected $upgrader;
72
+ /**
73
+ * The class responsible for all admin processes.
74
+ *
75
+ * @since 3.0.3
76
+ * @access protected
77
+ * @var Feedzy_Rss_Feeds_Admin $admin Responsible for the admin processes.
78
+ */
79
+ protected $admin;
80
+
81
+ /**
82
+ * Init the main singleton instance class.
83
+ *
84
+ * @return Feedzy_Rss_Feeds Return the instance class
85
+ */
86
+ public static function instance() {
87
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Feedzy_Rss_Feeds ) ) {
88
+ self::$instance = new Feedzy_Rss_Feeds;
89
+ self::$instance->init();
90
+ }
91
+
92
+ return self::$instance;
93
+ }
94
+
95
+ /**
96
+ * Define the core functionality of the plugin.
97
+ *
98
+ * Set the plugin name and the plugin version that can be used throughout the plugin.
99
+ * Load the dependencies, define the locale, and set the hooks for the admin area and
100
+ * the public-facing side of the site.
101
+ *
102
+ * @since 3.0.0
103
+ * @access public
104
+ */
105
+ public function init() {
106
+ self::$plugin_name = 'feedzy-rss-feeds';
107
+ self::$version = '3.2.4';
108
+ self::$instance->load_dependencies();
109
+ self::$instance->set_locale();
110
+ self::$instance->define_admin_hooks();
111
+
112
+ }
113
+
114
+ /**
115
+ * Load the required dependencies for this plugin.
116
+ *
117
+ * Include the following files that make up the plugin:
118
+ *
119
+ * - Feedzy_Rss_Feeds_Loader. Orchestrates the hooks of the plugin.
120
+ * - Feedzy_Rss_Feeds_i18n. Defines internationalization functionality.
121
+ * - Feedzy_Rss_Feeds_Admin. Defines all hooks for the admin area.
122
+ * - Feedzy_Rss_Feeds_Public. Defines all hooks for the public side of the site.
123
+ *
124
+ * Create an instance of the loader which will be used to register the hooks
125
+ * with WordPress.
126
+ *
127
+ * @since 3.0.0
128
+ * @access private
129
+ */
130
+ private function load_dependencies() {
131
+ include_once FEEDZY_ABSPATH . '/includes/feedzy-rss-feeds-feed-tweaks.php';
132
+ self::$instance->loader = new Feedzy_Rss_Feeds_Loader();
133
+ self::$instance->upgrader = new Feedzy_Rss_Feeds_Upgrader();
134
+ self::$instance->admin = new Feedzy_Rss_Feeds_Admin( self::$instance->get_plugin_name(), self::$instance->get_version() );
135
+
136
+ }
137
+
138
+ /**
139
+ * The name of the plugin used to uniquely identify it within the context of
140
+ * WordPress and to define internationalization functionality.
141
+ *
142
+ * @since 3.0.0
143
+ * @access public
144
+ * @return string The name of the plugin.
145
+ */
146
+ public static function get_plugin_name() {
147
+ return self::$plugin_name;
148
+ }
149
+
150
+ /**
151
+ * Retrieve the version number of the plugin.
152
+ *
153
+ * @since 3.0.0
154
+ * @access public
155
+ * @return string The version number of the plugin.
156
+ */
157
+ public static function get_version() {
158
+ return self::$version;
159
+ }
160
+
161
+ /**
162
+ * Define the locale for this plugin for internationalization.
163
+ *
164
+ * Uses the Feedzy_Rss_Feeds_i18n class in order to set the domain and to register the hook
165
+ * with WordPress.
166
+ *
167
+ * @since 3.0.0
168
+ * @access private
169
+ */
170
+ private function set_locale() {
171
+ /**
172
+ * The class responsible for defining internationalization functionality
173
+ * of the plugin.
174
+ */
175
+ $plugin_i18n = new Feedzy_Rss_Feeds_i18n();
176
+ self::$instance->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );
177
+
178
+ }
179
+
180
+ /**
181
+ * Register all of the hooks related to the admin area functionality
182
+ * of the plugin.
183
+ *
184
+ * @since 3.0.0
185
+ * @updated 3.0.12
186
+ * @access private
187
+ */
188
+ private function define_admin_hooks() {
189
+ $plugin_ui = new Feedzy_Rss_Feeds_Ui( self::$instance->get_plugin_name(), self::$instance->get_version(), self::$instance->loader );
190
+ self::$instance->loader->add_action( 'init', $plugin_ui, 'register_init' );
191
+ self::$instance->loader->add_action( 'init', self::$instance->admin, 'register_post_type' );
192
+ self::$instance->loader->add_action( 'save_post', self::$instance->admin, 'save_feedzy_post_type_meta', 1, 2 );
193
+ self::$instance->loader->add_action( 'feedzy_pre_http_setup', self::$instance->admin, 'pre_http_setup', 10, 1 );
194
+ self::$instance->loader->add_action( 'feedzy_post_http_teardown', self::$instance->admin, 'post_http_teardown', 10, 1 );
195
+
196
+ self::$instance->loader->add_action( 'manage_feedzy_categories_posts_custom_column', self::$instance->admin, 'manage_feedzy_category_columns', 10, 2 );
197
+ self::$instance->loader->add_filter( 'manage_feedzy_categories_posts_columns', self::$instance->admin, 'feedzy_category_columns' );
198
+
199
+ self::$instance->loader->add_action( 'admin_menu', self::$instance->admin, 'feedzy_menu_pages' );
200
+ self::$instance->loader->add_filter( 'mce_external_languages', $plugin_ui, 'feedzy_add_tinymce_lang', 10, 1 );
201
+ self::$instance->loader->add_filter( 'plugin_row_meta', self::$instance->admin, 'feedzy_filter_plugin_row_meta', 10, 2 );
202
+ self::$instance->loader->add_filter( 'feedzy_default_image', self::$instance->admin, 'feedzy_define_default_image' );
203
+ self::$instance->loader->add_filter( 'feedzy_default_error', self::$instance->admin, 'feedzy_default_error_notice', 9, 2 );
204
+ self::$instance->loader->add_filter( 'feedzy_item_attributes', self::$instance->admin, 'feedzy_add_item_padding', 10, 2 );
205
+ self::$instance->loader->add_filter( 'feedzy_item_attributes', self::$instance->admin, 'feedzy_classes_item', 99, 5 );
206
+ self::$instance->loader->add_filter( 'feedzy_register_options', self::$instance->admin, 'register_options' );
207
+ self::$instance->loader->add_filter( 'feedzy_summary_input', self::$instance->admin, 'feedzy_summary_input_filter', 9, 3 );
208
+ self::$instance->loader->add_filter( 'feedzy_item_keyword', self::$instance->admin, 'feedzy_feed_item_keywords_title', 9, 4 );
209
+ self::$instance->loader->add_filter( 'feedzy_get_feed_array', self::$instance->admin, 'get_feed_array', 10, 5 );
210
+ self::$instance->loader->add_filter( 'feedzy_process_feed_source', self::$instance->admin, 'process_feed_source', 10, 1 );
211
+ self::$instance->loader->add_filter( 'feedzy_get_feed_url', self::$instance->admin, 'get_feed_url', 10, 1 );
212
+ self::$instance->loader->add_filter( 'feedzy_get_settings', self::$instance->admin, 'get_settings', 10, 1 );
213
+ add_shortcode( 'feedzy-rss', array( self::$instance->admin, 'feedzy_rss' ) );
214
+ self::$instance->loader->add_action( 'wp_ajax_get_tinymce_form', self::$instance->admin, 'get_tinymce_form' );
215
+ self::$instance->loader->add_action( 'wp_enqueue_scripts', self::$instance->admin, 'enqueue_styles' );
216
+ self::$instance->loader->add_action( 'admin_enqueue_scripts', self::$instance->admin, 'enqueue_styles' );
217
+ $plugin_widget = new feedzy_wp_widget();
218
+ self::$instance->loader->add_action( 'widgets_init', $plugin_widget, 'registerWidget', 10 );
219
+ }
220
+
221
+ /**
222
+ * Run the loader to execute all of the hooks with WordPress.
223
+ *
224
+ * @since 3.0.0
225
+ * @access public
226
+ */
227
+ public function run() {
228
+ self::$instance->loader->run();
229
+ }
230
+
231
+ /**
232
+ * The reference to the class that orchestrates the hooks with the plugin.
233
+ *
234
+ * @since 3.0.0
235
+ * @access public
236
+ * @return Feedzy_Rss_Feeds_Loader Orchestrates the hooks of the plugin.
237
+ */
238
+ public function get_loader() {
239
+ return self::$instance->loader;
240
+ }
241
+
242
+ /**
243
+ * The reference to the class that run the admin with the plugin.
244
+ *
245
+ * @since 3.0.0
246
+ * @access public
247
+ * @return Feedzy_Rss_Feeds_Admin Orchestrates the admin of the plugin.
248
+ */
249
+ public function get_admin() {
250
+ return self::$instance->admin;
251
+ }
252
+
253
+ }
includes/layouts/css/upsell.css ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * upsell.css
3
+ * Feedzy RSS Feed Upsell Style
4
+ *
5
+ * @since 3.0.12
6
+ * @package feedzy-rss-feeds
7
+ */
8
+
9
+ #fz-features .fz-features-header {
10
+ box-sizing: border-box;
11
+ padding: 20px 30px 30px;
12
+ border-top: 5px solid #252b37;
13
+ background: #fff;
14
+ }
15
+
16
+ #fz-features .logo {
17
+ display: inline-block;
18
+ margin: 0 0 0 20px;
19
+ padding: 0 0 0 70px;
20
+ color: #3c3c3c;
21
+ background: url(../../../img/feedzy.svg) no-repeat left center;
22
+ background-size: 48px;
23
+ font-family: "Open Sans", sans-serif;
24
+ font-size: 28px;
25
+ font-weight: 700;
26
+ line-height: 60px;
27
+ letter-spacing: -1px;
28
+ }
29
+
30
+ #fz-features .slogan {
31
+ display: inline-block;
32
+ margin: 0 0 0 8px;
33
+ padding: 0;
34
+ color: #858585;
35
+ font-family: "Open Sans", sans-serif;
36
+ font-size: 17px;
37
+ line-height: 1;
38
+ vertical-align: 4px;
39
+ }
40
+
41
+ #fz-features .slogan a {
42
+ color: #858585;
43
+ font-weight: 600;
44
+ font-style: italic;
45
+ text-decoration: none;
46
+ -webkit-transition: all 0.250s ease-in-out;
47
+ transition: all 0.250s ease-in-out;
48
+ }
49
+
50
+ #fz-features .slogan a:hover {
51
+ color: #ff6160;
52
+ }
53
+
54
+ #fz-features .slogan a:focus {
55
+ outline: none;
56
+ box-shadow: none;
57
+ }
58
+
59
+ #fz-features .header-btns {
60
+ float: right;
61
+ margin: 7px 20px;
62
+ text-align: right;
63
+ }
64
+
65
+ #fz-features .header-btns .buy-now {
66
+ display: inline-block;
67
+ margin-top: 2px;
68
+ margin-right: 5px;
69
+ padding: 15px 25px;
70
+ border-radius: 3px;
71
+ border-radius: 3px;
72
+ color: #fff;
73
+ background: #e33b3f;
74
+ font-family: "Open Sans", sans-serif;
75
+ font-size: 18px;
76
+ font-weight: bold;
77
+ text-decoration: none;
78
+ text-transform: uppercase;
79
+ -webkit-transition: all 0.250s ease-in-out;
80
+ transition: all 0.250s ease-in-out;
81
+ }
82
+
83
+ #fz-features .header-btns .buy-now:hover {
84
+ background: #252b37;
85
+ }
86
+
87
+ #fz-features .header-btns .buy-now .dashicons {
88
+ padding-right: 3px;
89
+ }
90
+
91
+ #fz-features {
92
+ padding: 0;
93
+ }
94
+
95
+ #fz-features .fz-features-content {
96
+ width: 100%;
97
+ padding: 0;
98
+ }
99
+
100
+ #fz-features .fz-features-header,
101
+ #fz-features .fz-feature {
102
+ display: table;
103
+ float: left;
104
+ box-sizing: border-box;
105
+ width: 100%;
106
+ margin: 30px 0 0;
107
+ padding: 30px;
108
+ background-color: #fff;
109
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
110
+ }
111
+
112
+ #fz-features .fz-feature .fz-feature-features,
113
+ #fz-features .fz-feature .fz-feature-image {
114
+ display: table-cell;
115
+ margin: 0;
116
+ vertical-align: middle;
117
+ }
118
+
119
+ #fz-features .fz-feature .fz-feature-features {
120
+ box-sizing: border-box;
121
+ padding: 0 0 20px;
122
+ }
123
+
124
+ #fz-features .fz-feature .fz-feature-image {
125
+ width: 470px;
126
+ }
127
+
128
+ #fz-features .fz-feature .fz-feature-features h2 {
129
+ margin: 0 0 20px;
130
+ font-size: 28px;
131
+ font-weight: 700;
132
+ line-height: 1.2;
133
+ }
134
+
135
+ #fz-features .fz-feature .fz-feature-features h4 {
136
+ margin: 0 0 10px;
137
+ font-size: 24px;
138
+ }
139
+
140
+ #fz-features .fz-feature .fz-feature-features p {
141
+ margin: 0 0 15px;
142
+ font-size: 18px;
143
+ line-height: 1.5;
144
+ }
145
+
146
+ #fz-features .fz-feature .fz-feature-image img {
147
+ width: 100%;
148
+ height: auto;
149
+ }
150
+
151
+ @media screen and (min-width: 768px) {
152
+ #fz-features {
153
+ padding: 0 15px;
154
+ }
155
+ }
156
+
157
+ @media screen and (min-width: 1200px) {
158
+ #fz-features .fz-feature {
159
+ padding: 30px 60px;
160
+ }
161
+
162
+ #fz-features .fz-feature .fz-feature-features {
163
+ padding: 0 30px 0 0;
164
+ }
165
+
166
+ #fz-features .fz-feature .fz-feature-features h2 {
167
+ font-size: 30px;
168
+ }
169
+
170
+ #fz-features .fz-feature .fz-feature-features p {
171
+ font-size: 20px;
172
+ }
173
+ }
174
+
175
+ @media screen and (min-width: 1500px) {
176
+ #fz-features .fz-feature .fz-feature-features {
177
+ padding: 0 120px 0 0;
178
+ }
179
+ }
180
+
181
+ @media screen and (max-width: 1100px) {
182
+ #fz-features {
183
+ text-align: center;
184
+ }
185
+
186
+ #fz-features .logo {
187
+ margin-left: 0;
188
+ }
189
+
190
+ #fz-features .header-btns {
191
+ display: block;
192
+ float: none;
193
+ margin: 10px 0 0;
194
+ text-align: center;
195
+ }
196
+ }
197
+
198
+ @media screen and (max-width: 1200px) {
199
+ #fz-features .fz-feature .fz-feature-features,
200
+ #fz-features .fz-feature .fz-feature-image {
201
+ display: block;
202
+ }
203
+
204
+ #fz-features .fz-feature .fz-feature-image {
205
+ display: inline-block;
206
+ max-width: 100%;
207
+ margin: 0 auto 30px;
208
+ }
209
+
210
+ #fz-features .slogan {
211
+ display: none;
212
+ }
213
+ }
214
+
215
+ #fz-features.fz-settings .fz-feature {
216
+ margin-top: 0;
217
+ border: none;
218
+ }
219
+
220
+ #fz-features.fz-settings .nav-tab-wrapper {
221
+ border-bottom: none;
222
+ }
223
+
224
+ #fz-features.fz-settings .nav-tab-wrapper a.nav-tab-active,
225
+ #fz-features.fz-settings .nav-tab-wrapper a:hover {
226
+ background: #fff;
227
+ }
228
+
229
+ #fz-features.fz-settings .nav-tab-wrapper a {
230
+ margin-top: 10px;
231
+ padding: 10px 20px;
232
+ border: 0;
233
+ color: #000;
234
+ background: #e0e0e0;
235
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
236
+ }
includes/layouts/feedzy-upsell.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!--
2
+ Layout For Upsell Page of Feedzy RSS Feeds
3
+
4
+ @since 3.0.12
5
+ @package feedzy-rss-feeds
6
+ -->
7
+ <div id="fz-features">
8
+
9
+ <?php load_template( FEEDZY_ABSPATH . '/includes/layouts/header.php' ); ?>
10
+
11
+ <div class="fz-features-content">
12
+
13
+ <div class="fz-feature">
14
+ <div class="fz-feature-features">
15
+ <h2>Feed to post</h2>
16
+ <p>Insert into your site, content from various RSS sources. Feedzy will automatically filter the feed items and place the content wherever you want in your WordPress instance with no hassle.</p>
17
+ </div>
18
+ <div class="fz-feature-image">
19
+ <img src="<?php echo FEEDZY_ABSURL; ?>/img/features-feed-to-post.jpg" alt="Feed to post">
20
+ </div>
21
+ </div>
22
+ <div class="fz-feature">
23
+ <div class="fz-feature-features">
24
+ <h2>Feed templates</h2>
25
+ <p>Use the style that best fits your website design with three available templates. For fzduct related
26
+ feeds, the plugin fetches and displays the price separately.</p>
27
+ </div>
28
+ <div class="fz-feature-image">
29
+ <img src="<?php echo FEEDZY_ABSURL; ?>/img/features-templates.jpg" alt="Feed templates">
30
+ </div>
31
+ </div>
32
+ <div class="fz-feature">
33
+ <div class="fz-feature-features">
34
+ <h2>Affiliate ready</h2>
35
+ <p>Make some extra money by featuring affiliate links on your site. Feedzy RSS plugin automatically
36
+ includes your referral/affiliate ID to the feed links.</p>
37
+ </div>
38
+ <div class="fz-feature-image">
39
+ <img src="<?php echo FEEDZY_ABSURL; ?>/img/features-affiliate-ready.jpg" alt="Affiliate ready">
40
+ </div>
41
+ </div>
42
+
43
+
44
+
45
+ </div><!-- .fz-features-content -->
46
+
47
+ </div>
includes/layouts/header.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Header file for admin pages
4
+ *
5
+ * @package Feedzy
6
+ * @copyright Copyright (c) 2017, Marius Cristea
7
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
8
+ */
9
+ ?>
10
+ <div class="fz-features-header">
11
+ <p class="logo">Feedzy RSS Feeds</p>
12
+ <span class="slogan">by <a
13
+ href="https://themeisle.com/">ThemeIsle</a></span>
14
+ <div class="header-btns">
15
+ <?php
16
+ if ( ! defined( 'FEEDZY_PRO_ABSURL' ) ) :
17
+ ?>
18
+
19
+ <a target="_blank" href="<?php echo FEEDZY_UPSELL_LINK; ?>" class="buy-now"><span
20
+ class="dashicons dashicons-cart"></span> Upgrade</a>
21
+ <?php
22
+ endif;
23
+ ?>
24
+ </div>
25
+ </div><!-- .fz-features-header -->
includes/layouts/settings.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="fz-features" class="fz-settings">
2
+
3
+ <?php load_template( FEEDZY_ABSPATH . '/includes/layouts/header.php' ); ?>
4
+
5
+ <?php
6
+ $active_tab = isset( $_REQUEST['tab'] ) ? sanitize_text_field( $_REQUEST['tab'] ) : 'headers';
7
+ $show_button = true;
8
+ ?>
9
+
10
+ <h2 class="nav-tab-wrapper">
11
+ <a href="<?php echo esc_url( admin_url( 'admin.php?page=feedzy-settings&tab=headers' ) ); ?>"
12
+ class="nav-tab <?php echo $active_tab == 'headers' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Headers', 'feedzy-rss-feeds' ); ?></a>
13
+ <a href="<?php echo esc_url( admin_url( 'admin.php?page=feedzy-settings&tab=proxy' ) ); ?>"
14
+ class="nav-tab <?php echo $active_tab == 'proxy' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Proxy', 'feedzy-rss-feeds' ); ?></a>
15
+ <?php
16
+ $tabs = apply_filters( 'feedzy_settings_tabs', array() );
17
+ if ( $tabs ) {
18
+ foreach ( $tabs as $tab => $label ) {
19
+ ?>
20
+ <a href="<?php echo esc_url( admin_url( 'admin.php?page=feedzy-settings&tab=' . $tab ) ); ?>"
21
+ class="nav-tab <?php echo $active_tab == $tab ? 'nav-tab-active' : ''; ?>"><?php echo $label; ?></a>
22
+ <?php
23
+ }
24
+ }
25
+ ?>
26
+ </h2>
27
+
28
+ <?php if ( $this->notice ) { ?>
29
+ <div class="updated"><p><?php echo $this->notice; ?></p></div>
30
+ <?php } ?>
31
+
32
+ <?php if ( $this->error ) { ?>
33
+ <div class="error"><p><?php echo $this->error; ?></p></div>
34
+ <?php } ?>
35
+
36
+ <div class="fz-features-content">
37
+ <div class="fz-feature">
38
+ <div id="feedzy_import_feeds" class="fz-feature-features">
39
+
40
+ <form method="post" action="">
41
+ <?php
42
+ switch ( $active_tab ) {
43
+ case 'headers':
44
+ ?>
45
+ <h2><?php _e( 'Headers', 'feedzy-rss-feeds' ); ?></h2>
46
+ <div class="fz-form-group">
47
+ <label><?php echo __( 'User Agent to use when accessing the feed', 'feedzy-rss-feeds' ); ?>:</label>
48
+ </div>
49
+ <div class="fz-form-group">
50
+ <input type="text" class="fz-form-control" name="user-agent"
51
+ value="<?php echo isset( $settings['header']['user-agent'] ) ? $settings['header']['user-agent'] : ''; ?>">
52
+ </div>
53
+ <?php
54
+ break;
55
+ case 'proxy':
56
+ ?>
57
+ <h2><?php _e( 'Proxy Settings', 'feedzy-rss-feeds' ); ?></h2>
58
+ <div class="fz-form-group">
59
+ <label><?php echo __( 'Host', 'feedzy-rss-feeds' ); ?>:</label>
60
+ </div>
61
+ <div class="fz-form-group">
62
+ <input type="text" class="fz-form-control" name="proxy-host"
63
+ value="<?php echo isset( $settings['proxy']['host'] ) ? $settings['proxy']['host'] : ''; ?>">
64
+ </div>
65
+
66
+ <div class="fz-form-group">
67
+ <label><?php echo __( 'Port', 'feedzy-rss-feeds' ); ?>:</label>
68
+ </div>
69
+ <div class="fz-form-group">
70
+ <input type="number" min="0" max="65535" class="fz-form-control" name="proxy-port"
71
+ value="<?php echo isset( $settings['proxy']['port'] ) ? $settings['proxy']['port'] : ''; ?>">
72
+ </div>
73
+
74
+ <div class="fz-form-group">
75
+ <label><?php echo __( 'Username', 'feedzy-rss-feeds' ); ?>:</label>
76
+ </div>
77
+ <div class="fz-form-group">
78
+ <input type="text" class="fz-form-control" name="proxy-user"
79
+ value="<?php echo isset( $settings['proxy']['user'] ) ? $settings['proxy']['user'] : ''; ?>">
80
+ </div>
81
+
82
+ <div class="fz-form-group">
83
+ <label><?php echo __( 'Password', 'feedzy-rss-feeds' ); ?>:</label>
84
+ </div>
85
+ <div class="fz-form-group">
86
+ <input type="password" class="fz-form-control" name="proxy-pass"
87
+ value="<?php echo isset( $settings['proxy']['pass'] ) ? $settings['proxy']['pass'] : ''; ?>">
88
+ </div>
89
+ <?php
90
+ break;
91
+ default:
92
+ $field = apply_filters( 'feedzy_display_tab_settings', array(), $active_tab );
93
+ if ( $field ) {
94
+ echo $field['content'];
95
+ if ( isset( $field['ajax'] ) && $field['ajax'] ) {
96
+ $show_button = false;
97
+ }
98
+ }
99
+ break;
100
+ }
101
+ ?>
102
+
103
+ <input type="hidden" name="tab" value="<?php echo $active_tab; ?>">
104
+
105
+ <?php
106
+ wp_nonce_field( $active_tab, 'nonce' );
107
+ if ( $show_button ) {
108
+ ?>
109
+ <button type="submit" class="fz-btn fz-btn-submit fz-btn-activate" id="feedzy-settings-submit"
110
+ name="feedzy-settings-submit"><?php _e( 'Save', 'feedzy-rss-feeds' ); ?></button>
111
+ <?php
112
+ }
113
+ ?>
114
+ </form>
115
+ </div>
116
+ </div>
117
+ </div>
118
+
119
+ </div>
index.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Nothing to do here
4
+ *
5
+ * @link http://themeisle.com/plugins/feedzy-rss-feed/
6
+ * @since 3.0.0
7
+ *
8
+ * @package feedzy-rss-feeds
9
+ */
js/admin.js DELETED
@@ -1,8 +0,0 @@
1
- /* global login_cust */
2
- (function($) {
3
- wp.customize( login_cust.name, function( value ) {
4
- value.bind( function( to ) {
5
- $( 'html, body' ).css('background-color', to);
6
- } );
7
- } );
8
- })( jQuery, login_cust );
 
 
 
 
 
 
 
 
js/feedzy-rss-feeds-ui-mce.js ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Plugin Name: FEEDZY RSS Feeds
3
+ * Plugin URI: http://themeisle.com/plugins/feedzy-rss-feeds/
4
+ * Author: Themeisle
5
+ *
6
+ * @package feedzy-rss-feeds
7
+ */
8
+ /* global tinymce */
9
+ /* jshint unused:false */
10
+ (function($) {
11
+ tinymce.PluginManager.add('feedzy_mce_button', function( editor, url ) {
12
+ editor.addButton( 'feedzy_mce_button', {
13
+ title: editor.getLang( 'feedzy_tinymce_plugin.plugin_label' ),
14
+ label: editor.getLang( 'feedzy_tinymce_plugin.plugin_label' ),
15
+ icon: 'feedzy-icon',
16
+ onclick: function() {
17
+ editor.windowManager.open( {
18
+ title: editor.getLang( 'feedzy_tinymce_plugin.plugin_title' ),
19
+ url: editor.getLang( 'feedzy_tinymce_plugin.popup_url' ) + '&amp;action=get_tinymce_form',
20
+ width: $( window ).width() * 0.7,
21
+ height: ($( window ).height() - 36 - 50) * 0.7,
22
+ inline: 1,
23
+ id: 'feedzy-rss-insert-dialog',
24
+ buttons: [{
25
+ text: editor.getLang( 'feedzy_tinymce_plugin.pro_button' ),
26
+ id: 'feedzy-rss-button-pro',
27
+ onclick: function( e ) {
28
+ openProLink( e, editor );
29
+ },
30
+ },
31
+ {
32
+ text: editor.getLang( 'feedzy_tinymce_plugin.cancel_button' ),
33
+ id: 'feedzy-rss-button-cancel',
34
+ onclick: 'close'
35
+ },
36
+ {
37
+ text: editor.getLang( 'feedzy_tinymce_plugin.insert_button' ),
38
+ id: 'feedzy-rss-button-insert',
39
+ class: 'insert',
40
+ onclick: function( e ) {
41
+ insertShortcode( e, editor );
42
+ },
43
+
44
+ }],
45
+ }, {
46
+ editor: editor,
47
+ jquery: $,
48
+ wp: wp,
49
+ });
50
+ }
51
+ });
52
+ });
53
+
54
+ function insertShortcode( e, editor ) {
55
+ var frame = $( e.currentTarget ).find( 'iframe' ).get( 0 );
56
+ var content = frame.contentDocument;
57
+
58
+ var feedzy_form = $( '*[data-feedzy]', content );
59
+ var shortCode = '';
60
+ $.each( feedzy_form, function( index, element ) {
61
+ if ( ! $( element ).attr( 'disabled' ) ) {
62
+ var shortCodeParams = '';
63
+ var eName = $( element ).attr( 'data-feedzy' );
64
+ var eValue = '';
65
+ if ($( element ).is( 'input' )) {
66
+ if ($( element ).attr( 'type' ) === 'radio' || $( element ).attr( 'type' ) === 'checkbox') {
67
+ if ( $( element ).is( ':checked' ) ) {
68
+ eValue = $( element ).val();
69
+ }
70
+ } else {
71
+ eValue = $( element ).val();
72
+ }
73
+ } else {
74
+ eValue = $( element ).val();
75
+ }
76
+
77
+ if ( eValue !== '' && typeof eValue !== 'undefined' ) {
78
+ shortCodeParams = eName + '="' + eValue + '" ';
79
+ } else {
80
+ if ( eName === 'feeds' ) {
81
+ shortCodeParams = eName + '="http://themeisle.com/feed" ';
82
+ }
83
+ }
84
+ shortCode += shortCodeParams;
85
+ }
86
+ });
87
+ editor.insertContent(
88
+ '[feedzy-rss ' + shortCode + ']'
89
+ );
90
+ editor.windowManager.close();
91
+ }
92
+
93
+ function openProLink( e , editor ) {
94
+ window.open( editor.getLang( 'feedzy_tinymce_plugin.pro_url' ), '_blank' );
95
+ }
96
+ })(jQuery);
languages/feedzy-rss-feeds-de_DE.mo ADDED
Binary file
languages/feedzy-rss-feeds-de_DE.po ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: FEEDZY RSS Feeds by b*web\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: Fri Jul 17 2015 11:41:38 GMT+0200\n"
6
+ "PO-Revision-Date: Fri Jul 17 2015 11:59:48 GMT+0200\n"
7
+ "Last-Translator: Ralf Steck <rsteck@engineeringspot.de>\n"
8
+ "Language-Team: \n"
9
+ "Language: German\n"
10
+ "Plural-Forms: nplurals=2; plural=n != 1\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: 8bit\n"
14
+ "X-Poedit-SourceCharset: UTF-8\n"
15
+ "X-Poedit-Basepath: .\n"
16
+ "X-Poedit-SearchPath-0: ..\n"
17
+ "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
18
+ "__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
19
+ "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
20
+ "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
21
+ "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
22
+ "X-Loco-Target-Locale: de_DE\n"
23
+ "X-Generator: Loco - https://localise.biz/"
24
+
25
+ #: ../feedzy-rss-feed.php:52 ../feedzy-rss-feed.php:52
26
+ msgid "Documentation and examples"
27
+ msgstr "Dokumentation und Beispiele"
28
+
29
+ #: ../feedzy-rss-feed.php:53 ../feedzy-rss-feed.php:53
30
+ msgid "More b*web Plugins"
31
+ msgstr "Weitere b*web Plugins"
32
+
33
+ #: ../feedzy-rss-feed.php:54 ../feedzy-rss-feed.php:54
34
+ msgid "Donate to this plugin &#187;"
35
+ msgstr "Spenden Sie für dieses Plugin &#187;"
36
+
37
+ #: ../feedzy-rss-feeds-widget.php:18
38
+ msgid "Feedzy RSS Feeds"
39
+ msgstr "Feedzy RSS Feeds"
40
+
41
+ #: ../feedzy-rss-feeds-widget.php:57
42
+ msgid "Widget Title"
43
+ msgstr "Widget-Titel"
44
+
45
+ #: ../feedzy-rss-feeds-widget.php:61
46
+ msgid "Intro text"
47
+ msgstr "Einleitungstext"
48
+
49
+ #: ../feedzy-rss-feeds-widget.php:65 ../feedzy-rss-feeds-ui-lang.php:20
50
+ msgid "The feed(s) URL (comma-separated list)."
51
+ msgstr "Feed URLs (kommaseparierte Liste)."
52
+
53
+ #: ../feedzy-rss-feeds-widget.php:69 ../feedzy-rss-feeds-ui-lang.php:21
54
+ msgid "Number of items to display."
55
+ msgstr "Anzahl der darzustellenden Elemente"
56
+
57
+ #: ../feedzy-rss-feeds-widget.php:73 ../feedzy-rss-feeds-ui-lang.php:23
58
+ msgid "Links may be opened in the same window or a new tab."
59
+ msgstr "Links können im selben Fenster oder einem neuen Tab geöffnet werden"
60
+
61
+ #: ../feedzy-rss-feeds-widget.php:84 ../feedzy-rss-feeds-ui-lang.php:24
62
+ msgid "Trim the title of the item after X characters."
63
+ msgstr "Titel nach X Zeichen abschneiden"
64
+
65
+ #: ../feedzy-rss-feeds-widget.php:89 ../feedzy-rss-feeds-ui-lang.php:25
66
+ msgid "Should we display the date of publication and the author name?"
67
+ msgstr "Veröffentlichungsdatum und Autorname anzeigen?"
68
+
69
+ #: ../feedzy-rss-feeds-widget.php:93 ../feedzy-rss-feeds-ui-lang.php:26
70
+ msgid "Should we display a description (abstract) of the retrieved item?"
71
+ msgstr "Kurzbeschreibung (Zusammenfassung) des Elements anzeigen?"
72
+
73
+ #: ../feedzy-rss-feeds-widget.php:96 ../feedzy-rss-feeds-ui-lang.php:27
74
+ msgid "Crop description (summary) of the element after X characters."
75
+ msgstr "Kurzbeschreibung (Zusammenfassung) nach X Zeichen abschneiden"
76
+
77
+ #: ../feedzy-rss-feeds-widget.php:100 ../feedzy-rss-feeds-ui-lang.php:28
78
+ msgid "Should we display the first image of the content if it is available?"
79
+ msgstr "Erstes Bild - wenn vorhanden - des Inhalts anzeigen?"
80
+
81
+ #: ../feedzy-rss-feeds-widget.php:111 ../feedzy-rss-feeds-ui-lang.php:33
82
+ msgid "No"
83
+ msgstr "Nein"
84
+
85
+ #: ../feedzy-rss-feeds-widget.php:112 ../feedzy-rss-feeds-ui-lang.php:34
86
+ msgid "Yes"
87
+ msgstr "Ja"
88
+
89
+ #: ../feedzy-rss-feeds-widget.php:113 ../feedzy-rss-feeds-ui-lang.php:35
90
+ msgid "Auto"
91
+ msgstr "Auto"
92
+
93
+ #: ../feedzy-rss-feeds-widget.php:123 ../feedzy-rss-feeds-ui-lang.php:29
94
+ msgid "Default thumbnail URL if no image is found."
95
+ msgstr "Standard-Thumnail-Bild, wenn kein Bild im Text vorhanden ist."
96
+
97
+ #: ../feedzy-rss-feeds-widget.php:127 ../feedzy-rss-feeds-ui-lang.php:30
98
+ msgid "Thumblails dimension. Do not include \"px\". Eg: 150"
99
+ msgstr "Thumbnail-Größe. Bitte ohne \"px\" angeben, z.B. 150"
100
+
101
+ #: ../feedzy-rss-feeds-widget.php:131 ../feedzy-rss-feeds-ui-lang.php:31
102
+ msgid ""
103
+ "Only display item if title contains specific keyword(s) (comma-separated "
104
+ "list/case sensitive)."
105
+ msgstr ""
106
+ "Elemente nur anzeigen, wenn sie folgende Keywords enthalten (Kommaseparierte "
107
+ "Liste)."
108
+
109
+ #: ../feedzy-rss-feeds-ui-lang.php:19
110
+ msgid "Insert FEEDZY RSS Feeds Shortcode"
111
+ msgstr "FEEDZY RSS Feeds Shortcode einfügen"
112
+
113
+ #: ../feedzy-rss-feeds-ui-lang.php:22
114
+ msgid "Should we display the RSS title?"
115
+ msgstr "RSS-Titel darstellen?"
116
+
117
+ #: ../feedzy-rss-feeds-ui-lang.php:32
118
+ msgid "Do not specify"
119
+ msgstr "nicht angeben"
120
+
121
+ #: ../feedzy-rss-feeds-shortcode.php:98
122
+ msgid "Sorry, this feed is currently unavailable or does not exists anymore."
123
+ msgstr ""
124
+ "Tut uns leid, dieser Feed ist derzeit nicht verfügbar oder existiert nicht "
125
+ "mehr."
126
+
127
+ #: ../feedzy-rss-feeds-shortcode.php:205
128
+ msgid "Posted"
129
+ msgstr "Veröffentlicht"
130
+
131
+ #: ../feedzy-rss-feeds-shortcode.php:216
132
+ msgid "by"
133
+ msgstr "von"
134
+
135
+ #: ../feedzy-rss-feeds-shortcode.php:222
136
+ msgid "on"
137
+ msgstr "am"
138
+
139
+ #: ../feedzy-rss-feeds-shortcode.php:222
140
+ msgid "at"
141
+ msgstr "um"
languages/feedzy-rss-feeds-es_ES.mo ADDED
Binary file
languages/feedzy-rss-feeds-es_ES.po ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: FEEDZY RSS Feeds by b*web\n"
4
+ "POT-Creation-Date: 2015-10-12 21:49+0200\n"
5
+ "PO-Revision-Date: 2015-10-12 22:13+0200\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "Language: es_ES\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.8.4\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "X-Poedit-WPHeader: feedzy-rss-feed.php\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
18
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
19
+ "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
22
+
23
+ #: feedzy-rss-feed.php:52
24
+ msgid "Documentation and examples"
25
+ msgstr "Documentación y ejemplos"
26
+
27
+ #: feedzy-rss-feed.php:53
28
+ msgid "More b*web Plugins"
29
+ msgstr "Más plugins de b*web"
30
+
31
+ #: feedzy-rss-feed.php:54
32
+ msgid "Donate to this plugin &#187;"
33
+ msgstr "Donar a este plugin &#187;"
34
+
35
+ #: feedzy-rss-feeds-shortcode.php:98
36
+ msgid "Sorry, this feed is currently unavailable or does not exists anymore."
37
+ msgstr "Lo sentimos, este feed no está disponible en este momento o no existe."
38
+
39
+ #: feedzy-rss-feeds-shortcode.php:205
40
+ msgid "Posted"
41
+ msgstr "Publicado"
42
+
43
+ #: feedzy-rss-feeds-shortcode.php:216
44
+ msgid "by"
45
+ msgstr "por"
46
+
47
+ #: feedzy-rss-feeds-shortcode.php:222
48
+ msgid "on"
49
+ msgstr "el día"
50
+
51
+ #: feedzy-rss-feeds-shortcode.php:224
52
+ msgid "at"
53
+ msgstr "a las"
54
+
55
+ #: feedzy-rss-feeds-ui-lang.php:19
56
+ msgid "Insert FEEDZY RSS Feeds Shortcode"
57
+ msgstr "Insertar shortcode feeds FEEDZY RSS"
58
+
59
+ #: feedzy-rss-feeds-ui-lang.php:20 feedzy-rss-feeds-widget.php:65
60
+ msgid "The feed(s) URL (comma-separated list)."
61
+ msgstr "Las Url's de los feed(s) (lista separada por comas)."
62
+
63
+ #: feedzy-rss-feeds-ui-lang.php:21 feedzy-rss-feeds-widget.php:69
64
+ msgid "Number of items to display."
65
+ msgstr "Número de artículos a mostrar."
66
+
67
+ #: feedzy-rss-feeds-ui-lang.php:22
68
+ msgid "Should we display the RSS title?"
69
+ msgstr "¿Mostrar el título del RSS?"
70
+
71
+ #: feedzy-rss-feeds-ui-lang.php:23 feedzy-rss-feeds-widget.php:73
72
+ msgid "Links may be opened in the same window or a new tab."
73
+ msgstr "Seleccionar como se mostrarán los enlaces al hacer click."
74
+
75
+ #: feedzy-rss-feeds-ui-lang.php:24 feedzy-rss-feeds-widget.php:84
76
+ msgid "Trim the title of the item after X characters."
77
+ msgstr "Recortar el título del artículo después de X caracteres."
78
+
79
+ #: feedzy-rss-feeds-ui-lang.php:25 feedzy-rss-feeds-widget.php:89
80
+ msgid "Should we display the date of publication and the author name?"
81
+ msgstr "¿Mostrar el día de publicación y el nombre del autor?"
82
+
83
+ #: feedzy-rss-feeds-ui-lang.php:26 feedzy-rss-feeds-widget.php:93
84
+ msgid "Should we display a description (abstract) of the retrieved item?"
85
+ msgstr "¿Mostrar una descripción (extracto) del artículo?"
86
+
87
+ #: feedzy-rss-feeds-ui-lang.php:27 feedzy-rss-feeds-widget.php:96
88
+ msgid "Crop description (summary) of the element after X characters."
89
+ msgstr "Cortar la descripción (sumario) del elemento después de X caracteres."
90
+
91
+ #: feedzy-rss-feeds-ui-lang.php:28 feedzy-rss-feeds-widget.php:100
92
+ msgid "Should we display the first image of the content if it is available?"
93
+ msgstr "¿Mostrar la primera imagen del contenido si está disponible?"
94
+
95
+ #: feedzy-rss-feeds-ui-lang.php:29 feedzy-rss-feeds-widget.php:123
96
+ msgid "Default thumbnail URL if no image is found."
97
+ msgstr "Enlace de la imagen por defecto si no la hay disponible."
98
+
99
+ #: feedzy-rss-feeds-ui-lang.php:30 feedzy-rss-feeds-widget.php:127
100
+ msgid "Thumblails dimension. Do not include \"px\". Eg: 150"
101
+ msgstr "Dimensiones de las imágenes. No incluir \"px\". Ejemplo: 150"
102
+
103
+ #: feedzy-rss-feeds-ui-lang.php:31 feedzy-rss-feeds-widget.php:131
104
+ msgid ""
105
+ "Only display item if title contains specific keyword(s) (comma-separated "
106
+ "list/case sensitive)."
107
+ msgstr ""
108
+ "Sólo mostrar el artículo si el título contiene las palabra(s) "
109
+ "especificada(s) (lista separada por comas/distingue mayúsculas de "
110
+ "minúsculas)."
111
+
112
+ #: feedzy-rss-feeds-ui-lang.php:32
113
+ msgid "Do not specify"
114
+ msgstr "no especificado"
115
+
116
+ #: feedzy-rss-feeds-ui-lang.php:33 feedzy-rss-feeds-widget.php:111
117
+ msgid "No"
118
+ msgstr "No"
119
+
120
+ #: feedzy-rss-feeds-ui-lang.php:34 feedzy-rss-feeds-widget.php:112
121
+ msgid "Yes"
122
+ msgstr "Si"
123
+
124
+ #: feedzy-rss-feeds-ui-lang.php:35 feedzy-rss-feeds-widget.php:113
125
+ msgid "Auto"
126
+ msgstr "Auto"
127
+
128
+ #: feedzy-rss-feeds-widget.php:18
129
+ msgid "Feedzy RSS Feeds"
130
+ msgstr "Feedzy RSS Feeds"
131
+
132
+ #: feedzy-rss-feeds-widget.php:57
133
+ msgid "Widget Title"
134
+ msgstr "Título del Widget"
135
+
136
+ #: feedzy-rss-feeds-widget.php:61
137
+ msgid "Intro text"
138
+ msgstr "Texto introductorio"
139
+
140
+ #. Plugin Name of the plugin/theme
141
+ msgid "FEEDZY RSS Feeds by b*web"
142
+ msgstr "FEEDZY RSS Feeds por b*web"
143
+
144
+ #. Plugin URI of the plugin/theme
145
+ msgid "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
146
+ msgstr "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
147
+
148
+ #. Description of the plugin/theme
149
+ msgid ""
150
+ "FEEDZY RSS Feeds is a small and lightweight plugin. Fast and easy to use, it "
151
+ "aggregates RSS feeds into your WordPress site through simple shortcodes."
152
+ msgstr ""
153
+ "FEEDZY RSS Feeds es un pequeño y ligero plugin. Rápido y fácil de usar, "
154
+ "agrupa los canales RSS en su sitio de WordPress a través de simples "
155
+ "shortcodes."
156
+
157
+ #. Author of the plugin/theme
158
+ msgid "Brice CAPOBIANCO"
159
+ msgstr "Brice CAPOBIANCO"
160
+
161
+ #. Author URI of the plugin/theme
162
+ msgid "http://b-website.com/"
163
+ msgstr "http://b-website.com/"
languages/feedzy-rss-feeds-fr_FR.mo ADDED
Binary file
languages/feedzy-rss-feeds-fr_FR.po ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: FEEDZY RSS Feeds by b*web v2.7\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2015-12-07 11:46:59+0000\n"
7
+ "Last-Translator: superadminopl <brice.capobianco@openlog.fr>\n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n>1;\n"
13
+ "X-Generator: CSL v1.x\n"
14
+ "X-Poedit-Language: French\n"
15
+ "X-Poedit-Country: FRANCE\n"
16
+ "X-Poedit-SourceCharset: utf-8\n"
17
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
18
+ "X-Poedit-Basepath: \n"
19
+ "X-Poedit-Bookmarks: \n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+ "X-Textdomain-Support: yes"
22
+
23
+ #: feedzy-rss-feeds-functions.php:26
24
+ #@ feedzy-rss-feeds
25
+ msgid "Sorry, this feed is currently unavailable or does not exists anymore."
26
+ msgstr "Désolé, ce flux est actuellement indisponible ou n'existe plus."
27
+
28
+ #: feedzy-rss-feeds-shortcode.php:228
29
+ #@ feedzy-rss-feeds
30
+ msgid "on"
31
+ msgstr "le"
32
+
33
+ #: feedzy-rss-feeds-shortcode.php:230
34
+ #@ feedzy-rss-feeds
35
+ msgid "at"
36
+ msgstr "à"
37
+
38
+ #: feedzy-rss-feed.php:52
39
+ #@ feedzy-rss-feeds
40
+ msgid "Documentation and examples"
41
+ msgstr "Documentation et exemples"
42
+
43
+ #: feedzy-rss-feed.php:53
44
+ #@ feedzy-rss-feeds
45
+ msgid "More b*web Plugins"
46
+ msgstr "Plus de plugins b*web"
47
+
48
+ #: feedzy-rss-feeds-ui-lang.php:19
49
+ #@ feedzy-rss-feeds
50
+ msgid "Insert FEEDZY RSS Feeds Shortcode"
51
+ msgstr "Insérer un shortcode FEEDZY RSS Feeds"
52
+
53
+ #: feedzy-rss-feeds-ui-lang.php:21
54
+ #: feedzy-rss-feeds-widget.php:69
55
+ #@ feedzy-rss-feeds
56
+ msgid "Number of items to display."
57
+ msgstr "Nombre d’éléments à remonter."
58
+
59
+ #: feedzy-rss-feeds-ui-lang.php:23
60
+ #: feedzy-rss-feeds-widget.php:73
61
+ #@ feedzy-rss-feeds
62
+ msgid "Links may be opened in the same window or a new tab."
63
+ msgstr "Les liens peuvent être ouverts dans la même fenêtre ou dans un nouvel onglet."
64
+
65
+ #: feedzy-rss-feeds-ui-lang.php:24
66
+ #: feedzy-rss-feeds-widget.php:84
67
+ #@ feedzy-rss-feeds
68
+ msgid "Trim the title of the item after X characters."
69
+ msgstr "Rogner le titre de l’élément après X caractères."
70
+
71
+ #: feedzy-rss-feeds-ui-lang.php:25
72
+ #: feedzy-rss-feeds-widget.php:89
73
+ #@ feedzy-rss-feeds
74
+ msgid "Should we display the date of publication and the author name?"
75
+ msgstr "Doit-on afficher la date de publication ainsi que le nom de l’auteur de l’élément ?"
76
+
77
+ #: feedzy-rss-feeds-ui-lang.php:26
78
+ #: feedzy-rss-feeds-widget.php:93
79
+ #@ feedzy-rss-feeds
80
+ msgid "Should we display a description (abstract) of the retrieved item?"
81
+ msgstr "Doit-on afficher la description (le résumé) de l’élément ?"
82
+
83
+ #: feedzy-rss-feeds-ui-lang.php:27
84
+ #: feedzy-rss-feeds-widget.php:96
85
+ #@ feedzy-rss-feeds
86
+ msgid "Crop description (summary) of the element after X characters."
87
+ msgstr "Rogner la description (le résumé) de l’élément après X caractères."
88
+
89
+ #: feedzy-rss-feeds-ui-lang.php:28
90
+ #: feedzy-rss-feeds-widget.php:100
91
+ #@ feedzy-rss-feeds
92
+ msgid "Should we display the first image of the content if it is available?"
93
+ msgstr "Doit-on afficher la première image du contenu si elle est disponible ?"
94
+
95
+ #: feedzy-rss-feeds-ui-lang.php:29
96
+ #: feedzy-rss-feeds-widget.php:123
97
+ #@ feedzy-rss-feeds
98
+ msgid "Default thumbnail URL if no image is found."
99
+ msgstr "URL de la miniature par défaut si aucune image n’est trouvée."
100
+
101
+ #: feedzy-rss-feeds-ui-lang.php:30
102
+ #: feedzy-rss-feeds-widget.php:127
103
+ #@ feedzy-rss-feeds
104
+ msgid "Thumblails dimension. Do not include \"px\". Eg: 150"
105
+ msgstr "Dimensions de la miniature. Ne pas inclure “px”. Ex : 150"
106
+
107
+ #: feedzy-rss-feeds-ui-lang.php:31
108
+ #: feedzy-rss-feeds-widget.php:131
109
+ #@ feedzy-rss-feeds
110
+ msgid "Only display item if title contains specific keyword(s) (comma-separated list/case sensitive)."
111
+ msgstr "Afficher un élément seulement si son titre contient l’un des mots clés spécifiés (liste séparée par des virgules/sensible à la case)"
112
+
113
+ #: feedzy-rss-feeds-ui-lang.php:32
114
+ #@ feedzy-rss-feeds
115
+ msgid "Do not specify"
116
+ msgstr "Ne pas préciser"
117
+
118
+ #: feedzy-rss-feeds-ui-lang.php:33
119
+ #: feedzy-rss-feeds-widget.php:111
120
+ #@ feedzy-rss-feeds
121
+ msgid "No"
122
+ msgstr "Non"
123
+
124
+ #: feedzy-rss-feeds-ui-lang.php:34
125
+ #: feedzy-rss-feeds-widget.php:112
126
+ #@ feedzy-rss-feeds
127
+ msgid "Yes"
128
+ msgstr "Oui"
129
+
130
+ #: feedzy-rss-feeds-ui-lang.php:20
131
+ #: feedzy-rss-feeds-widget.php:65
132
+ #@ feedzy-rss-feeds
133
+ msgid "The feed(s) URL (comma-separated list)."
134
+ msgstr "URL(s) du(des) flux RSS (liste séparée par des virgules)."
135
+
136
+ #: feedzy-rss-feeds-ui-lang.php:22
137
+ #@ feedzy-rss-feeds
138
+ msgid "Should we display the RSS title?"
139
+ msgstr "Doit-on afficher le titre du flux RSS ?"
140
+
141
+ #. translators: plugin header field 'Name'
142
+ #: feedzy-rss-feed.php:0
143
+ #@ feedzy-rss-feeds
144
+ msgid "FEEDZY RSS Feeds by b*web"
145
+ msgstr ""
146
+
147
+ #. translators: plugin header field 'Description'
148
+ #: feedzy-rss-feed.php:0
149
+ #@ feedzy-rss-feeds
150
+ msgid "FEEDZY RSS Feeds is a small and lightweight plugin. Fast and easy to use, it aggregates RSS feeds into your WordPress site through simple shortcodes."
151
+ msgstr "FEEDZY RSS Feeds est un petit plugin léger, rapide et très simple d'utilisation qui vous permet d'agréger des flux RSS dans votre site WordPress grâce à des shortcodes entièrement paramétrables."
152
+
153
+ #. translators: plugin header field 'Author'
154
+ #: feedzy-rss-feed.php:0
155
+ #@ feedzy-rss-feeds
156
+ msgid "Brice CAPOBIANCO"
157
+ msgstr ""
158
+
159
+ #. translators: plugin header field 'AuthorURI'
160
+ #: feedzy-rss-feed.php:0
161
+ #@ feedzy-rss-feeds
162
+ msgid "http://b-website.com/"
163
+ msgstr ""
164
+
165
+ #. translators: plugin header field 'PluginURI'
166
+ #: feedzy-rss-feed.php:0
167
+ #@ feedzy-rss-feeds
168
+ msgid "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
169
+ msgstr "http://b-website.com/feedzy-rss-feeds-plugin-wordpress-gratuit-utilisant-simplepie"
170
+
171
+ #: feedzy-rss-feeds-widget.php:18
172
+ #@ feedzy_wp_widget
173
+ msgid "Feedzy RSS Feeds"
174
+ msgstr ""
175
+
176
+ #: feedzy-rss-feeds-widget.php:57
177
+ #@ feedzy-rss-feeds
178
+ msgid "Widget Title"
179
+ msgstr "Titre du Widget"
180
+
181
+ #: feedzy-rss-feeds-widget.php:61
182
+ #@ feedzy-rss-feeds
183
+ msgid "Intro text"
184
+ msgstr "Texte d'intro"
185
+
186
+ #: feedzy-rss-feed.php:54
187
+ #@ default
188
+ msgid "Donate to this plugin &#187;"
189
+ msgstr ""
190
+
191
+ #: feedzy-rss-feeds-shortcode.php:211
192
+ #@ feedzy-rss-feeds
193
+ msgid "Posted"
194
+ msgstr "Posté"
195
+
196
+ #: feedzy-rss-feeds-shortcode.php:222
197
+ #@ feedzy-rss-feeds
198
+ msgid "by"
199
+ msgstr "par"
200
+
201
+ #. translators: plugin header field 'Version'
202
+ #: feedzy-rss-feed.php:0
203
+ #@ feedzy-rss-feeds
204
+ msgid "2.7"
205
+ msgstr ""
206
+
207
+ #: feedzy-rss-feeds-ui-lang.php:20
208
+ #@ feedzy-rss-feeds
209
+ msgid "If your feed is not valid, it won't work."
210
+ msgstr "Si votre flux n'est pas valide, cela ne fonctionnera pas."
211
+
212
+ #: feedzy-rss-feeds-ui-lang.php:35
213
+ #: feedzy-rss-feeds-widget.php:113
214
+ #@ feedzy-rss-feeds
215
+ msgid "Auto"
216
+ msgstr ""
217
+
languages/feedzy-rss-feeds-ja.mo ADDED
Binary file
languages/feedzy-rss-feeds-ja.po ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: FEEDZY RSS Feeds by b*web v2.2\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2015-06-28 08:42+0900\n"
7
+ "Last-Translator: Shinichiro Sato <sama55@cmsbox.jp>\n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n>1;\n"
13
+ "X-Generator: Poedit 1.8.1\n"
14
+ "X-Poedit-SourceCharset: utf-8\n"
15
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
16
+ "X-Textdomain-Support: yes\n"
17
+ "Language: fr_FR\n"
18
+ "X-Poedit-SearchPath-0: .\n"
19
+
20
+ # @ feedzy-rss-feeds
21
+ #: feedzy-rss-feeds-shortcode.php:120
22
+ msgid "Sorry, this feed is currently unavailable or does not exists anymore."
23
+ msgstr "このフィードは現在利用できないか存在しません。"
24
+
25
+ # @ feedzy-rss-feeds
26
+ #: feedzy-rss-feeds-shortcode.php:298
27
+ msgid "on"
28
+ msgstr "on"
29
+
30
+ # @ feedzy-rss-feeds
31
+ #: feedzy-rss-feeds-shortcode.php:298
32
+ msgid "at"
33
+ msgstr "at"
34
+
35
+ # @ feedzy-rss-feeds
36
+ #: feedzy-rss-feed.php:37
37
+ msgid "Documentation and examples"
38
+ msgstr "ドキュメントと例"
39
+
40
+ # @ feedzy-rss-feeds
41
+ #: feedzy-rss-feed.php:38
42
+ msgid "More b*web Plugins"
43
+ msgstr "他の b*web プラグイン"
44
+
45
+ # @ feedzy-rss-feeds
46
+ #: feedzy-rss-feeds-ui-lang.php:19
47
+ msgid "Insert FEEDZY RSS Feeds Shortcode"
48
+ msgstr "FEEDZY RSSフィード ショートコードを追加"
49
+
50
+ # @ feedzy-rss-feeds
51
+ #: feedzy-rss-feeds-ui-lang.php:21 feedzy-rss-feeds-widget.php:69
52
+ msgid "Number of items to display."
53
+ msgstr "表示数:"
54
+
55
+ # @ feedzy-rss-feeds
56
+ #: feedzy-rss-feeds-ui-lang.php:23 feedzy-rss-feeds-widget.php:73
57
+ msgid "Links may be opened in the same window or a new tab."
58
+ msgstr "リンク先の開き方:"
59
+
60
+ # @ feedzy-rss-feeds
61
+ #: feedzy-rss-feeds-ui-lang.php:24 feedzy-rss-feeds-widget.php:84
62
+ msgid "Trim the title of the item after X characters."
63
+ msgstr "タイトルの切り取り文字数:"
64
+
65
+ # @ feedzy-rss-feeds
66
+ #: feedzy-rss-feeds-ui-lang.php:25 feedzy-rss-feeds-widget.php:89
67
+ msgid "Should we display the date of publication and the author name?"
68
+ msgstr "公開日と著作者を表示:"
69
+
70
+ # @ feedzy-rss-feeds
71
+ #: feedzy-rss-feeds-ui-lang.php:26 feedzy-rss-feeds-widget.php:93
72
+ msgid "Should we display a description (abstract) of the retrieved item?"
73
+ msgstr "詳細を表示:"
74
+
75
+ # @ feedzy-rss-feeds
76
+ #: feedzy-rss-feeds-ui-lang.php:27 feedzy-rss-feeds-widget.php:96
77
+ msgid "Crop description (summary) of the element after X characters."
78
+ msgstr "詳細の切り取り文字数:"
79
+
80
+ # @ feedzy-rss-feeds
81
+ #: feedzy-rss-feeds-ui-lang.php:28 feedzy-rss-feeds-widget.php:101
82
+ msgid "Should we display the first image of the content if it is available?"
83
+ msgstr "最初の画像を表示:"
84
+
85
+ # @ feedzy-rss-feeds
86
+ #: feedzy-rss-feeds-ui-lang.php:29 feedzy-rss-feeds-widget.php:104
87
+ msgid "Default thumbnail URL if no image is found."
88
+ msgstr "画像がない場合のデフォルトサムネイル:"
89
+
90
+ # @ feedzy-rss-feeds
91
+ #: feedzy-rss-feeds-ui-lang.php:30 feedzy-rss-feeds-widget.php:108
92
+ msgid "Thumblails dimension. Do not include \"px\". Eg: 150"
93
+ msgstr "サムネイルのサイズ(\"px\"はなし 例:150):"
94
+
95
+ # @ feedzy-rss-feeds
96
+ #: feedzy-rss-feeds-ui-lang.php:31 feedzy-rss-feeds-widget.php:112
97
+ msgid "Only display item if title contains specific keyword(s) (comma-separated list/case sensitive)."
98
+ msgstr "特定なキーワードがタイトルに含まれる項目のみ表示 (複数指定時は大文字小文字を意識してカンマ区切り):"
99
+
100
+ # @ feedzy-rss-feeds
101
+ #: feedzy-rss-feeds-ui-lang.php:32
102
+ msgid "Do not specify"
103
+ msgstr "指定しない"
104
+
105
+ # @ feedzy-rss-feeds
106
+ #: feedzy-rss-feeds-ui-lang.php:33
107
+ msgid "No"
108
+ msgstr "しない"
109
+
110
+ # @ feedzy-rss-feeds
111
+ #: feedzy-rss-feeds-ui-lang.php:34
112
+ msgid "Yes"
113
+ msgstr "する"
114
+
115
+ # @ feedzy-rss-feeds
116
+ #: feedzy-rss-feeds-ui-lang.php:20 feedzy-rss-feeds-widget.php:65
117
+ msgid "The feed(s) URL (comma-separated list)."
118
+ msgstr "フィードアドレス (複数指定する場合はカンマ区切り):"
119
+
120
+ # @ feedzy-rss-feeds
121
+ #: feedzy-rss-feeds-ui-lang.php:22
122
+ msgid "Should we display the RSS title?"
123
+ msgstr "タイトルを表示:"
124
+
125
+ # @ feedzy-rss-feeds
126
+ #. translators: plugin header field 'Name'
127
+ #: feedzy-rss-feed.php:0
128
+ msgid "FEEDZY RSS Feeds by b*web"
129
+ msgstr "FEEDZY RSS Feeds by b*web"
130
+
131
+ # @ feedzy-rss-feeds
132
+ #. translators: plugin header field 'Description'
133
+ #: feedzy-rss-feed.php:0
134
+ msgid "FEEDZY RSS Feeds is a small and lightweight plugin. Fast and easy to use, it aggregates RSS feeds into your WordPress site through simple shortcodes."
135
+ msgstr "FEEDZY RSS Feeds は小さく軽いプラグインです。高速で使い方も簡単。あなたのワードプレスサイトにシンプルなショートコードによるRSSフィードの収集機能を追加します。"
136
+
137
+ # @ feedzy-rss-feeds
138
+ #. translators: plugin header field 'Author'
139
+ #: feedzy-rss-feed.php:0
140
+ msgid "Brice CAPOBIANCO"
141
+ msgstr "Brice CAPOBIANCO"
142
+
143
+ # @ feedzy-rss-feeds
144
+ #. translators: plugin header field 'AuthorURI'
145
+ #: feedzy-rss-feed.php:0
146
+ msgid "http://b-website.com/"
147
+ msgstr "http://b-website.com/"
148
+
149
+ # @ feedzy-rss-feeds
150
+ #. translators: plugin header field 'PluginURI'
151
+ #: feedzy-rss-feed.php:0
152
+ msgid "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
153
+ msgstr "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
154
+
155
+ # @ feedzy_wp_widget
156
+ #: feedzy-rss-feeds-widget.php:18
157
+ msgid "Feedzy RSS Feeds"
158
+ msgstr "Feedzy RSS フィード"
159
+
160
+ # @ feedzy-rss-feeds
161
+ #: feedzy-rss-feeds-widget.php:57
162
+ msgid "Widget Title"
163
+ msgstr "タイトル"
164
+
165
+ # @ feedzy-rss-feeds
166
+ #: feedzy-rss-feeds-widget.php:61
167
+ msgid "Intro text"
168
+ msgstr "イントロテキスト"
169
+
170
+ # @ default
171
+ #: feedzy-rss-feed.php:39
172
+ msgid "Donate to this plugin &#187;"
173
+ msgstr "このプラグインに寄付 &#187;"
174
+
175
+ # @ feedzy-rss-feeds
176
+ #. translators: plugin header field 'Version'
177
+ #: feedzy-rss-feed.php:0
178
+ msgid "2.2"
179
+ msgstr "2.2"
180
+
181
+ # @ feedzy-rss-feeds
182
+ #: feedzy-rss-feeds-shortcode.php:289
183
+ msgid "Posted"
184
+ msgstr "投稿日"
185
+
186
+ # @ feedzy-rss-feeds
187
+ #: feedzy-rss-feeds-shortcode.php:294
188
+ msgid "by"
189
+ msgstr "by"
languages/feedzy-rss-feeds-sr_RS.mo ADDED
Binary file
languages/feedzy-rss-feeds-sr_RS.po ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: FEEDZY RSS Feeds by b*web v2.2.1\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2015-01-13 19:54:39+0000\n"
7
+ "Last-Translator: Borisa Djuraskovic <borisad@webhostinghub.com>\n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
+ "X-Generator: Poedit 1.5.4\n"
14
+ "X-Poedit-Language: \n"
15
+ "X-Poedit-Country: \n"
16
+ "X-Poedit-SourceCharset: utf-8\n"
17
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
18
+ "X-Poedit-Basepath: \n"
19
+ "X-Poedit-Bookmarks: \n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+ "X-Textdomain-Support: yes"
22
+
23
+ #: feedzy-rss-feeds-shortcode.php:120
24
+ #@ feedzy-rss-feeds
25
+ msgid "Sorry, this feed is currently unavailable or does not exists anymore."
26
+ msgstr "Žao nam je, ovo polje trenutno nije dostupno ili više ne postoji."
27
+
28
+ #: feedzy-rss-feeds-shortcode.php:298
29
+ #@ feedzy-rss-feeds
30
+ msgid "on"
31
+ msgstr "na"
32
+
33
+ #: feedzy-rss-feeds-shortcode.php:298
34
+ #@ feedzy-rss-feeds
35
+ msgid "at"
36
+ msgstr "u"
37
+
38
+ #: feedzy-rss-feed.php:37
39
+ #@ feedzy-rss-feeds
40
+ msgid "Documentation and examples"
41
+ msgstr "Dokumentacija i primeri"
42
+
43
+ #: feedzy-rss-feed.php:38
44
+ #@ feedzy-rss-feeds
45
+ msgid "More b*web Plugins"
46
+ msgstr "Više b*web Plugin-ova"
47
+
48
+ #: feedzy-rss-feeds-ui-lang.php:19
49
+ #@ feedzy-rss-feeds
50
+ msgid "Insert FEEDZY RSS Feeds Shortcode"
51
+ msgstr "Unesite FEEDZY RSS Feeds Shortcode"
52
+
53
+ #: feedzy-rss-feeds-ui-lang.php:21
54
+ #: feedzy-rss-feeds-widget.php:69
55
+ #@ feedzy-rss-feeds
56
+ msgid "Number of items to display."
57
+ msgstr "Broj stavki za prikazivanje"
58
+
59
+ #: feedzy-rss-feeds-ui-lang.php:23
60
+ #: feedzy-rss-feeds-widget.php:73
61
+ #@ feedzy-rss-feeds
62
+ msgid "Links may be opened in the same window or a new tab."
63
+ msgstr "Linkovi mogu biti otvoreni u istom prozoru ili u novom tabulatoru."
64
+
65
+ #: feedzy-rss-feeds-ui-lang.php:24
66
+ #: feedzy-rss-feeds-widget.php:84
67
+ #@ feedzy-rss-feeds
68
+ msgid "Trim the title of the item after X characters."
69
+ msgstr "Skratite naslov stavke posle X karaktera."
70
+
71
+ #: feedzy-rss-feeds-ui-lang.php:25
72
+ #: feedzy-rss-feeds-widget.php:89
73
+ #@ feedzy-rss-feeds
74
+ msgid "Should we display the date of publication and the author name?"
75
+ msgstr "Treba li da prikažemo datum publikacije i ime autora?"
76
+
77
+ #: feedzy-rss-feeds-ui-lang.php:26
78
+ #: feedzy-rss-feeds-widget.php:93
79
+ #@ feedzy-rss-feeds
80
+ msgid "Should we display a description (abstract) of the retrieved item?"
81
+ msgstr "Treba li da prikažemo opis (siže) dobavljene stavke?"
82
+
83
+ #: feedzy-rss-feeds-ui-lang.php:27
84
+ #: feedzy-rss-feeds-widget.php:96
85
+ #@ feedzy-rss-feeds
86
+ msgid "Crop description (summary) of the element after X characters."
87
+ msgstr "Kropuj opis (siže) elementa posle X karaktera."
88
+
89
+ #: feedzy-rss-feeds-ui-lang.php:28
90
+ #: feedzy-rss-feeds-widget.php:101
91
+ #@ feedzy-rss-feeds
92
+ msgid "Should we display the first image of the content if it is available?"
93
+ msgstr "Treba li da prikažemo prvu sliku sadržaja ako je raspoloživa?"
94
+
95
+ #: feedzy-rss-feeds-ui-lang.php:29
96
+ #: feedzy-rss-feeds-widget.php:104
97
+ #@ feedzy-rss-feeds
98
+ msgid "Default thumbnail URL if no image is found."
99
+ msgstr "URL podrazumevane sličice ako nije pronađena nijedna slika."
100
+
101
+ #: feedzy-rss-feeds-ui-lang.php:30
102
+ #: feedzy-rss-feeds-widget.php:108
103
+ #@ feedzy-rss-feeds
104
+ msgid "Thumblails dimension. Do not include \"px\". Eg: 150"
105
+ msgstr "Dimenzije sličice. Nemojte unositi \"px\". Npr. 150"
106
+
107
+ #: feedzy-rss-feeds-ui-lang.php:31
108
+ #: feedzy-rss-feeds-widget.php:112
109
+ #@ feedzy-rss-feeds
110
+ msgid "Only display item if title contains specific keyword(s) (comma-separated list/case sensitive)."
111
+ msgstr "Prikaži stavku samo ako naslov sadrži specifične ključne reči (odvojene zarezima/osetljive na velika i mala slova)."
112
+
113
+ #: feedzy-rss-feeds-ui-lang.php:32
114
+ #@ feedzy-rss-feeds
115
+ msgid "Do not specify"
116
+ msgstr "Nemoj određivati"
117
+
118
+ #: feedzy-rss-feeds-ui-lang.php:33
119
+ #@ feedzy-rss-feeds
120
+ msgid "No"
121
+ msgstr "Ne"
122
+
123
+ #: feedzy-rss-feeds-ui-lang.php:34
124
+ #@ feedzy-rss-feeds
125
+ msgid "Yes"
126
+ msgstr "Da"
127
+
128
+ #: feedzy-rss-feeds-ui-lang.php:20
129
+ #: feedzy-rss-feeds-widget.php:65
130
+ #@ feedzy-rss-feeds
131
+ msgid "The feed(s) URL (comma-separated list)."
132
+ msgstr "URL feed-ova (odvojenih zarezima ako je lista)."
133
+
134
+ #: feedzy-rss-feeds-ui-lang.php:22
135
+ #@ feedzy-rss-feeds
136
+ msgid "Should we display the RSS title?"
137
+ msgstr "Treba li da prikažemo RSS naslov?"
138
+
139
+ #. translators: plugin header field 'Name'
140
+ #: feedzy-rss-feed.php:0
141
+ #@ feedzy-rss-feeds
142
+ msgid "FEEDZY RSS Feeds by b*web"
143
+ msgstr "FEEDZY RSS Feeds, autor b*web"
144
+
145
+ #. translators: plugin header field 'Description'
146
+ #: feedzy-rss-feed.php:0
147
+ #@ feedzy-rss-feeds
148
+ msgid "FEEDZY RSS Feeds is a small and lightweight plugin. Fast and easy to use, it aggregates RSS feeds into your WordPress site through simple shortcodes."
149
+ msgstr "FEEDZY RSS Feeds je mali i lagan plugin. Brz i jednostavan za upotrebu, sakuplja RSS feed-ove na vaš WordPress site uz pomoć jednostavnih shortcode-ova."
150
+
151
+ #. translators: plugin header field 'Author'
152
+ #: feedzy-rss-feed.php:0
153
+ #@ feedzy-rss-feeds
154
+ msgid "Brice CAPOBIANCO"
155
+ msgstr "Brice CAPOBIANCO"
156
+
157
+ #. translators: plugin header field 'AuthorURI'
158
+ #: feedzy-rss-feed.php:0
159
+ #@ feedzy-rss-feeds
160
+ msgid "http://b-website.com/"
161
+ msgstr "http://b-website.com/"
162
+
163
+ #. translators: plugin header field 'PluginURI'
164
+ #: feedzy-rss-feed.php:0
165
+ #@ feedzy-rss-feeds
166
+ msgid "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
167
+ msgstr "http://b-website.com/feedzy-rss-feeds-wordpress-plugin-using-simplepie"
168
+
169
+ #. translators: plugin header field 'Version'
170
+ #: feedzy-rss-feed.php:0
171
+ #@ feedzy-rss-feeds
172
+ msgid "2.2.1"
173
+ msgstr ""
174
+
175
+ #: feedzy-rss-feed.php:39
176
+ #@ default
177
+ msgid "Donate to this plugin &#187;"
178
+ msgstr ""
179
+
180
+ #: feedzy-rss-feeds-shortcode.php:289
181
+ #@ feedzy-rss-feeds
182
+ msgid "Posted"
183
+ msgstr "Objavljeno"
184
+
185
+ #: feedzy-rss-feeds-shortcode.php:294
186
+ #@ feedzy-rss-feeds
187
+ msgid "by"
188
+ msgstr "po"
189
+
190
+ #: feedzy-rss-feeds-widget.php:18
191
+ #@ feedzy_wp_widget
192
+ msgid "Feedzy RSS Feeds"
193
+ msgstr ""
194
+
195
+ #: feedzy-rss-feeds-widget.php:57
196
+ #@ feedzy-rss-feeds
197
+ msgid "Widget Title"
198
+ msgstr "dodatak Naslov"
199
+
200
+ #: feedzy-rss-feeds-widget.php:61
201
+ #@ feedzy-rss-feeds
202
+ msgid "Intro text"
203
+ msgstr "Uvodni tekst"
204
+
languages/feedzy-rss-feeds.pot ADDED
@@ -0,0 +1,459 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2017 Themeisle
2
+ # This file is distributed under the GPL-2.0+.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Feedzy RSS Feeds Lite 3.2.1\n"
6
+ "Report-Msgid-Bugs-To: https://github.com/Codeinwp/feedzy-rss-feeds/issues\n"
7
+ "POT-Creation-Date: 2017-10-12 09:53:07+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=utf-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: Themeisle Translate Team <friends@themeisle.com>\n"
13
+ "Language-Team: Themeisle Translate <friends@themeisle.com>\n"
14
+ "X-Generator: grunt-wp-i18n 0.5.4\n"
15
+ "X-Poedit-KeywordsList: "
16
+ "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
17
+ "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
18
+ "Language: en\n"
19
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
+ "X-Poedit-Country: United States\n"
21
+ "X-Poedit-SourceCharset: UTF-8\n"
22
+ "X-Poedit-Basepath: ../\n"
23
+ "X-Poedit-SearchPath-0: .\n"
24
+ "X-Poedit-Bookmarks: \n"
25
+ "X-Textdomain-Support: yes\n"
26
+
27
+ #: form/form.php:44
28
+ msgid "Premium"
29
+ msgstr ""
30
+
31
+ #: includes/abstract/feedzy-rss-feeds-admin-abstract.php:57
32
+ msgid "Sorry, this feed is currently unavailable or does not exists anymore."
33
+ msgstr ""
34
+
35
+ #: includes/abstract/feedzy-rss-feeds-admin-abstract.php:426
36
+ #: includes/abstract/feedzy-rss-feeds-admin-abstract.php:433
37
+ msgid "Feed URL: %s not valid and removed from fetch."
38
+ msgstr ""
39
+
40
+ #: includes/abstract/feedzy-rss-feeds-admin-abstract.php:717
41
+ msgid "by"
42
+ msgstr ""
43
+
44
+ #: includes/abstract/feedzy-rss-feeds-admin-abstract.php:723
45
+ msgid "on"
46
+ msgstr ""
47
+
48
+ #: includes/abstract/feedzy-rss-feeds-admin-abstract.php:725
49
+ msgid "at"
50
+ msgstr ""
51
+
52
+ #: includes/admin/feedzy-rss-feeds-admin.php:128
53
+ msgid "Feed Categories"
54
+ msgstr ""
55
+
56
+ #: includes/admin/feedzy-rss-feeds-admin.php:129
57
+ msgid "Feed Category"
58
+ msgstr ""
59
+
60
+ #: includes/admin/feedzy-rss-feeds-admin.php:130
61
+ #: includes/admin/feedzy-rss-feeds-admin.php:131
62
+ msgid "Add Category"
63
+ msgstr ""
64
+
65
+ #: includes/admin/feedzy-rss-feeds-admin.php:132
66
+ msgid "Edit Category"
67
+ msgstr ""
68
+
69
+ #: includes/admin/feedzy-rss-feeds-admin.php:133
70
+ msgid "New Feed Category"
71
+ msgstr ""
72
+
73
+ #: includes/admin/feedzy-rss-feeds-admin.php:134
74
+ msgid "View Category"
75
+ msgstr ""
76
+
77
+ #: includes/admin/feedzy-rss-feeds-admin.php:135
78
+ msgid "Search Category"
79
+ msgstr ""
80
+
81
+ #: includes/admin/feedzy-rss-feeds-admin.php:136
82
+ msgid "No categories found"
83
+ msgstr ""
84
+
85
+ #: includes/admin/feedzy-rss-feeds-admin.php:137
86
+ msgid "No categories in the trash"
87
+ msgstr ""
88
+
89
+ #: includes/admin/feedzy-rss-feeds-admin.php:167
90
+ msgid "Category Feeds"
91
+ msgstr ""
92
+
93
+ #: includes/admin/feedzy-rss-feeds-admin.php:173
94
+ msgid "Increase your social media presence"
95
+ msgstr ""
96
+
97
+ #: includes/admin/feedzy-rss-feeds-admin.php:203
98
+ msgid "Place your URL's here followed by a comma."
99
+ msgstr ""
100
+
101
+ #: includes/admin/feedzy-rss-feeds-admin.php:264
102
+ msgid "Category Title"
103
+ msgstr ""
104
+
105
+ #: includes/admin/feedzy-rss-feeds-admin.php:265
106
+ #: includes/admin/feedzy-rss-feeds-admin.php:268
107
+ msgid "Slug"
108
+ msgstr ""
109
+
110
+ #: includes/admin/feedzy-rss-feeds-admin.php:292
111
+ msgid "Undefined"
112
+ msgstr ""
113
+
114
+ #: includes/admin/feedzy-rss-feeds-admin.php:317
115
+ msgid "Documentation and examples"
116
+ msgstr ""
117
+
118
+ #: includes/admin/feedzy-rss-feeds-admin.php:318
119
+ msgid "More Plugins"
120
+ msgstr ""
121
+
122
+ #: includes/admin/feedzy-rss-feeds-admin.php:318
123
+ #: includes/admin/feedzy-rss-feeds-admin.php:337
124
+ msgid "More Features"
125
+ msgstr ""
126
+
127
+ #: includes/admin/feedzy-rss-feeds-admin.php:334
128
+ #: includes/admin/feedzy-wp-widget.php:40
129
+ msgid "Feedzy RSS Feeds"
130
+ msgstr ""
131
+
132
+ #: includes/admin/feedzy-rss-feeds-admin.php:334
133
+ msgid "Feedzy RSS"
134
+ msgstr ""
135
+
136
+ #: includes/admin/feedzy-rss-feeds-admin.php:347
137
+ msgid "Import Posts"
138
+ msgstr ""
139
+
140
+ #: includes/admin/feedzy-rss-feeds-admin.php:351
141
+ msgid "Settings"
142
+ msgstr ""
143
+
144
+ #: includes/admin/feedzy-rss-feeds-admin.php:366
145
+ msgid "Your settings were saved."
146
+ msgstr ""
147
+
148
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:52
149
+ msgid "Feedzy Lite"
150
+ msgstr ""
151
+
152
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:53
153
+ msgid "Insert Feedzy RSS Feeds Shortcode"
154
+ msgstr ""
155
+
156
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:54
157
+ msgid "Use Image"
158
+ msgstr ""
159
+
160
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:55
161
+ msgid "Insert Shortcode"
162
+ msgstr ""
163
+
164
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:56
165
+ msgid "Cancel"
166
+ msgstr ""
167
+
168
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:57
169
+ msgid "Get Feedzy RSS Feeds Premium"
170
+ msgstr ""
171
+
172
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:93
173
+ msgid "Feed Source"
174
+ msgstr ""
175
+
176
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:96
177
+ msgid "The feed(s) URL (comma-separated list)."
178
+ msgstr ""
179
+
180
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:96
181
+ msgid "Check feed before insert."
182
+ msgstr ""
183
+
184
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:97
185
+ msgid "Feed URL"
186
+ msgstr ""
187
+
188
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:102
189
+ msgid "Number of items to display."
190
+ msgstr ""
191
+
192
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:103
193
+ msgid "(eg: 5)"
194
+ msgstr ""
195
+
196
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:108
197
+ msgid "Should we display the RSS title?"
198
+ msgstr ""
199
+
200
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:113
201
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:202
202
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:217
203
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:261
204
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:298
205
+ msgid "Yes"
206
+ msgstr ""
207
+
208
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:117
209
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:206
210
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:221
211
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:265
212
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:302
213
+ msgid "No"
214
+ msgstr ""
215
+
216
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:123
217
+ msgid "For how long we will cache the feed results."
218
+ msgstr ""
219
+
220
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:124
221
+ msgid "(eg: 1_days, defaults: 12_hours)"
222
+ msgstr ""
223
+
224
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:129
225
+ msgid "Hour"
226
+ msgstr ""
227
+
228
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:133
229
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:137
230
+ msgid "Hours"
231
+ msgstr ""
232
+
233
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:141
234
+ msgid "Day"
235
+ msgstr ""
236
+
237
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:145
238
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:149
239
+ msgid "Days"
240
+ msgstr ""
241
+
242
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:157
243
+ msgid "Item Options"
244
+ msgstr ""
245
+
246
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:160
247
+ msgid "Links may be opened in the same window or a new tab."
248
+ msgstr ""
249
+
250
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:165
251
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:257
252
+ msgid "Auto"
253
+ msgstr ""
254
+
255
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:169
256
+ msgid "_blank"
257
+ msgstr ""
258
+
259
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:173
260
+ msgid "_self"
261
+ msgstr ""
262
+
263
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:177
264
+ msgid "_parent"
265
+ msgstr ""
266
+
267
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:181
268
+ msgid "_top"
269
+ msgstr ""
270
+
271
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:185
272
+ msgid "framename"
273
+ msgstr ""
274
+
275
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:191
276
+ msgid "Trim the title of the item after X characters."
277
+ msgstr ""
278
+
279
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:192
280
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:229
281
+ msgid "(eg: 160)"
282
+ msgstr ""
283
+
284
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:197
285
+ msgid "Should we display the date of publication and the author name?"
286
+ msgstr ""
287
+
288
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:212
289
+ msgid "Should we display a description (abstract) of the retrieved item?"
290
+ msgstr ""
291
+
292
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:227
293
+ msgid "Crop description (summary) of the element after X characters."
294
+ msgstr ""
295
+
296
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:233
297
+ msgid ""
298
+ "Only display item if title contains specific keyword(s) (comma-separated "
299
+ "list/case sensitive)."
300
+ msgstr ""
301
+
302
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:234
303
+ msgid "(eg: news, sports etc.)"
304
+ msgstr ""
305
+
306
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:240
307
+ msgid ""
308
+ "Exclude items if title or content contains specific keyword(s) "
309
+ "(comma-separated list/case sensitive). "
310
+ msgstr ""
311
+
312
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:241
313
+ msgid "(eg: politics, gossip etc.)"
314
+ msgstr ""
315
+
316
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:249
317
+ msgid "Item Image Options"
318
+ msgstr ""
319
+
320
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:252
321
+ msgid "Should we display the first image of the content if it is available?"
322
+ msgstr ""
323
+
324
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:271
325
+ msgid "Default thumbnail URL if no image is found."
326
+ msgstr ""
327
+
328
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:272
329
+ msgid "Image URL"
330
+ msgstr ""
331
+
332
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:276
333
+ msgid "Select from Gallery"
334
+ msgstr ""
335
+
336
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:280
337
+ msgid "Thumbnails dimension. Do not include \"px\". Eg: 150"
338
+ msgstr ""
339
+
340
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:281
341
+ msgid "(eg: 150)"
342
+ msgstr ""
343
+
344
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:288
345
+ msgid "PRO Options"
346
+ msgstr ""
347
+
348
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:289
349
+ msgid ""
350
+ "Get access to more options and customizations with full version of Feedzy "
351
+ "RSS Feeds . Use existing templates or extend them and make them your own."
352
+ msgstr ""
353
+
354
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:289
355
+ msgid "See more features of Feedzy RSS Feeds "
356
+ msgstr ""
357
+
358
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:292
359
+ msgid "Should we display the price from the feed if it is available?"
360
+ msgstr ""
361
+
362
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:308
363
+ msgid "Referral URL parameters (w/o \"?\")."
364
+ msgstr ""
365
+
366
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:309
367
+ msgid "(eg. promo_code=feedzy_is_awesome)"
368
+ msgstr ""
369
+
370
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:315
371
+ msgid "How many columns we should use to display the feed items"
372
+ msgstr ""
373
+
374
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:316
375
+ msgid "(eg. 1, 2, ..., 6)"
376
+ msgstr ""
377
+
378
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:322
379
+ msgid "Template to use when displaying the feed."
380
+ msgstr ""
381
+
382
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:328
383
+ msgid "Default"
384
+ msgstr ""
385
+
386
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:332
387
+ msgid "Style 1"
388
+ msgstr ""
389
+
390
+ #: includes/admin/feedzy-rss-feeds-ui-lang.php:336
391
+ msgid "Style 2"
392
+ msgstr ""
393
+
394
+ #: includes/admin/feedzy-wp-widget.php:83
395
+ msgid "Widget Title"
396
+ msgstr ""
397
+
398
+ #: includes/admin/feedzy-wp-widget.php:87
399
+ msgid "Intro text"
400
+ msgstr ""
401
+
402
+ #: includes/layouts/settings.php:12 includes/layouts/settings.php:45
403
+ msgid "Headers"
404
+ msgstr ""
405
+
406
+ #: includes/layouts/settings.php:14
407
+ msgid "Proxy"
408
+ msgstr ""
409
+
410
+ #: includes/layouts/settings.php:47
411
+ msgid "User Agent to use when accessing the feed"
412
+ msgstr ""
413
+
414
+ #: includes/layouts/settings.php:57
415
+ msgid "Proxy Settings"
416
+ msgstr ""
417
+
418
+ #: includes/layouts/settings.php:59
419
+ msgid "Host"
420
+ msgstr ""
421
+
422
+ #: includes/layouts/settings.php:67
423
+ msgid "Port"
424
+ msgstr ""
425
+
426
+ #: includes/layouts/settings.php:75
427
+ msgid "Username"
428
+ msgstr ""
429
+
430
+ #: includes/layouts/settings.php:83
431
+ msgid "Password"
432
+ msgstr ""
433
+
434
+ #: includes/layouts/settings.php:110
435
+ msgid "Save"
436
+ msgstr ""
437
+
438
+ #. Plugin Name of the plugin/theme
439
+ msgid "Feedzy RSS Feeds Lite"
440
+ msgstr ""
441
+
442
+ #. Plugin URI of the plugin/theme
443
+ msgid "https://themeisle.com/plugins/feedzy-rss-feeds-lite/"
444
+ msgstr ""
445
+
446
+ #. Description of the plugin/theme
447
+ msgid ""
448
+ "A small and lightweight RSS aggregator plugin. Fast and very easy to use, "
449
+ "it allows you to aggregate multiple RSS feeds into your WordPress site "
450
+ "through fully customizable shortcodes & widgets."
451
+ msgstr ""
452
+
453
+ #. Author of the plugin/theme
454
+ msgid "Themeisle"
455
+ msgstr ""
456
+
457
+ #. Author URI of the plugin/theme
458
+ msgid "http://themeisle.com"
459
+ msgstr ""
languages/login-customizer.pot DELETED
@@ -1,263 +0,0 @@
1
- # Copyright (C) 2017 Hardeep Asrani
2
- # This file is distributed under the same license as the Custom Login Page Customizer package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Custom Login Page Customizer 1.2.0\n"
6
- "Report-Msgid-Bugs-To: https://github.com/Codeinwp/login-customizer/issues\n"
7
- "POT-Creation-Date: 2017-10-16 09:40:07+00:00\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: Themeisle Translate Team <friends@themeisle.com>\n"
13
- "Language-Team: Themeisle Translate <friends@themeisle.com>\n"
14
- "X-Generator: grunt-wp-i18n 0.5.4\n"
15
- "X-Poedit-KeywordsList: "
16
- "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
17
- "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
18
- "Language: en\n"
19
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
- "X-Poedit-Country: United States\n"
21
- "X-Poedit-SourceCharset: UTF-8\n"
22
- "X-Poedit-Basepath: ../\n"
23
- "X-Poedit-SearchPath-0: .\n"
24
- "X-Poedit-Bookmarks: \n"
25
- "X-Textdomain-Support: yes\n"
26
-
27
- #: customizer.php:9 option-panel.php:3 option-panel.php:17
28
- msgid "Login Customizer"
29
- msgstr ""
30
-
31
- #: customizer.php:10
32
- msgid ""
33
- "This section allows you to customize the login page of your "
34
- "website.<br/>Login Customizer by <a target=\"_blank\" rel=\"nofollow\" "
35
- "href=\"https://themeisle.com\">ThemeIsle</a>"
36
- msgstr ""
37
-
38
- #: customizer.php:17
39
- msgid "Logo"
40
- msgstr ""
41
-
42
- #: customizer.php:25
43
- msgid "Background"
44
- msgstr ""
45
-
46
- #: customizer.php:33
47
- msgid "Form Background"
48
- msgstr ""
49
-
50
- #: customizer.php:41
51
- msgid "Form Styling"
52
- msgstr ""
53
-
54
- #: customizer.php:49
55
- msgid "Fields Styling"
56
- msgstr ""
57
-
58
- #: customizer.php:57
59
- msgid "Button Styling"
60
- msgstr ""
61
-
62
- #: customizer.php:65
63
- msgid "Other"
64
- msgstr ""
65
-
66
- #: customizer.php:73
67
- msgid "Security"
68
- msgstr ""
69
-
70
- #: customizer.php:88
71
- msgid "Login Logo"
72
- msgstr ""
73
-
74
- #: customizer.php:106
75
- msgid "Logo Width"
76
- msgstr ""
77
-
78
- #: customizer.php:123
79
- msgid "Logo Height"
80
- msgstr ""
81
-
82
- #: customizer.php:140
83
- msgid "Padding Bottom"
84
- msgstr ""
85
-
86
- #: customizer.php:157 customizer.php:210
87
- msgid "Background Image"
88
- msgstr ""
89
-
90
- #: customizer.php:176 customizer.php:229
91
- msgid "Background Color"
92
- msgstr ""
93
-
94
- #: customizer.php:193
95
- msgid "Background Size"
96
- msgstr ""
97
-
98
- #: customizer.php:247
99
- msgid "Width"
100
- msgstr ""
101
-
102
- #: customizer.php:264
103
- msgid "Height"
104
- msgstr ""
105
-
106
- #: customizer.php:281
107
- msgid "Padding"
108
- msgstr ""
109
-
110
- #: customizer.php:297
111
- msgid "Border (Example: 2px dotted black) "
112
- msgstr ""
113
-
114
- #: customizer.php:314
115
- msgid "Input Field Width"
116
- msgstr ""
117
-
118
- #: customizer.php:331
119
- msgid "Input Field Margin"
120
- msgstr ""
121
-
122
- #: customizer.php:349
123
- msgid "Input Field Background"
124
- msgstr ""
125
-
126
- #: customizer.php:368
127
- msgid "Input Field Color"
128
- msgstr ""
129
-
130
- #: customizer.php:387
131
- msgid "Label Color"
132
- msgstr ""
133
-
134
- #: customizer.php:406
135
- msgid "Button Background"
136
- msgstr ""
137
-
138
- #: customizer.php:425
139
- msgid "Button Border"
140
- msgstr ""
141
-
142
- #: customizer.php:444
143
- msgid "Button Background (Hover)"
144
- msgstr ""
145
-
146
- #: customizer.php:463
147
- msgid "Button Border (Hover)"
148
- msgstr ""
149
-
150
- #: customizer.php:482
151
- msgid "Button Box Shadow"
152
- msgstr ""
153
-
154
- #: customizer.php:501
155
- msgid "Button Color"
156
- msgstr ""
157
-
158
- #: customizer.php:520
159
- msgid "Text Color"
160
- msgstr ""
161
-
162
- #: customizer.php:539
163
- msgid "Text Color (Hover)"
164
- msgstr ""
165
-
166
- #: customizer.php:556
167
- msgid "Custom CSS"
168
- msgstr ""
169
-
170
- #: login-customizer.php:25
171
- msgid ""
172
- "<p class=\"logincust_pro_text\">You need to buy the <a "
173
- "href=\"http://themeisle.com/plugins/custom-login-customizer-security-addon/\""
174
- " target=\"_blank\">SECURITY ADDON</a> to have this options. </p>"
175
- msgstr ""
176
-
177
- #: option-panel.php:18
178
- msgid "Howdy!"
179
- msgstr ""
180
-
181
- #: option-panel.php:19
182
- msgid ""
183
- "Login Customizer plugin allows you to easily customize your login page "
184
- "straight from your WordPress Customizer! You can preview your changes "
185
- "before you save them! Awesome, right?"
186
- msgstr ""
187
-
188
- #: option-panel.php:20
189
- msgid "In Customizer, navigate to Login Customizer"
190
- msgstr ""
191
-
192
- #: option-panel.php:21
193
- msgid "Start Customizing!"
194
- msgstr ""
195
-
196
- #: option-panel.php:22
197
- msgid "Credits/Support (All the unwanted crap)"
198
- msgstr ""
199
-
200
- #: option-panel.php:23
201
- msgid ""
202
- "If you find any issues or if you want to contribute, then please free to "
203
- "drop me a mail at"
204
- msgstr ""
205
-
206
- #: option-panel.php:23
207
- msgid "this link"
208
- msgstr ""
209
-
210
- #: option-panel.php:24
211
- msgid "Thanks for using this plugin. Don not forget to leave a review."
212
- msgstr ""
213
-
214
- #: option-panel.php:25
215
- msgid "ThemeIsle :)"
216
- msgstr ""
217
-
218
- #: option-panel.php:27 option-panel.php:62
219
- msgid "Subscribe"
220
- msgstr ""
221
-
222
- #: option-panel.php:51 option-panel.php:89
223
- msgid ""
224
- "Our free, 4-lesson course on how to make your WordPress site run incredibly "
225
- "fast is barely waiting for its students. Ready to learn how to reduce your "
226
- "loading times by half? Come and join the 1st lesson here!"
227
- msgstr ""
228
-
229
- #: option-panel.php:53
230
- msgid ""
231
- "Thank you for subscribing! You have been added to the mailing list and will "
232
- "receive the next email information in the coming weeks. If you ever wish to "
233
- "unsubscribe, simply use the Unsubscribe link included in each newsletter."
234
- msgstr ""
235
-
236
- #: option-panel.php:91
237
- msgid ""
238
- "Thank you for subscribing! You have been added to the mailing list and will "
239
- "receive the next email information in the coming weeks. If you ever wish to "
240
- "unsubscribe, simply use the Unsubscribe link included in each newsletter."
241
- msgstr ""
242
-
243
- #. Plugin Name of the plugin/theme
244
- msgid "Custom Login Page Customizer"
245
- msgstr ""
246
-
247
- #. Plugin URI of the plugin/theme
248
- msgid "https://themeisle.com/plugins/login-customizer/"
249
- msgstr ""
250
-
251
- #. Description of the plugin/theme
252
- msgid ""
253
- "Custom Login Customizer plugin allows you to easily customize your login "
254
- "page straight from your WordPress Customizer! Awesome, right?"
255
- msgstr ""
256
-
257
- #. Author of the plugin/theme
258
- msgid "Hardeep Asrani"
259
- msgstr ""
260
-
261
- #. Author URI of the plugin/theme
262
- msgid "https://themeisle.com/"
263
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
login-customizer.php DELETED
@@ -1,52 +0,0 @@
1
- <?php
2
- /**
3
- * Plugin loader
4
- *
5
- * @package LOGINCUST
6
- * @author Themeisle
7
- * @since 1.0.0
8
- */
9
-
10
- /**
11
- * Plugin Name: Custom Login Page Customizer
12
- * Plugin URI: https://themeisle.com/plugins/login-customizer/
13
- * Description: Custom Login Customizer plugin allows you to easily customize your login page straight from your WordPress Customizer! Awesome, right?
14
- * Author: Hardeep Asrani
15
- * Author URI: https://themeisle.com/
16
- * Version: 1.2.0
17
- * WordPress Available: yes
18
- * Requires License: no
19
- */
20
-
21
- define( 'LOGINCUST_VERSION', '1.2.0' );
22
- define( 'LOGINCUST_FREE_PATH', plugin_dir_path( __FILE__ ) );
23
- define( 'LOGINCUST_FREE_URL', plugin_dir_url( __FILE__ ) );
24
- if ( ! defined( 'login-customizer' ) ) {
25
- define( 'LOGINCUST_TEXTDOMAIN', 'login-customizer' );
26
- }
27
- define( 'LOGINCUST_PRO_TEXT', __( '<p class="logincust_pro_text">You need to buy the <a href="http://themeisle.com/plugins/custom-login-customizer-security-addon/" target="_blank">SECURITY ADDON</a> to have this options. </p>', 'login-customizer' ) );
28
-
29
- /**
30
- * Check if security addon is active
31
- *
32
- * @package LOGINCUST
33
- * @since 1.0.2
34
- * @version 1.0.0
35
- * @return bool
36
- */
37
- function logincust_check_security() {
38
- return ( defined( 'LOGINCUST_SECURITY_VERSION' ) );
39
- }
40
-
41
- add_filter( 'themeisle_sdk_products', 'login_customizer_register_sdk', 10, 1 );
42
-
43
- function login_customizer_register_sdk( $products ) {
44
- $products[] = __FILE__;
45
-
46
- return $products;
47
- }
48
-
49
- include( LOGINCUST_FREE_PATH . 'vendor/autoload.php' );
50
- include( LOGINCUST_FREE_PATH . 'customizer.php' );
51
- include( LOGINCUST_FREE_PATH . 'option-panel.php' );
52
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mailin.php DELETED
@@ -1,868 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * SendinBlue REST client
5
- */
6
-
7
- class Mailin {
8
-
9
- public $api_key;
10
- public $base_url;
11
- public $curl_opts = array();
12
- public function __construct( $base_url, $api_key ) {
13
- if ( ! function_exists( 'curl_init' ) ) {
14
- throw new Exception( 'Mailin requires CURL module' );
15
- }
16
- $this->base_url = $base_url;
17
- $this->api_key = $api_key;
18
- }
19
- /**
20
- * Do CURL request with authorization
21
- */
22
- private function do_request( $resource, $method, $input ) {
23
- $called_url = $this->base_url . '/' . $resource;
24
- $ch = curl_init( $called_url );
25
- $auth_header = 'api-key:' . $this->api_key;
26
- $content_header = 'Content-Type:application/json';
27
- if ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ) {
28
- // Windows only over-ride
29
- curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
30
- }
31
- curl_setopt( $ch, CURLOPT_HTTPHEADER, array($auth_header, $content_header) );
32
- curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
33
- curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, $method );
34
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
35
- curl_setopt( $ch, CURLOPT_HEADER, 0 );
36
- curl_setopt( $ch, CURLOPT_POSTFIELDS, $input );
37
- $data = curl_exec( $ch );
38
- if ( curl_errno( $ch ) ) {
39
- echo 'Curl error: ' . curl_error( $ch ) . '\n';
40
- }
41
- curl_close( $ch );
42
- return json_decode( $data,true );
43
- }
44
- public function get( $resource, $input ) {
45
- return $this->do_request( $resource,'GET',$input );
46
- }
47
- public function put( $resource, $input ) {
48
- return $this->do_request( $resource,'PUT',$input );
49
- }
50
- public function post( $resource, $input ) {
51
- return $this->do_request( $resource,'POST',$input );
52
- }
53
- public function delete( $resource, $input ) {
54
- return $this->do_request( $resource,'DELETE',$input );
55
- }
56
-
57
- /*
58
- Get Account.
59
- No input required
60
- */
61
- public function get_account() {
62
- return $this->get( 'account','' );
63
- }
64
-
65
- /*
66
- Get SMTP details.
67
- No input required
68
- */
69
- public function get_smtp_details() {
70
- return $this->get( 'account/smtpdetail','' );
71
- }
72
-
73
- /*
74
- Create Child Account.
75
- @param {Array} data contains php array with key value pair.
76
- @options data {String} child_email: Email address of Reseller child [Mandatory]
77
- @options data {String} password: Password of Reseller child to login [Mandatory]
78
- @options data {String} company_org: Name of Reseller child’s company [Mandatory]
79
- @options data {String} first_name: First name of Reseller child [Mandatory]
80
- @options data {String} last_name: Last name of Reseller child [Mandatory]
81
- @options data {Array} credits: Number of email & sms credits respectively, which will be assigned to the Reseller child’s account [Optional]
82
- - email_credit {Integer} number of email credits
83
- - sms_credit {Integer} Number of sms credts
84
- @options data {Array} associate_ip: Associate dedicated IPs to reseller child. You can use commas to separate multiple IPs [Optional]
85
- */
86
- public function create_child_account( $data ) {
87
- return $this->post( 'account',json_encode( $data ) );
88
- }
89
-
90
- /*
91
- Update Child Account.
92
- @param {Array} data contains php array with key value pair.
93
- @options data {String} auth_key: 16 character authorization key of Reseller child to be modified [Mandatory]
94
- @options data {String} company_org: Name of Reseller child’s company [Optional]
95
- @options data {String} first_name: First name of Reseller child [Optional]
96
- @options data {String} last_name: Last name of Reseller child [Optional]
97
- @options data {String} password: Password of Reseller child to login [Optional]
98
- @options data {Array} associate_ip: Associate dedicated IPs to reseller child. You can use commas to separate multiple IPs [Optional]
99
- @options data {Array} disassociate_ip: Disassociate dedicated IPs from reseller child. You can use commas to separate multiple IPs [Optional]
100
- */
101
- public function update_child_account( $data ) {
102
- return $this->put( 'account',json_encode( $data ) );
103
- }
104
-
105
- /*
106
- Delete Child Account.
107
- @param {Array} data contains php array with key value pair.
108
- @options data {String} auth_key: 16 character authorization key of Reseller child to be deleted [Mandatory]
109
- */
110
- public function delete_child_account( $data ) {
111
- return $this->delete( 'account/' . $data['auth_key'],'' );
112
- }
113
-
114
- /*
115
- Get Reseller child Account.
116
- @param {Array} data contains php array with key value pair.
117
- @options data {String} auth_key: 16 character authorization key of Reseller child. Example : To get the details of more than one child account, use, {"key1":"abC01De2fGHI3jkL","key2":"mnO45Pq6rSTU7vWX"} [Mandatory]
118
- */
119
- public function get_reseller_child( $data ) {
120
- return $this->post( 'account/getchildv2',json_encode( $data ) );
121
- }
122
-
123
- /*
124
- Add/Remove Reseller child's Email/Sms credits.
125
- @param {Array} data contains php array with key value pair.
126
- @options data {String} auth_key: 16 character authorization key of Reseller child to modify credits [Mandatory]
127
- @options data {Array} add_credit: Number of email & sms credits to be added. You can assign either email or sms credits, one at a time other will remain 0. [Mandatory: if rmv_credit is empty]
128
- - email_credit {Integer} number of email credits
129
- - sms_credit {Integer} Number of sms credts
130
- @options data {Array} rmv_credit: Number of email & sms credits to be removed. You can assign either email or sms credits, one at a time other will remain 0. [Mandatory: if add_credits is empty]
131
- - email_credit {Integer} number of email credits
132
- - sms_credit {Integer} Number of sms credts
133
- */
134
- public function add_remove_child_credits( $data ) {
135
- return $this->post( 'account/addrmvcredit',json_encode( $data ) );
136
- }
137
-
138
- /*
139
- Get a particular campaign detail.
140
- @param {Array} data contains php array with key value pair.
141
- @options data {Integer} id: Unique Id of the campaign [Mandatory]
142
- */
143
- public function get_campaign_v2( $data ) {
144
- return $this->get( 'campaign/' . $data['id'] . '/detailsv2','' );
145
- }
146
-
147
- /*
148
- Get all campaigns detail.
149
- @param {Array} data contains php array with key value pair.
150
- @options data {String} type: Type of campaign. Possible values – classic, trigger, sms, template ( case sensitive ) [Optional]
151
- @options data {String} status: Status of campaign. Possible values – draft, sent, archive, queued, suspended, in_process, temp_active, temp_inactive ( case sensitive ) [Optional]
152
- @options data {Integer} page: Maximum number of records per request is 500, if there are more than 500 campaigns then you can use this parameter to get next 500 results [Optional]
153
- @options data {Integer} page_limit: This should be a valid number between 1-500 [Optional]
154
- */
155
- public function get_campaigns_v2( $data ) {
156
- return $this->get( 'campaign/detailsv2',json_encode( $data ) );
157
- }
158
-
159
- /*
160
- Create and Schedule your campaigns. It returns the ID of the created campaign.
161
- @param {Array} data contains php array with key value pair.
162
- @options data {String} category: Tag name of the campaign [Optional]
163
- @options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
164
- @options data {String} name: Name of the campaign [Mandatory]
165
- @options data {String} bat: Email address for test mail [Optional]
166
- @options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
167
- @options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
168
- @options data {Array} listid: These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
169
- @options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
170
- @options data {String} subject: Subject of the campaign [Mandatory]
171
- @options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
172
- @options data {String} reply_to: The reply to email in the campaign emails [Optional]
173
- @options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM] To use the contact attributes here, these should already exist in SendinBlue account [Optional]
174
- @options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
175
- @options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
176
- @options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image can’t be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
177
- @options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
178
- @options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign can’t be send now, & send_now = 1 means campaign ready to send now [Optional]
179
-
180
- */
181
- public function create_campaign( $data ) {
182
- return $this->post( 'campaign',json_encode( $data ) );
183
- }
184
-
185
- /*
186
- Update your campaign.
187
- @param {Array} data contains php array with key value pair.
188
- @options data {Integer} id: Id of campaign to be modified [Mandatory]
189
- @options data {String} category: Tag name of the campaign [Optional]
190
- @options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
191
- @options data {String} name: Name of the campaign [Optional]
192
- @options data {String} bat: Email address for test mail [Optional]
193
- @options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Optional]
194
- @options data {String} html_url: Url which content is the body of content [Optional]
195
- @options data {Array} listid These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
196
- @options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
197
- @options data {String} subject: Subject of the campaign.
198
- @options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
199
- @options data {String} reply_to: The reply to email in the campaign emails [Optional]
200
- @options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
201
- @options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
202
- @options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
203
- @options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image can’t be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
204
- @options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
205
- @options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign can’t be send now, & send_now = 1 means campaign ready to send now [Optional]
206
- */
207
- public function update_campaign( $data ) {
208
- $id = $data['id'];
209
- unset( $data['id'] );
210
- return $this->put( 'campaign/' . $id,json_encode( $data ) );
211
- }
212
-
213
- /*
214
- Delete your campaigns.
215
- @param {Array} data contains php array with key value pair.
216
- @options data {Integer} id: Id of campaign to be deleted [Mandatory]
217
- */
218
- public function delete_campaign( $data ) {
219
- return $this->delete( 'campaign/' . $data['id'],'' );
220
- }
221
-
222
- /*
223
- Send report of Sent and Archived campaign.
224
- @param {Array} data contains php array with key value pair.
225
- @options data {Integer} id: Id of campaign to send its report [Mandatory]
226
- @options data {String} lang: Language of email content. Possible values – fr (default), en, es, it & pt [Optional]
227
- @options data {String} email_subject: Message subject [Mandatory]
228
- @options data {Array} email_to: Email address of the recipient(s). Example: "test@example.net". You can use commas to separate multiple recipients [Mandatory]
229
- @options data {String} email_content_type: Body of the message in text/HTML version. Possible values – text & html [Mandatory]
230
- @options data {Array} email_bcc: Same as email_to but for Bcc [Optional]
231
- @options data {Array} email_cc: Same as email_to but for Cc [Optional]
232
- @options data {String} email_body: Body of the message [Mandatory]
233
- */
234
- public function campaign_report_email( $data ) {
235
- $id = $data['id'];
236
- unset( $data['id'] );
237
- return $this->post( 'campaign/' . $id . '/report',json_encode( $data ) );
238
- }
239
-
240
- /*
241
- Export the recipients of a specified campaign.
242
- @param {Array} data contains php array with key value pair.
243
- @options data {Integer} id: Id of campaign to export its recipients [Mandatory]
244
- @options data {String} notify_url: URL that will be called once the export process is finished [Mandatory]
245
- @options data {String} type: Type of recipients. Possible values – all, non_clicker, non_opener, clicker, opener, soft_bounces, hard_bounces & unsubscribes [Mandatory]
246
- */
247
- public function campaign_recipients_export( $data ) {
248
- $id = $data['id'];
249
- unset( $data['id'] );
250
- return $this->post( 'campaign/' . $id . '/recipients',json_encode( $data ) );
251
- }
252
-
253
- /*
254
- Get the Campaign name, subject and share link of the classic type campaigns only which are sent, for those which are not sent and the rest of campaign types like trigger, template & sms, will return an error message of share link not available.
255
- @param {Array} data contains php array with key value pair.
256
- @options data {Array} camp_ids: Id of campaign to get share link. You can use commas to separate multiple ids [Mandatory]
257
- */
258
-
259
- public function share_campaign( $data ) {
260
- return $this->post( 'campaign/sharelinkv2',json_encode( $data ) );
261
- }
262
-
263
- /*
264
- Send a Test Campaign.
265
- @param {Array} data contains php array with key value pair.
266
- @options data {Integer} id: Id of the campaign [Mandatory]
267
- @options data {Array} emails: Email address of recipient(s) existing in the one of the lists & should not be blacklisted. Example: "test@example.net". You can use commas to separate multiple recipients [Mandatory]
268
- */
269
- public function send_bat_email( $data ) {
270
- $id = $data['id'];
271
- unset( $data['id'] );
272
- return $this->post( 'campaign/' . $id . '/test',json_encode( $data ) );
273
- }
274
-
275
- /*
276
- Update the Campaign status.
277
- @param {Array} data contains php array with key value pair.
278
- @options data {Integer} id: Id of campaign to update its status [Mandatory]
279
- @options data {String} status: Types of status. Possible values – suspended, archive, darchive, sent, queued, replicate and replicate_template ( case sensitive ) [Mandatory]
280
- */
281
- public function update_campaign_status( $data ) {
282
- $id = $data['id'];
283
- unset( $data['id'] );
284
- return $this->put( 'campaign/' . $id . '/updatecampstatus',json_encode( $data ) );
285
- }
286
-
287
- /*
288
- Create and schedule your Trigger campaigns.
289
- @param {Array} data contains php array with key value pair.
290
- @options data {String} category: Tag name of the campaign [Optional]
291
- @options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
292
- @options data {String} trigger_name: Name of the campaign [Mandatory]
293
- @options data {String} bat: Email address for test mail [Optional]
294
- @options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
295
- @options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
296
- @options data {Array} listid: These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
297
- @options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
298
- @options data {String} subject: Subject of the campaign [Mandatory]
299
- @options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
300
- @options data {String} reply_to: The reply to email in the campaign emails [Optional]
301
- @options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
302
- @options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
303
- @options data {Integer} recurring: Type of trigger campaign. Possible values = 0 (default) & 1. recurring = 0 means contact can receive the same Trigger campaign only once, & recurring = 1 means contact can receive the same Trigger campaign several times [Optional]
304
- @options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
305
- @options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image can’t be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
306
- @options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
307
- @options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign can’t be send now, & send_now = 1 means campaign ready to send now [Optional]
308
- */
309
- public function create_trigger_campaign( $data ) {
310
- return $this->post( 'campaign',json_encode( $data ) );
311
- }
312
-
313
- /*
314
- Update and schedule your Trigger campaigns.
315
- @param {Array} data contains php array with key value pair.
316
- @options data {Integer} id: Id of Trigger campaign to be modified [Mandatory]
317
- @options data {String} category: Tag name of the campaign [Optional]
318
- @options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
319
- @options data {String} trigger_name: Name of the campaign [Mandatory]
320
- @options data {String} bat Email address for test mail [Optional]
321
- @options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
322
- @options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
323
- @options data {Array} listid: These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
324
- @options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
325
- @options data {String} subject: Subject of the campaign [Mandatory]
326
- @options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
327
- @options data {String} reply_to: The reply to email in the campaign emails [Optional]
328
- @options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
329
- @options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
330
- @options data {Integer} recurring: Type of trigger campaign. Possible values = 0 (default) & 1. recurring = 0 means contact can receive the same Trigger campaign only once, & recurring = 1 means contact can receive the same Trigger campaign several times [Optional]
331
- @options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
332
- @options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image can’t be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
333
- @options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
334
- @options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign can’t be send now, & send_now = 1 means campaign ready to send now [Optional]
335
- */
336
- public function update_trigger_campaign( $data ) {
337
- $id = $data['id'];
338
- unset( $data['id'] );
339
- return $this->put( 'campaign/' . $id,json_encode( $data ) );
340
- }
341
-
342
- /*
343
- Get all folders detail.
344
- @param {Array} data contains php array with key value pair.
345
- @options data {Integer} page: Maximum number of records per request is 50, if there are more than 50 folders then you can use this parameter to get next 50 results [Mandatory]
346
- @options data {Integer} page_limit: This should be a valid number between 1-50 [Mandatory]
347
- */
348
- public function get_folders( $data ) {
349
- return $this->get( 'folder',json_encode( $data ) );
350
- }
351
-
352
- /*
353
- Get a particular folder detail.
354
- @param {Array} data contains php array with key value pair.
355
- @options data {Integer} id: Id of folder to get details [Mandatory]
356
- */
357
- public function get_folder( $data ) {
358
- return $this->get( 'folder/' . $data['id'],'' );
359
- }
360
-
361
- /*
362
- Create a new folder.
363
- @param {Array} data contains php array with key value pair.
364
- @options data {String} name: Desired name of the folder to be created [Mandatory]
365
- */
366
- public function create_folder( $data ) {
367
- return $this->post( 'folder',json_encode( $data ) );
368
- }
369
-
370
- /*
371
- Delete a specific folder information.
372
- @param {Array} data contains php array with key value pair.
373
- @options data {Integer} id: Id of folder to be deleted [Mandatory]
374
- */
375
- public function delete_folder( $data ) {
376
- return $this->delete( 'folder/' . $data['id'],'' );
377
- }
378
-
379
- /*
380
- Update an existing folder.
381
- @param {Array} data contains php array with key value pair.
382
- @options data {Integer} id: Id of folder to be modified [Mandatory]
383
- @options data {String} name: Desired name of the folder to be modified [Mandatory]
384
- */
385
- public function update_folder( $data ) {
386
- $id = $data['id'];
387
- unset( $data['id'] );
388
- return $this->put( 'folder/' . $id,json_encode( $data ) );
389
- }
390
-
391
- /*
392
- Get all lists detail.
393
- @param {Array} data contains php array with key value pair.
394
- @options data {Integer} list_parent: This is the existing folder id & can be used to get all lists belonging to it [Optional]
395
- @options data {Integer} page: Maximum number of records per request is 50, if there are more than 50 processes then you can use this parameter to get next 50 results [Mandatory]
396
- @options data {Integer} page_limit: This should be a valid number between 1-50 [Mandatory]
397
- */
398
- public function get_lists( $data ) {
399
- return $this->get( 'list',json_encode( $data ) );
400
- }
401
-
402
- /*
403
- Get a particular list detail.
404
- @param {Array} data contains php array with key value pair.
405
- @options data {Integer} id: Id of list to get details [Mandatory]
406
- */
407
- public function get_list( $data ) {
408
- return $this->get( 'list/' . $data['id'],'' );
409
- }
410
-
411
- /*
412
- Create a new list.
413
- @param {Array} data contains php array with key value pair.
414
- @options data {String} list_name: Desired name of the list to be created [Mandatory]
415
- @options data {Integer} list_parent: Folder ID [Mandatory]
416
- */
417
- public function create_list( $data ) {
418
- return $this->post( 'list',json_encode( $data ) );
419
- }
420
-
421
- /*
422
- Update a list.
423
- @param {Array} data contains php array with key value pair.
424
- @options data {Integer} id: Id of list to be modified [Mandatory]
425
- @options data {String} list_name: Desired name of the list to be modified [Optional]
426
- @options data {Integer} list_parent: Folder ID [Mandatory]
427
- */
428
- public function update_list( $data ) {
429
- $id = $data['id'];
430
- unset( $data['id'] );
431
- return $this->put( 'list/' . $id,json_encode( $data ) );
432
- }
433
-
434
- /*
435
- Delete a specific list.
436
- @param {Array} data contains php array with key value pair.
437
- @options data {Integer} id: Id of list to be deleted [Mandatory]
438
- */
439
- public function delete_list( $data ) {
440
- return $this->delete( 'list/' . $data['id'],'' );
441
- }
442
-
443
- /*
444
- Display details of all users for the given lists.
445
- @param {Array} data contains php array with key value pair.
446
- @options data {Array} listids: These are the list ids to get their data. The ids found will display records [Mandatory]
447
- @options data {String} timestamp: This is date-time filter to fetch modified user records >= this time. Valid format Y-m-d H:i:s. Example: "2015-05-22 14:30:00" [Optional]
448
- @options data {Integer} page: Maximum number of records per request is 500, if in your list there are more than 500 users then you can use this parameter to get next 500 results [Optional]
449
- @options data {Integer} page_limit: This should be a valid number between 1-500 [Optional]
450
- */
451
- public function display_list_users( $data ) {
452
- return $this->post( 'list/display',json_encode( $data ) );
453
- }
454
-
455
- /*
456
- Add already existing users in the SendinBlue contacts to the list.
457
- @param {Array} data contains php array with key value pair.
458
- @options data {Integer} id: Id of list to link users in it [Mandatory]
459
- @options data {Array} users: Email address of the already existing user(s) in the SendinBlue contacts. Example: "test@example.net". You can use commas to separate multiple users [Mandatory]
460
- */
461
-
462
- public function add_users_list( $data ) {
463
- $id = $data['id'];
464
- unset( $data['id'] );
465
- return $this->post( 'list/' . $id . '/users',json_encode( $data ) );
466
- }
467
-
468
- /*
469
- Delete already existing users in the SendinBlue contacts from the list.
470
- @param {Array} data contains php array with key value pair.
471
- @options data {Integer} id: Id of list to unlink users from it [Mandatory]
472
- @options data {Array} users: Email address of the already existing user(s) in the SendinBlue contacts to be modified. Example: "test@example.net". You can use commas to separate multiple users [Mandatory]
473
- */
474
- public function delete_users_list( $data ) {
475
- $id = $data['id'];
476
- unset( $data['id'] );
477
- return $this->delete( 'list/' . $id . '/delusers',json_encode( $data ) );
478
- }
479
-
480
- /*
481
- Access all the attributes information under the account.
482
- No input required
483
- */
484
- public function get_attributes() {
485
- return $this->get( 'attribute','' );
486
- }
487
-
488
- /*
489
- Access the specific type of attribute information.
490
- @param {Array} data contains php array with key value pair.
491
- @options data {String} type: Type of attribute. Possible values – normal, transactional, category, calculated & global [Optional]
492
- */
493
- public function get_attribute( $data ) {
494
- return $this->get( 'attribute/' . $data['type'],'' );
495
- }
496
-
497
- /*
498
- Create an Attribute.
499
- @param {Array} data contains php array with key value pair.
500
- @options data {String} type: Type of attribute. Possible values – normal, transactional, category, calculated & global ( case sensitive ) [Mandatory]
501
- @options data {Array} data: The name and data type of ‘normal’ & ‘transactional’ attribute to be created in your SendinBlue account. It should be sent as an associative array. Example: array(‘ATTRIBUTE_NAME1′ => ‘DATA_TYPE1′, ‘ATTRIBUTE_NAME2’=> ‘DATA_TYPE2′).
502
- The name and data value of ‘category’, ‘calculated’ & ‘global’, should be sent as JSON string. Example: ‘[{ "name":"ATTRIBUTE_NAME1", "value":"Attribute_value1" }, { "name":"ATTRIBUTE_NAME2", "value":"Attribute_value2" }]’. You can use commas to separate multiple attributes [Mandatory]
503
- */
504
- public function create_attribute( $data ) {
505
- return $this->post( 'attribute/',json_encode( $data ) );
506
- }
507
-
508
- /*
509
- Delete a specific type of attribute information.
510
- @param {Array} data contains php array with key value pair.
511
- @options data {Integer} type: Type of attribute to be deleted [Mandatory]
512
- */
513
- public function delete_attribute( $type, $data ) {
514
- $type = $data['type'];
515
- unset( $data['type'] );
516
- return $this->post( 'attribute/' . $type,json_encode( $data ) );
517
- }
518
-
519
- /*
520
- Create a new user if an email provided as input, doesn’t exists in the contact list of your SendinBlue account, otherwise it will update the existing user.
521
- @param {Array} data contains php array with key value pair.
522
- @options data {String} email: Email address of the user to be created in SendinBlue contacts. Already existing email address of user in the SendinBlue contacts to be modified [Mandatory]
523
- @options data {Array} attributes: The name of attribute present in your SendinBlue account. It should be sent as an associative array. Example: array("NAME"=>"name"). You can use commas to separate multiple attributes [Optional]
524
- @options data {Integer} blacklisted: This is used to blacklist/ Unblacklist a user. Possible values – 0 & 1. blacklisted = 1 means user has been blacklisted [Optional]
525
- @options data {Array} listid: The list id(s) to be linked from user [Optional]
526
- @options data {Array} listid_unlink: The list id(s) to be unlinked from user [Optional]
527
- @options data {Array} blacklisted_sms: This is used to blacklist/ Unblacklist a user’s SMS number. Possible values – 0 & 1. blacklisted_sms = 1 means user’s SMS number has been blacklisted [Optional]
528
- */
529
- public function create_update_user( $data ) {
530
- return $this->post( 'user/createdituser',json_encode( $data ) );
531
- }
532
-
533
- /*
534
- Get Access a specific user Information.
535
- @param {Array} data contains php array with key value pair.
536
- @options data {String} email: Email address of the already existing user in the SendinBlue contacts [Mandatory]
537
- */
538
- public function get_user( $data ) {
539
- return $this->get( 'user/' . $data['email'],'' );
540
- }
541
-
542
- /*
543
- Unlink existing user from all lists.
544
- @param {Array} data contains php array with key value pair.
545
- @options data {String} email: Email address of the already existing user in the SendinBlue contacts to be unlinked from all lists [Mandatory]
546
- */
547
- public function delete_user( $data ) {
548
- return $this->delete( 'user/' . $data['email'],'' );
549
- }
550
-
551
- /*
552
- Import Users Information.
553
- @param {Array} data contains php array with key value pair.
554
- @options data {String} url: The URL of the file to be imported. Possible file types – .txt, .csv [Mandatory: if body is empty]
555
- @options data {String} body: The Body with csv content to be imported. Example: ‘NAME;SURNAME;EMAIL\n"Name1";"Surname1";"example1@example.net"\n"Name2";"Surname2";"example2@example.net"‘, where \n separates each user data. You can use semicolon to separate multiple attributes [Mandatory: if url is empty]
556
- @options data {Array} listids: These are the list ids in which the the users will be imported [Mandatory: if name is empty]
557
- @options data {String} notify_url: URL that will be called once the import process is finished [Optional] In notify_url, we are sending the content using POST method
558
- @options data {String} name: This is new list name which will be created first & then users will be imported in it [Mandatory: if listids is empty]
559
- @options data {Integer} list_parent: This is the existing folder id & can be used with name parameter to make newly created list’s desired parent [Optional]
560
- */
561
- public function import_users( $data ) {
562
- return $this->post( 'user/import',json_encode( $data ) );
563
- }
564
-
565
- /*
566
- Export Users Information.
567
- @param {Array} data contains php array with key value pair.
568
- @options data {String} export_attrib: The name of attribute present in your SendinBlue account. You can use commas to separate multiple attributes. Example: "EMAIL,NAME,SMS" [Optional]
569
- @options data {String} filter: Filter can be added to export users. Example: "{\"blacklisted\":1}", will export all blacklisted users [Mandatory]
570
- @options data {String} notify_url: URL that will be called once the export process is finished [Optional]
571
- */
572
- public function export_users( $data ) {
573
- return $this->post( 'user/export',json_encode( $data ) );
574
- }
575
-
576
- /*
577
- Get all the processes information under the account.
578
- @param {Array} data contains php array with key value pair.
579
- @options data {Integer} page: Maximum number of records per request is 50, if there are more than 50 processes then you can use this parameter to get next 50 results [Mandatory]
580
- @options data {Integer} page_limit: This should be a valid number between 1-50 [Mandatory]
581
- */
582
- public function get_processes( $data ) {
583
- return $this->get( 'process',json_encode( $data ) );
584
- }
585
-
586
- /*
587
- Get the process information.
588
- @param {Array} data contains php array with key value pair.
589
- @options data {Integer} id: Id of process to get details [Mandatory]
590
- */
591
- public function get_process( $data ) {
592
- return $this->get( 'process/' . $data['id'],'' );
593
- }
594
-
595
- /*
596
- To retrieve details of all webhooks.
597
- @param {Array} data contains php array with key value pair.
598
- @options data {String} is_plat: Flag to get webhooks. Possible values – 0 & 1. Example: to get Transactional webhooks, use $is_plat=0, to get Marketing webhooks, use $is_plat=1, & to get all webhooks, use $is_plat="" [Optional]
599
- */
600
- public function get_webhooks( $data ) {
601
- return $this->get( 'webhook',json_encode( $data ) );
602
- }
603
-
604
- /*
605
- To retrieve details of any particular webhook.
606
- @param {Array} data contains php array with key value pair.
607
- @options data {Integer} id: Id of webhook to get details [Mandatory]
608
- */
609
- public function get_webhook( $data ) {
610
- return $this->get( 'webhook/' . $data['id'],'' );
611
- }
612
-
613
- /*
614
- Create a Webhook.
615
- @param {Array} data contains php array with key value pair.
616
- @options data {String} url: URL that will be triggered by a webhook [Mandatory]
617
- @options data {String} description: Webook description [Optional]
618
- @options data {Array} events: Set of events. You can use commas to separate multiple events. Possible values for Transcational webhook – request, delivered, hard_bounce, soft_bounce, blocked, spam, invalid_email, deferred, click, & opened and Possible Values for Marketing webhook – spam, opened, click, hard_bounce, unsubscribe, soft_bounce & list_addition ( case sensitive ) [Mandatory]
619
- @options data {Integer} is_plat: Flag to create webhook type. Possible values – 0 (default) & 1. Example: to create Transactional webhooks, use $is_plat=0, & to create Marketing webhooks, use $is_plat=1 [Optional]
620
- */
621
- public function create_webhook( $data ) {
622
- return $this->post( 'webhook',json_encode( $data ) );
623
- }
624
-
625
- /*
626
- Delete a webhook.
627
- @param {Array} data contains php array with key value pair.
628
- @options data {Integer} id: Id of webhook to be deleted [Mandatory]
629
- */
630
- public function delete_webhook( $data ) {
631
- return $this->delete( 'webhook/' . $data['id'],'' );
632
- }
633
-
634
- /*
635
- Update a webhook.
636
- @param {Array} data contains php array with key value pair.
637
- @options data {Integer} id: Id of webhook to be modified [Mandatory]
638
- @options data {String} url: URL that will be triggered by a webhook [Mandatory]
639
- @options data {String} description: Webook description [Optional]
640
- @options data {Array} events: Set of events. You can use commas to separate multiple events. Possible values for Transcational webhook – request, delivered, hard_bounce, soft_bounce, blocked, spam, invalid_email, deferred, click, & opened and Possible Values for Marketing webhook – spam, opened, click, hard_bounce, unsubscribe, soft_bounce & list_addition ( case sensitive ) [Mandatory]
641
- */
642
- public function update_webhook( $data ) {
643
- $id = $data['id'];
644
- unset( $data['id'] );
645
- return $this->put( 'webhook/' . $id,json_encode( $data ) );
646
- }
647
-
648
- /*
649
- Get Access of created senders information.
650
- @param {Array} data contains php array with key value pair.
651
- @options data {String} option: Options to get senders. Possible options – IP-wise, & Domain-wise ( only for dedicated IP clients ). Example: to get senders with specific IP, use $option=’1.2.3.4′, to get senders with specific domain use, $option=’domain.com’, & to get all senders, use $option="" [Optional]
652
- */
653
- public function get_senders( $data ) {
654
- return $this->get( 'advanced',json_encode( $data ) );
655
- }
656
-
657
- /*
658
- Create your Senders.
659
- @param {Array} data contains php array with key value pair.
660
- @options data {String} name: Name of the sender [Mandatory]
661
- @options data {String} email: Email address of the sender [Mandatory]
662
- @options data {Array} ip_domain: Pass pipe ( | ) separated Dedicated IP and its associated Domain. Example: "1.2.3.4|mydomain.com". You can use commas to separate multiple ip_domain’s [Mandatory: Only for Dedicated IP clients, for Shared IP clients, it should be kept blank]
663
- */
664
- public function create_sender( $data ) {
665
- return $this->post( 'advanced',json_encode( $data ) );
666
- }
667
-
668
- /*
669
- Update your Senders.
670
- @param {Array} data contains php array with key value pair.
671
- @options data {Integer} id: Id of sender to be modified [Mandatory]
672
- @options data {String} name: Name of the sender [Mandatory]
673
- @options data {Array} ip_domain: Pass pipe ( | ) separated Dedicated IP and its associated Domain. Example: "1.2.3.4|mydomain.com". You can use commas to separate multiple ip_domain’s [Mandatory: Only for Dedicated IP clients, for Shared IP clients, it should be kept blank]
674
- */
675
- public function update_sender( $data ) {
676
- $id = $data['id'];
677
- unset( $data['id'] );
678
- return $this->put( 'advanced/' . $id,json_encode( $data ) );
679
- }
680
-
681
- /*
682
- Delete your Sender Information.
683
- @param {Array} data contains php array with key value pair.
684
- @options data {Integer} id: Id of sender to be deleted [Mandatory]
685
- */
686
- public function delete_sender( $data ) {
687
- return $this->delete( 'advanced/' . $data['id'],'' );
688
- }
689
-
690
- /*
691
- Send Transactional Email.
692
- @param {Array} data contains php array with key value pair.
693
- @options data {Array} to: Email address of the recipient(s). It should be sent as an associative array. Example: array("to@example.net"=>"to whom"). You can use commas to separate multiple recipients [Mandatory]
694
- @options data {String} subject: Message subject [Mandatory]
695
- @options data {Array} from Email address for From header. It should be sent as an array. Example: array("from@email.com","from email") [Mandatory]
696
- @options data {String} html: Body of the message. (HTML version) [Mandatory]. To send inline images, use <img src="{YourFileName.Extension}" alt="image" border="0" >, the 'src' attribute value inside {} (curly braces) should be same as the filename used in 'inline_image' parameter
697
- @options data {String} text: Body of the message. (text version) [Optional]
698
- @options data {Array} cc: Same as to but for Cc. Example: array("cc@example.net","cc whom") [Optional]
699
- @options data {Array} bcc: Same as to but for Bcc. Example: array("bcc@example.net","bcc whom") [Optional]
700
- @options data {Array} replyto: Same as from but for Reply To. Example: array("from@email.com","from email") [Optional]
701
- @options data {Array} attachment: Provide the absolute url of the attachment/s. Possible extension values = gif, png, bmp, cgm, jpg, jpeg, txt, css, shtml, html, htm, csv, zip, pdf, xml, doc, xls, ppt, tar, and ez. To send attachment/s generated on the fly you have to pass your attachment/s filename & its base64 encoded chunk data as an associative array. Example: array("YourFileName.Extension"=>"Base64EncodedChunkData"). You can use commas to separate multiple attachments [Optional]
702
- @options data {Array} headers: The headers will be sent along with the mail headers in original email. Example: array("Content-Type"=>"text/html; charset=iso-8859-1"). You can use commas to separate multiple headers [Optional]
703
- @options data {Array} inline_image: Pass your inline image/s filename & its base64 encoded chunk data as an associative array. Example: array("YourFileName.Extension"=>"Base64EncodedChunkData"). You can use commas to separate multiple inline images [Optional]
704
- */
705
- public function send_email( $data ) {
706
- return $this->post( 'email',json_encode( $data ) );
707
- }
708
-
709
- /*
710
- Aggregate / date-wise report of the SendinBlue SMTP account.
711
- @param {Array} data contains php array with key value pair.
712
- @options data {Integer} aggregate: This is used to indicate, you are interested in all-time totals. Possible values – 0 & 1. aggregate = 0 means it will not aggregate records, and will show stats per day/date wise [Optional]
713
- @options data {String} start_date: The start date to look up statistics. Date must be in YYYY-MM-DD format and should be before the end_date [Optional]
714
- @options data {String} end_date: The end date to look up statistics. Date must be in YYYY-MM-DD format and should be after the start_date [Optional]
715
- @options data {Integer} days: Number of days in the past to include statistics ( Includes today ). It must be an integer greater than 0 [Optional]
716
- @options data {String} tag: The tag you will specify to retrieve detailed stats. It must be an existing tag that has statistics [Optional]
717
- */
718
- public function get_statistics( $data ) {
719
- return $this->post( 'statistics',json_encode( $data ) );
720
- }
721
-
722
- /*
723
- Get Email Event report.
724
- @param {Array} data contains php array with key value pair.
725
- @options data {Integer} limit: To limit the number of results returned. It should be an integer [Optional]
726
- @options data {String} start_date: The start date to get report from. Date must be in YYYY-MM-DD format and should be before the end_date [Optional]
727
- @options data {String} end_date: The end date to get report till date. Date must be in YYYY-MM-DD format and should be after the start_date [Optional]
728
- @options data {Integer} offset: Beginning point in the list to retrieve from. It should be an integer [Optional]
729
- @options data {String} date: Specific date to get its report. Date must be in YYYY-MM-DD format and should be earlier than todays date [Optional]
730
- @options data {Integer} days: Number of days in the past (includes today). If specified, must be an integer greater than 0 [Optional]
731
- @options data {String} email: Email address to search report for [Optional]
732
- */
733
- public function get_report( $data ) {
734
- return $this->post( 'report',json_encode( $data ) );
735
- }
736
-
737
- /*
738
- Delete any hardbounce, which actually would have been blocked due to some temporary ISP failures.
739
- @param {Array} data contains php array with key value pair.
740
- @options data {String} start_date: The start date to get report from. Date must be in YYYY-MM-DD format and should be before the end_date [Optional]
741
- @options data {String} end_date: The end date to get report till date. Date must be in YYYY-MM-DD format and should be after the start_date [Optional]
742
- @options data {String} email: Email address to delete its bounces [Optional]
743
- */
744
- public function delete_bounces( $data ) {
745
- return $this->post( 'bounces',json_encode( $data ) );
746
- }
747
-
748
- /*
749
- Send templates created on SendinBlue, through SendinBlue SMTP (transactional mails).
750
- @param {Array} data contains php array with key value pair.
751
- @options data {Integer} id: Id of the template created on SendinBlue account [Mandatory]
752
- @options data {String} to: Email address of the recipient(s). You can use pipe ( | ) to separate multiple recipients. Example: "to-example@example.net|to2-example@example.net" [Mandatory]
753
- @options data {String} cc: Same as to but for Cc [Optional]
754
- @options data {String} bcc: Same as to but for Bcc [Optional]
755
- @options data {Array} attrv The name of attribute present in your SendinBlue account. It should be sent as an associative array. Example: array("NAME"=>"name"). You can use commas to separate multiple attributes [Optional]
756
- @options data {String} attachment_url: Provide the absolute url of the attachment. Url not allowed from local machine. File must be hosted somewhere [Optional]
757
- @options data {Array} attachment: To send attachment/s generated on the fly you have to pass your attachment/s filename & its base64 encoded chunk data as an associative array [Optional]
758
- */
759
- public function send_transactional_template( $data ) {
760
- $id = $data['id'];
761
- unset( $data['id'] );
762
- return $this->put( 'template/' . $id,json_encode( $data ) );
763
- }
764
-
765
- /*
766
- Create a Template.
767
- @param {Array} data contains php array with key value pair.
768
- @options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
769
- @options data {String} template_name: Name of the Template [Mandatory]
770
- @options data {String} bat: Email address for test mail [Optional]
771
- @options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
772
- @options data {String} html_url Url: which content is the body of content [Mandatory: if html_content is empty]
773
- @options data {String} subject: Subject of the campaign [Mandatory]
774
- @options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
775
- @options data {String} reply_to: The reply to email in the campaign emails [Optional]
776
- @options data {String} to_fieldv This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
777
- @options data {Integer} status: Status of template. Possible values = 0 (default) & 1. status = 0 means template is inactive, & status = 1 means template is active [Optional]
778
- @options data {Integer} attachment: Status of attachment. Possible values = 0 (default) & 1. attach = 0 means an attachment can’t be sent, & attach = 1 means an attachment can be sent, in the email [Optional]
779
- */
780
- public function create_template( $data ) {
781
- return $this->post( 'template',json_encode( $data ) );
782
- }
783
-
784
- /*
785
- Update a Template.
786
- @param {Array} data contains php array with key value pair.
787
- @options data {Integer} id: Id of Template to be modified [Mandatory]
788
- @options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
789
- @options data {String} template_name: Name of the Template [Mandatory]
790
- @options data {String} bat: Email address for test mail [Optional]
791
- @options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
792
- @options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
793
- @options data {String} subject: Subject of the campaign [Mandatory]
794
- @options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
795
- @options data {String} reply_to: The reply to email in the campaign emails [Optional]
796
- @options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
797
- @options data {Integer} status: Status of template. Possible values = 0 (default) & 1. status = 0 means template is inactive, & status = 1 means template is active [Optional]
798
- @options data {Integer} attachment: Status of attachment. Possible values = 0 (default) & 1. attach = 0 means an attachment can’t be sent, & attach = 1 means an attachment can be sent, in the email [Optional]
799
- */
800
- public function update_template( $data ) {
801
- $id = $data['id'];
802
- unset( $data['id'] );
803
- return $this->put( 'template/' . $id,json_encode( $data ) );
804
- }
805
-
806
- /*
807
- Send a transactional SMS.
808
- @param {Array} data contains php array with key value pair.
809
- @options data {String} to: The mobile number to send SMS to with country code [Mandatory]
810
- @options data {String} from: The name of the sender. The number of characters is limited to 11 (alphanumeric format) [Mandatory]
811
- @options data {String} text: The text of the message. The maximum characters used per SMS is 160, if used more than that, it will be counted as more than one SMS [Mandatory]
812
- @options data {String} web_url: The web URL that can be called once the message is successfully delivered [Optional]
813
- @options data {String} tag: The tag that you can associate with the message [Optional]
814
- @options data {String} type: Type of message. Possible values – marketing (default) & transactional. You can use marketing for sending marketing SMS, & for sending transactional SMS, use transactional type [Optional]
815
- */
816
- public function send_sms( $data ) {
817
- return $this->post( 'sms',json_encode( $data ) );
818
- }
819
-
820
- /*
821
- Create & Schedule your SMS campaigns.
822
- @param {Array} data contains php array with key value pair.
823
- @options data {String} name: Name of the SMS campaign [Mandatory]
824
- @options data {String} sender: This allows you to customize the SMS sender. The number of characters is limited to 11 ( alphanumeric format ) [Optional]
825
- @options data {String} content: Content of the message. The maximum characters used per SMS is 160, if used more than that, it will be counted as more than one SMS [Optional]
826
- @options data {String} bat: Mobile number with the country code to send test SMS. The mobile number defined here should belong to one of your contacts in SendinBlue account and should not be blacklisted [Optional]
827
- @options data {Array} listid: These are the list ids to which the SMS campaign is sent [Mandatory: if scheduled_date is not empty]
828
- @options data {Array} exclude_list: These are the list ids which will be excluded from the SMS campaign [Optional]
829
- @options data {String} scheduled_date: The day on which the SMS campaign is supposed to run [Optional]
830
- @options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign can’t be send now, & send_now = 1 means campaign ready to send now [Optional]
831
- */
832
- public function create_sms_campaign( $data ) {
833
- return $this->post( 'sms',json_encode( $data ) );
834
- }
835
-
836
- /*
837
- Update your SMS campaigns.
838
- @param {Array} data contains php array with key value pair.
839
- @options data {Integer} id: Id of the SMS campaign [Mandatory]
840
- @options data {String} name: Name of the SMS campaign [Optional]
841
- @options data {String} sender: This allows you to customize the SMS sender. The number of characters is limited to 11 ( alphanumeric format ) [Optional]
842
- @options data {String} content: Content of the message. The maximum characters used per SMS is 160, if used more than that, it will be counted as more than one SMS [Optional]
843
- @options data {String} bat: Mobile number with the country code to send test SMS. The mobile number defined here should belong to one of your contacts in SendinBlue account and should not be blacklisted [Optional]
844
- @options data {Array} listid: hese are the list ids to which the SMS campaign is sent [Mandatory: if scheduled_date is not empty]
845
- @options data {Array} exclude_list: These are the list ids which will be excluded from the SMS campaign [Optional]
846
- @options data {String} scheduled_date: The day on which the SMS campaign is supposed to run [Optional]
847
- @options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign can’t be send now, & send_now = 1 means campaign ready to send now [Optional]
848
- */
849
- public function update_sms_campaign( $data ) {
850
- $id = $data['id'];
851
- unset( $data['id'] );
852
- return $this->put( 'sms/' . $id,json_encode( $data ) );
853
- }
854
-
855
- /*
856
- Send a Test SMS.
857
- @param {Array} data contains php array with key value pair.
858
- @options data {Integer} id: Id of the SMS campaign [Mandatory]
859
- @options data {String} to: Mobile number with the country code to send test SMS. The mobile number defined here should belong to one of your contacts in SendinBlue account and should not be blacklisted [Mandatory]
860
- */
861
- public function send_bat_sms( $data ) {
862
- $id = $data['id'];
863
- unset( $data['id'] );
864
- return $this->get( 'sms/' . $id,json_encode( $data ) );
865
- }
866
-
867
- }
868
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
option-panel.php DELETED
@@ -1,93 +0,0 @@
1
- <?php
2
- function logincust_register_options_page() {
3
- add_theme_page( __( 'Login Customizer','login-customizer' ), __( 'Login Customizer','login-customizer' ), 'manage_options', 'logincust_options', 'logincust_options_page' );
4
- }
5
- add_action( 'admin_menu', 'logincust_register_options_page' );
6
-
7
- function logincust_admin_style() {
8
- wp_enqueue_style( 'admin_style', LOGINCUST_FREE_URL . '/css/admin.css',array(), LOGINCUST_VERSION, false );
9
- }
10
- add_action( 'admin_enqueue_scripts', 'logincust_admin_style' );
11
-
12
-
13
- function logincust_options_page() {
14
- ?>
15
- <div class="wrap">
16
- <div id="logincust-logo"></div>
17
- <h2><?php _e( 'Login Customizer', 'login-customizer' ); ?></h2>
18
- <h3><?php _e( 'Howdy!', 'login-customizer' ); ?></h3>
19
- <p><?php _e( 'Login Customizer plugin allows you to easily customize your login page straight from your WordPress Customizer! You can preview your changes before you save them! Awesome, right?', 'login-customizer' ); ?></p>
20
- <p><?php _e( 'In Customizer, navigate to Login Customizer', 'login-customizer' ); ?>.</p>
21
- <a href="<?php echo get_admin_url(); ?>customize.php?url=<?php echo wp_login_url(); ?>" id="submit" class="button button-primary"><?php _e( 'Start Customizing!', 'login-customizer' ); ?></a>
22
- <h3><?php _e( 'Credits/Support (All the unwanted crap)', 'login-customizer' ); ?></h3>
23
- <p><?php _e( 'If you find any issues or if you want to contribute, then please free to drop me a mail at', 'login-customizer' ); ?> <a href="https://themeisle.com/contact" target="_blank" rel="nofollow"><?php _e( 'this link', 'login-customizer' ); ?></a>.</p>
24
- <p><?php _e( 'Thanks for using this plugin. Don not forget to leave a review.', 'login-customizer' ); ?></p>
25
- <p> <a href="https://themeisle.com/" target="_blank" rel="nofollow"><?php _e( 'ThemeIsle :)', 'login-customizer' ); ?></a>.</p>
26
-
27
- <h3><?php _e( 'Subscribe', 'login-customizer' ); ?></h3>
28
- <?php
29
- if ( ! empty( $_POST['logincust_mail'] ) ) {
30
- require( LOGINCUST_FREE_PATH . 'mailin.php' );
31
- $was_submited = get_option( 'mail_was_submited', false );
32
- $user_info = get_userdata( 1 );
33
- $mailin = new Mailin( 'https://api.sendinblue.com/v2.0','cHW5sxZnzE7mhaYb' );
34
- $data = array(
35
- 'email' => $_POST['logincust_mail'],
36
- 'attributes' => array('NAME' => $user_info->first_name, 'SURNAME' => $user_info->last_name),
37
- 'blacklisted' => 0,
38
- 'listid' => array(34),
39
- 'blacklisted_sms' => 0,
40
- );
41
- $status = $mailin->create_update_user( $data );
42
- if ( $status['code'] == 'success' ) {
43
- if ( empty( $was_submited ) ) {
44
- add_option( 'logincust_mail_was_submited', true );
45
- }
46
- }
47
- }
48
-
49
- $was_submited = get_option( 'logincust_mail_was_submited', false );
50
- if ( $was_submited == false ) {
51
- echo sprintf( '<p> %s </p><form class="logincust-submit-mail" method="post"><input name="logincust_mail" type="email" class="wp-pointer-input" value="' . get_option( 'admin_email' ) . '" /><input class="button wp-pointer-submit button-primary" type="submit" value="Join Now !"></form>', esc_html__( 'Our free, 4-lesson course on how to make your WordPress site run incredibly fast is barely waiting for its students. Ready to learn how to reduce your loading times by half? Come and join the 1st lesson here!', 'login-customizer' ) );
52
- } else {
53
- echo sprintf( '<p> %s </p>', esc_html__( 'Thank you for subscribing! You have been added to the mailing list and will receive the next email information in the coming weeks. If you ever wish to unsubscribe, simply use the Unsubscribe link included in each newsletter.', 'login-customizer' ) );
54
- }
55
- ?>
56
- </div>
57
- <?php
58
- }
59
-
60
-
61
- function logincust_dashboard_widget() {
62
- wp_add_dashboard_widget( 'logincust_subscribe_widget', __( 'Subscribe', 'login-customizer' ),'logincust_subscribe_widget' );
63
- }
64
- add_action( 'wp_dashboard_setup', 'logincust_dashboard_widget' );
65
-
66
- function logincust_subscribe_widget() {
67
- if ( ! empty( $_POST['logincust_mail'] ) ) {
68
- require( LOGINCUST_FREE_PATH . 'mailin.php' );
69
- $was_submited = get_option( 'logincust_mail_was_submited', false );
70
- $user_info = get_userdata( 1 );
71
- $mailin = new Mailin( 'https://api.sendinblue.com/v2.0','cHW5sxZnzE7mhaYb' );
72
- $data = array(
73
- 'email' => $_POST['logincust_mail'],
74
- 'attributes' => array('NAME' => $user_info->first_name, 'SURNAME' => $user_info->last_name),
75
- 'blacklisted' => 0,
76
- 'listid' => array(34),
77
- 'blacklisted_sms' => 0,
78
- );
79
- $status = $mailin->create_update_user( $data );
80
- if ( $status['code'] == 'success' ) {
81
- if ( empty( $was_submited ) ) {
82
- add_option( 'logincust_mail_was_submited', true );
83
- }
84
- }
85
- }
86
-
87
- $was_submited = get_option( 'logincust_mail_was_submited', false );
88
- if ( $was_submited == false ) {
89
- echo sprintf( '<p> %s </p><form class="logincust-submit-mail" method="post"><input name="logincust_mail" type="email" class="wp-pointer-input" value="' . get_option( 'admin_email' ) . '" /><input class="button wp-pointer-submit" type="submit" value="Submit"></form>', esc_html__( 'Our free, 4-lesson course on how to make your WordPress site run incredibly fast is barely waiting for its students. Ready to learn how to reduce your loading times by half? Come and join the 1st lesson here!', 'login-customizer' ) );
90
- } else {
91
- echo sprintf( '<p> %s </p>', esc_html__( 'Thank you for subscribing! You have been added to the mailing list and will receive the next email information in the coming weeks. If you ever wish to unsubscribe, simply use the Unsubscribe link included in each newsletter.', 'login-customizer' ) );
92
- }
93
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.md CHANGED
@@ -1,57 +1,510 @@
1
- # Custom Login Page Customizer #
2
- **Stable tag:** trunk
3
- **Requires at least:** 4.0
 
4
  **Tested up to:** 4.8
5
- **Contributors:** [codeinwp](https://profiles.wordpress.org/codeinwp), [hardeepasrani](https://profiles.wordpress.org/hardeepasrani), [marius_codeinwp](https://profiles.wordpress.org/marius_codeinwp)
6
- **Author URI:** https://themeisle.com
7
- **Tags:** login, customizer, logo, login logo, login customizer, login page,admin, branding, customization, custom login, error, login error, custom login pro
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Custom Login Customizer allows you to easily customize your admin login page, straight from your WordPress Customizer!
 
 
12
 
13
  ## Description ##
14
 
15
- ><a href="https://themeisle.com/plugins/login-customizer/" target="_blank" rel="nofollow">Custom Login Page Customizer</a> plugin allows you to easily customize your login page straight from your WordPress Customizer! You can preview your custom login changes before you save them! Awesome, right?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- In your WordPress Dashboard, navigate to Appearance > Custom Login Page Customizer to get started.
18
 
19
- You can customize almost anything and make it look the way you want.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
- If you are looking for the best WordPress themes that works with Login Customizer check this out : <a href="http://www.codeinwp.com/blog/best-free-wordpress-themes/" target="_blank" rel="nofollow">http://www.codeinwp.com/blog/best-free-wordpress-themes/</a>
22
  ## Installation ##
23
 
24
- 1. Upload the plugin to your 'wp-content/plugins' directory, or download and install automatically through your admin panel.
25
- 2. Activate the plugin through the 'Plugins' menu in WordPress.
26
 
27
  ## Frequently Asked Questions ##
28
 
29
- ### How to customizer? ###
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
- In your WordPress Dashboard, navigate to Appearance > Custom Login Customizer to get started.
 
32
 
33
- ### How to donate or contribute? ###
 
34
 
35
- Please visit <a target="_blank" rel="nofollow" href="http://themeisle.com">this link</a> for more info.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  ## Screenshots ##
38
 
39
- 1. Example Custom Login Page
40
- 2. Another Great Custom Login Page Example
 
 
 
41
 
42
  ## Changelog ##
43
- ### 1.2.0 - 2017-10-16 ###
44
 
45
- * Adds tested up to wp 4.8.
46
- * Improvements to dashboard widget, rollback.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
 
 
48
 
 
 
 
 
49
 
50
- **New in v1.0.8**
 
51
 
52
- * Removed notifications
53
 
54
- **New in v1.0.7**
 
55
 
56
- * Improved customizer settings
57
- * Removed security addon mentions in the free version
1
+ # FEEDZY RSS Feeds Lite #
2
+ **Contributors:** [themeisle](https://profiles.wordpress.org/themeisle), [codeinwp](https://profiles.wordpress.org/codeinwp), [hardeepasrani](https://profiles.wordpress.org/hardeepasrani)
3
+ **Tags:** RSS, SimplePie, shortcode, feed, thumbnail, image, rss feeds, aggregator, tinyMCE, WYSIWYG, MCE, UI, flux, plugin, WordPress, widget, importer, XML, ATOM, API, parser
4
+ **Requires at least:** 3.7
5
  **Tested up to:** 4.8
6
+ **Stable tag:** trunk
 
 
7
  **License:** GPLv2 or later
8
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
+
11
+ FEEDZY RSS Feeds is a small & lightweight plugin. Fast and easy to use, it aggregates RSS feeds into your site with shortcodes & widgets.
12
+
13
 
14
  ## Description ##
15
 
16
+ FEEDZY RSS Feeds is a small and lightweight RSS aggregator plugin. Fast and very easy to use, it allows you to aggregate multiple RSS feeds into your WordPress site through fully customizable shortcodes & widgets.
17
+
18
+ > **Time-saving features available in the FULL version:**
19
+ >
20
+ > * Integration with WordAI to avoid duplicate content
21
+ > * Audio playback template
22
+ > * Convert feed items to WordPress posts/pages/any
23
+ > * Multiple templates for feed items
24
+ > * Automatically build affiliate links
25
+ > * Parse price from product feeds
26
+ > * Blacklist specific keywords from feeds
27
+ > * Priority email support from the developer of the plugin
28
+ > * Support and updates for 12 months
29
+ >
30
+ > **[Learn more about Feedzy Full version]( https://themeisle.com/plugins/feedzy-rss-feeds/ )**
31
+
32
+
33
+ The plugin uses the SimplePie php CLASS natively included in WordPress. SimplePie is a RSS parser that can read the information contained in a feed, process it, and finally display it.
34
+
35
+ **Full cache control**
36
+
37
+ Choose right from the shortcode how often do you want your content from feeds to get updated.
38
+
39
+ **Feed Categories**
40
+
41
+ You can now group feeds into categories and reuse them across your content without worrying of their url.
42
+
43
+
44
+ FEEDZY RSS Feeds therefore supports any additional library and uses only the bare minimum to ensure good performance (minimalistic CSS + cache). This will ensure compatibility with any hosting provider that supports WordPress, but if for any reason it doesn't work for yours feel free to <a href="http://themeisle.com/contact/" rel="nofollow">contact us</a>.
45
+
46
+
47
+ = See how Feedzy can integrate with your website =
48
+
49
+ * [Audio playback template](https://demo.themeisle.com/feedzy-rss-feeds/audio-feed-template/)
50
+ * [Shop feed – 3 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/shop-feed/)
51
+ * [Feed categories – 1 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/group-feeds-categories/)
52
+ * [Large image square grid – 2 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/2-columns-large-images-square-grid/)
53
+ * [Square grid template – 3 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/square-template/)
54
+ * [Round grid templates – 3 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/round-grid-template/)
55
+ * [Standard grid layout – 2 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/grid-layout-feed-items/)
56
+ * [Blog layout – 1 column layout](https://demo.themeisle.com/feedzy-rss-feeds/blog-layout/)
57
+
58
+
59
+ You may use this plugin in your widgets and your pages and reuse the shortcode + widget several times within the same page.
60
+
61
+ By activating this plugin, your cover picture will be inserted into your RSS feeds. By doing so, you'll make it will easier for external sites to retrieve images from your feeds.
62
+
63
+ **Please ask for help or report bugs if anything goes wrong. It is the best way to make the community benefit!**
64
+
65
+
66
+ = Shortcode Parameters =
67
+
68
+
69
+ * feeds
70
+ * max
71
+ * feed_title
72
+ * target
73
+ * title
74
+ * meta
75
+ * summary
76
+ * summarylength
77
+ * thumb
78
+ * default
79
+ * refresh
80
+ * size
81
+ * keywords_title
82
+
83
+
84
+
85
+ **Plugin is now using the TinyMCE API to improve UI and makes it easy to insert shortcodes!**
86
+
87
+
88
+ ### Basic example ###
89
+
90
+ `[feedzy-rss feeds="http://themeisle.com/feed"]`
91
+
92
+
93
+ ### Advanced example ###
94
+
95
+ `[feedzy-rss feeds="http://themeisle.com/feed" max="2" feed_title="yes" target="_blank" refresh="12_hours" title="50" meta="yes" summary="yes" summarylength="300" thumb="yes" size="100" default="http://your-site/default-image.jpg" keywords_title="WordPress"]`
96
 
 
97
 
98
+ ### Available Hooks ###
99
+
100
+
101
+ * feedzy_feed_items
102
+ * feedzy_item_keyword
103
+ * feedzy_item_attributes
104
+ * feedzy_thumb_output
105
+ * feedzy_title_output
106
+ * feedzy_meta_args
107
+ * feedzy_meta_output
108
+ * feedzy_summary_input
109
+ * feedzy_summary_output
110
+ * feedzy_global_output
111
+ * feedzy_thumb_sizes
112
+ * feedzy_feed_blacklist_images
113
+ * feedzy_default_image
114
+ * feedzy_default_error
115
+ * feedzy_item_filter
116
+ * feedzy_author_url
117
+ * feedzy_item_url_filter
118
+ * feedzy_feed_timestamp
119
+ * shortcode_atts_feedzy_default
120
+
121
+ This plugin is maintained and supported by Themeisle, check out some of the other <a href="http://themeisle.com/wordpress-plugins/" rel="nofollow">WordPress plugins</a> and <a href="http://themeisle.com/wordpress-themes/free/" rel="nofollow">free themes</a> we've developed.
122
+
123
+ ### Languages ###
124
+
125
+ * English
126
+ * French
127
+ * Serbian [Borisa Djuraskovic](http://www.webhostinghub.com/ "Borisa Djuraskovic")
128
+ * Japanese [sama55](http://askive.cmsbox.jp/ "sama55")
129
+ * German [ralfsteck](https://profiles.wordpress.org/ralfsteck/ "ralfsteck")
130
+ * Spanish [Angel Calzado](http://sintaxisweb.es "Angel Calzado")
131
+
132
+ Become a translator and send me your translation! [Contact-me](http://themeisle.com/contact "Contact")
133
 
 
134
  ## Installation ##
135
 
136
+ 1. Upload and activate the plugin (or install it through the WP admin console)
137
+ 2. Insert shortcode ! ;-)
138
 
139
  ## Frequently Asked Questions ##
140
 
141
+ ### Is it responsive friendly? ###
142
+
143
+ Yes it is.
144
+
145
+ ### My feed is not displayed and the following message appears "Sorry, this feed is currently unavailable or does not exists anymore." ###
146
+
147
+ You have to check first if your feed is valid. Please test it here: https://validator.w3.org/feed/
148
+
149
+ ### Where do i find the plugin documentation ###
150
+ [http://docs.themeisle.com/article/658-feedzy-rss-feeds](http://docs.themeisle.com/article/658-feedzy-rss-feeds)
151
+
152
+ ### How to fix images that are not showing in the feed ###
153
+ [http://docs.themeisle.com/article/666-how-to-fix-images-that-are-not-showing-in-the-feed](http://docs.themeisle.com/article/666-how-to-fix-images-that-are-not-showing-in-the-feed)
154
+
155
+ ### How to change cache lifetime for a specific feed ###
156
+ [http://docs.themeisle.com/article/547-how-to-change-cache-lifetime-for-a-specific-feed](http://docs.themeisle.com/article/547-how-to-change-cache-lifetime-for-a-specific-feed)
157
+
158
+ ### How to change thumbs size and aspect ratio ###
159
+ [http://docs.themeisle.com/article/551-how-to-change-thumbs-size-and-aspect-ratio](http://docs.themeisle.com/article/551-how-to-change-thumbs-size-and-aspect-ratio)
160
+
161
+ ### What hooks and filters are available in Feedzy ###
162
+ [http://docs.themeisle.com/article/540-what-hooks-and-filters-are-available-in-feedzy](http://docs.themeisle.com/article/540-what-hooks-and-filters-are-available-in-feedzy)
163
+
164
+ ### How to change the blacklist image name ###
165
+ [http://docs.themeisle.com/article/552-how-to-change-the-blacklist-image-name](http://docs.themeisle.com/article/552-how-to-change-the-blacklist-image-name)
166
+
167
+ ### How to decode item title ###
168
+ [http://docs.themeisle.com/article/548-how-to-decode-item-title-with](http://docs.themeisle.com/article/548-how-to-decode-item-title-with)
169
 
170
+ ### How to remove featured image from blog feed ###
171
+ [http://docs.themeisle.com/article/554-how-to-remove-featured-image-from-blog-feed](http://docs.themeisle.com/article/554-how-to-remove-featured-image-from-blog-feed)
172
 
173
+ ### How to keep html in feed items content ###
174
+ [http://docs.themeisle.com/article/542-how-to-keep-html-in-feed-items-content](http://docs.themeisle.com/article/542-how-to-keep-html-in-feed-items-content)
175
 
176
+ ### How to remove plugin css ###
177
+ [http://docs.themeisle.com/article/545-how-to-remove-plugin-css](http://docs.themeisle.com/article/545-how-to-remove-plugin-css)
178
+
179
+ ### How to remove links ###
180
+ [http://docs.themeisle.com/article/541-how-to-remove-links](http://docs.themeisle.com/article/541-how-to-remove-links)
181
+
182
+ ### How to add a read more link ###
183
+ [http://docs.themeisle.com/article/544-how-to-add-a-read-more-link](http://docs.themeisle.com/article/544-how-to-add-a-read-more-link)
184
+
185
+ ### How to remove time from publication date ###
186
+ [http://docs.themeisle.com/article/553-how-to-remove-time-from-publication-date](http://docs.themeisle.com/article/553-how-to-remove-time-from-publication-date)
187
+
188
+ ### How to handle publication date and author content ###
189
+ [http://docs.themeisle.com/article/549-how-to-handle-time-and-date-content](http://docs.themeisle.com/article/549-how-to-handle-time-and-date-content)
190
+
191
+ ### How to use your own inline css ###
192
+ [http://docs.themeisle.com/article/546-how-to-use-your-own-inline-css](http://docs.themeisle.com/article/546-how-to-use-your-own-inline-css)
193
+
194
+ ### How to remove the end hellip ###
195
+ [http://docs.themeisle.com/article/543-how-to-remove-the-end-hellip](http://docs.themeisle.com/article/543-how-to-remove-the-end-hellip)
196
+
197
+ ### How to display items in a random order ###
198
+ [http://docs.themeisle.com/article/550-how-to-display-items-in-a-random-order](http://docs.themeisle.com/article/550-how-to-display-items-in-a-random-order)
199
+
200
+ ### How to sort items alphabetically by their title ###
201
+ [http://docs.themeisle.com/article/633-how-to-sort-feed-items-by-title](http://docs.themeisle.com/article/633-how-to-sort-feed-items-by-title)
202
+
203
+ ### How to display RSS feed time and date in local time ###
204
+ [http://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-local-time](http://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-local-time)
205
+
206
+ ### How to change author url ###
207
+ [http://docs.themeisle.com/article/636-how-to-change-author-url](http://docs.themeisle.com/article/636-how-to-change-author-url)
208
+
209
+ ### How remove feed items duplicates by url ###
210
+ [http://docs.themeisle.com/article/638-how-to-eliminate-duplicate-feed-item](http://docs.themeisle.com/article/638-how-to-eliminate-duplicate-feed-item)
211
+
212
+ ### How to use feedzy categories ###
213
+ [http://docs.themeisle.com/article/640-how-to-use-feedzy-categories](http://docs.themeisle.com/article/640-how-to-use-feedzy-categories)
214
 
215
  ## Screenshots ##
216
 
217
+ 1. Simple example
218
+ 2. Inserting a shortcode in the WYSIWYG
219
+ 3. Widget admin
220
+ 4. Widget render
221
+
222
 
223
  ## Changelog ##
 
224
 
225
+ ### 3.2.4 - 2017-10-13 ###
226
+
227
+ * Fix for assets enqueue, loading them where are needed only.
228
+ * Removes duplicates readme.md files.
229
+
230
+
231
+ ### 3.2.1 - 2017-10-12 ###
232
+
233
+ * Adds global settings page.
234
+ * Adds User Agent and Proxy settings.
235
+ * Fix for some edge cases regarding images in the feed.
236
+
237
+
238
+ ### 3.2.0 - 2017-08-17 ###
239
+
240
+ * Fix for image URL issue following some strange patterns.
241
+ * Added fallback for broken feed, now if one feed from the list is not working, others will will be used.
242
+ * Added shortcode parameter for feed cache control.
243
+
244
+
245
+ ### 3.1.10 - 2017-08-03 ###
246
+
247
+ * Fixed typos in shortcode builder.
248
+ * Fixed image encoding issue.
249
+
250
+
251
+ ### 3.1.9 - 2017-07-21 ###
252
+
253
+ * Fixed issue with fetching images containg GET parameters.
254
+
255
+
256
+ ### 3.1.8 - 2017-07-17 ###
257
+
258
+ * Fixed image fetching issues.
259
+ * Fixed link opening behaviour
260
+ * Improved description ( Thanks to @chesio )
261
+
262
+
263
+ ### 3.1.7 ###
264
+
265
+ * Added new sdk logic.
266
+ * Improved compatibility with the pro version.
267
+
268
+
269
+
270
+ ### 3.1.5 - 30/05/2017 ###
271
+ * Fixed issues with sdk notifications.
272
+ * Added more compatibility with pro version.
273
+
274
+ ### 3.1.4 - 29/05/2017 ###
275
+ * Added new doc on how to use feedzy categories.
276
+
277
+ ### 3.1.3 - 29/05/2017 ###
278
+ * Added new SDK features.
279
+ * Fixed some edge case issues on image parsing.
280
+
281
+ ### 3.1.2 - 22/05/2017 ###
282
+ * Fixed author protocol.
283
+ * Added core fetch_feed method.
284
+
285
+ ### 3.1.1 - 22/05/2017 ###
286
+ * Fixed span alt tag, replaced with title.
287
+
288
+ ### 3.1.0 - 17/05/2017 ###
289
+ * Added feed categories for grouping urls.
290
+ * Added support for feed to post feature.
291
+ * Fixed regex for jpeg image ( Reported by @piccart )
292
+ * Added filter for author url ( Thanks to @piccart )
293
+
294
+ ### 3.0.10 - 24/04/2017 ###
295
+ * Fixed wrong image regex.
296
+ * Fixed image compression.
297
+
298
+ ### 3.0.9 - 21/02/2017 ###
299
+ * Added wrong feed title check.
300
+
301
+ ### 3.0.8 - 20/02/2017 ###
302
+ * Added $sizes param to feedzy_thumb_output.
303
+ * Added check when title is empty.
304
+ * Fixed image encoding url.
305
+
306
+ ### 3.0.6 - 27/01/2017 ###
307
+ * Added feedzy_feed_timestamp filter.
308
+ * Fixed issue with edge cases feed urls.
309
+ * Fixed error when using [] on string vars.
310
+
311
+
312
+ ### 3.0.5 - 06/01/2017 ###
313
+ * Fixed issue with google news feed
314
+
315
+ ### 3.0.4 - 06/01/2017 ###
316
+ * Fixed thumb='auto' behaviour
317
+
318
+ ### 3.0.3 - 06/01/2017 ###
319
+ * Fixed blog feed feature image filter
320
+ * Improved documentation and examples
321
+
322
+ ### 3.0.2 - 06/01/2017 ###
323
+ * Fixed default class back
324
+
325
+ ### 3.0.1 - 05/01/2017 ###
326
+ * Fixed html markup error which was breaking user websites
327
+
328
+ ### 3.0.0 - 10/11/2016 ###
329
+ * Refactored code base from 2.8.1 to OOP style
330
+ * Added support for PRO version
331
+ * Added new hooks feedzy_item_filter, feedzy_item_url_filter
332
+
333
+
334
+ ### 2.8 - 04/14/2016 ###
335
+ * Tested on WP 4.5 with success!
336
+ * themeisle added as plugin author
337
+ * Fix a PHP7 warning in the widget contructor regarding [this topic](https://wordpress.org/support/topic/php7-debug-error?replies=1)
338
+
339
+ ### 2.7.1 ###
340
+ * Remove unnecessary and redundant feedzy_wp_widget_box div container in the widget's body
341
+ * Best compliance with WordPress coding standards
342
+ * Fix a PHP warning on SimplePie error display & log
343
+ * Readme.txt update
344
+
345
+ ### 2.7 ###
346
+ * Better displaying of fetching feeds errors (see error message div error-attr).
347
+ * Write errors in the WP log file
348
+ * New hook: feedzy_default_error to filter error message
349
+ * New hook: shortcode_atts_feedzy_default to filter default shortcode attibutes
350
+ * Add a link to validate feed in the TinyMCE popup modal
351
+ * French translation update
352
+ * Remove unnecessary functions
353
+ * New constant FEEDZY_VERSION
354
+ * readme.txt and hooks documentation update
355
+
356
+ ### 2.6.2 ###
357
+ * Spanish translation thanks to [Angel Calzado](http://sintaxisweb.es "Angel Calzado")
358
+ * PHP issue fix in feedzy_returnImage() "strpos() expects parameter 1 to be string"
359
+ * Remove SSL from feeds URL to prevent fetching errors
360
+ * New hook: feedzy_default_image
361
+ * readme.txt and hooks documentation update
362
+
363
+ ### 2.6.1 ###
364
+ * Replace jQuery live() function by on() function to prevent JS error (fix the issue with Visual composer)
365
+ * Improve image's fetching on itunes feeds
366
+ * New feature: default WP smilies are now blacklisted from image fetching
367
+ * New hook: feedzy_feed_blacklist_images
368
+ * Tested on WP 4.3 with success!
369
+
370
+ ### 2.6 ###
371
+ * Fix a conflict with PageBuilder where Feedzy button does not show up in the visual editor
372
+ * Fix a typo in feedzy-rss-feeds-shortcode.php on the thumbnails span
373
+ * Replace WP_Widget by __construct() to initiate the widget because it has been deprecated since version 4.3.0
374
+ * German translation thanks to [ralfsteck](https://profiles.wordpress.org/ralfsteck/ "ralfsteck")
375
+ * Tested on WP 4.3 with success!
376
+
377
+ ### 2.5.1 ###
378
+ * Japanese translation thanks to [sama55](http://askive.cmsbox.jp/ "sama55")
379
+ * Image optimisation (feedzy-default.jpg)
380
+ * Improve image's fetching to avoid catching audio or video files from item description
381
+
382
+ ### 2.5 ###
383
+ * Improve author name fetching
384
+ * Better HTML marckup
385
+ * Fix PHP warning within the widget
386
+ * Fix CSS on IE when displaying images as a fallback
387
+ * CSS stylesheet update
388
+ * New hook: feedzy_item_attributes
389
+
390
+ ### 2.4.3 ###
391
+ * Improve image fetching (again...)
392
+ * Fix an issue on files encoding (UTF8)
393
+ * Minor PHP improvements on the main shortcode's function
394
+
395
+ ### 2.4.2 ###
396
+ * Minor fix on already encoded images names
397
+
398
+ ### 2.4.1 ###
399
+ * Fix an issue on img url encode
400
+ * Retrive img url in url parameters
401
+ * Fix minor PHP warning
402
+ * New hook: feedzy_add_classes_item
403
+
404
+ ### 2.4 ###
405
+ * New feature: 'auto' thumbs option added
406
+ * New hook: feedzy_thumb_sizes
407
+ * Fix issue on max number of feeds to display
408
+ * Fix HTML decode in the feed's title
409
+ * Minor PHP improvements
410
+ * readme.txt and hooks documentation update
411
+
412
+ ### 2.3 ###
413
+ * New hook: feedzy_feed_items
414
+ * New hook: feedzy_item_keyword
415
+ * Introduce SimplePie native strip_htmltags() method
416
+ * Use PNG icon as SVG fallback on the visual editor button
417
+ * Improve plugin's files structure
418
+ * readme.txt and hooks documentation update
419
+
420
+ ### 2.2.2 ###
421
+ * New hook: feedzy_meta_args
422
+
423
+ ### 2.2.1 ###
424
+ * Minor security improvements
425
+ * Better WordPress coding standard respect
426
+ * Minor fix if does not provide item's author
427
+ * Translations update
428
+
429
+ ### 2.2 ###
430
+ * Minor PHP improvements
431
+ * Remove logo from plugin meta
432
+ * New hook: feedzy_summary_input
433
+ * $feedURL argument added on every available hooks
434
+ * French translation update
435
+ * readme.txt and hooks documentation update
436
+
437
+ ### 2.1 ###
438
+ * internationalization of feeds dates and times (date_i18n)
439
+
440
+ ### 2.0 ###
441
+ * Widget added
442
+ * Translation update
443
+ * Better plugin file structure
444
+ * Improve image fetching with multiple enclosures
445
+ * Tested on WP 4.1 with success!
446
+
447
+ ### 1.7.1 ###
448
+ * Fix typo in PHP which cause issue on fetching images
449
+
450
+ ### 1.7 ###
451
+ * Minor Template and CSS changes
452
+ * New hook: feedzy_thumb_output
453
+ * New hook: feedzy_title_output
454
+ * New hook: feedzy_meta_output
455
+ * New hook: feedzy_summary_output
456
+ * New hook: feedzy_global_output
457
+ * readme.txt update
458
+
459
+ ### 1.6 ###
460
+ * Minor CSS fix
461
+ * Add actions: add_action('rss_item', 'feedzy_include_thumbnail_RSS'); & add_action('rss2_item', 'feedzy_include_thumbnail_RSS')
462
+
463
+ ### 1.5.4 ###
464
+ * Plugin meta translation
465
+ * Remove unnecessary spaces
466
+
467
+ ### 1.5.3 ###
468
+ * TinyMCE UI translation
469
+ * Better fetching image
470
+ * Space between items is calculated based on thumbs size
471
+
472
+ ### 1.5.2 ###
473
+ * Plugin meta update
474
+
475
+ ### 1.5.1 ###
476
+ * New logo
477
+ * Minor CSS fixes
478
+
479
+ ### 1.5 ###
480
+ * New param added to filter item with keywords
481
+ * Default thumb added
482
+ * Fix minor php issue
483
+ * Rename files of the plugin
484
+ * New logo + screenshot (assets)
485
+
486
+ ### 1.4 ###
487
+ * Add "default" parameter to fill image container if no image is fetch or if it is offline
488
+ * Add more control over numeric format in max, size, title & summarylength parameters
489
+
490
+ ### 1.03 ###
491
+ * Shortcode can now be displayed everywhere in the page (CSS is loaded via global var)
492
 
493
+ ### 1.02 ###
494
+ * Error on svn tag
495
 
496
+ ### 1.01 ###
497
+ * Minor CSS fix.
498
+ * Minor PHP changes.
499
+ * Readme.txt updated
500
 
501
+ ### 1.0 ###
502
+ * First release.
503
 
504
+ ## Upgrade Notice ##
505
 
506
+ ### 1.5 ###
507
+ * IMPORTANT: You have to reactivate the plugin after its update!
508
 
509
+ ### 1.0 ###
510
+ * First release.
readme.txt CHANGED
@@ -1,57 +1,510 @@
1
- === Custom Login Page Customizer ===
2
- Stable tag: trunk
3
- Requires at least: 4.0
 
4
  Tested up to: 4.8
5
- Contributors: codeinwp, hardeepasrani,marius_codeinwp
6
- Author URI: https://themeisle.com
7
- Tags: login, customizer, logo, login logo, login customizer, login page,admin, branding, customization, custom login, error, login error, custom login pro
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Custom Login Customizer allows you to easily customize your admin login page, straight from your WordPress Customizer!
 
 
12
 
13
  == Description ==
14
 
15
- ><a href="https://themeisle.com/plugins/login-customizer/" target="_blank" rel="nofollow">Custom Login Page Customizer</a> plugin allows you to easily customize your login page straight from your WordPress Customizer! You can preview your custom login changes before you save them! Awesome, right?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- In your WordPress Dashboard, navigate to Appearance > Custom Login Page Customizer to get started.
18
 
19
- You can customize almost anything and make it look the way you want.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
- If you are looking for the best WordPress themes that works with Login Customizer check this out : <a href="http://www.codeinwp.com/blog/best-free-wordpress-themes/" target="_blank" rel="nofollow">http://www.codeinwp.com/blog/best-free-wordpress-themes/</a>
22
  == Installation ==
23
 
24
- 1. Upload the plugin to your 'wp-content/plugins' directory, or download and install automatically through your admin panel.
25
- 2. Activate the plugin through the 'Plugins' menu in WordPress.
26
 
27
  == Frequently Asked Questions ==
28
 
29
- = How to customizer? =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
- In your WordPress Dashboard, navigate to Appearance > Custom Login Customizer to get started.
 
32
 
33
- = How to donate or contribute? =
 
34
 
35
- Please visit <a target="_blank" rel="nofollow" href="http://themeisle.com">this link</a> for more info.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  == Screenshots ==
38
 
39
- 1. Example Custom Login Page
40
- 2. Another Great Custom Login Page Example
 
 
 
41
 
42
  == Changelog ==
43
- = 1.2.0 - 2017-10-16 =
44
 
45
- * Adds tested up to wp 4.8.
46
- * Improvements to dashboard widget, rollback.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
 
 
48
 
 
 
 
 
49
 
50
- **New in v1.0.8**
 
51
 
52
- * Removed notifications
53
 
54
- **New in v1.0.7**
 
55
 
56
- * Improved customizer settings
57
- * Removed security addon mentions in the free version
1
+ === FEEDZY RSS Feeds Lite ===
2
+ Contributors: themeisle,codeinwp,hardeepasrani
3
+ Tags: RSS, SimplePie, shortcode, feed, thumbnail, image, rss feeds, aggregator, tinyMCE, WYSIWYG, MCE, UI, flux, plugin, WordPress, widget, importer, XML, ATOM, API, parser
4
+ Requires at least: 3.7
5
  Tested up to: 4.8
6
+ Stable tag: trunk
 
 
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
10
+
11
+ FEEDZY RSS Feeds is a small & lightweight plugin. Fast and easy to use, it aggregates RSS feeds into your site with shortcodes & widgets.
12
+
13
 
14
  == Description ==
15
 
16
+ FEEDZY RSS Feeds is a small and lightweight RSS aggregator plugin. Fast and very easy to use, it allows you to aggregate multiple RSS feeds into your WordPress site through fully customizable shortcodes & widgets.
17
+
18
+ > **Time-saving features available in the FULL version:**
19
+ >
20
+ > * Integration with WordAI to avoid duplicate content
21
+ > * Audio playback template
22
+ > * Convert feed items to WordPress posts/pages/any
23
+ > * Multiple templates for feed items
24
+ > * Automatically build affiliate links
25
+ > * Parse price from product feeds
26
+ > * Blacklist specific keywords from feeds
27
+ > * Priority email support from the developer of the plugin
28
+ > * Support and updates for 12 months
29
+ >
30
+ > **[Learn more about Feedzy Full version]( https://themeisle.com/plugins/feedzy-rss-feeds/ )**
31
+
32
+
33
+ The plugin uses the SimplePie php CLASS natively included in WordPress. SimplePie is a RSS parser that can read the information contained in a feed, process it, and finally display it.
34
+
35
+ **Full cache control**
36
+
37
+ Choose right from the shortcode how often do you want your content from feeds to get updated.
38
+
39
+ **Feed Categories**
40
+
41
+ You can now group feeds into categories and reuse them across your content without worrying of their url.
42
+
43
+
44
+ FEEDZY RSS Feeds therefore supports any additional library and uses only the bare minimum to ensure good performance (minimalistic CSS + cache). This will ensure compatibility with any hosting provider that supports WordPress, but if for any reason it doesn't work for yours feel free to <a href="http://themeisle.com/contact/" rel="nofollow">contact us</a>.
45
+
46
+
47
+ = See how Feedzy can integrate with your website =
48
+
49
+ * [Audio playback template](https://demo.themeisle.com/feedzy-rss-feeds/audio-feed-template/)
50
+ * [Shop feed – 3 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/shop-feed/)
51
+ * [Feed categories – 1 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/group-feeds-categories/)
52
+ * [Large image square grid – 2 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/2-columns-large-images-square-grid/)
53
+ * [Square grid template – 3 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/square-template/)
54
+ * [Round grid templates – 3 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/round-grid-template/)
55
+ * [Standard grid layout – 2 columns layout](https://demo.themeisle.com/feedzy-rss-feeds/grid-layout-feed-items/)
56
+ * [Blog layout – 1 column layout](https://demo.themeisle.com/feedzy-rss-feeds/blog-layout/)
57
+
58
+
59
+ You may use this plugin in your widgets and your pages and reuse the shortcode + widget several times within the same page.
60
+
61
+ By activating this plugin, your cover picture will be inserted into your RSS feeds. By doing so, you'll make it will easier for external sites to retrieve images from your feeds.
62
+
63
+ **Please ask for help or report bugs if anything goes wrong. It is the best way to make the community benefit!**
64
+
65
+
66
+ = Shortcode Parameters =
67
+
68
+ `
69
+ * feeds
70
+ * max
71
+ * feed_title
72
+ * target
73
+ * title
74
+ * meta
75
+ * summary
76
+ * summarylength
77
+ * thumb
78
+ * default
79
+ * refresh
80
+ * size
81
+ * keywords_title
82
+ `
83
+
84
+
85
+ **Plugin is now using the TinyMCE API to improve UI and makes it easy to insert shortcodes!**
86
+
87
+
88
+ = Basic example =
89
+
90
+ `[feedzy-rss feeds="http://themeisle.com/feed"]`
91
+
92
+
93
+ = Advanced example =
94
+
95
+ `[feedzy-rss feeds="http://themeisle.com/feed" max="2" feed_title="yes" target="_blank" refresh="12_hours" title="50" meta="yes" summary="yes" summarylength="300" thumb="yes" size="100" default="http://your-site/default-image.jpg" keywords_title="WordPress"]`
96
+
97
 
98
+ = Available Hooks =
99
 
100
+ `
101
+ * feedzy_feed_items
102
+ * feedzy_item_keyword
103
+ * feedzy_item_attributes
104
+ * feedzy_thumb_output
105
+ * feedzy_title_output
106
+ * feedzy_meta_args
107
+ * feedzy_meta_output
108
+ * feedzy_summary_input
109
+ * feedzy_summary_output
110
+ * feedzy_global_output
111
+ * feedzy_thumb_sizes
112
+ * feedzy_feed_blacklist_images
113
+ * feedzy_default_image
114
+ * feedzy_default_error
115
+ * feedzy_item_filter
116
+ * feedzy_author_url
117
+ * feedzy_item_url_filter
118
+ * feedzy_feed_timestamp
119
+ * shortcode_atts_feedzy_default
120
+ `
121
+ This plugin is maintained and supported by Themeisle, check out some of the other <a href="http://themeisle.com/wordpress-plugins/" rel="nofollow">WordPress plugins</a> and <a href="http://themeisle.com/wordpress-themes/free/" rel="nofollow">free themes</a> we've developed.
122
+
123
+ = Languages =
124
+
125
+ * English
126
+ * French
127
+ * Serbian [Borisa Djuraskovic](http://www.webhostinghub.com/ "Borisa Djuraskovic")
128
+ * Japanese [sama55](http://askive.cmsbox.jp/ "sama55")
129
+ * German [ralfsteck](https://profiles.wordpress.org/ralfsteck/ "ralfsteck")
130
+ * Spanish [Angel Calzado](http://sintaxisweb.es "Angel Calzado")
131
+
132
+ Become a translator and send me your translation! [Contact-me](http://themeisle.com/contact "Contact")
133
 
 
134
  == Installation ==
135
 
136
+ 1. Upload and activate the plugin (or install it through the WP admin console)
137
+ 2. Insert shortcode ! ;-)
138
 
139
  == Frequently Asked Questions ==
140
 
141
+ = Is it responsive friendly? =
142
+
143
+ Yes it is.
144
+
145
+ = My feed is not displayed and the following message appears "Sorry, this feed is currently unavailable or does not exists anymore." =
146
+
147
+ You have to check first if your feed is valid. Please test it here: https://validator.w3.org/feed/
148
+
149
+ = Where do i find the plugin documentation =
150
+ [http://docs.themeisle.com/article/658-feedzy-rss-feeds](http://docs.themeisle.com/article/658-feedzy-rss-feeds)
151
+
152
+ = How to fix images that are not showing in the feed =
153
+ [http://docs.themeisle.com/article/666-how-to-fix-images-that-are-not-showing-in-the-feed](http://docs.themeisle.com/article/666-how-to-fix-images-that-are-not-showing-in-the-feed)
154
+
155
+ = How to change cache lifetime for a specific feed =
156
+ [http://docs.themeisle.com/article/547-how-to-change-cache-lifetime-for-a-specific-feed](http://docs.themeisle.com/article/547-how-to-change-cache-lifetime-for-a-specific-feed)
157
+
158
+ = How to change thumbs size and aspect ratio =
159
+ [http://docs.themeisle.com/article/551-how-to-change-thumbs-size-and-aspect-ratio](http://docs.themeisle.com/article/551-how-to-change-thumbs-size-and-aspect-ratio)
160
+
161
+ = What hooks and filters are available in Feedzy =
162
+ [http://docs.themeisle.com/article/540-what-hooks-and-filters-are-available-in-feedzy](http://docs.themeisle.com/article/540-what-hooks-and-filters-are-available-in-feedzy)
163
+
164
+ = How to change the blacklist image name =
165
+ [http://docs.themeisle.com/article/552-how-to-change-the-blacklist-image-name](http://docs.themeisle.com/article/552-how-to-change-the-blacklist-image-name)
166
+
167
+ = How to decode item title =
168
+ [http://docs.themeisle.com/article/548-how-to-decode-item-title-with](http://docs.themeisle.com/article/548-how-to-decode-item-title-with)
169
+
170
+ = How to remove featured image from blog feed =
171
+ [http://docs.themeisle.com/article/554-how-to-remove-featured-image-from-blog-feed](http://docs.themeisle.com/article/554-how-to-remove-featured-image-from-blog-feed)
172
+
173
+ = How to keep html in feed items content =
174
+ [http://docs.themeisle.com/article/542-how-to-keep-html-in-feed-items-content](http://docs.themeisle.com/article/542-how-to-keep-html-in-feed-items-content)
175
+
176
+ = How to remove plugin css =
177
+ [http://docs.themeisle.com/article/545-how-to-remove-plugin-css](http://docs.themeisle.com/article/545-how-to-remove-plugin-css)
178
 
179
+ = How to remove links =
180
+ [http://docs.themeisle.com/article/541-how-to-remove-links](http://docs.themeisle.com/article/541-how-to-remove-links)
181
 
182
+ = How to add a read more link =
183
+ [http://docs.themeisle.com/article/544-how-to-add-a-read-more-link](http://docs.themeisle.com/article/544-how-to-add-a-read-more-link)
184
 
185
+ = How to remove time from publication date =
186
+ [http://docs.themeisle.com/article/553-how-to-remove-time-from-publication-date](http://docs.themeisle.com/article/553-how-to-remove-time-from-publication-date)
187
+
188
+ = How to handle publication date and author content =
189
+ [http://docs.themeisle.com/article/549-how-to-handle-time-and-date-content](http://docs.themeisle.com/article/549-how-to-handle-time-and-date-content)
190
+
191
+ = How to use your own inline css =
192
+ [http://docs.themeisle.com/article/546-how-to-use-your-own-inline-css](http://docs.themeisle.com/article/546-how-to-use-your-own-inline-css)
193
+
194
+ = How to remove the end hellip =
195
+ [http://docs.themeisle.com/article/543-how-to-remove-the-end-hellip](http://docs.themeisle.com/article/543-how-to-remove-the-end-hellip)
196
+
197
+ = How to display items in a random order =
198
+ [http://docs.themeisle.com/article/550-how-to-display-items-in-a-random-order](http://docs.themeisle.com/article/550-how-to-display-items-in-a-random-order)
199
+
200
+ = How to sort items alphabetically by their title =
201
+ [http://docs.themeisle.com/article/633-how-to-sort-feed-items-by-title](http://docs.themeisle.com/article/633-how-to-sort-feed-items-by-title)
202
+
203
+ = How to display RSS feed time and date in local time =
204
+ [http://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-local-time](http://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-local-time)
205
+
206
+ = How to change author url =
207
+ [http://docs.themeisle.com/article/636-how-to-change-author-url](http://docs.themeisle.com/article/636-how-to-change-author-url)
208
+
209
+ = How remove feed items duplicates by url =
210
+ [http://docs.themeisle.com/article/638-how-to-eliminate-duplicate-feed-item](http://docs.themeisle.com/article/638-how-to-eliminate-duplicate-feed-item)
211
+
212
+ = How to use feedzy categories =
213
+ [http://docs.themeisle.com/article/640-how-to-use-feedzy-categories](http://docs.themeisle.com/article/640-how-to-use-feedzy-categories)
214
 
215
  == Screenshots ==
216
 
217
+ 1. Simple example
218
+ 2. Inserting a shortcode in the WYSIWYG
219
+ 3. Widget admin
220
+ 4. Widget render
221
+
222
 
223
  == Changelog ==
 
224
 
225
+ = 3.2.4 - 2017-10-13 =
226
+
227
+ * Fix for assets enqueue, loading them where are needed only.
228
+ * Removes duplicates readme.md files.
229
+
230
+
231
+ = 3.2.1 - 2017-10-12 =
232
+
233
+ * Adds global settings page.
234
+ * Adds User Agent and Proxy settings.
235
+ * Fix for some edge cases regarding images in the feed.
236
+
237
+
238
+ = 3.2.0 - 2017-08-17 =
239
+
240
+ * Fix for image URL issue following some strange patterns.
241
+ * Added fallback for broken feed, now if one feed from the list is not working, others will will be used.
242
+ * Added shortcode parameter for feed cache control.
243
+
244
+
245
+ = 3.1.10 - 2017-08-03 =
246
+
247
+ * Fixed typos in shortcode builder.
248
+ * Fixed image encoding issue.
249
+
250
+
251
+ = 3.1.9 - 2017-07-21 =
252
+
253
+ * Fixed issue with fetching images containg GET parameters.
254
+
255
+
256
+ = 3.1.8 - 2017-07-17 =
257
+
258
+ * Fixed image fetching issues.
259
+ * Fixed link opening behaviour
260
+ * Improved description ( Thanks to @chesio )
261
+
262
+
263
+ = 3.1.7 =
264
+
265
+ * Added new sdk logic.
266
+ * Improved compatibility with the pro version.
267
+
268
+
269
+
270
+ = 3.1.5 - 30/05/2017 =
271
+ * Fixed issues with sdk notifications.
272
+ * Added more compatibility with pro version.
273
+
274
+ = 3.1.4 - 29/05/2017 =
275
+ * Added new doc on how to use feedzy categories.
276
+
277
+ = 3.1.3 - 29/05/2017 =
278
+ * Added new SDK features.
279
+ * Fixed some edge case issues on image parsing.
280
+
281
+ = 3.1.2 - 22/05/2017 =
282
+ * Fixed author protocol.
283
+ * Added core fetch_feed method.
284
+
285
+ = 3.1.1 - 22/05/2017 =
286
+ * Fixed span alt tag, replaced with title.
287
+
288
+ = 3.1.0 - 17/05/2017 =
289
+ * Added feed categories for grouping urls.
290
+ * Added support for feed to post feature.
291
+ * Fixed regex for jpeg image ( Reported by @piccart )
292
+ * Added filter for author url ( Thanks to @piccart )
293
+
294
+ = 3.0.10 - 24/04/2017 =
295
+ * Fixed wrong image regex.
296
+ * Fixed image compression.
297
+
298
+ = 3.0.9 - 21/02/2017 =
299
+ * Added wrong feed title check.
300
+
301
+ = 3.0.8 - 20/02/2017 =
302
+ * Added $sizes param to feedzy_thumb_output.
303
+ * Added check when title is empty.
304
+ * Fixed image encoding url.
305
+
306
+ = 3.0.6 - 27/01/2017 =
307
+ * Added feedzy_feed_timestamp filter.
308
+ * Fixed issue with edge cases feed urls.
309
+ * Fixed error when using [] on string vars.
310
+
311
+
312
+ = 3.0.5 - 06/01/2017 =
313
+ * Fixed issue with google news feed
314
+
315
+ = 3.0.4 - 06/01/2017 =
316
+ * Fixed thumb='auto' behaviour
317
+
318
+ = 3.0.3 - 06/01/2017 =
319
+ * Fixed blog feed feature image filter
320
+ * Improved documentation and examples
321
+
322
+ = 3.0.2 - 06/01/2017 =
323
+ * Fixed default class back
324
+
325
+ = 3.0.1 - 05/01/2017 =
326
+ * Fixed html markup error which was breaking user websites
327
+
328
+ = 3.0.0 - 10/11/2016 =
329
+ * Refactored code base from 2.8.1 to OOP style
330
+ * Added support for PRO version
331
+ * Added new hooks feedzy_item_filter, feedzy_item_url_filter
332
+
333
+
334
+ = 2.8 - 04/14/2016 =
335
+ * Tested on WP 4.5 with success!
336
+ * themeisle added as plugin author
337
+ * Fix a PHP7 warning in the widget contructor regarding [this topic](https://wordpress.org/support/topic/php7-debug-error?replies=1)
338
+
339
+ = 2.7.1 =
340
+ * Remove unnecessary and redundant feedzy_wp_widget_box div container in the widget's body
341
+ * Best compliance with WordPress coding standards
342
+ * Fix a PHP warning on SimplePie error display & log
343
+ * Readme.txt update
344
+
345
+ = 2.7 =
346
+ * Better displaying of fetching feeds errors (see error message div error-attr).
347
+ * Write errors in the WP log file
348
+ * New hook: feedzy_default_error to filter error message
349
+ * New hook: shortcode_atts_feedzy_default to filter default shortcode attibutes
350
+ * Add a link to validate feed in the TinyMCE popup modal
351
+ * French translation update
352
+ * Remove unnecessary functions
353
+ * New constant FEEDZY_VERSION
354
+ * readme.txt and hooks documentation update
355
+
356
+ = 2.6.2 =
357
+ * Spanish translation thanks to [Angel Calzado](http://sintaxisweb.es "Angel Calzado")
358
+ * PHP issue fix in feedzy_returnImage() "strpos() expects parameter 1 to be string"
359
+ * Remove SSL from feeds URL to prevent fetching errors
360
+ * New hook: feedzy_default_image
361
+ * readme.txt and hooks documentation update
362
+
363
+ = 2.6.1 =
364
+ * Replace jQuery live() function by on() function to prevent JS error (fix the issue with Visual composer)
365
+ * Improve image's fetching on itunes feeds
366
+ * New feature: default WP smilies are now blacklisted from image fetching
367
+ * New hook: feedzy_feed_blacklist_images
368
+ * Tested on WP 4.3 with success!
369
+
370
+ = 2.6 =
371
+ * Fix a conflict with PageBuilder where Feedzy button does not show up in the visual editor
372
+ * Fix a typo in feedzy-rss-feeds-shortcode.php on the thumbnails span
373
+ * Replace WP_Widget by __construct() to initiate the widget because it has been deprecated since version 4.3.0
374
+ * German translation thanks to [ralfsteck](https://profiles.wordpress.org/ralfsteck/ "ralfsteck")
375
+ * Tested on WP 4.3 with success!
376
+
377
+ = 2.5.1 =
378
+ * Japanese translation thanks to [sama55](http://askive.cmsbox.jp/ "sama55")
379
+ * Image optimisation (feedzy-default.jpg)
380
+ * Improve image's fetching to avoid catching audio or video files from item description
381
+
382
+ = 2.5 =
383
+ * Improve author name fetching
384
+ * Better HTML marckup
385
+ * Fix PHP warning within the widget
386
+ * Fix CSS on IE when displaying images as a fallback
387
+ * CSS stylesheet update
388
+ * New hook: feedzy_item_attributes
389
+
390
+ = 2.4.3 =
391
+ * Improve image fetching (again...)
392
+ * Fix an issue on files encoding (UTF8)
393
+ * Minor PHP improvements on the main shortcode's function
394
+
395
+ = 2.4.2 =
396
+ * Minor fix on already encoded images names
397
+
398
+ = 2.4.1 =
399
+ * Fix an issue on img url encode
400
+ * Retrive img url in url parameters
401
+ * Fix minor PHP warning
402
+ * New hook: feedzy_add_classes_item
403
+
404
+ = 2.4 =
405
+ * New feature: 'auto' thumbs option added
406
+ * New hook: feedzy_thumb_sizes
407
+ * Fix issue on max number of feeds to display
408
+ * Fix HTML decode in the feed's title
409
+ * Minor PHP improvements
410
+ * readme.txt and hooks documentation update
411
+
412
+ = 2.3 =
413
+ * New hook: feedzy_feed_items
414
+ * New hook: feedzy_item_keyword
415
+ * Introduce SimplePie native strip_htmltags() method
416
+ * Use PNG icon as SVG fallback on the visual editor button
417
+ * Improve plugin's files structure
418
+ * readme.txt and hooks documentation update
419
+
420
+ = 2.2.2 =
421
+ * New hook: feedzy_meta_args
422
+
423
+ = 2.2.1 =
424
+ * Minor security improvements
425
+ * Better WordPress coding standard respect
426
+ * Minor fix if does not provide item's author
427
+ * Translations update
428
+
429
+ = 2.2 =
430
+ * Minor PHP improvements
431
+ * Remove logo from plugin meta
432
+ * New hook: feedzy_summary_input
433
+ * $feedURL argument added on every available hooks
434
+ * French translation update
435
+ * readme.txt and hooks documentation update
436
+
437
+ = 2.1 =
438
+ * internationalization of feeds dates and times (date_i18n)
439
+
440
+ = 2.0 =
441
+ * Widget added
442
+ * Translation update
443
+ * Better plugin file structure
444
+ * Improve image fetching with multiple enclosures
445
+ * Tested on WP 4.1 with success!
446
+
447
+ = 1.7.1 =
448
+ * Fix typo in PHP which cause issue on fetching images
449
+
450
+ = 1.7 =
451
+ * Minor Template and CSS changes
452
+ * New hook: feedzy_thumb_output
453
+ * New hook: feedzy_title_output
454
+ * New hook: feedzy_meta_output
455
+ * New hook: feedzy_summary_output
456
+ * New hook: feedzy_global_output
457
+ * readme.txt update
458
+
459
+ = 1.6 =
460
+ * Minor CSS fix
461
+ * Add actions: add_action('rss_item', 'feedzy_include_thumbnail_RSS'); & add_action('rss2_item', 'feedzy_include_thumbnail_RSS')
462
+
463
+ = 1.5.4 =
464
+ * Plugin meta translation
465
+ * Remove unnecessary spaces
466
+
467
+ = 1.5.3 =
468
+ * TinyMCE UI translation
469
+ * Better fetching image
470
+ * Space between items is calculated based on thumbs size
471
+
472
+ = 1.5.2 =
473
+ * Plugin meta update
474
+
475
+ = 1.5.1 =
476
+ * New logo
477
+ * Minor CSS fixes
478
+
479
+ = 1.5 =
480
+ * New param added to filter item with keywords
481
+ * Default thumb added
482
+ * Fix minor php issue
483
+ * Rename files of the plugin
484
+ * New logo + screenshot (assets)
485
+
486
+ = 1.4 =
487
+ * Add "default" parameter to fill image container if no image is fetch or if it is offline
488
+ * Add more control over numeric format in max, size, title & summarylength parameters
489
+
490
+ = 1.03 =
491
+ * Shortcode can now be displayed everywhere in the page (CSS is loaded via global var)
492
 
493
+ = 1.02 =
494
+ * Error on svn tag
495
 
496
+ = 1.01 =
497
+ * Minor CSS fix.
498
+ * Minor PHP changes.
499
+ * Readme.txt updated
500
 
501
+ = 1.0 =
502
+ * First release.
503
 
504
+ == Upgrade Notice ==
505
 
506
+ = 1.5 =
507
+ * IMPORTANT: You have to reactivate the plugin after its update!
508
 
509
+ = 1.0 =
510
+ * First release.
screenshot-1.png DELETED
Binary file
screenshot-2.png DELETED
Binary file
uninstall.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Fired when the plugin is uninstalled.
4
+ *
5
+ * When populating this file, consider the following flow
6
+ * of control:
7
+ *
8
+ * - This method should be static
9
+ * - Check if the $_REQUEST content actually is the plugin name
10
+ * - Run an admin referrer check to make sure it goes through authentication
11
+ * - Verify the output of $_GET makes sense
12
+ * - Repeat with other user roles. Best directly by using the links/query string parameters.
13
+ * - Repeat things for multisite. Once for a single site in the network, once sitewide.
14
+ *
15
+ * @link http://themeisle.com
16
+ * @since 3.0.0
17
+ *
18
+ * @package Feedzy_Rss_Feeds
19
+ */
20
+
21
+ // If uninstall not called from WordPress, then exit.
22
+ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
23
+ exit;
24
+ }
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit5d593ec899c187d7e85d0e35ce2a5203::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit71b9976292a72846b9d61edd36602f54::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInite571e19d9881ee8f827ce1bbf4c5fff5::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit0ee835a1dc3b31d64dca86f79d70c22c::getLoader();
vendor/composer/autoload_files.php CHANGED
@@ -7,5 +7,5 @@ $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
  '957c51f8f334b5ea3be310bfb8b3492c' => $vendorDir . '/codeinwp/themeisle-sdk/load.php',
10
- '51a048f80ffe98b43b5b29791b70fc96' => $vendorDir . '/codeinwp/themeisle-sdk/load.php',
11
  );
7
 
8
  return array(
9
  '957c51f8f334b5ea3be310bfb8b3492c' => $vendorDir . '/codeinwp/themeisle-sdk/load.php',
10
+ '3df8ee254224091c21b9aebb792d2f8b' => $vendorDir . '/codeinwp/themeisle-sdk/load.php',
11
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit5d593ec899c187d7e85d0e35ce2a5203
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit5d593ec899c187d7e85d0e35ce2a5203
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit5d593ec899c187d7e85d0e35ce2a5203', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit5d593ec899c187d7e85d0e35ce2a5203', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit5d593ec899c187d7e85d0e35ce2a5203
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire5d593ec899c187d7e85d0e35ce2a5203($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire5d593ec899c187d7e85d0e35ce2a5203($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit71b9976292a72846b9d61edd36602f54
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit71b9976292a72846b9d61edd36602f54', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit71b9976292a72846b9d61edd36602f54', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire71b9976292a72846b9d61edd36602f54($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire71b9976292a72846b9d61edd36602f54($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInite571e19d9881ee8f827ce1bbf4c5fff5 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInite571e19d9881ee8f827ce1bbf4c5fff5 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInite571e19d9881ee8f827ce1bbf4c5fff5', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInite571e19d9881ee8f827ce1bbf4c5fff5', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit0ee835a1dc3b31d64dca86f79d70c22c {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit0ee835a1dc3b31d64dca86f79d70c22c', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit0ee835a1dc3b31d64dca86f79d70c22c', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);