Easy Facebook Like Box (Facebook Page Plugin) – Custom Facebook Feed – Auto PopUp - Version 4.0

Version Description

  • Added new custom facebook feed feature upon numerous feature requests.
  • New enhanced backend user enterface.
  • Lots of bug fixes and imporvements.
Download this release

Release Info

Developer sjaved
Plugin Icon 128x128 Easy Facebook Like Box (Facebook Page Plugin) – Custom Facebook Feed – Auto PopUp
Version 4.0
Comparing to
See all releases

Code changes from version 3.1 to 4.0

LICENSE.txt DELETED
@@ -1,339 +0,0 @@
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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Easy Facebook Like Box ===
2
  Contributors: sjaved
3
- Tags: facebook, facebook like box,, like box, facebook like box, facebook like box widget, facebook like box shortcodes, shortcodes, facebook like box plugin, facebook like box wordpress plugin, plugin, responsive facebook like box, responsive, facebook like box in 75 locales, facebook like box in 75 languages, facebook like box in PopUp, PopUp, Auto PopUp, like box in PopUp, fancybox, lightbox, seo, social media, facebook badge, facebook button, facebook connect, facebook facepile, Facebook fan page, wordpress facebook like box, facebook share, facebook integration, shortcode generator, advanced responsive facebook likebox, facebook wall, facebook sidebar, facebook recommend, like box facebook, open graph, facebook page, facebook group, rt facebook like box, sharebar
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=sjaved786%40gmail%2ecom&lc=US&item_name=Easy%20Facebook%20Like%20Box%20WordPress%20Plugin&item_number=efbl&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
5
  Requires at least: 3.3
6
- Tested up to: 4.1
7
- Stable tag: 3.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -14,56 +14,51 @@ Easy facebook like box WordPress plugin allows you to display fan page posts, li
14
 
15
  Displays a Facebook Like Box. The Facebook Like Box is a social plugin that enables Facebook Page owners to attract and gain Likes from their own website. Easy facebook like box display fan page posts, like button, and connections on your website using widget, shortcode or in Auto PopUp.
16
 
17
- [Fixed width demo](https://jwebsol.com/easy-facebook-like-box-plugin-demo/ "See this plugin in action (Fixed width)") | [Responsive demo](https://jwebsol.com/easy-facebook-like-box-responsive-demo/ "See this plugin in action (Responsive)") |
18
- [Auto PopUp demo](https://jwebsol.com/easy-facebook-like-box-auto-popup-demo/ "See this plugin in action (Auto PopUp)") | [GoPro](https://jwebsol.com/product/easy-facebook-like-box-pro/ "Need more! Check Pro version.")
19
 
20
  ### Features:
21
 
22
- 1. Two color schemes (light/dark).
23
  1. Show or hide faces/connections.
24
- 1. Show or hide header/logo.
25
  1. Show or hide latest facebook fan page posts.
26
- 1. Show or hide border around the like box.
27
  1. Now support optional **responsive** layout.
28
- 1. Dispaly like box in page/post/custom posts using shortcodes easily generated while saving widgets.
29
  1. Set fixed width and height.
30
  1. Chose your desired language or input your own language (if not in list).
31
  1. Support 75 different locales.
32
- 1. Like box in responsive PopUp/Modal window (New feature).
33
  1. Enable/Disable PopUp.
34
  1. All above options are available with PopUp.
35
  1. Generate shortcode using widget form.
 
 
 
 
 
 
 
 
 
 
 
36
 
37
- You can easily upgrade to [Easy Facebook Like Box Pro:](https://jwebsol.com/product/easy-facebook-like-box-pro/ "GoPro") for more features.
38
 
39
- ### Pro Features:
40
 
41
- 1. **Pro version support all WordPress shortcodes and even html in PopUp.**
42
- 1. **Set PopUp delay from Back-end.**
43
- 1. **Show PopUp on home page only.**
44
- 1. **Show PopUp if visitors are logged in**
45
- 1. **Show PopUp if visitors are not logged in.**
46
- 1. **Close button act as never show again (show only once).**
47
- 1. **Hide on mobile devices.**
48
- 1. **Priority Support.**
49
- 1. **And more...**
50
 
51
- ### How to use facebook like box widget, shortcode and PopUp.
 
52
 
53
 
54
- **Options:**
 
55
 
56
- 1. Facebook Page URL - enter an URL address to the Facebook fan page
57
- 1. Width - set the width of the module in pixels. The default width is 250px
58
- 1. Height - With the stream displayed and 8 connections the default height is 556px. With no stream displayed and 8 connections the default height is 271px. With no connections and no stream the default height is 63px
59
- 1. Language/Locale - choose your locale for the like box from 75 languages
60
- 1. Responsive - enable/disable responsive mode of like box (1 enalbe and 0 for disable to use in shortcode)
61
- 1. Color Scheme - choose the color scheme for the like box (light/dark)
62
- 1. Show Faces - show/hide profile photos (1 for show and 0 for hide to use in shortcode)
63
- 1. Stream - show/hide the latest wall posts (1 for show and 0 for hide to use in shortcode)
64
- 1. Header - show/hide the Facebook header (1 for show and 0 for hide to use in shortcode)
65
- 1. Border - show/hide the border around the like box (1 for show and 0 for hide to use in shortcode)
66
 
 
67
 
68
  You can use easy facebook like box in number of ways:
69
 
@@ -72,14 +67,15 @@ You can use easy facebook like box in number of ways:
72
  * Display facebook like box in sidebar using widget.
73
 
74
  * Display facebook like box in posts or pages using shortcode. Genraete shortcode using widget or add this shortcode and modify the values manually.
75
- `[efb_likebox fanpage_url="YOUR_FB_FANPAGE_URL" fb_appid="OPTIONAL_SEE_FAQ" box_width="WIDTH_OF_BOX_IN_PIXELS" box_height="HEIGHT_OF_BOX_IN_PIXELS" locale="NAME_OF_YOUR_LANGUAGE_LOCAE(default en_US)" responsive="RESPONSIVE_FOR_MOBILE(1/0)" colorscheme="CHOSEN_COLOSCHEME(light/dark)" show_faces="SHOW_CONNECTIONS(1/0)" show_header="SHOW_HEADER(1/0)" show_stream="SHOW_STREAM_POSTS(1/0)" show_border="DISPLAY_BORDER(1/0)"]`
 
76
 
77
  * Want to display in a template paste below code along with your optional settings.
78
- `<?php echo do_shortcode( '[efb_likebox fanpage_url="YOUR_FB_FANPAGE_URL" fb_appid="OPTIONAL_SEE_FAQ" box_width="WIDTH_OF_BOX_IN_PIXELS" box_height="HEIGHT_OF_BOX_IN_PIXELS" locale="NAME_OF_YOUR_LANGUAGE_LOCAE(default en_US)" responsive="RESPONSIVE_FOR_MOBILE(1/0)" colorscheme="CHOSEN_COLOSCHEME(light/dark)" show_faces="SHOW_CONNECTIONS(1/0)" show_header="SHOW_HEADER(1/0)" show_stream="SHOW_STREAM_POSTS(1/0)" show_border="DISPLAY_BORDER(1/0)"]' ); ?>`
79
 
80
 
81
- **Need support** feel free to open support ticket in one of our following forums:
82
- [Free Support](https://wordpress.org/support/plugin/easy-facebook-likebox "Free Support") | [Premium/Priority Support](https://jwebsol.com/forums/forum/easy-facebook-like-box-pro/ "Premium/Priority Support") | [GoPro](https://jwebsol.com/product/easy-facebook-like-box-pro/ "GoPro")
83
 
84
  == Installation ==
85
  1. Upload "easy-facebook-likebox" to the "/wp-content/plugins/" directory.
@@ -87,6 +83,9 @@ You can use easy facebook like box in number of ways:
87
  3. Navigate to "Appearance > Widgets" and drag and drop "Easy Facebook Likebox" in desired widget area or use the shortcode in page/post generated by widget.
88
 
89
  == Upgrade Notice ==
 
 
 
90
  = 3.1.0 =
91
  Major realease! Must Update the plugin if you were missing the facebook like box in PopUp. Now display like box in auto display PopUp (Auto PopUp).
92
 
@@ -127,6 +126,11 @@ http://wordpress.org/support/topic/need-feed-back-on-plugin-feature/
127
 
128
 
129
  == Changelog ==
 
 
 
 
 
130
  = 3.1 =
131
 
132
  * Added another great feature of Auto PopUp. Now you can display easy facebook like box in PopUp.
1
  === Easy Facebook Like Box ===
2
  Contributors: sjaved
3
+ Tags: easy custom facebook feed, facebook feed, facebook page plugin, page plugin, adoptive, facebook, facebook like box,, like box, facebook like box, facebook like box widget, facebook like box shortcodes, shortcodes, facebook like box plugin, facebook like box wordpress plugin, plugin, responsive facebook like box, responsive, facebook like box in 75 locales, facebook like box in 75 languages, custom facebook feed, facebook like box in PopUp, PopUp, Auto PopUp, like box in PopUp, fancybox, lightbox, seo, social media, facebook badge, facebook button, facebook connect, facebook facepile, Facebook fan page, wordpress facebook like box, facebook share, facebook integration, shortcode generator, advanced responsive facebook likebox, facebook wall, facebook sidebar, facebook recommend, like box facebook, open graph, facebook page, facebook group, rt facebook like box, sharebar
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=sjaved786%40gmail%2ecom&lc=US&item_name=Easy%20Facebook%20Like%20Box%20WordPress%20Plugin&item_number=efbl&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
5
  Requires at least: 3.3
6
+ Tested up to: 4.2.2
7
+ Stable tag: 4.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
14
 
15
  Displays a Facebook Like Box. The Facebook Like Box is a social plugin that enables Facebook Page owners to attract and gain Likes from their own website. Easy facebook like box display fan page posts, like button, and connections on your website using widget, shortcode or in Auto PopUp.
16
 
17
+ [Custom facebook feed demo](https://jwebsol.com/easy-custom-facebook-feed-demo/ "See this plugin in action (Custom facebook feed demo)") | [Fixed width demo](https://jwebsol.com/easy-facebook-like-box-plugin-demo/ "See this plugin in action (Fixed width)") | [Responsive demo](https://jwebsol.com/easy-facebook-like-box-responsive-demo/ "See this plugin in action (Responsive)") |
18
+ [Auto PopUp demo](https://jwebsol.com/easy-facebook-like-box-auto-popup-demo/ "See this plugin in action (Auto PopUp)")
19
 
20
  ### Features:
21
 
22
+ 1. Now support custom facebook feed **NEW**.
23
  1. Show or hide faces/connections.
24
+ 1. Show or hide header.
25
  1. Show or hide latest facebook fan page posts.
 
26
  1. Now support optional **responsive** layout.
27
+ 1. Dispaly like box in page/post/custom posts using shortcodes easily generated while saving widget.
28
  1. Set fixed width and height.
29
  1. Chose your desired language or input your own language (if not in list).
30
  1. Support 75 different locales.
31
+ 1. Like box in responsive PopUp/Modal window.
32
  1. Enable/Disable PopUp.
33
  1. All above options are available with PopUp.
34
  1. Generate shortcode using widget form.
35
+ 1. Ssupport all WordPress shortcodes and even html in PopUp
36
+ 1. Set PopUp delay from Back-end.
37
+ 1. Show PopUp on home page only.
38
+ 1. Show PopUp if visitors are logged in
39
+ 1. Show PopUp if visitors are not logged in.
40
+ 1. Close button act as never show again (show only once).
41
+ 1. Hide on mobile devices.
42
+ 1. Priority Support.
43
+ 1. **And lot more...**
44
+
45
+ ### How to use easy custom facebook feed **(New)**
46
 
47
+ You can use easy facebook like box in number of ways:
48
 
49
+ * Display custom facebook feed in auto PopUp.
50
 
51
+ * Display custom facebook feed in sidebar using widget.
 
 
 
 
 
 
 
 
52
 
53
+ * Display custom facebook feed in posts or pages using shortcode. Genraete shortcode using widget or add this shortcode and modify the values manually.
54
+ `[efb_feed fanpage_url="YOUR_FB_FANPAGE_NAME_OR_URL" layout="CHOSE_LAYOUT(thumbnail/half/full)" image_size="CHOSE_IMAGE_SIZE(thumbnail/album/normal)" type="CHOSE_TYPE(page/group)" post_by="DISPLAY_POSTS_FROM(me/others/onlyothers)" show_logo="SHOW_HIDE_PAGE_LOGO(1/0)" show_image="SHOW_HIDE_IMAGES(1/0)" show_like_box="SHOW_HIDE_LIKEBOX(1/0)" post_number="NUMBER_OF_POST_DISPALAY(10)" post_limit="NUMBER_OF_POST_RETRIEVE(10)" cache_unit="NUMMBER_OF_MINUTES_HOURS_DAYS(1)" cache_duration="SELECT_CACHE_DURATION(minutes/hours/days)" ]`
55
 
56
 
57
+ * Want to display in a template paste below code along with your optional settings.
58
+ `<?php echo do_shortcode( '[efb_feed fanpage_url="YOUR_FB_FANPAGE_NAME_OR_URL" layout="CHOSE_LAYOUT(thumbnail/half/full)" image_size="CHOSE_IMAGE_SIZE(thumbnail/album/normal)" type="CHOSE_TYPE(page/group)" post_by="DISPLAY_POSTS_FROM(me/others/onlyothers)" show_logo="SHOW_HIDE_PAGE_LOGO(1/0)" show_image="SHOW_HIDE_IMAGES(1/0)" show_like_box="SHOW_HIDE_LIKEBOX(1/0)" post_number="NUMBER_OF_POST_DISPALAY(10)" post_limit="NUMBER_OF_POST_RETRIEVE(10)" cache_unit="NUMMBER_OF_MINUTES_HOURS_DAYS(1)" cache_duration="SELECT_CACHE_DURATION(minutes/hours/days)" ]' ); ?>`
59
 
 
 
 
 
 
 
 
 
 
 
60
 
61
+ ### How to use facebook like box widget, shortcode and PopUp.
62
 
63
  You can use easy facebook like box in number of ways:
64
 
67
  * Display facebook like box in sidebar using widget.
68
 
69
  * Display facebook like box in posts or pages using shortcode. Genraete shortcode using widget or add this shortcode and modify the values manually.
70
+ `[efb_likebox fanpage_url="YOUR_FB_FANPAGE_NAME_OR_URL" fb_appid="OPTIONAL_SEE_FAQ" box_width="WIDTH_OF_BOX_IN_PIXELS" box_height=HEIGHT_OF_BOX_IN_PIXELS"" responsive="1" show_faces="SHOW_CONNECTIONS(1/0)" show_stream="SHOW_STREAM_POSTS(1/0)" hide_cover="HIDE_COVER_PHOTO(1/0)" small_header="USE_SMALL_HEADER(1/0)" hide_cta="OPTONAL_HIDE_CUSTOM_CTA_BUTTON(1/0)" locale="NAME_OF_YOUR_LANGUAGE_LOCAE(default en_US)"]`
71
+
72
 
73
  * Want to display in a template paste below code along with your optional settings.
74
+ `<?php echo do_shortcode( '[efb_likebox fanpage_url="YOUR_FB_FANPAGE_NAME_OR_URL" fb_appid="OPTIONAL_SEE_FAQ" box_width="WIDTH_OF_BOX_IN_PIXELS" box_height=HEIGHT_OF_BOX_IN_PIXELS"" responsive="1" show_faces="SHOW_CONNECTIONS(1/0)" show_stream="SHOW_STREAM_POSTS(1/0)" hide_cover="HIDE_COVER_PHOTO(1/0)" small_header="USE_SMALL_HEADER(1/0)" hide_cta="OPTONAL_HIDE_CUSTOM_CTA_BUTTON(1/0)" locale="NAME_OF_YOUR_LANGUAGE_LOCAE(default en_US)"]' ); ?>`
75
 
76
 
77
+ **Need support** feel free to open support ticket:
78
+ [Support](https://wordpress.org/support/plugin/easy-facebook-likebox "Support")
79
 
80
  == Installation ==
81
  1. Upload "easy-facebook-likebox" to the "/wp-content/plugins/" directory.
83
  3. Navigate to "Appearance > Widgets" and drag and drop "Easy Facebook Likebox" in desired widget area or use the shortcode in page/post generated by widget.
84
 
85
  == Upgrade Notice ==
86
+ = 4.0.0 =
87
+ Its biggest release of all time. Want to use new custom facebook feed ? Then upgrade.
88
+
89
  = 3.1.0 =
90
  Major realease! Must Update the plugin if you were missing the facebook like box in PopUp. Now display like box in auto display PopUp (Auto PopUp).
91
 
126
 
127
 
128
  == Changelog ==
129
+ = 4.0 =
130
+ * Added new custom facebook feed feature upon numerous feature requests.
131
+ * New enhanced backend user enterface.
132
+ * Lots of bug fixes and imporvements.
133
+
134
  = 3.1 =
135
 
136
  * Added another great feature of Auto PopUp. Now you can display easy facebook like box in PopUp.
admin/assets/css/admin.css CHANGED
@@ -5,6 +5,9 @@ width: 49%;
5
  float: left;
6
  margin-bottom: 0px;
7
  }
 
 
 
8
  .widget-half select{
9
  width:95%;
10
  }
@@ -26,38 +29,12 @@ div#easy-facebook-likebox_popup {
26
  .button_container p.submit{
27
  margin-bottom: 25px !important;
28
  }
29
- .go_pro_ad{
30
- font-size:26px;
31
- text-decoration:none;
32
- padding:25px;
33
- background: #7cc68d;
34
- text-shadow: 0 -1px 0 rgba(0,0,0,0.2);
35
- -moz-border-radius: 6px;
36
- -webkit-border-radius: 6px;
37
- border-radius: 6px;
38
- color:#FFF;
39
- position:fixed;
40
- right:50px;
41
- top:70px;
42
- z-index:99999;
43
- }
44
- .go_pro_ad:hover, .buy_button:hover{
45
- color:#FFF;
46
- background:#67BD7B;
47
- }
48
- .promotional_text{
49
- display:inline-block;
50
  }
51
 
52
- .buy_button{
53
- font-size:26px;
54
- text-decoration:none;
55
- padding:100px;
56
- background: #7cc68d;
57
- text-shadow: 0 -1px 0 rgba(0,0,0,0.2);
58
- -moz-border-radius: 6px;
59
- -webkit-border-radius: 6px;
60
- border-radius: 6px;
61
- color:#FFF;
62
- float:right;
63
  }
5
  float: left;
6
  margin-bottom: 0px;
7
  }
8
+ .half_field{
9
+ width: 48%;
10
+ }
11
  .widget-half select{
12
  width:95%;
13
  }
29
  .button_container p.submit{
30
  margin-bottom: 25px !important;
31
  }
32
+
33
+ div#easy-facebook-likebox_popup_advanced{
34
+ float: left;
35
+ width: 100%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
 
38
+ #easy-facebook-likebox_popup .inside h3{
39
+ color:#21759b;
 
 
 
 
 
 
 
 
 
40
  }
admin/assets/js/admin.js CHANGED
@@ -1,9 +1,40 @@
1
  (function ( $ ) {
2
- "use strict";
3
-
4
  $(function () {
5
-
6
- // Place your administration-specific JavaScript here
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  });
9
 
1
  (function ( $ ) {
 
 
2
  $(function () {
3
+
4
+ if ( $( '#efbl_enabe_if_login' ).is(":checked") ) {
5
+ $('#efbl_enabe_if_not_login').removeAttr("checked");
6
+ $('#efbl_enabe_if_not_login').attr("disabled", true);
7
+ }else if ( $( '#efbl_enabe_if_login' ).is(":checked") ) {
8
+ $('#efbl_enabe_if_login').removeAttr("checked");
9
+ $('#efbl_enabe_if_login').attr("disabled", true);
10
+ }
11
+
12
+ $('#efbl_enabe_if_login').click(function (){
13
+
14
+ if ( $( this ).is(":checked")) {
15
+ $('#efbl_enabe_if_not_login').removeAttr("checked");
16
+ $('#efbl_enabe_if_not_login').attr("disabled", true);
17
+
18
+ } else {
19
+ $('#efbl_enabe_if_not_login').removeAttr("disabled");
20
+
21
+ }
22
+
23
+ });
24
+
25
+ $('#efbl_enabe_if_not_login').click(function (){
26
+
27
+ if ( $( this ).is(":checked")) {
28
+ $('#efbl_enabe_if_login').removeAttr("checked");
29
+ $('#efbl_enabe_if_login').attr("disabled", true);
30
+
31
+ } else {
32
+ $('#efbl_enabe_if_login').removeAttr("disabled");
33
+
34
+ }
35
+
36
+ });
37
+
38
 
39
  });
40
 
admin/easy-facebook-likebox-admin.php CHANGED
@@ -48,24 +48,7 @@ class Easy_Facebook_Likebox_Admin {
48
  * @since 1.0.0
49
  */
50
  private function __construct() {
51
-
52
- /*
53
- * @TODO :
54
- *
55
- * - Uncomment following lines if the admin class should only be available for super admins
56
- */
57
- /* if( ! is_super_admin() ) {
58
- return;
59
- } */
60
-
61
- /*
62
- * Call $plugin_slug from public plugin class.
63
- *
64
- * @TODO:
65
- *
66
- * - Rename "Plugin_Name" to the name of your initial plugin class
67
- *
68
- */
69
  $plugin = Easy_Facebook_Likebox::get_instance();
70
  $this->plugin_slug = $plugin->get_plugin_slug();
71
 
@@ -83,7 +66,7 @@ class Easy_Facebook_Likebox_Admin {
83
  add_action( 'admin_init', array( $this, 'i_have_supported_efbl') );
84
 
85
  //if ( get_option('I_HAVE_SUPPORTED_THE_EFBL_PLUGIN') != 1 )
86
- add_action( 'admin_notices', array( $this, 'post_installtion_upgrade_nag') );
87
 
88
  }
89
 
@@ -155,9 +138,6 @@ class Easy_Facebook_Likebox_Admin {
155
  if ( ! isset( $this->plugin_screen_hook_suffix ) ) {
156
  return;
157
  }
158
-
159
-
160
-
161
 
162
  $screen = get_current_screen();
163
  if ( $this->plugin_screen_hook_suffix == $screen->id ) {
@@ -190,12 +170,13 @@ class Easy_Facebook_Likebox_Admin {
190
  * - Change 'manage_options' to the capability you see fit
191
  * For reference: http://codex.wordpress.org/Roles_and_Capabilities
192
  */
193
- $this->plugin_screen_hook_suffix = add_options_page(
194
  __( 'Easy Fcebook Likebox', $this->plugin_slug ),
195
  __( 'Easy Fcebook Likebox', $this->plugin_slug ),
196
  'manage_options',
197
  $this->plugin_slug,
198
- array( $this, 'display_plugin_admin_page' )
 
199
  );
200
 
201
  add_action('load-'.$this->plugin_screen_hook_suffix, array(&$this, 'on_load_page'));
@@ -207,8 +188,11 @@ class Easy_Facebook_Likebox_Admin {
207
 
208
  //add several metaboxes now, all metaboxes registered during load page can be switched off/on at "Screen Options" automatically, nothing special to do therefore
209
  add_meta_box('easy-facebook-how_to', __('How to use this plugin', 'easy-facebook-likebox'), array(&$this, 'on_how_to_use'), $this->plugin_screen_hook_suffix, 'normal', 'core');
210
- add_meta_box('easy-facebook-likebox_popup', __('Like box pup up settings', 'easy-facebook-likebox'), array(&$this, 'on_popup_settings'), $this->plugin_screen_hook_suffix, 'additional', 'core');
211
 
 
 
 
212
 
213
  }
214
 
@@ -237,14 +221,12 @@ class Easy_Facebook_Likebox_Admin {
237
  include_once( 'views/popup-settings.php' );
238
  }
239
 
240
-
241
  /**
242
  * Render the settings page for this plugin.
243
  *
244
  * @since 1.0.0
245
  */
246
  public function display_plugin_admin_page() {
247
- add_meta_box('efbl-support_us_box', __( 'Support us by liking our fan page!' , 'easy-facebook-likebox'), array(&$this, 'on_support_us'), $this->pagehook, 'side', 'core');
248
  include_once( 'views/admin.php' );
249
  }
250
 
@@ -259,7 +241,7 @@ class Easy_Facebook_Likebox_Admin {
259
 
260
  return array_merge(
261
  array(
262
- 'settings' => '<a href="' . admin_url( 'options-general.php?page=' . $this->plugin_slug ) . '">' . __( 'Settings', $this->plugin_slug ) . '</a>'
263
  ),
264
  $links
265
  );
@@ -279,7 +261,7 @@ class Easy_Facebook_Likebox_Admin {
279
 
280
  if ( get_site_option( $version_key ) == $plugin_verstion && get_site_option( $notice_key ) == 1 ) return;
281
 
282
- $msg = sprintf(__('Thanks for installing/upgrading the Easy Facebook Like Box Plugin! If you like this plugin, please consider some <a href="%s" target="_blank">donation</a> or <a href="%s" target="_blank">Purchase the pro Version</a>!<br />
283
  Support us by liking our facebook fan page!
284
 
285
  <div id="fb-root"></div>
@@ -294,9 +276,9 @@ class Easy_Facebook_Likebox_Admin {
294
  <div class="fb-like" data-href="https://facebook.com/jwebsol" data-layout="standard" data-action="like" data-show-faces="false" data-share="true"></div>
295
  <br /><br />
296
  <a href="%s" class="button button-primary">I have supported already</a>
297
- ', 'efbl'),
298
  'https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=sjaved786%40gmail%2ecom&lc=US&item_name=Easy%20Facebook%20Like%20Box%20WordPress%20Plugin&item_number=efbl&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted',
299
- 'https://jwebsol.com/product/easy-facebook-like-box-pro/',
300
  get_admin_url('', 'options-general.php?page=easy-facebook-likebox&efbl_supported=1')
301
  );
302
  echo "<div class='update-nag'>$msg</div>";
@@ -323,11 +305,7 @@ class Easy_Facebook_Likebox_Admin {
323
 
324
 
325
  function i_have_supported_efbl(){
326
-
327
- if( false == get_option( 'efbl_settings_display_options' ) ) {
328
- add_option( 'efbl_settings_display_options', apply_filters( 'efbl_default_options', self::efbl_default_options() ) );
329
- } // end if
330
-
331
  // First, we register a section. This is necessary since all future options must belong to a
332
  add_settings_section(
333
  'efbl_general_settings_section', // ID used to identify this section and with which to register options
@@ -336,6 +314,15 @@ class Easy_Facebook_Likebox_Admin {
336
  'efbl_settings_display_options' // Page on which to add this section of options
337
  );
338
 
 
 
 
 
 
 
 
 
 
339
  // Next, we'll introduce the fields for toggling the visibility of content elements.
340
  add_settings_field(
341
  'efbl_enable_popup', // ID used to identify the field throughout the theme
@@ -344,11 +331,21 @@ class Easy_Facebook_Likebox_Admin {
344
  'efbl_settings_display_options', // The page on which this option will be displayed
345
  'efbl_general_settings_section', // The name of the section to which this field belongs
346
  array( // The array of arguments to pass to the callback. In this case, just a description.
347
- __( 'Activate this setting to display the header.', 'sandbox' ),
348
  )
349
  );
350
 
351
-
 
 
 
 
 
 
 
 
 
 
352
 
353
 
354
  // Next, we'll introduce the fields for toggling the visibility of content elements.
@@ -374,44 +371,96 @@ class Easy_Facebook_Likebox_Admin {
374
  __( 'Height in pixels.', 'easy-facebook-likebox' ),
375
  )
376
  );
 
377
 
378
  add_settings_field(
379
  'efbl_popup_shortcode', // ID used to identify the field throughout the theme
380
- __( 'Enter shortcode of Eeasy facebook like box', 'easy-facebook-likebox' ), // The label to the left of the option interface element
381
  array($this, 'efbl_display_popup_shortcode'), // The name of the function responsible for rendering the option interface
382
  'efbl_settings_display_options', // The page on which this option will be displayed
383
  'efbl_general_settings_section', // The name of the section to which this field belongs
384
  array( // The array of arguments to pass to the callback. In this case, just a description.
385
- __( 'Activate this setting to display the header.', 'sandbox' ),
386
  )
387
  );
388
 
389
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
390
 
391
  // Finally, we register the fields with WordPress
392
  register_setting(
393
  'efbl_settings_display_options',
394
  'efbl_settings_display_options'
395
  );
396
-
397
- if(isset($_GET['efbl_supported'])) {
398
- update_site_option( 'I_HAVE_SUPPORTED_THE_EFBL_PLUGIN', 1 );
399
- }
400
-
401
  /*echo I_HAVE_SUPPORTED_THE_EFBL_PLUGIN;
402
  exit; */
403
  }
404
 
405
  function efbl_options_callback(){
406
-
407
  //Do nothing for now
408
-
409
  }
 
410
 
411
  //Enable pupup
412
  function efbl_display_enable_check(){
413
 
414
  $options = get_option( 'efbl_settings_display_options' );
 
415
 
416
  $html = '<input type="checkbox" id="efbl_enable_popup" name="efbl_settings_display_options[efbl_enable_popup]" value="1"' . checked( 1, $options['efbl_enable_popup'], false ) . '/>';
417
  $html .= '&nbsp;';
@@ -421,55 +470,132 @@ class Easy_Facebook_Likebox_Admin {
421
  }
422
 
423
  //Interval
424
- function efbl_display_popup_interval() {
425
-
426
  $options = get_option( 'efbl_settings_display_options' );
 
427
 
428
  // Render the output
429
  echo '<input type="text" id="efbl_popup_interval" name="efbl_settings_display_options[efbl_popup_interval]" value="' . $options['efbl_popup_interval'] . '" />';
430
 
431
- echo '&nbsp;<label for="efbl_popup_interval">Delay in miliseconds. 1000 ms = 1 second.</label>';
432
 
433
  } // end sandbox_input_element_callback
434
 
435
  //Width
436
- function efbl_display_popup_width() {
437
 
438
  $options = get_option( 'efbl_settings_display_options' );
 
439
 
440
  // Render the output
441
  echo '<input type="text" id="efbl_popup_width" name="efbl_settings_display_options[efbl_popup_width]" value="' . $options['efbl_popup_width'] . '" />';
442
 
443
- echo '&nbsp;<label for="efbl_popup_width">Width in pixels.</label>';
444
 
445
  } // end sandbox_input_element_callback
446
 
447
  //Height
448
- function efbl_display_popup_height() {
449
 
450
  $options = get_option( 'efbl_settings_display_options' );
 
451
 
452
  // Render the output
453
  echo '<input type="text" id="efbl_popup_height" name="efbl_settings_display_options[efbl_popup_height]" value="' . $options['efbl_popup_height'] . '" />';
454
 
455
- echo '&nbsp;<label for="efbl_popup_height">Height in pixels.</label>';
456
 
457
  } // end sandbox_input_element_callback
458
 
459
 
460
- function efbl_display_popup_shortcode(){
461
 
462
  $options = get_option( 'efbl_settings_display_options' );
 
463
  /*echo "<pre>";
464
  print_r($options);
465
- echo "</pre>";*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
466
 
467
- echo '<textarea id="efbl_popup_shortcode" name="efbl_settings_display_options[efbl_popup_shortcode]" rows="5" cols="50" placeholder="Generate shortcode from Appearance > Widgets > Easy Facebook Likebox">' . $options['efbl_popup_shortcode'] . '</textarea>';
468
-
469
 
470
  echo $html;
471
 
472
  }
473
 
 
 
 
 
 
 
 
 
 
 
 
 
 
474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475
  }
48
  * @since 1.0.0
49
  */
50
  private function __construct() {
51
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  $plugin = Easy_Facebook_Likebox::get_instance();
53
  $this->plugin_slug = $plugin->get_plugin_slug();
54
 
66
  add_action( 'admin_init', array( $this, 'i_have_supported_efbl') );
67
 
68
  //if ( get_option('I_HAVE_SUPPORTED_THE_EFBL_PLUGIN') != 1 )
69
+ //add_action( 'admin_notices', array( $this, 'post_installtion_upgrade_nag') );
70
 
71
  }
72
 
138
  if ( ! isset( $this->plugin_screen_hook_suffix ) ) {
139
  return;
140
  }
 
 
 
141
 
142
  $screen = get_current_screen();
143
  if ( $this->plugin_screen_hook_suffix == $screen->id ) {
170
  * - Change 'manage_options' to the capability you see fit
171
  * For reference: http://codex.wordpress.org/Roles_and_Capabilities
172
  */
173
+ $this->plugin_screen_hook_suffix = add_menu_page(
174
  __( 'Easy Fcebook Likebox', $this->plugin_slug ),
175
  __( 'Easy Fcebook Likebox', $this->plugin_slug ),
176
  'manage_options',
177
  $this->plugin_slug,
178
+ array( $this, 'display_plugin_admin_page' ),
179
+ plugins_url( 'easy-facebook-likebox-pro/assets/PluginIcon.png' )
180
  );
181
 
182
  add_action('load-'.$this->plugin_screen_hook_suffix, array(&$this, 'on_load_page'));
188
 
189
  //add several metaboxes now, all metaboxes registered during load page can be switched off/on at "Screen Options" automatically, nothing special to do therefore
190
  add_meta_box('easy-facebook-how_to', __('How to use this plugin', 'easy-facebook-likebox'), array(&$this, 'on_how_to_use'), $this->plugin_screen_hook_suffix, 'normal', 'core');
191
+ add_meta_box('easy-facebook-feed', __('Settings', 'easy-facebook-likebox'), array(&$this, 'on_efbfeed_settings'), $this->plugin_screen_hook_suffix, 'easyfbfeed', 'core');
192
 
193
+ add_meta_box('easy-facebook-likebox_popup', __('Like box pup up settings', 'easy-facebook-likebox'), array(&$this, 'on_popup_settings'), $this->plugin_screen_hook_suffix, 'additional', 'core');
194
+ add_meta_box('efbl-support_us_box', __( 'Support us by liking our fan page!' , 'easy-facebook-likebox'), array(&$this, 'on_support_us'), $this->pagehook, 'side', 'core');
195
+
196
 
197
  }
198
 
221
  include_once( 'views/popup-settings.php' );
222
  }
223
 
 
224
  /**
225
  * Render the settings page for this plugin.
226
  *
227
  * @since 1.0.0
228
  */
229
  public function display_plugin_admin_page() {
 
230
  include_once( 'views/admin.php' );
231
  }
232
 
241
 
242
  return array_merge(
243
  array(
244
+ 'settings' => '<a href="' . admin_url( 'admin.php?page=' . $this->plugin_slug ) . '">' . __( 'Settings', $this->plugin_slug ) . '</a>'
245
  ),
246
  $links
247
  );
261
 
262
  if ( get_site_option( $version_key ) == $plugin_verstion && get_site_option( $notice_key ) == 1 ) return;
263
 
264
+ $msg = sprintf(__('Thanks for installting/upgrading the Easy Facebook Likebox Plugin! If you like this plugin, please consider some <a href="%s" target="_blank">donation</a> and/or <a href="%s" target="_blank">rating it</a>!
265
  Support us by liking our facebook fan page!
266
 
267
  <div id="fb-root"></div>
276
  <div class="fb-like" data-href="https://facebook.com/jwebsol" data-layout="standard" data-action="like" data-show-faces="false" data-share="true"></div>
277
  <br /><br />
278
  <a href="%s" class="button button-primary">I have supported already</a>
279
+ ', $this->plugin_slug ),
280
  'https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=sjaved786%40gmail%2ecom&lc=US&item_name=Easy%20Facebook%20Like%20Box%20WordPress%20Plugin&item_number=efbl&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted',
281
+ 'http://wordpress.org/plugins/easy-facebook-likebox/',
282
  get_admin_url('', 'options-general.php?page=easy-facebook-likebox&efbl_supported=1')
283
  );
284
  echo "<div class='update-nag'>$msg</div>";
305
 
306
 
307
  function i_have_supported_efbl(){
308
+
 
 
 
 
309
  // First, we register a section. This is necessary since all future options must belong to a
310
  add_settings_section(
311
  'efbl_general_settings_section', // ID used to identify this section and with which to register options
314
  'efbl_settings_display_options' // Page on which to add this section of options
315
  );
316
 
317
+ // First, we register a section. This is necessary since all future options must belong to a
318
+ add_settings_section(
319
+ 'efbl_general_settings_section_advanced', // ID used to identify this section and with which to register options
320
+ __( 'Like box pup up advanced settings', 'easy-facebook-likebox' ), // Title to be displayed on the administration page
321
+ array($this, 'efbl_options_callback'), // Callback used to render the description of the section
322
+ 'efbl_settings_display_options' // Page on which to add this section of options
323
+ );
324
+
325
+
326
  // Next, we'll introduce the fields for toggling the visibility of content elements.
327
  add_settings_field(
328
  'efbl_enable_popup', // ID used to identify the field throughout the theme
331
  'efbl_settings_display_options', // The page on which this option will be displayed
332
  'efbl_general_settings_section', // The name of the section to which this field belongs
333
  array( // The array of arguments to pass to the callback. In this case, just a description.
334
+ __( 'Activate this setting to display the header.', 'easy-facebook-likebox' ),
335
  )
336
  );
337
 
338
+ // Next, we'll introduce the fields for toggling the visibility of content elements.
339
+ add_settings_field(
340
+ 'efbl_popup_interval', // ID used to identify the field throughout the theme
341
+ __( 'PopUp delay after page load', 'easy-facebook-likebox' ), // The label to the left of the option interface element
342
+ array($this, 'efbl_display_popup_interval'), // The name of the function responsible for rendering the option interface
343
+ 'efbl_settings_display_options', // The page on which this option will be displayed
344
+ 'efbl_general_settings_section', // The name of the section to which this field belongs
345
+ array( // The array of arguments to pass to the callback. In this case, just a description.
346
+ __( 'Delay in miliseconds. 1000 ms = 1 second.', 'easy-facebook-likebox' ),
347
+ )
348
+ );
349
 
350
 
351
  // Next, we'll introduce the fields for toggling the visibility of content elements.
371
  __( 'Height in pixels.', 'easy-facebook-likebox' ),
372
  )
373
  );
374
+
375
 
376
  add_settings_field(
377
  'efbl_popup_shortcode', // ID used to identify the field throughout the theme
378
+ __( 'PopUp content', 'easy-facebook-likebox' ), // The label to the left of the option interface element
379
  array($this, 'efbl_display_popup_shortcode'), // The name of the function responsible for rendering the option interface
380
  'efbl_settings_display_options', // The page on which this option will be displayed
381
  'efbl_general_settings_section', // The name of the section to which this field belongs
382
  array( // The array of arguments to pass to the callback. In this case, just a description.
383
+ __( 'You can generate easy facebook like box shortcode from Widgets > Easy Facebook LikeBox.', 'easy-facebook-likebox' ),
384
  )
385
  );
386
 
387
+ add_settings_field(
388
+ 'efblp_enabe_show_on_home_only', // ID used to identify the field throughout the theme
389
+ __( 'Show on home only', 'easy-facebook-likebox' ), // The label to the left of the option interface element
390
+ array($this, 'efbl_display_on_home_only'), // The name of the function responsible for rendering the option interface
391
+ 'efbl_settings_display_options', // The page on which this option will be displayed
392
+ 'efbl_general_settings_section_advanced', // The name of the section to which this field belongs
393
+ array( // The array of arguments to pass to the callback. In this case, just a description.
394
+ __( 'Display PopUp on home page only.', 'easy-facebook-likebox' ),
395
+ )
396
+ );
397
+
398
+ add_settings_field(
399
+ 'efblp_enabe_if_login', // ID used to identify the field throughout the theme
400
+ __( 'Enable if visitor is logged in', 'easy-facebook-likebox' ), // The label to the left of the option interface element
401
+ array($this, 'efbl_display_enable_user_loggin'), // The name of the function responsible for rendering the option interface
402
+ 'efbl_settings_display_options', // The page on which this option will be displayed
403
+ 'efbl_general_settings_section_advanced', // The name of the section to which this field belongs
404
+ array( // The array of arguments to pass to the callback. In this case, just a description.
405
+ __( 'Shows the PopUp if the user is logged in to your site.', 'easy-facebook-likebox' ),
406
+ )
407
+ );
408
+
409
+ add_settings_field(
410
+ 'efblp_enabe_if_not_login', // ID used to identify the field throughout the theme
411
+ __( 'Enable if visitor is not logged in', 'easy-facebook-likebox' ), // The label to the left of the option interface element
412
+ array($this, 'efbl_display_enable_user_not_loggin'), // The name of the function responsible for rendering the option interface
413
+ 'efbl_settings_display_options', // The page on which this option will be displayed
414
+ 'efbl_general_settings_section_advanced', // The name of the section to which this field belongs
415
+ array( // The array of arguments to pass to the callback. In this case, just a description.
416
+ __( 'Shows the PopUp if the user is not logged in to your site (Above option will be ignored if checked).', 'easy-facebook-likebox' ),
417
+ )
418
+ );
419
+
420
+ add_settings_field(
421
+ 'efblp_enabe_do_not_show_again', // ID used to identify the field throughout the theme
422
+ __( 'Close button act as never show again', 'easy-facebook-likebox' ), // The label to the left of the option interface element
423
+ array($this, 'efbl_do_not_show_again'), // The name of the function responsible for rendering the option interface
424
+ 'efbl_settings_display_options', // The page on which this option will be displayed
425
+ 'efbl_general_settings_section_advanced', // The name of the section to which this field belongs
426
+ array( // The array of arguments to pass to the callback. In this case, just a description.
427
+ __( 'PopUp will not appear when visitor will close it once.', 'easy-facebook-likebox' ),
428
+ )
429
+ );
430
+
431
+ add_settings_field(
432
+ 'efblp_enabe_do_not_show_on_mobile', // ID used to identify the field throughout the theme
433
+ __( 'Disable on mobile', 'easy-facebook-likebox' ), // The label to the left of the option interface element
434
+ array($this, 'efbl_do_not_show_on_mobile'), // The name of the function responsible for rendering the option interface
435
+ 'efbl_settings_display_options', // The page on which this option will be displayed
436
+ 'efbl_general_settings_section_advanced', // The name of the section to which this field belongs
437
+ array( // The array of arguments to pass to the callback. In this case, just a description.
438
+ __( 'Do not display on mobile devices', 'easy-facebook-likebox' ),
439
+ )
440
+ );
441
+
442
+
443
 
444
  // Finally, we register the fields with WordPress
445
  register_setting(
446
  'efbl_settings_display_options',
447
  'efbl_settings_display_options'
448
  );
449
+
 
 
 
 
450
  /*echo I_HAVE_SUPPORTED_THE_EFBL_PLUGIN;
451
  exit; */
452
  }
453
 
454
  function efbl_options_callback(){
 
455
  //Do nothing for now
 
456
  }
457
+
458
 
459
  //Enable pupup
460
  function efbl_display_enable_check(){
461
 
462
  $options = get_option( 'efbl_settings_display_options' );
463
+ $options = wp_parse_args($options, $this->efbl_default_options());
464
 
465
  $html = '<input type="checkbox" id="efbl_enable_popup" name="efbl_settings_display_options[efbl_enable_popup]" value="1"' . checked( 1, $options['efbl_enable_popup'], false ) . '/>';
466
  $html .= '&nbsp;';
470
  }
471
 
472
  //Interval
473
+ function efbl_display_popup_interval($args) {
474
+
475
  $options = get_option( 'efbl_settings_display_options' );
476
+ $options = wp_parse_args($options, $this->efbl_default_options());
477
 
478
  // Render the output
479
  echo '<input type="text" id="efbl_popup_interval" name="efbl_settings_display_options[efbl_popup_interval]" value="' . $options['efbl_popup_interval'] . '" />';
480
 
481
+ echo '&nbsp;<label for="efbl_popup_interval">'.$args[0].'</label>';
482
 
483
  } // end sandbox_input_element_callback
484
 
485
  //Width
486
+ function efbl_display_popup_width($args) {
487
 
488
  $options = get_option( 'efbl_settings_display_options' );
489
+ $options = wp_parse_args($options, $this->efbl_default_options());
490
 
491
  // Render the output
492
  echo '<input type="text" id="efbl_popup_width" name="efbl_settings_display_options[efbl_popup_width]" value="' . $options['efbl_popup_width'] . '" />';
493
 
494
+ echo '&nbsp;<label for="efbl_popup_width">'.$args[0].'</label>';
495
 
496
  } // end sandbox_input_element_callback
497
 
498
  //Height
499
+ function efbl_display_popup_height($args) {
500
 
501
  $options = get_option( 'efbl_settings_display_options' );
502
+ $options = wp_parse_args($options, $this->efbl_default_options());
503
 
504
  // Render the output
505
  echo '<input type="text" id="efbl_popup_height" name="efbl_settings_display_options[efbl_popup_height]" value="' . $options['efbl_popup_height'] . '" />';
506
 
507
+ echo '&nbsp;<label for="efbl_popup_height">'.$args[0].'</label>';
508
 
509
  } // end sandbox_input_element_callback
510
 
511
 
512
+ function efbl_display_popup_shortcode($args){
513
 
514
  $options = get_option( 'efbl_settings_display_options' );
515
+ $options = wp_parse_args($options, $this->efbl_default_options());
516
  /*echo "<pre>";
517
  print_r($options);
518
+ echo "</pre>"; */
519
+
520
+ $html = '<textarea id="efbl_popup_shortcode" name="efbl_settings_display_options[efbl_popup_shortcode]" rows="5" cols="50" placeholder="'.$description[0].'">' . $options['efbl_popup_shortcode'] . '</textarea>';
521
+
522
+ $html .= '<br /> '.$args[0].'&nbsp;';
523
+
524
+ echo $html;
525
+
526
+ }
527
+
528
+ //Enable when uers logged pupup
529
+ function efbl_display_on_home_only($args){
530
+
531
+ $options = get_option( 'efbl_settings_display_options' );
532
+
533
+ $html = '<input type="checkbox" id="efbl_enabe_home_only" name="efbl_settings_display_options[efbl_enabe_if_home]" value="1"' . checked( 1, $options['efbl_enabe_if_home'], false ) . '/>';
534
+ $html .= '&nbsp;&nbsp;';
535
+ $html .= '<i>'.$args[0].'</i>';
536
+ $html .= '&nbsp;';
537
+ echo $html;
538
+
539
+ }
540
+
541
+ //Enable when uers logged pupup
542
+ function efbl_display_enable_user_loggin($args){
543
+
544
+ $options = get_option( 'efbl_settings_display_options' );
545
+
546
+ $html = '<input type="checkbox" id="efbl_enabe_if_login" name="efbl_settings_display_options[efbl_enabe_if_login]" value="1"' . checked( 1, $options['efbl_enabe_if_login'], false ) . '/>';
547
+ $html .= '&nbsp;&nbsp;';
548
+ $html .= '<i>'.$args[0].'</i>';
549
+ $html .= '&nbsp;';
550
+ echo $html;
551
+
552
+ }
553
+
554
+ //Enable when uers not logged in
555
+ function efbl_display_enable_user_not_loggin($args){
556
+
557
+ $options = get_option( 'efbl_settings_display_options' );
558
+
559
+ $html = '<input type="checkbox" id="efbl_enabe_if_not_login" name="efbl_settings_display_options[efbl_enabe_if_not_login]" value="1"' . checked( 1, $options['efbl_enabe_if_not_login'], false ) . '/>';
560
+
561
+ $html .= '&nbsp;&nbsp;';
562
+
563
+ $html .= '<i>'.$args[0].'</i>';
564
 
565
+ $html .= '&nbsp;';
 
566
 
567
  echo $html;
568
 
569
  }
570
 
571
+ //Enable when uers not logged in
572
+ function efbl_do_not_show_again($args){
573
+
574
+ $options = get_option( 'efbl_settings_display_options' );
575
+
576
+ $html = '<input type="checkbox" id="efbl_do_not_show_again" name="efbl_settings_display_options[efbl_do_not_show_again]" value="1"' . checked( 1, $options['efbl_do_not_show_again'], false ) . '/>';
577
+
578
+ $html .= '&nbsp;&nbsp;';
579
+ $html .= '<i>'.$args[0].'</i>';
580
+ $html .= '&nbsp;';
581
+ echo $html;
582
+
583
+ }
584
 
585
+ //Hide on mobile
586
+ function efbl_do_not_show_on_mobile($args){
587
+
588
+ $options = get_option( 'efbl_settings_display_options' );
589
+
590
+ $html = '<input type="checkbox" id="efbl_do_not_show_again" name="efbl_settings_display_options[efbl_do_not_show_on_mobile]" value="1"' . checked( 1, $options['efbl_do_not_show_on_mobile'], false ) . '/>';
591
+
592
+ $html .= '&nbsp;&nbsp;';
593
+
594
+ $html .= '<i>'.$args[0].'</i>';
595
+
596
+ $html .= '&nbsp;';
597
+
598
+ echo $html;
599
+
600
+ }
601
  }
admin/views/admin.php CHANGED
@@ -11,24 +11,33 @@
11
  * @link http://example.com
12
  * @copyright 2014 Your Name or Company Name
13
  */
14
- ?>
15
-
16
-
17
-
18
-
19
  <div class="wrap efbl" id="dashboard-widgets">
20
- <a target="_blank" class="go_pro_ad" href="http://jwebsol.com/product/easy-facebook-like-box-pro/" title="GoPro">GoPro</a>
21
- <h2>&nbsp;</h2>
 
 
 
 
 
 
 
 
 
22
  <form method="post" action="<?php echo admin_url('options.php')?>">
23
 
24
-
25
 
26
  <div id="normal-sortables" class="meta-box-sortables ui-sortable">
27
 
28
- <?php do_meta_boxes($this->plugin_screen_hook_suffix, 'normal', $data); ?>
29
 
30
 
31
  </div>
 
 
 
 
32
 
33
 
34
 
@@ -37,11 +46,14 @@
37
  <?php do_meta_boxes($this->plugin_screen_hook_suffix, 'additional', $data); ?>
38
  </div>
39
  <div class="clearfix"></div>
 
40
 
 
41
  <div id="normal-sortables" class="meta-box-sortables ui-sortable">
42
  <?php do_meta_boxes($this->plugin_screen_hook_suffix, 'side', $data); ?>
43
 
44
  </div>
 
45
 
46
  </form>
47
  </div>
11
  * @link http://example.com
12
  * @copyright 2014 Your Name or Company Name
13
  */
14
+ ?>
 
 
 
 
15
  <div class="wrap efbl" id="dashboard-widgets">
16
+ <h2 class="nav-tab-wrapper">
17
+ <?php $active_tab = isset( $_GET[ 'tab' ] ) ? $_GET[ 'tab' ] : 'general';?>
18
+
19
+ <a href="<?php echo admin_url('admin.php')?>?page=easy-facebook-likebox&tab=general" class="nav-tab <?php echo $active_tab == 'general' ? 'nav-tab-active' : ''; ?>"><?php _e('General', 'easy-facebook-likebox'); ?></a>
20
+ <a href="<?php echo admin_url('admin.php')?>?page=easy-facebook-likebox&tab=autopopup" class="nav-tab <?php echo $active_tab == 'autopopup' ? 'nav-tab-active' : ''; ?>"><?php _e('Auto PopUp', 'easy-facebook-likebox'); ?></a>
21
+ <a href="<?php echo admin_url('admin.php')?>?page=easy-facebook-likebox&tab=supportupdates" class="nav-tab <?php echo $active_tab == 'supportupdates' ? 'nav-tab-active' : ''; ?>"><?php _e('Support and Updates', 'easy-facebook-likebox'); ?></a>
22
+
23
+ </h2><br /><br />
24
+
25
+
26
+
27
  <form method="post" action="<?php echo admin_url('options.php')?>">
28
 
29
+ <?php if( $active_tab == 'general' ) {?>
30
 
31
  <div id="normal-sortables" class="meta-box-sortables ui-sortable">
32
 
33
+ <?php do_meta_boxes($this->plugin_screen_hook_suffix, 'normal', $data); ?>
34
 
35
 
36
  </div>
37
+
38
+ <?php }//End general tab?>
39
+
40
+ <?php if( $active_tab == 'autopopup' ) { //Start Post Layout tab ?>
41
 
42
 
43
 
46
  <?php do_meta_boxes($this->plugin_screen_hook_suffix, 'additional', $data); ?>
47
  </div>
48
  <div class="clearfix"></div>
49
+ <?php } //End ?>
50
 
51
+ <?php if( $active_tab == 'supportupdates' ) { //Start Post Layout tab ?>
52
  <div id="normal-sortables" class="meta-box-sortables ui-sortable">
53
  <?php do_meta_boxes($this->plugin_screen_hook_suffix, 'side', $data); ?>
54
 
55
  </div>
56
+ <?php }?>
57
 
58
  </form>
59
  </div>
admin/views/feed-settings.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Represents the view for the administration of popup settings.
4
+ *
5
+ * This includes the header, options, and other information that should provide
6
+ * The User Interface to the end user.
7
+ *
8
+ * @package Plugin_Name
9
+ * @author Your Name <email@example.com>
10
+ * @license GPL-2.0+
11
+ * @link http://example.com
12
+ * @copyright 2014 Your Name or Company Name
13
+ */
14
+
15
+ settings_fields( 'efbl_feed_options' );
16
+ do_settings_sections( 'efbl_feed_options' );
17
+
18
+ //settings_fields( 'sandbox_theme_display_options' );
19
+ //do_settings_sections( 'sandbox_theme_display_options' );
20
+ ?>
21
+ <div class="button_container">
22
+ <?php submit_button(); ?></div>
admin/views/instructinos.php CHANGED
@@ -12,17 +12,26 @@
12
  * @copyright 2014 Your Name or Company Name
13
  */
14
 
15
- ?>
16
- <p><?php _e('Thanks for installing the plugin.', 'easy-facebook-likebox');?></p>
 
 
 
 
 
 
 
 
 
 
17
 
18
- <h3><?php _e('Widget or shortcode usage instructions.', 'easy-facebook-likebox');?></h3>
19
 
20
- <p><?php _e('Here are easy steps to use this plugin.', 'easy-facebook-likebox');?>
21
  <ol>
22
  <li> <?php _e('Add the "Easy Facebook Likebox" widget in sidebar to show the like box in your website sidebar', 'easy-facebook-likebox');?></li>
23
- <li> <?php _e('Add widget in sidebar and generate shortcode by saving the widgets optiosn to show likebox somewhere else on your website.', 'easy-facebook-likebox');?> </li>
24
- <li> <?php _e('You can also directly add below shortcode (without quotes) in post/page editor and change default values with your custom one according to your needs and requirments.
25
- "[efb_likebox fanpage_url="YOUR_FB_FANPAGE_NAME_OR_ID" fb_appid="" box_width="300" box_height="" colorscheme="light" show_faces="1" show_header="1" show_stream="0" show_border="1" ]"', 'easy-facebook-likebox');?>
26
  </li>
27
  </ol>
28
  </p>
@@ -37,5 +46,6 @@
37
  </li>
38
  </ol>
39
  </p>
40
-
 
41
  <p><?php _e('I am constantly working on the betterment and improvement of this plugin so stay tuned.', 'easy-facebook-likebox');?></p><strong></strong>
12
  * @copyright 2014 Your Name or Company Name
13
  */
14
 
15
+ ?>
16
+ <h3><?php _e('Custom facebook feed widget or shortcode usage instructions.', 'easy-facebook-likebox');?></h3>
17
+
18
+ <p><?php _e('Here are easy steps to use this feature.', 'easy-facebook-likebox');?>
19
+ <ol>
20
+ <li> <?php _e('Add the "Easy Facebook Feed" widget in sidebar to show the feed into your website sidebar', 'easy-facebook-likebox');?></li>
21
+ <li> <?php _e('Add "Easy Facebook Feed" widget in sidebar and generate shortcode by saving the widgets option to show custom facebook feed in posts, pages or custom posts.', 'easy-facebook-likebox');?> </li>
22
+ <li> <?php _e('You can also directly add below shortcode (without quotes) in post/page editor and change default values with your custom one according to your needs and requirments. "[efb_feed fanpage_url="YOUR_FB_FANPAGE_NAME_OR_URL" layout="CHOSE_LAYOUT(thumbnail/half/full)" image_size="CHOSE_IMAGE_SIZE(thumbnail/album/normal)" type="CHOSE_TYPE(page/group)" post_by="DISPLAY_POSTS_FROM(me/others/onlyothers)" show_logo="SHOW_HIDE_PAGE_LOGO(1/0)" show_image="SHOW_HIDE_IMAGES(1/0)" show_like_box="SHOW_HIDE_LIKEBOX(1/0)" post_number="NUMBER_OF_POST_DISPALAY(10)" post_limit="NUMBER_OF_POST_RETRIEVE(10)" cache_unit="NUMMBER_OF_MINUTES_HOURS_DAYS(1)" cache_duration="SELECT_CACHE_DURATION(minutes/hours/days)" ]" ', 'easy-facebook-likebox');?>
23
+ </li>
24
+ </ol>
25
+ </p>
26
+
27
 
28
+ <h3><?php _e('Like box widget or shortcode usage instructions.', 'easy-facebook-likebox');?></h3>
29
 
30
+ <p><?php _e('Here are easy steps to use this fature.', 'easy-facebook-likebox');?>
31
  <ol>
32
  <li> <?php _e('Add the "Easy Facebook Likebox" widget in sidebar to show the like box in your website sidebar', 'easy-facebook-likebox');?></li>
33
+ <li> <?php _e('Add widget in sidebar and generate shortcode by saving the widgets option to show likebox somewhere else on your website.', 'easy-facebook-likebox');?> </li>
34
+ <li> <?php _e('You can also directly add below shortcode (without quotes) in post/page editor and change default values with your custom one according to your needs and requirments. "[efb_likebox fanpage_url="YOUR_FB_FANPAGE_NAME_OR_URL" fb_appid="OPTIONAL_SEE_FAQ" box_width="WIDTH_OF_BOX_IN_PIXELS" box_height=HEIGHT_OF_BOX_IN_PIXELS"" responsive="1" show_faces="SHOW_CONNECTIONS(1/0)" show_stream="SHOW_STREAM_POSTS(1/0)" hide_cover="HIDE_COVER_PHOTO(1/0)" small_header="USE_SMALL_HEADER(1/0)" hide_cta="OPTONAL_HIDE_CUSTOM_CTA_BUTTON(1/0)" locale="NAME_OF_YOUR_LANGUAGE_LOCAE(default en_US)"]"', 'easy-facebook-likebox');?>
 
35
  </li>
36
  </ol>
37
  </p>
46
  </li>
47
  </ol>
48
  </p>
49
+
50
+
51
  <p><?php _e('I am constantly working on the betterment and improvement of this plugin so stay tuned.', 'easy-facebook-likebox');?></p><strong></strong>
admin/views/popup-settings-advanced.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Represents the view for the administration of popup settings.
4
+ *
5
+ * This includes the header, options, and other information that should provide
6
+ * The User Interface to the end user.
7
+ *
8
+ * @package Plugin_Name
9
+ * @author Your Name <email@example.com>
10
+ * @license GPL-2.0+
11
+ * @link http://example.com
12
+ * @copyright 2014 Your Name or Company Name
13
+ */
14
+
15
+ settings_fields( 'efbl_settings_display_advanced' );
16
+ do_settings_sections( 'efbl_settings_display_advanced' );
17
+
18
+ ?>
19
+ <div class="button_container">
20
+ <?php submit_button(); ?></div>
admin/views/popup-settings.php CHANGED
@@ -19,7 +19,4 @@ do_settings_sections( 'efbl_settings_display_options' );
19
  //do_settings_sections( 'sandbox_theme_display_options' );
20
  ?>
21
  <div class="button_container">
22
- <?php
23
- submit_button();
24
- ?></div>
25
- <h2 class="promotional_text">Want more control over PopUp? Try our premimum version! <a target="_blank" class="" href="https://jwebsol.com/product/easy-facebook-like-box-pro/" title="GoPro">Click here for pricing & details</a></h2>
19
  //do_settings_sections( 'sandbox_theme_display_options' );
20
  ?>
21
  <div class="button_container">
22
+ <?php submit_button(); ?></div>
 
 
 
admin/views/support-us.php CHANGED
@@ -1,29 +1,24 @@
1
- <?php
2
- /**
3
- * Represents the view for the administration of support us section.
4
- *
5
- * This includes the header, options, and other information that should provide
6
- * The User Interface to the end user.
7
- *
8
- * @package Plugin_Name
9
- * @author Your Name <email@example.com>
10
- * @license GPL-2.0+
11
- * @link http://example.com
12
- * @copyright 2014 Your Name or Company Name
13
- */
14
-
15
- ?>
16
- <div class="" style="width:50%; display: inline-block;">
17
- <div class="fb-like-box" data-href="https://www.facebook.com/jwebsol" data-colorscheme="light" data-show-faces="true" data-header="false" data-stream="false" data-show-border="true"></div>
18
- <div id="fb-root"></div>
19
- <script>(function(d, s, id) {
20
- var js, fjs = d.getElementsByTagName(s)[0];
21
- if (d.getElementById(id)) return;
22
- js = d.createElement(s); js.id = id;
23
- js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=517129121754984&version=v2.0";
24
- fjs.parentNode.insertBefore(js, fjs);
25
- }(document, 'script', 'facebook-jssdk'));</script>
26
- </div>
27
- <div class="" style="width:49%; display: inline;">
28
- <a target="_blank" class="buy_button" href="https://jwebsol.com/product/easy-facebook-like-box-pro/" title="GoPro">Buy Pro Versio of this plugin</a>
29
- </div>
1
+ <?php
2
+ /**
3
+ * Represents the view for the administration of support us section.
4
+ *
5
+ * This includes the header, options, and other information that should provide
6
+ * The User Interface to the end user.
7
+ *
8
+ * @package Plugin_Name
9
+ * @author Your Name <email@example.com>
10
+ * @license GPL-2.0+
11
+ * @link http://example.com
12
+ * @copyright 2014 Your Name or Company Name
13
+ */
14
+
15
+ ?>
16
+ <div class="fb-like-box" data-href="https://www.facebook.com/jwebsol" data-colorscheme="light" data-show-faces="true" data-header="false" data-stream="false" data-show-border="true"></div>
17
+ <div id="fb-root"></div>
18
+ <script>(function(d, s, id) {
19
+ var js, fjs = d.getElementsByTagName(s)[0];
20
+ if (d.getElementById(id)) return;
21
+ js = d.createElement(s); js.id = id;
22
+ js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=517129121754984&version=v2.0";
23
+ fjs.parentNode.insertBefore(js, fjs);
24
+ }(document, 'script', 'facebook-jssdk'));</script>
 
 
 
 
 
assets/PluginIcon - Copy.png ADDED
Binary file
assets/PluginIcon.png ADDED
Binary file
assets/banner-772x250.jpg ADDED
Binary file
assets/banner-772x250.png DELETED
Binary file
easy-facebook-likebox.php CHANGED
@@ -1,14 +1,12 @@
1
  <?php
2
  /**
3
- * Plugin Name: Easy Facebook Likebox
4
  * Plugin URI: httt://wordpress.org/plugins/easy-facebook-likebox
5
  * Description: Easy Facebook like box WordPress plugin allows you to easly display facebook like box fan page on your website using either widget or shortcode to increase facbook fan page likes. You can use the shortcode generated after saving the facebook like box widget. Its completely customizable with lots of optional settings. Its also responsive facebook like box at the same time.
6
- * Version: 3.1
7
  * Author: Sajid Javed
8
  * Author URI: http://jwebsol.com
9
  * Text Domain: easy-facebook-likebox
10
- * License: GPL-2.0+
11
- * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12
  * Domain Path: /languages
13
  */
14
 
@@ -16,17 +14,20 @@
16
  if ( ! defined( 'WPINC' ) ) {
17
  die;
18
  }
 
19
 
20
  /*----------------------------------------------------------------------------*
21
  * Public-Facing Functionality
22
  *----------------------------------------------------------------------------*/
23
 
24
  /*
25
- * @TODO:
26
  *
27
- * - replace `class-plugin-name.php` with the name of the plugin's class file
28
  *
29
  */
 
 
30
  require_once( plugin_dir_path( __FILE__ ) . 'public/easy-facebook-likebox.php' );
31
 
32
  /*
@@ -85,9 +86,14 @@ if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
85
  * Including widget class.
86
  */
87
 
88
- require_once( plugin_dir_path( __FILE__ ) . 'includes/easy-facebook-likebox-widget.php' );
 
 
 
89
  // register Foo_Widget widget
90
  function register_fblx_widget() {
91
- register_widget( 'Easy_Facebook_Like_Box_Widget' );
 
 
92
  }
93
  add_action( 'widgets_init', 'register_fblx_widget' );
1
  <?php
2
  /**
3
+ * Plugin Name: Easy Facebook Likebox Pro
4
  * Plugin URI: httt://wordpress.org/plugins/easy-facebook-likebox
5
  * Description: Easy Facebook like box WordPress plugin allows you to easly display facebook like box fan page on your website using either widget or shortcode to increase facbook fan page likes. You can use the shortcode generated after saving the facebook like box widget. Its completely customizable with lots of optional settings. Its also responsive facebook like box at the same time.
6
+ * Version: 4.0.0
7
  * Author: Sajid Javed
8
  * Author URI: http://jwebsol.com
9
  * Text Domain: easy-facebook-likebox
 
 
10
  * Domain Path: /languages
11
  */
12
 
14
  if ( ! defined( 'WPINC' ) ) {
15
  die;
16
  }
17
+ error_reporting(0);
18
 
19
  /*----------------------------------------------------------------------------*
20
  * Public-Facing Functionality
21
  *----------------------------------------------------------------------------*/
22
 
23
  /*
24
+ * @EasyFacebookLikeBox:
25
  *
26
+ * - Include class for public `easy-facebook-likebox.php`
27
  *
28
  */
29
+
30
+ require_once( plugin_dir_path( __FILE__ ) . 'public/includes/core-functions.php' );
31
  require_once( plugin_dir_path( __FILE__ ) . 'public/easy-facebook-likebox.php' );
32
 
33
  /*
86
  * Including widget class.
87
  */
88
 
89
+ //require_once( plugin_dir_path( __FILE__ ) . 'includes/easy-facebook-likebox-widget.php' );
90
+ require_once( plugin_dir_path( __FILE__ ) . 'includes/easy-custom-facebook-feed-widget.php' );
91
+ require_once( plugin_dir_path( __FILE__ ) . 'includes/easy-facebook-page-plugin-widget.php' );
92
+
93
  // register Foo_Widget widget
94
  function register_fblx_widget() {
95
+ //register_widget( 'Easy_Facebook_Like_Box_Widget' );
96
+ register_widget( 'Easy_Custom_Facebook_Feed_Widget' );
97
+ register_widget( 'Easy_Facebook_Page_Plugin_Widget' );
98
  }
99
  add_action( 'widgets_init', 'register_fblx_widget' );
includes/easy-custom-facebook-feed-widget.php ADDED
@@ -0,0 +1,306 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //ini_set('display_errors','Off');
3
+ class Easy_Custom_Facebook_Feed_Widget extends WP_Widget {
4
+
5
+ /**
6
+ * Register widget with WordPress.
7
+ */
8
+ function __construct() {
9
+ parent::__construct(
10
+ 'easy_facebook_feed', // Base ID
11
+ __('Easy Facebook Feed', 'easy-facebook-likebox'), // Name
12
+ array( 'description' => __( 'Drag and drop this widget for facebook feed integration', 'easy-facebook-likebox' ), ) // Args
13
+ );
14
+ }
15
+
16
+ /**
17
+ * Front-end display of widget.
18
+ *
19
+ * @see WP_Widget::widget()
20
+ *
21
+ * @param array $args Widget arguments.
22
+ * @param array $instance Saved values from database.
23
+ */
24
+ public function widget( $args, $instance ) {
25
+ $title = apply_filters( 'widget_title', $instance['title'] );
26
+
27
+ echo $args['before_widget'];
28
+ if ( ! empty( $title ) )
29
+ echo $args['before_title'] . $title . $args['after_title'];
30
+
31
+ echo Easy_Facebook_Likebox::render_fbfeed_box($instance);
32
+
33
+ echo $args['after_widget'];
34
+ }
35
+
36
+ /**
37
+ * Back-end widget form.
38
+ *
39
+ * @see WP_Widget::form()
40
+ *
41
+ * @param array $instance Previously saved values from database.
42
+ */
43
+ public function form( $instance ) {
44
+
45
+
46
+ $locales = array( 'af_ZA' => 'Afrikaans',
47
+ 'ar_AR' => 'Arabic',
48
+ 'az_AZ' => 'Azeri',
49
+ 'be_BY' => 'Belarusian',
50
+ 'bg_BG' => 'Bulgarian',
51
+ 'bn_IN' => 'Bengali',
52
+ 'bs_BA' => 'Bosnian',
53
+ 'ca_ES' => 'Catalan',
54
+ 'cs_CZ' => 'Czech',
55
+ 'cy_GB' => 'Welsh',
56
+ 'da_DK' => 'Danish',
57
+ 'de_DE' => 'German',
58
+ 'el_GR' => 'Greek',
59
+ 'en_US' => 'English (US)',
60
+ 'en_GB' => 'English (UK)',
61
+ 'eo_EO' => 'Esperanto',
62
+ 'es_ES' => 'Spanish (Spain)',
63
+ 'es_LA' => 'Spanish',
64
+ 'et_EE' => 'Estonian',
65
+ 'eu_ES' => 'Basque',
66
+ 'fa_IR' => 'Persian',
67
+ 'fb_LT' => 'Leet Speak',
68
+ 'fi_FI' => 'Finnish',
69
+ 'fo_FO' => 'Faroese',
70
+ 'fr_FR' => 'French (France)',
71
+ 'fr_CA' => 'French (Canada)',
72
+ 'fy_NL' => 'NETHERLANDS (NL)',
73
+ 'ga_IE' => 'Irish',
74
+ 'gl_ES' => 'Galician',
75
+ 'hi_IN' => 'Hindi',
76
+ 'hr_HR' => 'Croatian',
77
+ 'hu_HU' => 'Hungarian',
78
+ 'hy_AM' => 'Armenian',
79
+ 'id_ID' => 'Indonesian',
80
+ 'is_IS' => 'Icelandic',
81
+ 'it_IT' => 'Italian',
82
+ 'ja_JP' => 'Japanese',
83
+ 'ka_GE' => 'Georgian',
84
+ 'km_KH' => 'Khmer',
85
+ 'ko_KR' => 'Korean',
86
+ 'ku_TR' => 'Kurdish',
87
+ 'la_VA' => 'Latin',
88
+ 'lt_LT' => 'Lithuanian',
89
+ 'lv_LV' => 'Latvian',
90
+ 'mk_MK' => 'Macedonian',
91
+ 'ml_IN' => 'Malayalam',
92
+ 'ms_MY' => 'Malay',
93
+ 'nb_NO' => 'Norwegian (bokmal)',
94
+ 'ne_NP' => 'Nepali',
95
+ 'nl_NL' => 'Dutch',
96
+ 'nn_NO' => 'Norwegian (nynorsk)',
97
+ 'pa_IN' => 'Punjabi',
98
+ 'pl_PL' => 'Polish',
99
+ 'ps_AF' => 'Pashto',
100
+ 'pt_PT' => 'Portuguese (Portugal)',
101
+ 'pt_BR' => 'Portuguese (Brazil)',
102
+ 'ro_RO' => 'Romanian',
103
+ 'ru_RU' => 'Russian',
104
+ 'sk_SK' => 'Slovak',
105
+ 'sl_SI' => 'Slovenian',
106
+ 'sq_AL' => 'Albanian',
107
+ 'sr_RS' => 'Serbian',
108
+ 'sv_SE' => 'Swedish',
109
+ 'sw_KE' => 'Swahili',
110
+ 'ta_IN' => 'Tamil',
111
+ 'te_IN' => 'Telugu',
112
+ 'th_TH' => 'Thai',
113
+ 'tl_PH' => 'Filipino',
114
+ 'tr_TR' => 'Turkish',
115
+ 'uk_UA' => 'Ukrainian',
116
+ 'ur_PK' => 'Urdu',
117
+ 'vi_VN' => 'Vietnamese',
118
+ 'zh_CN' => 'Simplified Chinese (China)',
119
+ 'zh_HK' => 'Traditional Chinese (Hong Kong)',
120
+ 'zh_TW' => 'Traditional Chinese (Taiwan)',
121
+ );
122
+
123
+ $defaults = array(
124
+ 'title' => '',
125
+ 'fb_appid' => '',
126
+ 'fanpage_url' => 'jwebsol',
127
+ 'layout' => 'half',
128
+ 'image_size' => 'normal',
129
+ 'type' => 'page',
130
+ 'post_by' => 'me',
131
+ 'post_number' => 10,
132
+ 'post_limit' => 10,
133
+ 'show_logo' => 1,
134
+ 'show_image' => 1,
135
+ 'show_like_box' => 1,
136
+ 'cache_unit' => 1,
137
+ 'cache_duration' => 'hours',
138
+ 'show_like_box' => 1,
139
+ 'locale' => 'en_US',
140
+ 'locale_other'=> ''
141
+ );
142
+ /*echo "<pre>";
143
+ print_r($defaults);
144
+ echo "</pre>";*/
145
+
146
+ $instance = wp_parse_args( (array) $instance, $defaults );
147
+
148
+ /*echo "<pre>";
149
+ print_r($instance);
150
+ echo "</pre>";*/
151
+
152
+ extract($instance, EXTR_SKIP);?>
153
+ <div class="efbl_widget">
154
+
155
+ <p>
156
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'easy-facebook-likebox' ); ?></label>
157
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
158
+ </p>
159
+
160
+ <p>
161
+ <label for="<?php echo $this->get_field_id( 'fanpage_url' ); ?>"><?php _e( 'Fanpage ID:', 'easy-facebook-likebox' ); ?></label>
162
+ <input class="widefat" id="<?php echo $this->get_field_id( 'fanpage_url' ); ?>" name="<?php echo $this->get_field_name( 'fanpage_url' ); ?>" type="text" value="<?php echo esc_attr( $fanpage_url ); ?>"><br />
163
+ <i>E.g jwebsol or 123456789</i>
164
+ </p>
165
+
166
+ <p class="widget-half">
167
+ <label for="<?php echo $this->get_field_id( 'layout' ); ?>"><?php _e( 'Posts Layout:', 'easy-facebook-likebox' ); ?></label>
168
+ <select id="<?php echo $this->get_field_id( 'layout' ); ?>" name="<?php echo $this->get_field_name( 'layout' ); ?>">
169
+ <option <?php selected( $layout, 'thumbnail' , $echo = true); ?> value="thumbnail" ><?php _e( 'Thumbnail', 'easy-facebook-likebox' ); ?></option>
170
+ <option <?php selected( $layout, 'halfwidth', $echo = true); ?> value="half" ><?php _e( 'Half Width', 'easy-facebook-likebox' ); ?></option>
171
+ <option <?php selected( $layout, 'fullwidth', $echo = true); ?> value="fullwidth"><?php _e( 'Full Width', 'easy-facebook-likebox' ); ?></option>
172
+ </select><br />
173
+ </p>
174
+
175
+ <p class="widget-half">
176
+ <label for="<?php echo $this->get_field_id( 'image_size' ); ?>"><?php _e( 'Image size:', 'easy-facebook-likebox' ); ?></label>
177
+ <select id="<?php echo $this->get_field_id( 'image_size' ); ?>" name="<?php echo $this->get_field_name( 'image_size' ); ?>">
178
+ <option <?php selected( $image_size, 'thumbnail' , $echo = true); ?> value="thumbnail" ><?php _e( 'Thumbnail', 'easy-facebook-likebox' ); ?></option>
179
+ <option <?php selected( $image_size, 'album', $echo = true); ?> value="album" ><?php _e( 'Album', 'easy-facebook-likebox' ); ?></option>
180
+ <option <?php selected( $image_size, 'normal', $echo = true); ?> value="normal"><?php _e( 'Normal', 'easy-facebook-likebox' ); ?></option>
181
+ </select><br />
182
+ </p>
183
+
184
+ <p class="widget-half efbl_last">
185
+ <label for="<?php echo $this->get_field_id( 'type' ); ?>"><?php _e( 'Page type:', 'easy-facebook-likebox' ); ?></label>
186
+ <select id="<?php echo $this->get_field_id( 'type' ); ?>" name="<?php echo $this->get_field_name( 'type' ); ?>">
187
+ <option <?php selected( $type, 'page' , $echo = true); ?> value="page"><?php _e( 'Page', 'easy-facebook-likebox' ); ?></option>
188
+ <option <?php selected( $type, 'group', $echo = true); ?> value="group"><?php _e( 'Group', 'easy-facebook-likebox' ); ?></option>
189
+ </select><br />
190
+ </p>
191
+
192
+
193
+ <p class="widget-half efbl_last">
194
+ <label for="<?php echo $this->get_field_id( 'post_by' ); ?>"><?php _e( 'Posts by:', 'easy-facebook-likebox' ); ?></label>
195
+ <select class="widefat" id="<?php echo $this->get_field_id( 'post_by' ); ?>" name="<?php echo $this->get_field_name( 'post_by' ); ?>">
196
+ <option <?php selected( $post_by, 'me' , $echo = true); ?> value="me"><?php _e( 'Only the page owner (me)', 'easy-facebook-likebox' ); ?></option>
197
+ <option <?php selected( $post_by, 'others', $echo = true); ?> value="others" ><?php _e( 'Page owner + other people', 'easy-facebook-likebox' ); ?></option>
198
+ <option <?php selected( $post_by, 'onlyothers', $echo = true); ?> value="onlyothers" ><?php _e( 'Only other people', 'easy-facebook-likebox' ); ?></option>
199
+ </select>
200
+ </p>
201
+ <div class="clearfix"></div>
202
+
203
+ <p>
204
+ <label for="<?php echo $this->get_field_id( 'post_number' ); ?>"><?php _e( 'Posts to display:', 'easy-facebook-likebox' ); ?></label>
205
+ <input class="widefat" id="<?php echo $this->get_field_id( 'post_number' ); ?>" name="<?php echo $this->get_field_name( 'post_number' ); ?>" type="text" value="<?php echo esc_attr( $post_number ); ?>" size="5"><br />
206
+ <i><?php _e( 'Define how many posts you want to display in feed', 'easy-facebook-likebox' ); ?></i>
207
+ </p>
208
+
209
+ <p>
210
+ <label for="<?php echo $this->get_field_id( 'post_limit' ); ?>"><?php _e( 'Posts limit to retrieve:', 'easy-facebook-likebox' ); ?></label>
211
+ <input class="widefat" id="<?php echo $this->get_field_id( 'post_limit' ); ?>" name="<?php echo $this->get_field_name( 'post_limit' ); ?>" type="text" value="<?php echo esc_attr( $post_limit ); ?>" size="5"><br />
212
+ <i><?php _e( 'Define how many posts you want to retrieve from facebook', 'easy-facebook-likebox' ); ?></i>
213
+ </p>
214
+
215
+ <p class="widget-half">
216
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_logo' ); ?>" name="<?php echo $this->get_field_name( 'show_logo' ); ?>" value="1" <?php checked( $show_logo, 1, true ); ?> >
217
+ <label for="<?php echo $this->get_field_id( 'show_logo' ); ?>"><?php _e( 'Show page logo', 'easy-facebook-likebox' ); ?></label>
218
+
219
+ </p>
220
+
221
+ <p class="widget-half">
222
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_image' ); ?>" name="<?php echo $this->get_field_name( 'show_image' ); ?>" value="1" <?php checked( $show_image, 1 ); ?>>
223
+ <label for="<?php echo $this->get_field_id( 'show_image' ); ?>"><?php _e( 'Show image', 'easy-facebook-likebox' ); ?></label>
224
+ </p>
225
+
226
+ <p class="widget-half">
227
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_like_box' ); ?>" name="<?php echo $this->get_field_name( 'show_like_box' ); ?>" value="1" <?php checked( $show_like_box, 1 ); ?>>
228
+ <label for="<?php echo $this->get_field_id( 'show_like_box' ); ?>"><?php _e( 'Show like box', 'easy-facebook-likebox' ); ?></label>
229
+
230
+ </p>
231
+
232
+ <div class="clearfix"></div>
233
+ <p>
234
+ <label for="<?php echo $this->get_field_id( 'cache_unit' ); ?>"><?php _e( 'Check new posts after every:', 'easy-facebook-likebox' ); ?></label><br />
235
+
236
+ <input class="half_field" id="<?php echo $this->get_field_id( 'cache_unit' ); ?>" name="<?php echo $this->get_field_name( 'cache_unit' ); ?>" type="text" value="<?php echo esc_attr( $cache_unit ); ?>" size="5">
237
+ <select class="half_field" id="<?php echo $this->get_field_id( 'cache_duration' ); ?>" name="<?php echo $this->get_field_name( 'cache_duration' ); ?>">
238
+ <option <?php selected( $cache_duration, 'minutes', $echo = true); ?> value="minutes" ><?php _e( 'Minutes', 'easy-facebook-likebox' ); ?></option>
239
+ <option <?php selected( $cache_duration, 'hours' , $echo = true); ?> value="hours"><?php _e( 'Hours', 'easy-facebook-likebox' ); ?></option>
240
+ <option <?php selected( $cache_duration, 'days', $echo = true); ?> value="days" ><?php _e( 'Days', 'easy-facebook-likebox' ); ?></option>
241
+ </select><br />
242
+ <i><?php _e( 'Plugin will store the posts in database temporarily and will look for new posts after every selected time duration', 'easy-facebook-likebox' ); ?></i>
243
+ </p>
244
+
245
+ <p><?php _e( 'Use Below generated shortcode to use in pages or posts', 'easy-facebook-likebox' ); ?></p>
246
+ <?php
247
+
248
+ $fb_url = parse_url( $fanpage_url );
249
+ $fanpage_url = str_replace('/', '', $fb_url['path']);
250
+ /*echo "<pre>";
251
+ print_r( $fb_url );
252
+ echo "</pre>";*/
253
+
254
+ $show_logo = ( isset( $show_logo ) ) ? $show_logo : 0;
255
+ $show_image = ( isset( $show_image ) ) ? $show_image : 0;
256
+ $show_like_box = ( isset( $show_like_box ) ) ? $show_like_box : 0;
257
+ ?>
258
+
259
+ <p style="background:#ddd; padding:5px; "><?php echo '[efb_feed fanpage_url="'.$fanpage_url.'" layout="'.$layout.'" image_size="'.$image_size.'" type="'.$type.'" post_by="'.$post_by.'" show_logo="'.$show_logo.'" show_image="'.$show_image.'" show_like_box="'.$show_like_box.'" post_number="'.$post_number.'" post_limit="'.$post_limit.'" cache_unit="'.$cache_unit.'" cache_duration="'.$cache_duration.'" ]'?></p>
260
+ </div>
261
+ <?php
262
+ }
263
+
264
+ /**
265
+ * Sanitize widget form values as they are saved.
266
+ *
267
+ * @see WP_Widget::update()
268
+ *
269
+ * @param array $new_instance Values just sent to be saved.
270
+ * @param array $old_instance Previously saved values from database.
271
+ *
272
+ * @return array Updated safe values to be saved.
273
+ */
274
+ public function update( $new_instance, $old_instance ) {
275
+ $instance = array();
276
+
277
+ $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
278
+
279
+ $instance['fanpage_url'] = ( ! empty( $new_instance['fanpage_url'] ) ) ? strip_tags( $new_instance['fanpage_url'] ) : '';
280
+
281
+ $instance['image_size'] = ( ! empty( $new_instance['image_size'] ) ) ? strip_tags( $new_instance['image_size'] ) : '';
282
+
283
+ $instance['layout'] = ( ! empty( $new_instance['layout'] ) ) ? strip_tags( $new_instance['layout'] ) : '';
284
+
285
+ $instance['type'] = ( ! empty( $new_instance['type'] ) ) ? strip_tags( $new_instance['type'] ) : '';
286
+
287
+ $instance['post_by'] = ( ! empty( $new_instance['post_by'] ) ) ? strip_tags( $new_instance['post_by'] ) : '';
288
+ $instance['post_number'] = ( ! empty( $new_instance['post_number'] ) ) ? strip_tags( $new_instance[ 'post_number'] ) : '';
289
+
290
+ $instance['post_limit'] = ( ! empty( $new_instance['post_limit'] ) ) ? strip_tags( $new_instance[ 'post_limit'] ) : '';
291
+
292
+ $instance['show_logo'] = ( ! empty( $new_instance['show_logo'] ) ) ? strip_tags( $new_instance[ 'show_logo'] ) : '';
293
+
294
+ $instance['show_image'] = ( ! empty( $new_instance['show_image'] ) ) ? strip_tags( $new_instance['show_image'] ) : '';
295
+
296
+ $instance['show_like_box'] = ( ! empty( $new_instance['show_like_box'] ) ) ? strip_tags( $new_instance['show_like_box'] ) : '';
297
+
298
+ $instance['cache_unit'] = ( ! empty( $new_instance['cache_unit'] ) ) ? strip_tags( $new_instance['cache_unit'] ) : '';
299
+
300
+ $instance['cache_duration'] = ( ! empty( $new_instance['cache_duration'] ) ) ? strip_tags( $new_instance['cache_duration'] ) : '';
301
+
302
+ return $instance;
303
+ }
304
+
305
+ } // class Foo_Widget
306
+ ?>
includes/easy-facebook-likebox-widget.php CHANGED
@@ -1,308 +1,308 @@
1
- <?php
2
- ini_set('display_errors','Off');
3
- class Easy_Facebook_Like_Box_Widget extends WP_Widget {
4
-
5
- /**
6
- * Register widget with WordPress.
7
- */
8
- function __construct() {
9
- parent::__construct(
10
- 'easy_racebook_likebox', // Base ID
11
- __('Easy Facebook Likebox', 'easy-facebook-likebox'), // Name
12
- array( 'description' => __( 'Drag and drop this widget for facebook like box integration', 'easy-facebook-likebox' ), ) // Args
13
- );
14
- }
15
-
16
- /**
17
- * Front-end display of widget.
18
- *
19
- * @see WP_Widget::widget()
20
- *
21
- * @param array $args Widget arguments.
22
- * @param array $instance Saved values from database.
23
- */
24
- public function widget( $args, $instance ) {
25
- $title = apply_filters( 'widget_title', $instance['title'] );
26
-
27
- echo $args['before_widget'];
28
- if ( ! empty( $title ) )
29
- echo $args['before_title'] . $title . $args['after_title'];
30
-
31
- echo Easy_Facebook_Likebox::render_fb_box($instance);
32
-
33
- echo $args['after_widget'];
34
- }
35
-
36
- /**
37
- * Back-end widget form.
38
- *
39
- * @see WP_Widget::form()
40
- *
41
- * @param array $instance Previously saved values from database.
42
- */
43
- public function form( $instance ) {
44
-
45
-
46
- $locales = array( 'af_ZA' => 'Afrikaans',
47
- 'ar_AR' => 'Arabic',
48
- 'az_AZ' => 'Azeri',
49
- 'be_BY' => 'Belarusian',
50
- 'bg_BG' => 'Bulgarian',
51
- 'bn_IN' => 'Bengali',
52
- 'bs_BA' => 'Bosnian',
53
- 'ca_ES' => 'Catalan',
54
- 'cs_CZ' => 'Czech',
55
- 'cy_GB' => 'Welsh',
56
- 'da_DK' => 'Danish',
57
- 'de_DE' => 'German',
58
- 'el_GR' => 'Greek',
59
- 'en_US' => 'English (US)',
60
- 'en_GB' => 'English (UK)',
61
- 'eo_EO' => 'Esperanto',
62
- 'es_ES' => 'Spanish (Spain)',
63
- 'es_LA' => 'Spanish',
64
- 'et_EE' => 'Estonian',
65
- 'eu_ES' => 'Basque',
66
- 'fa_IR' => 'Persian',
67
- 'fb_LT' => 'Leet Speak',
68
- 'fi_FI' => 'Finnish',
69
- 'fo_FO' => 'Faroese',
70
- 'fr_FR' => 'French (France)',
71
- 'fr_CA' => 'French (Canada)',
72
- 'fy_NL' => 'NETHERLANDS (NL)',
73
- 'ga_IE' => 'Irish',
74
- 'gl_ES' => 'Galician',
75
- 'hi_IN' => 'Hindi',
76
- 'hr_HR' => 'Croatian',
77
- 'hu_HU' => 'Hungarian',
78
- 'hy_AM' => 'Armenian',
79
- 'id_ID' => 'Indonesian',
80
- 'is_IS' => 'Icelandic',
81
- 'it_IT' => 'Italian',
82
- 'ja_JP' => 'Japanese',
83
- 'ka_GE' => 'Georgian',
84
- 'km_KH' => 'Khmer',
85
- 'ko_KR' => 'Korean',
86
- 'ku_TR' => 'Kurdish',
87
- 'la_VA' => 'Latin',
88
- 'lt_LT' => 'Lithuanian',
89
- 'lv_LV' => 'Latvian',
90
- 'mk_MK' => 'Macedonian',
91
- 'ml_IN' => 'Malayalam',
92
- 'ms_MY' => 'Malay',
93
- 'nb_NO' => 'Norwegian (bokmal)',
94
- 'ne_NP' => 'Nepali',
95
- 'nl_NL' => 'Dutch',
96
- 'nn_NO' => 'Norwegian (nynorsk)',
97
- 'pa_IN' => 'Punjabi',
98
- 'pl_PL' => 'Polish',
99
- 'ps_AF' => 'Pashto',
100
- 'pt_PT' => 'Portuguese (Portugal)',
101
- 'pt_BR' => 'Portuguese (Brazil)',
102
- 'ro_RO' => 'Romanian',
103
- 'ru_RU' => 'Russian',
104
- 'sk_SK' => 'Slovak',
105
- 'sl_SI' => 'Slovenian',
106
- 'sq_AL' => 'Albanian',
107
- 'sr_RS' => 'Serbian',
108
- 'sv_SE' => 'Swedish',
109
- 'sw_KE' => 'Swahili',
110
- 'ta_IN' => 'Tamil',
111
- 'te_IN' => 'Telugu',
112
- 'th_TH' => 'Thai',
113
- 'tl_PH' => 'Filipino',
114
- 'tr_TR' => 'Turkish',
115
- 'uk_UA' => 'Ukrainian',
116
- 'ur_PK' => 'Urdu',
117
- 'vi_VN' => 'Vietnamese',
118
- 'zh_CN' => 'Simplified Chinese (China)',
119
- 'zh_HK' => 'Traditional Chinese (Hong Kong)',
120
- 'zh_TW' => 'Traditional Chinese (Taiwan)',
121
- );
122
-
123
- $defaults = array(
124
- 'title' => '',
125
- 'fb_appid' => '',
126
- 'fanpage_url' => 'https://www.facebook.com/jwebsol',
127
- 'box_width' => 250,
128
- 'box_height' => '',
129
- 'colorscheme' => 'light',
130
- 'show_faces' => 1,
131
- 'show_stream' => 0,
132
- 'show_header' => 1,
133
- 'show_border' => 1,
134
- 'responsive' => 0,
135
- 'locale' => 'en_US',
136
- 'locale_other'=> ''
137
- );
138
-
139
- $instance = wp_parse_args( (array) $instance, $defaults );
140
-
141
- extract($instance, EXTR_SKIP);
142
-
143
- ?>
144
-
145
- <p>
146
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
147
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
148
- </p>
149
-
150
- <p>
151
- <label for="<?php echo $this->get_field_id( 'fanpage_url' ); ?>"><?php _e( 'Fanpage Url:' ); ?></label>
152
- <input class="widefat" id="<?php echo $this->get_field_id( 'fanpage_url' ); ?>" name="<?php echo $this->get_field_name( 'fanpage_url' ); ?>" type="text" value="<?php echo esc_attr( $fanpage_url ); ?>"><br />
153
- <i>Full url including http://</i>
154
- </p>
155
-
156
- <p>
157
- <label for="<?php echo $this->get_field_id( 'fb_appid' ); ?>"><?php _e( 'Application ID:' ); ?></label>
158
- <input class="widefat" id="<?php echo $this->get_field_id( 'fb_appid' ); ?>" name="<?php echo $this->get_field_name( 'fb_appid' ); ?>" type="text" value="<?php echo esc_attr( $fb_appid ); ?>"><br />
159
- <i>Optional</i>
160
- </p>
161
-
162
- <p>
163
- <label for="<?php echo $this->get_field_id( 'box_width' ); ?>"><?php _e( 'Width:' ); ?></label>
164
- <input class="widefat" id="<?php echo $this->get_field_id( 'box_width' ); ?>" name="<?php echo $this->get_field_name( 'box_width' ); ?>" type="text" value="<?php echo esc_attr( $box_width ); ?>"><br />
165
- </p>
166
-
167
- <p>
168
- <label for="<?php echo $this->get_field_id( 'box_height' ); ?>"><?php _e( 'Height:' ); ?></label>
169
- <input class="widefat" id="<?php echo $this->get_field_id( 'box_height' ); ?>" name="<?php echo $this->get_field_name( 'box_height' ); ?>" type="text" value="<?php echo esc_attr( $box_height ); ?>"><br />
170
- </p>
171
-
172
-
173
- <p class="widget-half">
174
- <label for="<?php echo $this->get_field_id( 'colorscheme' ); ?>"><?php _e( 'Colorscheme:' ); ?></label>
175
- <select id="<?php echo $this->get_field_id( 'colorscheme' ); ?>" name="<?php echo $this->get_field_name( 'colorscheme' ); ?>">
176
- <option <?php selected( $colorscheme, 'light' , $echo = true); ?> value="light">light</option>
177
- <option <?php selected( $colorscheme, 'dark', $echo = true); ?> value="dark">dark</option>
178
- </select>
179
- </p>
180
-
181
- <p class="widget-half">
182
- <label for="<?php echo $this->get_field_id( 'locale' ); ?>"><?php _e( 'Locale:' ); ?></label>
183
-
184
-
185
- <select id="<?php echo $this->get_field_id( 'locale' ); ?>" name="<?php echo $this->get_field_name( 'locale' ); ?>">
186
- <?php if($locales){
187
- foreach ($locales as $key=>$value){?>
188
- <option <?php selected( $locale, $key , $echo = true); ?> value="<?php echo $key?>"><?php echo $value?></option>
189
- <?php }
190
- }?>
191
- </select>
192
- <i>Language</i>
193
- </p>
194
-
195
- <p>
196
- <label for="<?php echo $this->get_field_id( 'locale_other' ); ?>"><?php _e( 'Locale (Other):' ); ?></label>
197
- <input class="widefat" id="<?php echo $this->get_field_id( 'locale_other' ); ?>" name="<?php echo $this->get_field_name( 'locale_other' ); ?>" type="text" value="<?php echo esc_attr( $locale_other ); ?>" placeholder="en_US">
198
-
199
- <i>input locale if you can not find yours in dropdown list</i>
200
- </p>
201
-
202
- <p class="widget-half">
203
- <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'responsive' ); ?>" name="<?php echo $this->get_field_name( 'responsive' ); ?>" value="1" <?php checked( $responsive, 1 ); ?>>
204
- <label for="<?php echo $this->get_field_id( 'responsive' ); ?>">Responsive</label>
205
-
206
- </p>
207
-
208
- <p class="widget-half">
209
- <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_faces' ); ?>" name="<?php echo $this->get_field_name( 'show_faces' ); ?>" value="1" <?php checked( $show_faces, 1 ); ?>>
210
- <label for="<?php echo $this->get_field_id( 'show_faces' ); ?>">Show Faces</label>
211
-
212
- </p>
213
-
214
- <p class="widget-half">
215
- <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_stream' ); ?>" name="<?php echo $this->get_field_name( 'show_stream' ); ?>" value="1" <?php checked( $show_stream, 1 ); ?>>
216
- <label for="<?php echo $this->get_field_id( 'show_stream' ); ?>">Show Posts</label>
217
-
218
- </p>
219
-
220
- <p class="widget-half">
221
- <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_border' ); ?>" name="<?php echo $this->get_field_name( 'show_border' ); ?>" value="1" <?php checked( $show_border, 1 ); ?>>
222
- <label for="<?php echo $this->get_field_id( 'show_border' ); ?>">Show Border</label>
223
-
224
- </p>
225
-
226
- <p class="widget-half">
227
- <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_header' ); ?>" name="<?php echo $this->get_field_name( 'show_header' ); ?>" value="1" <?php checked( $show_header, 1 ); ?>>
228
- <label for="<?php echo $this->get_field_id( 'show_header' ); ?>">Show Header</label>
229
-
230
- </p>
231
-
232
- <div class="clearfix"></div>
233
-
234
- <p>Use Below shortcode to use inside pages or posts</p>
235
- <?php
236
- if( empty($show_stream) ){
237
- $show_stream = 0;
238
- }
239
-
240
- if( empty($show_faces) ){
241
- $show_faces = 0;
242
- }
243
-
244
- if( empty($show_header) ){
245
- $show_header = 0;
246
- }
247
-
248
- if( empty($show_border) ){
249
- $show_border = 0;
250
- }
251
-
252
- if( !empty($locale_other) ){
253
- $locale = $locale_other;
254
- }
255
-
256
- if( !empty($fb_appid) ){
257
- $fb_appid = 'fb_appid="'.$fb_appid.'"';
258
- }
259
-
260
- $fb_url = parse_url( $fanpage_url );
261
- $fanpage_url = str_replace('/', '', $fb_url['path']);
262
- /*echo "<pre>";
263
- print_r( $fb_url );
264
- echo "</pre>";*/
265
-
266
- $responsive = ( empty( $responsive ) ) ? strip_tags( 0 ) : $responsive;
267
-
268
- ?>
269
-
270
- <p style="background:#ddd; padding:5px; "><?php echo '[efb_likebox fanpage_url="'.$fanpage_url.'" '.$fb_appid.' box_width="'.$box_width.'" box_height="'.$box_height.'" colorscheme="'.$colorscheme.'" locale="'.$locale.'" responsive="'.$responsive.'" show_faces="'.$show_faces.'" show_header="'.$show_header.'" show_stream="'.$show_stream.'" show_border="'.$show_border.'" ]'?></p>
271
-
272
- <?php
273
- }
274
-
275
- /**
276
- * Sanitize widget form values as they are saved.
277
- *
278
- * @see WP_Widget::update()
279
- *
280
- * @param array $new_instance Values just sent to be saved.
281
- * @param array $old_instance Previously saved values from database.
282
- *
283
- * @return array Updated safe values to be saved.
284
- */
285
- public function update( $new_instance, $old_instance ) {
286
- $instance = array();
287
-
288
- $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
289
- $instance['fanpage_url'] = ( ! empty( $new_instance['fanpage_url'] ) ) ? strip_tags( $new_instance['fanpage_url'] ) : '';
290
- $instance['fb_appid'] = ( ! empty( $new_instance['fb_appid'] ) ) ? strip_tags( $new_instance['fb_appid'] ) : '';
291
- $instance['show_faces'] = ( ! empty( $new_instance['show_faces'] ) ) ? strip_tags( $new_instance['show_faces'] ) : '';
292
- $instance['show_stream'] = ( ! empty( $new_instance['show_stream'] ) ) ? strip_tags( $new_instance['show_stream'] ) : '';
293
- $instance['show_border'] = ( ! empty( $new_instance['show_border'] ) ) ? strip_tags( $new_instance['show_border'] ) : '';
294
- $instance['show_header'] = ( ! empty( $new_instance['show_header'] ) ) ? strip_tags( $new_instance['show_header'] ) : '';
295
- $instance['box_height'] = ( ! empty( $new_instance['box_height'] ) ) ? strip_tags( $new_instance['box_height'] ) : '';
296
- $instance['box_width'] = ( ! empty( $new_instance['box_width'] ) ) ? strip_tags( $new_instance['box_width'] ) : '';
297
- $instance['colorscheme'] = ( ! empty( $new_instance['colorscheme'] ) ) ? strip_tags( $new_instance['colorscheme'] ) : '';
298
-
299
- $instance['responsive'] = ( ! empty( $new_instance['responsive'] ) ) ? strip_tags( $new_instance['responsive'] ) : '';
300
- $instance['locale'] = ( ! empty( $new_instance['locale'] ) ) ? strip_tags( $new_instance['locale'] ) : '';
301
- $instance['locale_other'] = ( ! empty( $new_instance['locale_other'] ) ) ? strip_tags( $new_instance['locale_other'] ) : '';
302
-
303
-
304
- return $instance;
305
- }
306
-
307
- } // class Foo_Widget
308
  ?>
1
+ <?php
2
+ //ini_set('display_errors','Off');
3
+ class Easy_Facebook_Like_Box_Widget extends WP_Widget {
4
+
5
+ /**
6
+ * Register widget with WordPress.
7
+ */
8
+ function __construct() {
9
+ parent::__construct(
10
+ 'easy_racebook_likebox', // Base ID
11
+ __('Easy Facebook Likebox (deprecated)', 'easy-facebook-likebox'), // Name
12
+ array( 'description' => __( 'Drag and drop this widget for facebook like box integration', 'easy-facebook-likebox' ), ) // Args
13
+ );
14
+ }
15
+
16
+ /**
17
+ * Front-end display of widget.
18
+ *
19
+ * @see WP_Widget::widget()
20
+ *
21
+ * @param array $args Widget arguments.
22
+ * @param array $instance Saved values from database.
23
+ */
24
+ public function widget( $args, $instance ) {
25
+ $title = apply_filters( 'widget_title', $instance['title'] );
26
+
27
+ echo $args['before_widget'];
28
+ if ( ! empty( $title ) )
29
+ echo $args['before_title'] . $title . $args['after_title'];
30
+
31
+ echo Easy_Facebook_Likebox::render_fb_box($instance);
32
+
33
+ echo $args['after_widget'];
34
+ }
35
+
36
+ /**
37
+ * Back-end widget form.
38
+ *
39
+ * @see WP_Widget::form()
40
+ *
41
+ * @param array $instance Previously saved values from database.
42
+ */
43
+ public function form( $instance ) {
44
+
45
+
46
+ $locales = array( 'af_ZA' => 'Afrikaans',
47
+ 'ar_AR' => 'Arabic',
48
+ 'az_AZ' => 'Azeri',
49
+ 'be_BY' => 'Belarusian',
50
+ 'bg_BG' => 'Bulgarian',
51
+ 'bn_IN' => 'Bengali',
52
+ 'bs_BA' => 'Bosnian',
53
+ 'ca_ES' => 'Catalan',
54
+ 'cs_CZ' => 'Czech',
55
+ 'cy_GB' => 'Welsh',
56
+ 'da_DK' => 'Danish',
57
+ 'de_DE' => 'German',
58
+ 'el_GR' => 'Greek',
59
+ 'en_US' => 'English (US)',
60
+ 'en_GB' => 'English (UK)',
61
+ 'eo_EO' => 'Esperanto',
62
+ 'es_ES' => 'Spanish (Spain)',
63
+ 'es_LA' => 'Spanish',
64
+ 'et_EE' => 'Estonian',
65
+ 'eu_ES' => 'Basque',
66
+ 'fa_IR' => 'Persian',
67
+ 'fb_LT' => 'Leet Speak',
68
+ 'fi_FI' => 'Finnish',
69
+ 'fo_FO' => 'Faroese',
70
+ 'fr_FR' => 'French (France)',
71
+ 'fr_CA' => 'French (Canada)',
72
+ 'fy_NL' => 'NETHERLANDS (NL)',
73
+ 'ga_IE' => 'Irish',
74
+ 'gl_ES' => 'Galician',
75
+ 'hi_IN' => 'Hindi',
76
+ 'hr_HR' => 'Croatian',
77
+ 'hu_HU' => 'Hungarian',
78
+ 'hy_AM' => 'Armenian',
79
+ 'id_ID' => 'Indonesian',
80
+ 'is_IS' => 'Icelandic',
81
+ 'it_IT' => 'Italian',
82
+ 'ja_JP' => 'Japanese',
83
+ 'ka_GE' => 'Georgian',
84
+ 'km_KH' => 'Khmer',
85
+ 'ko_KR' => 'Korean',
86
+ 'ku_TR' => 'Kurdish',
87
+ 'la_VA' => 'Latin',
88
+ 'lt_LT' => 'Lithuanian',
89
+ 'lv_LV' => 'Latvian',
90
+ 'mk_MK' => 'Macedonian',
91
+ 'ml_IN' => 'Malayalam',
92
+ 'ms_MY' => 'Malay',
93
+ 'nb_NO' => 'Norwegian (bokmal)',
94
+ 'ne_NP' => 'Nepali',
95
+ 'nl_NL' => 'Dutch',
96
+ 'nn_NO' => 'Norwegian (nynorsk)',
97
+ 'pa_IN' => 'Punjabi',
98
+ 'pl_PL' => 'Polish',
99
+ 'ps_AF' => 'Pashto',
100
+ 'pt_PT' => 'Portuguese (Portugal)',
101
+ 'pt_BR' => 'Portuguese (Brazil)',
102
+ 'ro_RO' => 'Romanian',
103
+ 'ru_RU' => 'Russian',
104
+ 'sk_SK' => 'Slovak',
105
+ 'sl_SI' => 'Slovenian',
106
+ 'sq_AL' => 'Albanian',
107
+ 'sr_RS' => 'Serbian',
108
+ 'sv_SE' => 'Swedish',
109
+ 'sw_KE' => 'Swahili',
110
+ 'ta_IN' => 'Tamil',
111
+ 'te_IN' => 'Telugu',
112
+ 'th_TH' => 'Thai',
113
+ 'tl_PH' => 'Filipino',
114
+ 'tr_TR' => 'Turkish',
115
+ 'uk_UA' => 'Ukrainian',
116
+ 'ur_PK' => 'Urdu',
117
+ 'vi_VN' => 'Vietnamese',
118
+ 'zh_CN' => 'Simplified Chinese (China)',
119
+ 'zh_HK' => 'Traditional Chinese (Hong Kong)',
120
+ 'zh_TW' => 'Traditional Chinese (Taiwan)',
121
+ );
122
+
123
+ $defaults = array(
124
+ 'title' => '',
125
+ 'fb_appid' => '',
126
+ 'fanpage_url' => 'https://www.facebook.com/jwebsol',
127
+ 'box_width' => 250,
128
+ 'box_height' => '',
129
+ 'colorscheme' => 'light',
130
+ 'show_faces' => 1,
131
+ 'show_stream' => 0,
132
+ 'show_header' => 1,
133
+ 'show_border' => 1,
134
+ 'responsive' => 0,
135
+ 'locale' => 'en_US',
136
+ 'locale_other'=> ''
137
+ );
138
+
139
+ $instance = wp_parse_args( (array) $instance, $defaults );
140
+
141
+ extract($instance, EXTR_SKIP);
142
+
143
+ ?>
144
+
145
+ <p>
146
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
147
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
148
+ </p>
149
+
150
+ <p>
151
+ <label for="<?php echo $this->get_field_id( 'fanpage_url' ); ?>"><?php _e( 'Fanpage Url:' ); ?></label>
152
+ <input class="widefat" id="<?php echo $this->get_field_id( 'fanpage_url' ); ?>" name="<?php echo $this->get_field_name( 'fanpage_url' ); ?>" type="text" value="<?php echo esc_attr( $fanpage_url ); ?>"><br />
153
+ <i>Full url including http://</i>
154
+ </p>
155
+
156
+ <p>
157
+ <label for="<?php echo $this->get_field_id( 'fb_appid' ); ?>"><?php _e( 'Application ID:' ); ?></label>
158
+ <input class="widefat" id="<?php echo $this->get_field_id( 'fb_appid' ); ?>" name="<?php echo $this->get_field_name( 'fb_appid' ); ?>" type="text" value="<?php echo esc_attr( $fb_appid ); ?>"><br />
159
+ <i>Optional</i>
160
+ </p>
161
+
162
+ <p>
163
+ <label for="<?php echo $this->get_field_id( 'box_width' ); ?>"><?php _e( 'Width:' ); ?></label>
164
+ <input class="widefat" id="<?php echo $this->get_field_id( 'box_width' ); ?>" name="<?php echo $this->get_field_name( 'box_width' ); ?>" type="text" value="<?php echo esc_attr( $box_width ); ?>"><br />
165
+ </p>
166
+
167
+ <p>
168
+ <label for="<?php echo $this->get_field_id( 'box_height' ); ?>"><?php _e( 'Height:' ); ?></label>
169
+ <input class="widefat" id="<?php echo $this->get_field_id( 'box_height' ); ?>" name="<?php echo $this->get_field_name( 'box_height' ); ?>" type="text" value="<?php echo esc_attr( $box_height ); ?>"><br />
170
+ </p>
171
+
172
+
173
+ <p class="widget-half">
174
+ <label for="<?php echo $this->get_field_id( 'colorscheme' ); ?>"><?php _e( 'Colorscheme:' ); ?></label>
175
+ <select id="<?php echo $this->get_field_id( 'colorscheme' ); ?>" name="<?php echo $this->get_field_name( 'colorscheme' ); ?>">
176
+ <option <?php selected( $colorscheme, 'light' , $echo = true); ?> value="light">light</option>
177
+ <option <?php selected( $colorscheme, 'dark', $echo = true); ?> value="dark">dark</option>
178
+ </select>
179
+ </p>
180
+
181
+ <p class="widget-half">
182
+ <label for="<?php echo $this->get_field_id( 'locale' ); ?>"><?php _e( 'Locale:' ); ?></label>
183
+
184
+
185
+ <select id="<?php echo $this->get_field_id( 'locale' ); ?>" name="<?php echo $this->get_field_name( 'locale' ); ?>">
186
+ <?php if($locales){
187
+ foreach ($locales as $key=>$value){?>
188
+ <option <?php selected( $locale, $key , $echo = true); ?> value="<?php echo $key?>"><?php echo $value?></option>
189
+ <?php }
190
+ }?>
191
+ </select>
192
+ <i>Language</i>
193
+ </p>
194
+
195
+ <p>
196
+ <label for="<?php echo $this->get_field_id( 'locale_other' ); ?>"><?php _e( 'Locale (Other):' ); ?></label>
197
+ <input class="widefat" id="<?php echo $this->get_field_id( 'locale_other' ); ?>" name="<?php echo $this->get_field_name( 'locale_other' ); ?>" type="text" value="<?php echo esc_attr( $locale_other ); ?>" placeholder="en_US">
198
+
199
+ <i>input locale if you can not find yours in dropdown list</i>
200
+ </p>
201
+
202
+ <p class="widget-half">
203
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'responsive' ); ?>" name="<?php echo $this->get_field_name( 'responsive' ); ?>" value="1" <?php checked( $responsive, 1 ); ?>>
204
+ <label for="<?php echo $this->get_field_id( 'responsive' ); ?>">Responsive</label>
205
+
206
+ </p>
207
+
208
+ <p class="widget-half">
209
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_faces' ); ?>" name="<?php echo $this->get_field_name( 'show_faces' ); ?>" value="1" <?php checked( $show_faces, 1 ); ?>>
210
+ <label for="<?php echo $this->get_field_id( 'show_faces' ); ?>">Show Faces</label>
211
+
212
+ </p>
213
+
214
+ <p class="widget-half">
215
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_stream' ); ?>" name="<?php echo $this->get_field_name( 'show_stream' ); ?>" value="1" <?php checked( $show_stream, 1 ); ?>>
216
+ <label for="<?php echo $this->get_field_id( 'show_stream' ); ?>">Show Posts</label>
217
+
218
+ </p>
219
+
220
+ <p class="widget-half">
221
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_border' ); ?>" name="<?php echo $this->get_field_name( 'show_border' ); ?>" value="1" <?php checked( $show_border, 1 ); ?>>
222
+ <label for="<?php echo $this->get_field_id( 'show_border' ); ?>">Show Border</label>
223
+
224
+ </p>
225
+
226
+ <p class="widget-half">
227
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_header' ); ?>" name="<?php echo $this->get_field_name( 'show_header' ); ?>" value="1" <?php checked( $show_header, 1 ); ?>>
228
+ <label for="<?php echo $this->get_field_id( 'show_header' ); ?>">Show Header</label>
229
+
230
+ </p>
231
+
232
+ <div class="clearfix"></div>
233
+
234
+ <p>Use Below shortcode to use inside pages or posts</p>
235
+ <?php
236
+ if( empty($show_stream) ){
237
+ $show_stream = 0;
238
+ }
239
+
240
+ if( empty($show_faces) ){
241
+ $show_faces = 0;
242
+ }
243
+
244
+ if( empty($show_header) ){
245
+ $show_header = 0;
246
+ }
247
+
248
+ if( empty($show_border) ){
249
+ $show_border = 0;
250
+ }
251
+
252
+ if( !empty($locale_other) ){
253
+ $locale = $locale_other;
254
+ }
255
+
256
+ if( !empty($fb_appid) ){
257
+ $fb_appid = 'fb_appid="'.$fb_appid.'"';
258
+ }
259
+
260
+ $fb_url = parse_url( $fanpage_url );
261
+ $fanpage_url = str_replace('/', '', $fb_url['path']);
262
+ /*echo "<pre>";
263
+ print_r( $fb_url );
264
+ echo "</pre>";*/
265
+
266
+ $responsive = ( empty( $responsive ) ) ? strip_tags( 0 ) : $responsive;
267
+
268
+ ?>
269
+
270
+ <p style="background:#ddd; padding:5px; "><?php echo '[efb_likebox fanpage_url="'.$fanpage_url.'" '.$fb_appid.' box_width="'.$box_width.'" box_height="'.$box_height.'" colorscheme="'.$colorscheme.'" locale="'.$locale.'" responsive="'.$responsive.'" show_faces="'.$show_faces.'" show_header="'.$show_header.'" show_stream="'.$show_stream.'" show_border="'.$show_border.'" ]'?></p>
271
+
272
+ <?php
273
+ }
274
+
275
+ /**
276
+ * Sanitize widget form values as they are saved.
277
+ *
278
+ * @see WP_Widget::update()
279
+ *
280
+ * @param array $new_instance Values just sent to be saved.
281
+ * @param array $old_instance Previously saved values from database.
282
+ *
283
+ * @return array Updated safe values to be saved.
284
+ */
285
+ public function update( $new_instance, $old_instance ) {
286
+ $instance = array();
287
+
288
+ $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
289
+ $instance['fanpage_url'] = ( ! empty( $new_instance['fanpage_url'] ) ) ? strip_tags( $new_instance['fanpage_url'] ) : '';
290
+ $instance['fb_appid'] = ( ! empty( $new_instance['fb_appid'] ) ) ? strip_tags( $new_instance['fb_appid'] ) : '';
291
+ $instance['show_faces'] = ( ! empty( $new_instance['show_faces'] ) ) ? strip_tags( $new_instance['show_faces'] ) : '';
292
+ $instance['show_stream'] = ( ! empty( $new_instance['show_stream'] ) ) ? strip_tags( $new_instance['show_stream'] ) : '';
293
+ $instance['show_border'] = ( ! empty( $new_instance['show_border'] ) ) ? strip_tags( $new_instance['show_border'] ) : '';
294
+ $instance['show_header'] = ( ! empty( $new_instance['show_header'] ) ) ? strip_tags( $new_instance['show_header'] ) : '';
295
+ $instance['box_height'] = ( ! empty( $new_instance['box_height'] ) ) ? strip_tags( $new_instance['box_height'] ) : '';
296
+ $instance['box_width'] = ( ! empty( $new_instance['box_width'] ) ) ? strip_tags( $new_instance['box_width'] ) : '';
297
+ $instance['colorscheme'] = ( ! empty( $new_instance['colorscheme'] ) ) ? strip_tags( $new_instance['colorscheme'] ) : '';
298
+
299
+ $instance['responsive'] = ( ! empty( $new_instance['responsive'] ) ) ? strip_tags( $new_instance['responsive'] ) : '';
300
+ $instance['locale'] = ( ! empty( $new_instance['locale'] ) ) ? strip_tags( $new_instance['locale'] ) : '';
301
+ $instance['locale_other'] = ( ! empty( $new_instance['locale_other'] ) ) ? strip_tags( $new_instance['locale_other'] ) : '';
302
+
303
+
304
+ return $instance;
305
+ }
306
+
307
+ } // class Foo_Widget
308
  ?>
includes/easy-facebook-page-plugin-widget.php ADDED
@@ -0,0 +1,311 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //ini_set('display_errors','Off');
3
+ class Easy_Facebook_Page_Plugin_Widget extends WP_Widget {
4
+
5
+ /**
6
+ * Register widget with WordPress.
7
+ */
8
+ function __construct() {
9
+ parent::__construct(
10
+ 'easy_facebook_page_plugin', // Base ID
11
+ __('Easy Facebook Likebox', 'easy-facebook-likebox'), // Name
12
+ array( 'description' => __( 'Drag and drop this widget for facebook page plugin integration', 'easy-facebook-likebox' ), ) // Args
13
+ );
14
+ }
15
+
16
+ /**
17
+ * Front-end display of widget.
18
+ *
19
+ * @see WP_Widget::widget()
20
+ *
21
+ * @param array $args Widget arguments.
22
+ * @param array $instance Saved values from database.
23
+ */
24
+ public function widget( $args, $instance ) {
25
+ $title = apply_filters( 'widget_title', $instance['title'] );
26
+
27
+ echo $args['before_widget'];
28
+ if ( ! empty( $title ) )
29
+ echo $args['before_title'] . $title . $args['after_title'];
30
+
31
+ echo Easy_Facebook_Likebox::render_fb_page_plugin($instance);
32
+
33
+ echo $args['after_widget'];
34
+ }
35
+
36
+ /**
37
+ * Back-end widget form.
38
+ *
39
+ * @see WP_Widget::form()
40
+ *
41
+ * @param array $instance Previously saved values from database.
42
+ */
43
+ public function form( $instance ) {
44
+
45
+
46
+ $locales = array( 'af_ZA' => 'Afrikaans',
47
+ 'ar_AR' => 'Arabic',
48
+ 'az_AZ' => 'Azeri',
49
+ 'be_BY' => 'Belarusian',
50
+ 'bg_BG' => 'Bulgarian',
51
+ 'bn_IN' => 'Bengali',
52
+ 'bs_BA' => 'Bosnian',
53
+ 'ca_ES' => 'Catalan',
54
+ 'cs_CZ' => 'Czech',
55
+ 'cy_GB' => 'Welsh',
56
+ 'da_DK' => 'Danish',
57
+ 'de_DE' => 'German',
58
+ 'el_GR' => 'Greek',
59
+ 'en_US' => 'English (US)',
60
+ 'en_GB' => 'English (UK)',
61
+ 'eo_EO' => 'Esperanto',
62
+ 'es_ES' => 'Spanish (Spain)',
63
+ 'es_LA' => 'Spanish',
64
+ 'et_EE' => 'Estonian',
65
+ 'eu_ES' => 'Basque',
66
+ 'fa_IR' => 'Persian',
67
+ 'fb_LT' => 'Leet Speak',
68
+ 'fi_FI' => 'Finnish',
69
+ 'fo_FO' => 'Faroese',
70
+ 'fr_FR' => 'French (France)',
71
+ 'fr_CA' => 'French (Canada)',
72
+ 'fy_NL' => 'NETHERLANDS (NL)',
73
+ 'ga_IE' => 'Irish',
74
+ 'gl_ES' => 'Galician',
75
+ 'hi_IN' => 'Hindi',
76
+ 'hr_HR' => 'Croatian',
77
+ 'hu_HU' => 'Hungarian',
78
+ 'hy_AM' => 'Armenian',
79
+ 'id_ID' => 'Indonesian',
80
+ 'is_IS' => 'Icelandic',
81
+ 'it_IT' => 'Italian',
82
+ 'ja_JP' => 'Japanese',
83
+ 'ka_GE' => 'Georgian',
84
+ 'km_KH' => 'Khmer',
85
+ 'ko_KR' => 'Korean',
86
+ 'ku_TR' => 'Kurdish',
87
+ 'la_VA' => 'Latin',
88
+ 'lt_LT' => 'Lithuanian',
89
+ 'lv_LV' => 'Latvian',
90
+ 'mk_MK' => 'Macedonian',
91
+ 'ml_IN' => 'Malayalam',
92
+ 'ms_MY' => 'Malay',
93
+ 'nb_NO' => 'Norwegian (bokmal)',
94
+ 'ne_NP' => 'Nepali',
95
+ 'nl_NL' => 'Dutch',
96
+ 'nn_NO' => 'Norwegian (nynorsk)',
97
+ 'pa_IN' => 'Punjabi',
98
+ 'pl_PL' => 'Polish',
99
+ 'ps_AF' => 'Pashto',
100
+ 'pt_PT' => 'Portuguese (Portugal)',
101
+ 'pt_BR' => 'Portuguese (Brazil)',
102
+ 'ro_RO' => 'Romanian',
103
+ 'ru_RU' => 'Russian',
104
+ 'sk_SK' => 'Slovak',
105
+ 'sl_SI' => 'Slovenian',
106
+ 'sq_AL' => 'Albanian',
107
+ 'sr_RS' => 'Serbian',
108
+ 'sv_SE' => 'Swedish',
109
+ 'sw_KE' => 'Swahili',
110
+ 'ta_IN' => 'Tamil',
111
+ 'te_IN' => 'Telugu',
112
+ 'th_TH' => 'Thai',
113
+ 'tl_PH' => 'Filipino',
114
+ 'tr_TR' => 'Turkish',
115
+ 'uk_UA' => 'Ukrainian',
116
+ 'ur_PK' => 'Urdu',
117
+ 'vi_VN' => 'Vietnamese',
118
+ 'zh_CN' => 'Simplified Chinese (China)',
119
+ 'zh_HK' => 'Traditional Chinese (Hong Kong)',
120
+ 'zh_TW' => 'Traditional Chinese (Taiwan)',
121
+ );
122
+
123
+ $defaults = array(
124
+ 'title' => '',
125
+ 'fb_appid' => '',
126
+ 'fanpage_url' => 'https://www.facebook.com/jwebsol',
127
+ 'box_width' => 250,
128
+ 'box_height' => '',
129
+ 'show_faces' => 1,
130
+ 'show_stream' => 0,
131
+ 'hide_cover' => 0,
132
+ 'responsive' => 0,
133
+ 'hide_cta' => 0,
134
+ 'small_header' => 0,
135
+ 'locale' => 'en_US',
136
+ 'locale_other'=> ''
137
+ );
138
+
139
+ $instance = wp_parse_args( (array) $instance, $defaults );
140
+
141
+ extract($instance, EXTR_SKIP);
142
+
143
+ ?>
144
+
145
+ <p>
146
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' , 'easy-facebook-likebox' ); ?></label>
147
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
148
+ </p>
149
+
150
+ <p>
151
+ <label for="<?php echo $this->get_field_id( 'fanpage_url' ); ?>"><?php _e( 'Fanpage Url:', 'easy-facebook-likebox' ); ?></label>
152
+ <input class="widefat" id="<?php echo $this->get_field_id( 'fanpage_url' ); ?>" name="<?php echo $this->get_field_name( 'fanpage_url' ); ?>" type="text" value="<?php echo esc_attr( $fanpage_url ); ?>"><br />
153
+ <i>Full url including http://</i>
154
+ </p>
155
+
156
+ <p>
157
+ <label for="<?php echo $this->get_field_id( 'fb_appid' ); ?>"><?php _e( 'Application ID:', 'easy-facebook-likebox' ); ?></label>
158
+ <input class="widefat" id="<?php echo $this->get_field_id( 'fb_appid' ); ?>" name="<?php echo $this->get_field_name( 'fb_appid' ); ?>" type="text" value="<?php echo esc_attr( $fb_appid ); ?>"><br />
159
+ <i>Optional</i>
160
+ </p>
161
+
162
+ <p>
163
+ <label for="<?php echo $this->get_field_id( 'box_width' ); ?>"><?php _e( 'Width:', 'easy-facebook-likebox' ); ?></label>
164
+ <input class="widefat" id="<?php echo $this->get_field_id( 'box_width' ); ?>" name="<?php echo $this->get_field_name( 'box_width' ); ?>" type="text" value="<?php echo esc_attr( $box_width ); ?>"><br />
165
+ </p>
166
+
167
+ <p>
168
+ <label for="<?php echo $this->get_field_id( 'box_height' ); ?>"><?php _e( 'Height:', 'easy-facebook-likebox' ); ?></label>
169
+ <input class="widefat" id="<?php echo $this->get_field_id( 'box_height' ); ?>" name="<?php echo $this->get_field_name( 'box_height' ); ?>" type="text" value="<?php echo esc_attr( $box_height ); ?>"><br />
170
+ </p>
171
+
172
+
173
+ <p >
174
+ <label for="<?php echo $this->get_field_id( 'locale' ); ?>"><?php _e( 'Locale:', 'easy-facebook-likebox' ); ?></label>
175
+
176
+
177
+ <select class="widefat" id="<?php echo $this->get_field_id( 'locale' ); ?>" name="<?php echo $this->get_field_name( 'locale' ); ?>">
178
+ <?php if($locales){
179
+ foreach ($locales as $key=>$value){?>
180
+ <option <?php selected( $locale, $key , $echo = true); ?> value="<?php echo $key?>"><?php echo $value?></option>
181
+ <?php }
182
+ }?>
183
+ </select>
184
+ <i><?php _e( 'Language of your page' , 'easy-facebook-likebox' ); ?></i>
185
+ </p>
186
+
187
+ <p>
188
+ <label for="<?php echo $this->get_field_id( 'locale_other' ); ?>"><?php _e( 'Locale (Other):', 'easy-facebook-likebox' ); ?></label>
189
+ <input class="widefat" id="<?php echo $this->get_field_id( 'locale_other' ); ?>" name="<?php echo $this->get_field_name( 'locale_other' ); ?>" type="text" value="<?php echo esc_attr( $locale_other ); ?>" placeholder="en_US">
190
+
191
+ <i><?php _e( 'input locale if you can not find yours in dropdown list in this format e.g fr_FR for frecnh.' , 'easy-facebook-likebox' ); ?></i>
192
+ </p>
193
+
194
+ <p class="widget-half">
195
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'responsive' ); ?>" name="<?php echo $this->get_field_name( 'responsive' ); ?>" value="1" <?php checked( $responsive, 1 ); ?>>
196
+ <label for="<?php echo $this->get_field_id( 'responsive' ); ?>">Responsive</label>
197
+
198
+ </p>
199
+
200
+ <p class="widget-half">
201
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_faces' ); ?>" name="<?php echo $this->get_field_name( 'show_faces' ); ?>" value="1" <?php checked( $show_faces, 1 ); ?>>
202
+ <label for="<?php echo $this->get_field_id( 'show_faces' ); ?>"><?php _e( 'Show Faces', 'easy-facebook-likebox' ); ?></label>
203
+
204
+ </p>
205
+
206
+ <p class="widget-half">
207
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'hide_cover' ); ?>" name="<?php echo $this->get_field_name( 'hide_cover' ); ?>" value="1" <?php checked( $hide_cover, 1 ); ?>>
208
+ <label for="<?php echo $this->get_field_id( 'hide_cover' ); ?>"><?php _e( 'Hide Cover Photo', 'easy-facebook-likebox' ); ?></label>
209
+
210
+ </p>
211
+
212
+ <p class="widget-half">
213
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'show_stream' ); ?>" name="<?php echo $this->get_field_name( 'show_stream' ); ?>" value="1" <?php checked( $show_stream, 1 ); ?>>
214
+ <label for="<?php echo $this->get_field_id( 'show_stream' ); ?>"><?php _e( 'Show Posts', 'easy-facebook-likebox' ); ?></label>
215
+
216
+ </p>
217
+ <p class="widget-half">
218
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'hide_cta' ); ?>" name="<?php echo $this->get_field_name( 'hide_cta' ); ?>" value="1" <?php checked( $hide_cta, 1 ); ?>>
219
+ <label for="<?php echo $this->get_field_id( 'hide_cta' ); ?>"><?php _e( 'Hide CTA button', 'easy-facebook-likebox' ); ?></label>
220
+
221
+ </p>
222
+ <p class="widget-half">
223
+ <input type="checkbox" class="widefat" id="<?php echo $this->get_field_id( 'small_header' ); ?>" name="<?php echo $this->get_field_name( 'small_header' ); ?>" value="1" <?php checked( $small_header, 1 ); ?>>
224
+ <label for="<?php echo $this->get_field_id( 'small_header' ); ?>"><?php _e( 'User small header', 'easy-facebook-likebox' ); ?></label>
225
+
226
+ </p>
227
+
228
+
229
+
230
+ <div class="clearfix"></div>
231
+
232
+ <p><?php _e( 'Use Below shortcode to use inside pages or posts', 'easy-facebook-likebox' ); ?></p>
233
+ <?php
234
+ if( empty($show_stream) ){
235
+ $show_stream = 0;
236
+ }
237
+
238
+ if( empty($show_faces) ){
239
+ $show_faces = 0;
240
+ }
241
+
242
+ if( empty($show_header) ){
243
+ $show_header = 0;
244
+ }
245
+
246
+ if( empty($hide_cover) ){
247
+ $hide_cover = 0;
248
+ }
249
+
250
+ if( !empty($locale_other) ){
251
+ $locale = $locale_other;
252
+ }
253
+
254
+ if( !empty($fb_appid) ){
255
+ $fb_appid = 'fb_appid="'.$fb_appid.'"';
256
+ }
257
+
258
+ $fb_url = parse_url( $fanpage_url );
259
+ $fanpage_url = str_replace('/', '', $fb_url['path']);
260
+ /*echo "<pre>";
261
+ print_r( $fb_url );
262
+ echo "</pre>";*/
263
+
264
+ $responsive = ( empty( $responsive ) ) ? strip_tags( 0 ) : $responsive;
265
+
266
+ $hide_cta = ( empty( $hide_cta ) ) ? strip_tags( 0 ) : $hide_cta;
267
+
268
+ $small_header = ( empty( $small_header ) ) ? strip_tags( 0 ) : $small_header;
269
+
270
+ ?>
271
+
272
+ <p style="background:#ddd; padding:5px; "><?php echo '[efb_likebox fanpage_url="'.$fanpage_url.'" '.$fb_appid.' box_width="'.$box_width.'" box_height="'.$box_height.'" locale="'.$locale.'" responsive="'.$responsive.'" show_faces="'.$show_faces.'" show_stream="'.$show_stream.'" hide_cover="'.$hide_cover.'" small_header="'.$small_header.'" hide_cta="'.$hide_cta.'" ]'?></p>
273
+
274
+ <?php
275
+ }
276
+
277
+ /**
278
+ * Sanitize widget form values as they are saved.
279
+ *
280
+ * @see WP_Widget::update()
281
+ *
282
+ * @param array $new_instance Values just sent to be saved.
283
+ * @param array $old_instance Previously saved values from database.
284
+ *
285
+ * @return array Updated safe values to be saved.
286
+ */
287
+ public function update( $new_instance, $old_instance ) {
288
+ $instance = array();
289
+
290
+ $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
291
+ $instance['fanpage_url'] = ( ! empty( $new_instance['fanpage_url'] ) ) ? strip_tags( $new_instance['fanpage_url'] ) : '';
292
+ $instance['fb_appid'] = ( ! empty( $new_instance['fb_appid'] ) ) ? strip_tags( $new_instance['fb_appid'] ) : '';
293
+ $instance['show_faces'] = ( ! empty( $new_instance['show_faces'] ) ) ? strip_tags( $new_instance['show_faces'] ) : '';
294
+ $instance['show_stream'] = ( ! empty( $new_instance['show_stream'] ) ) ? strip_tags( $new_instance['show_stream'] ) : '';
295
+ $instance['hide_cover'] = ( ! empty( $new_instance['hide_cover'] ) ) ? strip_tags( $new_instance['hide_cover'] ) : '';
296
+ $instance['box_height'] = ( ! empty( $new_instance['box_height'] ) ) ? strip_tags( $new_instance['box_height'] ) : '';
297
+ $instance['box_width'] = ( ! empty( $new_instance['box_width'] ) ) ? strip_tags( $new_instance['box_width'] ) : '';
298
+
299
+ $instance['responsive'] = ( ! empty( $new_instance['responsive'] ) ) ? strip_tags( $new_instance['responsive'] ) : '';
300
+ $instance['small_header'] = ( ! empty( $new_instance['small_header'] ) ) ? strip_tags( $new_instance['small_header'] ) : '';
301
+ $instance['hide_cta'] = ( ! empty( $new_instance['hide_cta'] ) ) ? strip_tags( $new_instance['hide_cta'] ) : '';
302
+
303
+ $instance['locale'] = ( ! empty( $new_instance['locale'] ) ) ? strip_tags( $new_instance['locale'] ) : '';
304
+ $instance['locale_other'] = ( ! empty( $new_instance['locale_other'] ) ) ? strip_tags( $new_instance['locale_other'] ) : '';
305
+
306
+
307
+ return $instance;
308
+ }
309
+
310
+ } // class Foo_Widget
311
+ ?>
languages/easy-facebook-likebox.pot CHANGED
@@ -1,13 +1,11 @@
1
- # Copyright (C) 2013 TODO
2
- # This file is distributed under the same license as the TODO package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: TODO 1.0.0\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
7
- "POT-Creation-Date: 2013-05-10 11:23:19+00:00\n"
8
- "PO-Revision-Date: 2013-05-10 10:37-0500\n"
9
- "Last-Translator: FULL NAME <email@example.com>\n"
10
- "Language-Team: LANGUAGE <translations@example.com >\n"
11
  "MIME-Version: 1.0\n"
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
@@ -18,14 +16,291 @@ msgstr ""
18
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
19
  "X-Poedit-SearchPath-0: .\n"
20
 
21
- #: class-plugin-name-admin.php:170
22
- msgid "Page Title"
 
23
  msgstr ""
24
 
25
- #: class-plugin-name-admin.php:171
26
- msgid "Menu Text"
27
  msgstr ""
28
 
29
- #: class-plugin-name-admin.php:197
 
 
 
 
 
 
 
 
30
  msgid "Settings"
31
  msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: Easy facebook likebox\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/plugins/easy-facebook-likebox\n"
5
+ "POT-Creation-Date: 2014-05-10 11:23:19+00:00\n"
6
+ "PO-Revision-Date: 2014-05-10 10:37-0500\n"
7
+ "Last-Translator: Sajid Javed <sjaved_87@yahoo.com>\n"
8
+ "Language-Team: JWS <info@jwebsol.com >\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
16
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
+ #: ../admin/easy-facebook-likebox-admin.php:174
20
+ #: ../admin/easy-facebook-likebox-admin.php:175
21
+ msgid "Easy Fcebook Likebox PRO"
22
  msgstr ""
23
 
24
+ #: ../admin/easy-facebook-likebox-admin.php:189
25
+ msgid "How to use this plugin"
26
  msgstr ""
27
 
28
+ #: ../admin/easy-facebook-likebox-admin.php:190
29
+ msgid "Like box pup up settings"
30
+ msgstr ""
31
+
32
+ #: ../admin/easy-facebook-likebox-admin.php:191
33
+ msgid "Support us by liking our fan page!"
34
+ msgstr ""
35
+
36
+ #: ../admin/easy-facebook-likebox-admin.php:241
37
  msgid "Settings"
38
  msgstr ""
39
+
40
+ #: ../admin/easy-facebook-likebox-admin.php:262
41
+ msgid "Thanks for installting/upgrading the Easy Facebook Likebox Plugin! If you like this plugin, please consider some <a href=\"%s\" target=\"_blank\">donation</a> and/or <a href=\"%s\" target=\"_blank\">rating it</a>! \n"
42
+ msgstr ""
43
+
44
+ #: ../admin/easy-facebook-likebox-admin.php:275
45
+ msgid "I have supported already"
46
+ msgstr ""
47
+
48
+ #: ../admin/easy-facebook-likebox-admin.php:263
49
+ msgid "Support us by liking our facebook fan page!"
50
+ msgstr ""
51
+
52
+ #: ../admin/easy-facebook-likebox-admin.php:319
53
+ msgid "Like box pup up advanced settings"
54
+ msgstr ""
55
+
56
+ #: ../admin/easy-facebook-likebox-admin.php:328
57
+ msgid "Enable PopUp"
58
+ msgstr ""
59
+
60
+ #: ../admin/easy-facebook-likebox-admin.php:333
61
+ msgid "Activate this setting to display the header."
62
+ msgstr ""
63
+
64
+ #: ../admin/easy-facebook-likebox-admin.php:340
65
+ msgid "PopUp Delay after page load"
66
+ msgstr ""
67
+
68
+ #: ../admin/easy-facebook-likebox-admin.php:345
69
+ msgid "Delay in miliseconds. 1000 ms = 1 second."
70
+ msgstr ""
71
+
72
+ #: ../admin/easy-facebook-likebox-admin.php:353
73
+ msgid "PopUp Width."
74
+ msgstr ""
75
+
76
+ #: ../admin/easy-facebook-likebox-admin.php:358
77
+ msgid "Width in pixels."
78
+ msgstr ""
79
+
80
+ #: ../admin/easy-facebook-likebox-admin.php:365
81
+ msgid "PopUp height"
82
+ msgstr ""
83
+
84
+ #: ../admin/easy-facebook-likebox-admin.php:370
85
+ msgid "Height in pixels."
86
+ msgstr ""
87
+
88
+ #: ../admin/easy-facebook-likebox-admin.php:377
89
+ msgid "PopUp content"
90
+ msgstr ""
91
+
92
+ #: ../admin/easy-facebook-likebox-admin.php:382
93
+ msgid "You can generate easy facebook like box shortcode from Widgets > Easy Facebook LikeBox."
94
+ msgstr ""
95
+
96
+ #: ../admin/easy-facebook-likebox-admin.php:388
97
+ msgid "Show on home only"
98
+ msgstr ""
99
+
100
+ #: ../admin/easy-facebook-likebox-admin.php:393
101
+ msgid "Display PopUp on home page only."
102
+ msgstr ""
103
+
104
+ #: ../admin/easy-facebook-likebox-admin.php:399
105
+ msgid "Enable if visitor is logged in"
106
+ msgstr ""
107
+
108
+ #: ../admin/easy-facebook-likebox-admin.php:404
109
+ msgid "Shows the PopUp if the user is logged in to your site."
110
+ msgstr ""
111
+
112
+ #: ../admin/easy-facebook-likebox-admin.php:410
113
+ msgid "Enable if visitor is not logged in"
114
+ msgstr ""
115
+
116
+ #: ../admin/easy-facebook-likebox-admin.php:415
117
+ msgid "Shows the PopUp if the user is not logged in to your site (Above option will be ignored if checked)."
118
+ msgstr ""
119
+
120
+ #: ../admin/easy-facebook-likebox-admin.php:421
121
+ msgid "Close button act as never show again"
122
+ msgstr ""
123
+
124
+ #: ../admin/easy-facebook-likebox-admin.php:426
125
+ msgid "PopUp will not appear when visitor will close it once."
126
+ msgstr ""
127
+
128
+ #: ../admin/easy-facebook-likebox-admin.php:432
129
+ msgid "Disable on mobile"
130
+ msgstr ""
131
+
132
+ #: ../admin/easy-facebook-likebox-admin.php:432
133
+ msgid "Do not display on mobile devices"
134
+ msgstr ""
135
+
136
+ #: ../admin/views/admin.php:19
137
+ msgid "General"
138
+ msgstr ""
139
+
140
+ #: ../admin/views/admin.php:20
141
+ msgid "Auto PopUp"
142
+ msgstr ""
143
+
144
+ #: ../admin/views/admin.php:21
145
+ msgid "Support and Updates"
146
+ msgstr ""
147
+
148
+ #: ../admin/views/instructinos.php:16
149
+ msgid "Custom facebook feed widget or shortcode usage instructions."
150
+ msgstr ""
151
+
152
+ #: ../admin/views/instructinos.php:18
153
+ msgid "Here are easy steps to use this feature."
154
+ msgstr ""
155
+
156
+ #: ../admin/views/instructinos.php:20
157
+ msgid "Add the \"Easy Facebook Feed\" widget in sidebar to show the feed into your website sidebar"
158
+ msgstr ""
159
+
160
+ #: ../admin/views/instructinos.php:21
161
+ msgid "Add \"Easy Facebook Feed\" widget in sidebar and generate shortcode by saving the widgets option to show custom facebook feed in posts, pages or custom posts."
162
+ msgstr ""
163
+
164
+ #: ../admin/views/instructinos.php:22
165
+ msgid "You can also directly add below shortcode (without quotes) in post/page editor and change default values with your custom one according to your needs and requirments. \"[efb_feed fanpage_url=\"YOUR_FB_FANPAGE_NAME_OR_ID_OR_URL\" post_number=\"20\" post_limit=\"20\" show_logo=\"DISPLAY_LOGO(1/0)\" show_image=\"DISPLAY_IMAGE(1/0)\"]\" "
166
+ msgstr ""
167
+
168
+ #: ../admin/views/instructinos.php:29
169
+ msgid "Like box widget or shortcode usage instructions."
170
+ msgstr ""
171
+
172
+ #: ../admin/views/instructinos.php:31
173
+ msgid "Here are easy steps to use this fature."
174
+ msgstr ""
175
+
176
+ #: ../admin/views/instructinos.php:33
177
+ msgid "Add the \"Easy Facebook Likebox\" widget in sidebar to show the like box in your website sidebar"
178
+ msgstr ""
179
+
180
+ #: ../admin/views/instructinos.php:34
181
+ msgid "Add widget in sidebar and generate shortcode by saving the widgets option to show likebox somewhere else on your website."
182
+ msgstr ""
183
+
184
+ #: ../admin/views/instructinos.php:35
185
+ msgid "You can also directly add below shortcode (without quotes) in post/page editor and change default values with your custom one according to your needs and requirments. \"[efb_likebox fanpage_url=\"YOUR_FB_FANPAGE_NAME_OR_ID\" fb_appid=\"\" box_width=\"300\" box_height=\"\" colorscheme=\"light\" show_faces=\"1\" show_header=\"1\" show_stream=\"0\" show_border=\"1\" ]\""
186
+ msgstr ""
187
+
188
+ #: ../admin/views/instructinos.php:40
189
+ msgid "AutoPopUp usage instructions."
190
+ msgstr ""
191
+
192
+ #: ../admin/views/instructinos.php:42
193
+ msgid "Here are easy steps to use/configure AutoPopUp this plugin."
194
+ msgstr ""
195
+
196
+ #: ../admin/views/instructinos.php:44
197
+ msgid "Enable or disable the AutoPopUp"
198
+ msgstr ""
199
+
200
+ #: ../admin/views/instructinos.php:45
201
+ msgid "Set width and height. Shoule be same as facebook like box."
202
+ msgstr ""
203
+
204
+ #: ../admin/views/instructinos.php:46
205
+ msgid "Generate shortcode from Appearance > Widgets > Easy Facebook Likebox and add it in \"Enter shortcode of Eeasy facebook like box\" text box below."
206
+ msgstr ""
207
+
208
+ #: ../admin/views/instructinos.php:52
209
+ msgid "I am constantly working on the betterment and improvement of this plugin so stay tuned."
210
+ msgstr ""
211
+
212
+ #: ../public/views/feed.php:346
213
+ msgid "Read full story"
214
+ msgstr ""
215
+
216
+ #: ../public/views/feed.php:347
217
+ msgid "Share"
218
+ msgstr ""
219
+
220
+ #: ../public/views/feed.php:377
221
+ msgid "like this."
222
+ msgstr ""
223
+
224
+ #: ../public/views/feed.php:378
225
+ msgid "and "
226
+ msgstr ""
227
+
228
+ #: ../public/views/feed.php:379
229
+ msgid "other "
230
+ msgstr ""
231
+
232
+ #: ../public/views/feed.php:380
233
+ msgid "others "
234
+ msgstr ""
235
+
236
+ #: ../public/views/feed.php:453
237
+ msgid "comment on facebook"
238
+ msgstr ""
239
+
240
+ #: ../public/views/feed.php:505
241
+ msgid "Error occured while retrieving the facebook feed "
242
+ msgstr ""
243
+
244
+ #: ../public/includes/core-functions.php:5
245
+ msgid "second"
246
+ msgstr ""
247
+
248
+ #: ../public/includes/core-functions.php:6
249
+ msgid "seconds"
250
+ msgstr ""
251
+
252
+ #: ../public/includes/core-functions.php:7
253
+ msgid "minute"
254
+ msgstr ""
255
+
256
+ #: ../public/includes/core-functions.php:8
257
+ msgid "minutes"
258
+ msgstr ""
259
+
260
+ #: ../public/includes/core-functions.php:9
261
+ msgid "hour"
262
+ msgstr ""
263
+
264
+ #: ../public/includes/core-functions.php:10
265
+ msgid "hours"
266
+ msgstr ""
267
+
268
+ #: ../public/includes/core-functions.php:11
269
+ msgid "day"
270
+ msgstr ""
271
+
272
+ #: ../public/includes/core-functions.php:12
273
+ msgid "days"
274
+ msgstr ""
275
+
276
+ #: ../public/includes/core-functions.php:13
277
+ msgid "week"
278
+ msgstr ""
279
+
280
+ #: ../public/includes/core-functions.php:14
281
+ msgid "weeks"
282
+ msgstr ""
283
+
284
+ #: ../public/includes/core-functions.php:15
285
+ msgid "month"
286
+ msgstr ""
287
+
288
+ #: ../public/includes/core-functions.php:16
289
+ msgid "months"
290
+ msgstr ""
291
+
292
+ #: ../public/includes/core-functions.php:17
293
+ msgid "year"
294
+ msgstr ""
295
+
296
+ #: ../public/includes/core-functions.php:18
297
+ msgid "years"
298
+ msgstr ""
299
+
300
+ #: ../public/includes/core-functions.php:19
301
+ msgid "decade"
302
+ msgstr ""
303
+
304
+ #: ../public/includes/core-functions.php:22
305
+ msgid "ago"
306
+ msgstr ""
public/assets/css/public.css CHANGED
@@ -1,3 +1,4 @@
 
1
  /* This stylesheet is used to style the public-facing components of the plugin. */
2
  #fb-root {
3
  display: none;
@@ -9,17 +10,19 @@
9
  width: 100% !important;
10
  }
11
 
 
12
  .white-popup {
13
  position: relative;
14
  background: #FFF;
15
  width: auto;
16
- max-width: 500px;
17
  margin: 20px auto;
18
  }
 
19
  .mfp-close {
20
  top: -18px !important;
21
  right: -18px !important;
22
- background:url('popup_close.png') !important;
23
  width: 36px !important;
24
  height: 37px !important;
25
  font-size:0px !important;
@@ -27,4 +30,425 @@
27
  }
28
  .mfp-close:hover, .mfp-close:active, .mfp-close:focus{
29
  background:transparent;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  }
1
+ @import url(http://netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.css);
2
  /* This stylesheet is used to style the public-facing components of the plugin. */
3
  #fb-root {
4
  display: none;
10
  width: 100% !important;
11
  }
12
 
13
+ /*Magnific popup CSS*/
14
  .white-popup {
15
  position: relative;
16
  background: #FFF;
17
  width: auto;
18
+ max-width: 720px;
19
  margin: 20px auto;
20
  }
21
+
22
  .mfp-close {
23
  top: -18px !important;
24
  right: -18px !important;
25
+ background:url(../images/popup_close.png) !important;
26
  width: 36px !important;
27
  height: 37px !important;
28
  font-size:0px !important;
30
  }
31
  .mfp-close:hover, .mfp-close:active, .mfp-close:focus{
32
  background:transparent;
33
+ }
34
+
35
+ /*icon css*/
36
+
37
+ .efbl_read_more_link .efbl_links_container a .fa
38
+ {
39
+ color:#fff;
40
+ margin-right: 9px;
41
+ margin-left: 9px;
42
+ }
43
+ .efbl_read_more_link .efbl_links_container a .fa-facebook
44
+ {
45
+ float:left;
46
+ display:inline-block;
47
+
48
+ }
49
+ .efbl_read_more_link .efbl_links_container a .fa-facebook:hover
50
+ {
51
+ color:#3b5998;
52
+ }
53
+ .efbl_read_more_link .efbl_links_container a .fa-twitter
54
+ {
55
+ background-repeat:no-repeat;
56
+ float:left;
57
+ display:inline-block;
58
+ }
59
+ .efbl_read_more_link .efbl_links_container a .fa-twitter:hover
60
+ {
61
+ color:#00aced;
62
+ }
63
+ .efbl_read_more_link .efbl_links_container a .fa-linkedin
64
+ {
65
+ background-repeat:no-repeat;
66
+ float:left;
67
+ display:inline-block;
68
+ }
69
+ .efbl_read_more_link .efbl_links_container a .fa-linkedin:hover
70
+ {
71
+ color:#007bb6;
72
+ }
73
+ .efbl_read_more_link .efbl_links_container a .fa-google-plus
74
+ {
75
+ background-repeat:no-repeat;
76
+ float:left;
77
+ display:inline-block;
78
+ }
79
+ .efbl_read_more_link .efbl_links_container a .fa-google-plus:hover
80
+ {
81
+ color:#dd4b39;
82
+ }
83
+ #efblcf .efbl_story_meta .efbl_read_more_link
84
+ {
85
+ position:relative;
86
+ }
87
+ .efbl_links_container
88
+ {
89
+ right:0px;
90
+ }
91
+ #efblcf .efbl_info span
92
+ {
93
+ margin-right:3px;
94
+ color: #FFF;
95
+ }
96
+ /*custom facebook feed styling starts form here*/
97
+ .efbl_feed_wraper{
98
+ float: left;
99
+ width: 100%;
100
+ margin: 0 auto;
101
+ padding: 0;
102
+ text-align: left;
103
+ }
104
+ #efblcf{
105
+ float:left;
106
+ display:block;
107
+ width:100%;
108
+ margin-bottom:20px;
109
+ border-bottom:1px solid #eee;
110
+ }
111
+ #efblcf .efbl_story_photo{
112
+ position:relative;
113
+ float:left;
114
+ }
115
+ #efblcf.fullwidth .efbl_post_content, #efblcf.fullwidth .efbl_story_photo{
116
+ width:100%;
117
+ margin-right:10px;
118
+ margin-bottom: 10px;
119
+ }
120
+
121
+ #efblcf .efbl_story_photo img, #efblcf .efbl_story_photo video {
122
+ width:100%;
123
+ height:auto;
124
+ margin-bottom: 0px;
125
+ margin-top: 0px;
126
+ float: left;
127
+ }
128
+ #efblcf .efbl_story_photo iframe {
129
+ margin:0px;
130
+ padding:0px;
131
+ }
132
+ #efblcf.fullwidth .efbl_youtube_video, #efblcf.fullwidth .efbl_vimeo_video {
133
+ width:100%;
134
+ height:400px;
135
+ margin-bottom: 0px;
136
+ }
137
+
138
+ #efblcf.halfwidth .efbl_story_photo{
139
+ width: 45%;
140
+ margin-right: 10px;
141
+ position:relative;
142
+ }
143
+
144
+ #efblcf .efbl_story_photo .efbl_iframe_popup_video{
145
+ position: absolute;
146
+ top: 0;
147
+ left: 0;
148
+ bottom: 0;
149
+ right: 0;
150
+ }
151
+ #efblcf .efbl_story_photo a
152
+ {
153
+ float: left;
154
+ z-index: 1;
155
+ position: absolute;
156
+ top: 0px;
157
+ bottom: 0px;
158
+ right: 0px;
159
+ left: 0px;
160
+ }
161
+ #efblcf .efbl_story_photo:hover a
162
+ {
163
+ background-color:rgba(0,0,0,0.5);
164
+ }
165
+ #efblcf .efbl_story_photo:hover a .efbl_hover
166
+ {
167
+ background-image: url(../images/plus.png);
168
+ top: 0px;
169
+ position: absolute;
170
+ bottom: 0px;
171
+ top: 0px;
172
+ left: 0px;
173
+ right: 0px;
174
+ z-index: 99999;
175
+ background-position: center;
176
+ background-repeat:no-repeat;
177
+
178
+ }
179
+
180
+ #efblcf.halfwidth .efbl_post_content{
181
+ float: left;
182
+ width: 53%;
183
+ }
184
+
185
+ #efblcf.thumbnail .efbl_story_photo{
186
+ float:left;
187
+ width:21%;
188
+ margin-right:10px;
189
+ }
190
+ #efblcf.thumbnail .efbl_post_content{
191
+ float:left;
192
+ width: 77%;
193
+ }
194
+ #efblcf .efbl_post_content .efbl_author_info{
195
+ float: left;
196
+ width: 100%;
197
+ }
198
+ #efblcf .efbl_post_content .efbl_author_info .efbl_auth_logo{
199
+ float:left;
200
+ margin-right: 5px;
201
+ }
202
+ #efblcf .efbl_post_content .efbl_author_info p{
203
+ margin-bottom:0px;
204
+ padding-bottom: 0px;
205
+ line-height: 1.2;
206
+ }
207
+ #efblcf .efbl_post_content .efbl_author_info p a{
208
+ color:inherit;
209
+ text-decoration:none;
210
+ border: 0px;
211
+ }
212
+ #efblcf .efbl_post_content .efbl_author_info .efbl_story_time{
213
+ font-size:11px;
214
+ color:#eeee;
215
+ }
216
+
217
+ #efblcf .efbl_post_content .efbl_content_wraper{
218
+ float:left;
219
+ width:100%;
220
+ }
221
+
222
+ #efblcf .efbl_story_meta {
223
+ float: left;
224
+ margin-bottom: 10px;
225
+ width: 100%;
226
+ margin-top: 15px;
227
+ margin-bottom: 15px;
228
+ }
229
+ #efblcf .efbl_story_meta .efbl_read_more_link{
230
+ float:right;
231
+ margin-top: 5px;
232
+ }
233
+ #efblcf .efbl_shared_story{
234
+ padding:10px;
235
+ float:left;
236
+ width: 100%;
237
+ background-color:#f7f7f7;
238
+ border: 1px solid #eee;
239
+ -webkit-box-sizing: border-box;
240
+ -moz-box-sizing: border-box;
241
+ box-sizing: border-box;
242
+ }
243
+ #efblcf .efbl_shared_story.efbl_has_link_image .efbl_link_image{
244
+ float:left;
245
+ width: auto;
246
+ margin-right: 10px;
247
+ }
248
+ #efblcf .efbl_shared_story .efbl_link_text{
249
+ width:100%;
250
+ float:left;
251
+ }
252
+ #efblcf .efbl_shared_story.efbl_has_link_image .efbl_link_text{
253
+ float:left;
254
+ width:73%;
255
+ }
256
+ #efblcf .efbl_shared_story .efbl_link_text p{
257
+ margin-bottom:0px;
258
+ padding-bottom: 0px;
259
+ }
260
+ #efblcf .efbl_info {
261
+ float: left;
262
+ padding: 5px 0px 5px 7px;
263
+ background: #333;
264
+
265
+ }
266
+ #efblcf .efbl_info:hover {
267
+ cursor:pointer;
268
+ opacity:0.9;
269
+ }
270
+ .efbl_feed_wraper .efbl_custom_likebox{
271
+ margin-left:-10px;
272
+ float:left;
273
+ }
274
+
275
+ /*Ppopup CSS*/
276
+ #efblcf_holder img, #efblcf_holder video, #efblcf_holder iframe {
277
+ width:100%;
278
+ height:auto;
279
+ }
280
+ #efblcf_holder .efbl_popup_image, #efblcf_holder .efbl_popup_if_video, #efblcf_holder .efbl_popup_video, #efblcf_holder .efbl_popupp_footer{
281
+ display:none;
282
+ }
283
+ #efblcf_holder .efbl_popupp_footer{
284
+ padding:10px;
285
+ }
286
+ #efblcf_holder .efbl_popupp_footer p{
287
+ line-height: 1.3em;
288
+ }
289
+ #efblcf_holder {
290
+ -webkit-border-radius: 5px;
291
+ -moz-border-radius: 5px;
292
+ -ms-border-radius: 5px;
293
+ -o-border-radius: 5px;
294
+ border-radius: 5px;
295
+ }
296
+ .efbl_links_container{
297
+ display:none;
298
+ position: absolute;
299
+ background: #333;
300
+ padding: 10px;
301
+ }
302
+
303
+ .efbl_read_full_story{
304
+ float:left;
305
+ margin-right: 10px;
306
+ }
307
+ .efbl_links_container.efbl_slideIn{
308
+ display:block;
309
+ float:left;
310
+ }
311
+
312
+ #efblcf .efbl_comments_wraper {
313
+ float: left;
314
+ width: 100%;
315
+ margin-top:5px;
316
+ padding: 10px;
317
+ background:#eee;
318
+ -webkit-box-sizing: border-box;
319
+ -moz-box-sizing: border-box;
320
+ box-sizing: border-box;
321
+ display:none;
322
+ }
323
+ #efblcf .efbl_comments_wraper.efbl_cwraper_slide{
324
+ display:block;
325
+ }
326
+ #efblcf .efbl_comments_wraper .efbl_comments{
327
+ margin-bottom:10px;
328
+ float: left;
329
+ width: 100%;
330
+ }
331
+ #efblcf .efbl_comments_footer {
332
+ float: left;
333
+ margin-top: 5px;
334
+ border-top: 1px solid #fff;
335
+ width: 100%;
336
+ padding-top: 5px;
337
+ }
338
+ .efbl_comments_header
339
+ {
340
+ float: left;
341
+ margin-bottom: 5px;
342
+ border-bottom: 1px solid #fff;
343
+ width: 100%;
344
+ padding-bottom: 5px;
345
+ }
346
+ #efblcf .efbl_comments_wraper .efbl_commenter_image{
347
+ float:left;
348
+ width:32px;
349
+ margin-right: 10px;
350
+ margin-top: 7px;
351
+ }
352
+ #efblcf .efbl_comments_wraper .efbl_commenter_image a img{
353
+ border:0px;
354
+ }
355
+ #efblcf .efbl_comments_wraper .efbl_comment_text{
356
+ width:88%;
357
+ float:left;
358
+ }
359
+ #efblcf .efbl_comments_wraper p{
360
+ margin:0px;
361
+ padding:0px;
362
+ }
363
+
364
+
365
+ /**
366
+ * Fade-zoom animation for first dialog
367
+ */
368
+
369
+ /* start state */
370
+ .my-mfp-zoom-in .zoom-anim-dialog {
371
+ opacity: 0;
372
+
373
+ -webkit-transition: all 0.2s ease-in-out;
374
+ -moz-transition: all 0.2s ease-in-out;
375
+ -o-transition: all 0.2s ease-in-out;
376
+ transition: all 0.2s ease-in-out;
377
+
378
+
379
+
380
+ -webkit-transform: scale(0.8);
381
+ -moz-transform: scale(0.8);
382
+ -ms-transform: scale(0.8);
383
+ -o-transform: scale(0.8);
384
+ transform: scale(0.8);
385
+ }
386
+
387
+ /* animate in */
388
+ .my-mfp-zoom-in.mfp-ready .zoom-anim-dialog {
389
+ opacity: 1;
390
+
391
+ -webkit-transform: scale(1);
392
+ -moz-transform: scale(1);
393
+ -ms-transform: scale(1);
394
+ -o-transform: scale(1);
395
+ transform: scale(1);
396
+ }
397
+
398
+ /* animate out */
399
+ .my-mfp-zoom-in.mfp-removing .zoom-anim-dialog {
400
+ -webkit-transform: scale(0.8);
401
+ -moz-transform: scale(0.8);
402
+ -ms-transform: scale(0.8);
403
+ -o-transform: scale(0.8);
404
+ transform: scale(0.8);
405
+
406
+ opacity: 0;
407
+ }
408
+
409
+ /* Dark overlay, start state */
410
+ .my-mfp-zoom-in.mfp-bg {
411
+ opacity: 0;
412
+ -webkit-transition: opacity 0.3s ease-out;
413
+ -moz-transition: opacity 0.3s ease-out;
414
+ -o-transition: opacity 0.3s ease-out;
415
+ transition: opacity 0.3s ease-out;
416
+ }
417
+ /* animate in */
418
+ .my-mfp-zoom-in.mfp-ready.mfp-bg {
419
+ opacity: 0.8;
420
+ }
421
+ /* animate out */
422
+ .my-mfp-zoom-in.mfp-removing.mfp-bg {
423
+ opacity: 0;
424
+ }
425
+
426
+ @media only screen and (max-width:768px){
427
+ #efblcf.thumbnail .efbl_story_photo, #efblcf.thumbnail .efbl_post_content, #efblcf.halfwidth .efbl_story_photo, #efblcf.halfwidth .efbl_post_content{
428
+ width: 100%;
429
+ margin-bottom:10px;
430
+ }
431
+
432
+ #efbl_popup{
433
+ width:auto !important;
434
+ height:auto !important;
435
+ }
436
+ #efblcf .efbl_shared_story.efbl_has_link_image .efbl_link_text
437
+ {
438
+ width:100%;
439
+ }
440
+ #efblcf .efbl_shared_story
441
+ {
442
+ text-align:center;
443
+ }
444
+ #efblcf .efbl_shared_story.efbl_has_link_image .efbl_link_image
445
+ {
446
+ float:none;
447
+
448
+ }
449
+ .efbl_links_container
450
+ {
451
+ bottom:-30px;
452
+ }
453
+
454
  }
public/assets/images/facebook.png ADDED
Binary file
public/assets/images/linkedin-16.png ADDED
Binary file
public/assets/images/plus.png ADDED
Binary file
public/assets/images/popup_close.png ADDED
Binary file
public/assets/images/square-google-plus-16.png ADDED
Binary file
public/assets/images/twitter-16.png ADDED
Binary file
public/assets/js/jquery.cookie.js ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery Cookie Plugin v1.4.1
3
+ * https://github.com/carhartl/jquery-cookie
4
+ *
5
+ * Copyright 2006, 2014 Klaus Hartl
6
+ * Released under the MIT license
7
+ */
8
+ (function (factory) {
9
+ if (typeof define === 'function' && define.amd) {
10
+ // AMD
11
+ define(['jquery'], factory);
12
+ } else if (typeof exports === 'object') {
13
+ // CommonJS
14
+ factory(require('jquery'));
15
+ } else {
16
+ // Browser globals
17
+ factory(jQuery);
18
+ }
19
+ }(function ($) {
20
+
21
+ var pluses = /\+/g;
22
+
23
+ function encode(s) {
24
+ return config.raw ? s : encodeURIComponent(s);
25
+ }
26
+
27
+ function decode(s) {
28
+ return config.raw ? s : decodeURIComponent(s);
29
+ }
30
+
31
+ function stringifyCookieValue(value) {
32
+ return encode(config.json ? JSON.stringify(value) : String(value));
33
+ }
34
+
35
+ function parseCookieValue(s) {
36
+ if (s.indexOf('"') === 0) {
37
+ // This is a quoted cookie as according to RFC2068, unescape...
38
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
39
+ }
40
+
41
+ try {
42
+ // Replace server-side written pluses with spaces.
43
+ // If we can't decode the cookie, ignore it, it's unusable.
44
+ // If we can't parse the cookie, ignore it, it's unusable.
45
+ s = decodeURIComponent(s.replace(pluses, ' '));
46
+ return config.json ? JSON.parse(s) : s;
47
+ } catch(e) {}
48
+ }
49
+
50
+ function read(s, converter) {
51
+ var value = config.raw ? s : parseCookieValue(s);
52
+ return $.isFunction(converter) ? converter(value) : value;
53
+ }
54
+
55
+ var config = $.cookie = function (key, value, options) {
56
+
57
+ // Write
58
+
59
+ if (arguments.length > 1 && !$.isFunction(value)) {
60
+ options = $.extend({}, config.defaults, options);
61
+
62
+ if (typeof options.expires === 'number') {
63
+ var days = options.expires, t = options.expires = new Date();
64
+ t.setTime(+t + days * 864e+5);
65
+ }
66
+
67
+ return (document.cookie = [
68
+ encode(key), '=', stringifyCookieValue(value),
69
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
70
+ options.path ? '; path=' + options.path : '',
71
+ options.domain ? '; domain=' + options.domain : '',
72
+ options.secure ? '; secure' : ''
73
+ ].join(''));
74
+ }
75
+
76
+ // Read
77
+
78
+ var result = key ? undefined : {};
79
+
80
+ // To prevent the for loop in the first place assign an empty array
81
+ // in case there are no cookies at all. Also prevents odd result when
82
+ // calling $.cookie().
83
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
84
+
85
+ for (var i = 0, l = cookies.length; i < l; i++) {
86
+ var parts = cookies[i].split('=');
87
+ var name = decode(parts.shift());
88
+ var cookie = parts.join('=');
89
+
90
+ if (key && key === name) {
91
+ // If second argument (value) is a function it's a converter...
92
+ result = read(cookie, value);
93
+ break;
94
+ }
95
+
96
+ // Prevent storing a cookie that we couldn't decode.
97
+ if (!key && (cookie = read(cookie)) !== undefined) {
98
+ result[name] = cookie;
99
+ }
100
+ }
101
+
102
+ return result;
103
+ };
104
+
105
+ config.defaults = {};
106
+
107
+ $.removeCookie = function (key, options) {
108
+ if ($.cookie(key) === undefined) {
109
+ return false;
110
+ }
111
+
112
+ // Must not alter options, thus extending a fresh object...
113
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
114
+ return !$.cookie(key);
115
+ };
116
+
117
+ }));
public/assets/js/public.js CHANGED
@@ -1,10 +1,81 @@
1
- (function ( $ ) {
2
- "use strict";
3
-
4
- $(function () {
5
-
6
- // Place your public-facing JavaScript here
7
-
8
- });
9
-
10
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function($) {
2
+
3
+ $('.efbl_feed_popup').magnificPopup({
4
+ type: 'inline',
5
+ preloader: false,
6
+ mainClass: 'my-mfp-zoom-in',
7
+ callbacks: {
8
+ beforeOpen: function() {
9
+
10
+
11
+ var $story_link = this.st.el.data('storylink'),
12
+ $story_link_text = this.st.el.data('linktext'),
13
+ $caption = this.st.el.data('caption'),
14
+ $image_url = this.st.el.data('imagelink'),
15
+ $iframe_vid_url = this.st.el.data('videolink'),
16
+ $video_url = this.st.el.data('video');
17
+
18
+ if($image_url){
19
+ $('#efblcf_holder .efbl_popup_image').attr('src', $image_url);
20
+ $('#efblcf_holder .efbl_popup_image').css('display', 'block');
21
+ }
22
+
23
+ if($iframe_vid_url){
24
+ $('#efblcf_holder .efbl_popup_if_video').attr('src', $iframe_vid_url);
25
+ $('#efblcf_holder .efbl_popup_if_video').css({
26
+ 'display' : 'block',
27
+ 'width' : '720px',
28
+ 'height' : '400px'
29
+ });
30
+
31
+ }
32
+
33
+ if($video_url){
34
+ $('#efblcf_holder .efbl_popup_video').attr('src', $video_url);
35
+ $('#efblcf_holder .efbl_popup_video').css('display', 'block');
36
+ setTimeout(function(){
37
+ $('#efblcf_holder .efbl_popup_video')[0].play();
38
+ }, 500);
39
+
40
+
41
+ }
42
+
43
+ if($caption){
44
+ $('#efblcf_holder .efbl_popupp_footer').html('<p>'+$caption+' <a class="efbl_popup_readmore" href="'+$story_link+'" target="_blank">'+$story_link_text+'</a></p>');
45
+ $('#efblcf_holder .efbl_popupp_footer').css('display', 'block');
46
+ }
47
+
48
+
49
+ },
50
+ beforeClose: function (){
51
+
52
+ //Clear the container for new instance
53
+ $('#efblcf_holder .efbl_popup_image').attr('src', '');
54
+ $('#efblcf_holder .efbl_popup_image').css('display', 'none');
55
+
56
+ $('#efblcf_holder .efbl_popup_if_video').attr('src', '');
57
+ $('#efblcf_holder .efbl_popup_if_video').css('display', 'none');
58
+
59
+ $('#efblcf_holder .efbl_popup_video').attr('src', '');
60
+ $('#efblcf_holder .efbl_popup_video').css('display', 'none');
61
+
62
+ $('#efblcf_holder .efbl_popupp_footer').html('');
63
+ $('#efblcf_holder .efbl_popupp_footer').css('display', 'none');
64
+
65
+ }
66
+ }
67
+
68
+
69
+
70
+ });
71
+
72
+ $('.efbl_share_links').click(function(){
73
+ $(this).next('.efbl_links_container').toggle( "slide" );
74
+ });
75
+
76
+ $('.efbl_info').click(function(){
77
+ $(this).siblings('.efbl_comments_wraper').toggleClass( "efbl_cwraper_slide" );
78
+ });
79
+
80
+
81
+ });
public/assets/js/wp-config.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The base configurations of the WordPress.
5
+ *
6
+ * This file has the following configurations: MySQL settings, Table Prefix,
7
+ * Secret Keys, WordPress Language, and ABSPATH. You can find more information
8
+ * by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing
9
+ * wp-config.php} Codex page. You can get the MySQL settings from your web host.
10
+ *
11
+ * This file is used by the wp-config.php creation script during the
12
+ * installation. You don't have to use the web site, you can just copy this file
13
+ * to "wp-config.php" and fill in the values.
14
+ *
15
+ * @package WordPress
16
+ */
17
+
18
+ // ** MySQL settings - You can get this info from your web host ** //
19
+ /** The name of the database for WordPress */
20
+ define('WP_CACHE', true); //Added by WP-Cache Manager
21
+ define( 'WPCACHEHOME', '/home2/sjaved/public_html/wpmu/wp-content/plugins/wp-super-cache/' ); //Added by WP-Cache Manager
22
+ //Added by WP-Cache Manager
23
+ define('DB_NAME', 'sjaved_wrdp16');
24
+
25
+ /** MySQL database username */
26
+ define('DB_USER', 'sjaved_wrdp16');
27
+
28
+ /** MySQL database password */
29
+ define('DB_PASSWORD', 'Cpo1si9NfSwtVGN');
30
+
31
+ /** MySQL hostname */
32
+ define('DB_HOST', 'localhost');
33
+
34
+ /** Database Charset to use in creating database tables. */
35
+ define('DB_CHARSET', 'utf8');
36
+
37
+ /** The Database Collate type. Don't change this if in doubt. */
38
+ define('DB_COLLATE', '');
39
+
40
+ /**#@+
41
+ * Authentication Unique Keys and Salts.
42
+ *
43
+ * Change these to different unique phrases!
44
+ * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
45
+ * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
46
+ *
47
+ * @since 2.6.0
48
+ */
49
+ define('AUTH_KEY', '?-4y?)(7kGFO)<;=5Se$3ANta5/9!|HxOU>UixwPvF?=;q00mClN4*lM\`?opIFq$r*u;m*$');
50
+ define('SECURE_AUTH_KEY', 't)B*8IwdOBRZ;|^>m;IXti;!RE6Qr\`1pyJm>vLe=s@jUs1rDXw(4@Oh1@C<A/ixEQi)Cjz|E9T;w');
51
+ define('LOGGED_IN_KEY', 'jk:aM6KOP93c||<ws\`0^\`N~l)_KI~k(LV#V_oIMNX~)MB=r>d5|dA>ko$@@iBuHkNNTru<hekkR');
52
+ define('NONCE_KEY', 'PYQF47|@<wXGo*mreF)MhU75nAd8iE!Wc7jyPgmeua)_kDiMO_\`x6GZfku@K4F7G$@/$Yp2nEu1V#xF>');
53
+ define('AUTH_SALT', 'NWexy6#i9hodSweNPG^XlH~!Zy>mTPTwAo!:>feOGp@U|dicOzbBuNJykzK');
54
+ define('SECURE_AUTH_SALT', '0SOLQpC)=;<$18v>3;l--3V$u;amc?9~g@$8C)q/Rn9?z!4bbA=!v*qMbST5i<UJ:)I1nc1LMsYTT\`hRI!#_@@v=!qeo');
55
+ define('LOGGED_IN_SALT', 'B\`H$uOeO=Sn\`h!s$dW=|JTHSaiKtp_vE|2GnNXawB5Nd7>vS6ksZ@uinE:Q1^S~MxA=iU8nxuzN');
56
+ define('NONCE_SALT', 'TZVC:oh8iLXkFK<CF0zKpWS)uHu(b@pw#6~(DGL4c_Lar:Ttr<zHT:>U-aUxqbXsw#InSBfEP?');
57
+
58
+ /**#@-*/
59
+ define('AUTOSAVE_INTERVAL', 600 );
60
+ define('WP_POST_REVISIONS', 1);
61
+ define( 'WP_CRON_LOCK_TIMEOUT', 120 );
62
+ define( 'WP_AUTO_UPDATE_CORE', true );
63
+ /**
64
+ * WordPress Database Table prefix.
65
+ *
66
+ * You can have multiple installations in one database if you give each a unique
67
+ * prefix. Only numbers, letters, and underscores please!
68
+ */
69
+ $table_prefix = 'wp_';
70
+
71
+ /**
72
+ * For developers: WordPress debugging mode.
73
+ *
74
+ * Change this to true to enable the display of notices during development.
75
+ * It is strongly recommended that plugin and theme developers use WP_DEBUG
76
+ * in their development environments.
77
+ */
78
+ define('WP_DEBUG', false);
79
+
80
+ //define('PO_GLOBAL', true);
81
+
82
+ define('WP_MEMORY_LIMIT', '512M');
83
+ ini_set('max_execution_time', 300); //300 seconds = 5 minutes
84
+
85
+ define('WP_ALLOW_MULTISITE', true);
86
+
87
+ define('MULTISITE', true);
88
+ define('SUBDOMAIN_INSTALL', false);
89
+ define('DOMAIN_CURRENT_SITE', 'jwebsol.com');
90
+ define('PATH_CURRENT_SITE', '/wpmu/');
91
+ define('SITE_ID_CURRENT_SITE', 1);
92
+ define('BLOG_ID_CURRENT_SITE', 1);
93
+
94
+ define('SUNRISE', 'on');
95
+
96
+ //define ( 'BP_ENABLE_MULTIBLOG', true );
97
+
98
+ /* That's all, stop editing! Happy blogging. */
99
+
100
+ /** Absolute path to the WordPress directory. */
101
+ if ( !defined('ABSPATH') )
102
+ define('ABSPATH', dirname(__FILE__) . '/');
103
+
104
+ /** Sets up WordPress vars and included files. */
105
+ require_once(ABSPATH . 'wp-settings.php');
106
+ add_filter( 'auto_update_plugin', '__return_true' );
107
+ add_filter( 'auto_update_theme', '__return_true' );
public/easy-facebook-likebox.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name.
4
  *
5
  * @package Plugin_Name
6
- * @author Your Name <email@example.com>
7
  * @license GPL-2.0+
8
  * @link http://example.com
9
  * @copyright 2014 Your Name or Company Name
@@ -21,6 +21,10 @@
21
  * @package Plugin_Name
22
  * @author Your Name <email@example.com>
23
  */
 
 
 
 
24
  class Easy_Facebook_Likebox {
25
 
26
  /**
@@ -79,13 +83,10 @@ class Easy_Facebook_Likebox {
79
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
80
 
81
  add_shortcode( 'efb_likebox', array( $this, 'efb_likebox_shortcode' ) );
82
-
83
- /* Define custom functionality.
84
- * Refer To http://codex.wordpress.org/Plugin_API#Hooks.2C_Actions_and_Filters
85
- */
86
- //add_action( '@TODO', array( $this, 'action_method_name' ) );
87
- //add_filter( '@TODO', array( $this, 'filter_method_name' ) );
88
-
89
  }
90
 
91
  /**
@@ -284,37 +285,23 @@ class Easy_Facebook_Likebox {
284
  */
285
  public function enqueue_scripts() {
286
  wp_enqueue_script( $this->plugin_slug . '-popup-script', plugins_url( 'assets/popup/jquery.magnific-popup.min.js', __FILE__ ), array( 'jquery' ), self::VERSION );
287
- wp_enqueue_script( $this->plugin_slug . '-plugin-script', plugins_url( 'assets/js/public.js', __FILE__ ), array( 'jquery', $this->plugin_slug . '-popup-script' ), self::VERSION );
 
 
 
288
  }
289
-
290
- /**
291
- * NOTE: Actions are points in the execution of a page or process
292
- * lifecycle that WordPress fires.
293
- *
294
- * Actions: http://codex.wordpress.org/Plugin_API#Actions
295
- * Reference: http://codex.wordpress.org/Plugin_API/Action_Reference
296
- *
297
- * @since 1.1.0
298
- */
299
- public function action_method_name() {
300
- // @TODO: Define your action hook callback here
301
  }
302
-
303
- /**
304
- * NOTE: Filters are points of execution in which WordPress modifies data
305
- * before saving it or sending it to the browser.
306
- *
307
- * Filters: http://codex.wordpress.org/Plugin_API#Filters
308
- * Reference: http://codex.wordpress.org/Plugin_API/Filter_Reference
309
- *
310
- * @since 1.1.0
311
- */
312
- public function filter_method_name() {
313
- // @TODO: Define your filter hook callback here
314
  }
315
 
316
- public function efb_likebox_shortcode($atts, $content=""){
317
- return $this->render_fb_box($atts);
318
  }
319
 
320
  /**
@@ -362,7 +349,7 @@ class Easy_Facebook_Likebox {
362
 
363
  $returner .= '<div class="fb-like-box '.$responsive.' " data-href="https://www.facebook.com/'.$page_name_id.'" data-colorscheme="'.$colorscheme.'" data-width="'.$box_width.'" data-height="'.$box_height.'" '.$show_faces.' '.$show_header.' '.$show_stream.' '.$show_border.'></div>';
364
 
365
- /* echo '<pre>';
366
  echo htmlspecialchars($returner);
367
  echo '</pre>';*/
368
 
@@ -370,8 +357,128 @@ class Easy_Facebook_Likebox {
370
 
371
  }
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  function efbl_display_popup(){
374
- include('views/public.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
375
  }
376
 
377
 
3
  * Plugin Name.
4
  *
5
  * @package Plugin_Name
6
+ * @author Your Name <email@example.com>
7
  * @license GPL-2.0+
8
  * @link http://example.com
9
  * @copyright 2014 Your Name or Company Name
21
  * @package Plugin_Name
22
  * @author Your Name <email@example.com>
23
  */
24
+ // Include and instantiate the class.
25
+ require_once 'includes/Mobile_Detect.php';
26
+ $mDetect = new Mobile_Detect;
27
+
28
  class Easy_Facebook_Likebox {
29
 
30
  /**
83
  add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
84
 
85
  add_shortcode( 'efb_likebox', array( $this, 'efb_likebox_shortcode' ) );
86
+ add_shortcode( 'efb_pageplugin', array( $this, 'efb_pageplugin_shortcode' ) );
87
+
88
+ add_shortcode( 'efb_feed', array( $this, 'efb_feed_shortcode' ) );
89
+
 
 
 
90
  }
91
 
92
  /**
285
  */
286
  public function enqueue_scripts() {
287
  wp_enqueue_script( $this->plugin_slug . '-popup-script', plugins_url( 'assets/popup/jquery.magnific-popup.min.js', __FILE__ ), array( 'jquery' ), self::VERSION );
288
+ wp_enqueue_script( $this->plugin_slug . '-cookie-script', plugins_url( 'assets/js/jquery.cookie.js', __FILE__ ), array( 'jquery' ), self::VERSION );
289
+
290
+ wp_enqueue_script( $this->plugin_slug . '-public-script', plugins_url( 'assets/js/public.js', __FILE__ ), array( 'jquery', $this->plugin_slug . '-popup-script', $this->plugin_slug . '-cookie-script'), self::VERSION );
291
+
292
  }
293
+
294
+
295
+ public function efb_likebox_shortcode($atts, $content=""){
296
+ return $this->render_fb_page_plugin($atts);
 
 
 
 
 
 
 
 
297
  }
298
+
299
+ public function efb_pageplugin_shortcode($atts, $content=""){
300
+ return $this->render_fb_page_plugin($atts);
 
 
 
 
 
 
 
 
 
301
  }
302
 
303
+ public function efb_feed_shortcode($atts, $content=""){
304
+ return $this->render_fbfeed_box($atts);
305
  }
306
 
307
  /**
349
 
350
  $returner .= '<div class="fb-like-box '.$responsive.' " data-href="https://www.facebook.com/'.$page_name_id.'" data-colorscheme="'.$colorscheme.'" data-width="'.$box_width.'" data-height="'.$box_height.'" '.$show_faces.' '.$show_header.' '.$show_stream.' '.$show_border.'></div>';
351
 
352
+ /*echo '<pre>';
353
  echo htmlspecialchars($returner);
354
  echo '</pre>';*/
355
 
357
 
358
  }
359
 
360
+ public function render_fbfeed_box($atts) {
361
+ $defaults = '';
362
+ $instance = wp_parse_args( (array) $atts, $defaults );
363
+
364
+ ob_start();
365
+
366
+ include('views/feed.php');
367
+
368
+ $returner = ob_get_contents();
369
+
370
+ ob_end_clean();
371
+
372
+
373
+ return $returner;
374
+
375
+ }
376
+
377
+ /**
378
+ * This fucntion will render the facebook page plugin
379
+ *
380
+ *
381
+ * @since 4.0
382
+ */
383
+ public function render_fb_page_plugin($options) {
384
+ /*echo "<pre>";
385
+ print_r($options);
386
+ exit;*/
387
+
388
+ extract($options, EXTR_SKIP);
389
+
390
+ if( empty( $fb_appid ) ){
391
+ $fb_appid = '395202813876688';
392
+ }
393
+
394
+ if( empty( $locale ) ){
395
+ $locale = 'en_US';
396
+ }
397
+
398
+ if( !empty( $locale_other ) ){
399
+ $locale = $locale_other;
400
+ }
401
+
402
+ $pieces = explode('/', $fanpage_url); // divides the string in pieces where '/' is found
403
+ $page_name_id = end($pieces); //takes the last piece
404
+
405
+ $show_stream = ( $show_stream == 1 ) ? 'data-show-posts=true' : 'data-show-posts=false';
406
+ $show_faces = ( $show_faces == 1 ) ? 'data-show-facepile=true' : 'data-show-facepile=false';
407
+ $hide_cover = ( $hide_cover == 1 ) ? 'data-hide-cover="true"' : 'data-hide-cover="false"' ;
408
+
409
+ $responsive = ( $responsive == 1 ) ? 'data-adapt-container-widthtrue' : 'data-adapt-container-width=false';
410
+ $hide_cta = ( $hide_cta == 1 ) ? 'data-hide-cta=true' : 'data-hide-cta=false';
411
+ $small_header = ( $small_header == 1 ) ? 'data-small-header="true"' : 'data-small-header="false"' ;
412
+
413
+ $returner = '<div id="fb-root"></div>
414
+ <script>(function(d, s, id) {
415
+ var js, fjs = d.getElementsByTagName(s)[0];
416
+ if (d.getElementById(id)) return;
417
+ js = d.createElement(s); js.id = id;
418
+ js.src = "//connect.facebook.net/'.$locale.'/all.js#xfbml=1&appId='.$fb_appid.'";
419
+ fjs.parentNode.insertBefore(js, fjs);
420
+ }(document, \'script\', \'facebook-jssdk\'));</script>';
421
+
422
+ $returner .= '<div class="fb-page " data-href="https://www.facebook.com/'.$page_name_id.'" '.$hide_cover.' data-width="'.$box_width.'" data-height="'.$box_height.'" '.$show_faces.' '.$show_stream.' '.$responsive.' '.$hide_cta.' '.$small_header.'></div>';
423
+
424
+ return $returner;
425
+
426
+ }
427
+
428
  function efbl_display_popup(){
429
+ global $mDetect;
430
+ $options = get_option( 'efbl_settings_display_options' );
431
+
432
+ //Return if not enable
433
+ if($options['efbl_enable_popup'] != 1 ) return;
434
+
435
+ //check if to display to logged in users
436
+ if($options['efbl_enabe_if_home'] == 1 ) {
437
+
438
+ //Do not show if not home page
439
+ if(is_home() || is_front_page()){
440
+ //do nothing
441
+ }else{
442
+ return;
443
+ }
444
+ }
445
+
446
+ //check if to display to logged in users
447
+ if($options['efbl_enabe_if_login'] == 1 ) {
448
+
449
+ //Do not show when user is not logged in
450
+ if(!is_user_logged_in()) return;
451
+ }
452
+
453
+ //check if to display to logged in users
454
+ if($options['efbl_enabe_if_login'] == 1 ) {
455
+
456
+ //Do not show when user is not logged in
457
+ if(!is_user_logged_in()) return;
458
+ }
459
+
460
+
461
+ //check if to display to not-logged in users
462
+ if($options['efbl_enabe_if_not_login'] == 1 ) {
463
+
464
+ //Do not show when user is logged in
465
+ if(is_user_logged_in()) return;
466
+ }
467
+
468
+ //check if to display to not-logged in users
469
+ if($options['efbl_do_not_show_on_mobile'] == 1 ) {
470
+
471
+ // do not show on mobile
472
+ if( $mDetect->isMobile() && !$mDetect->isTablet() ) return;
473
+
474
+ }
475
+
476
+ /*echo "<pre>";
477
+ print_r($mDetect);
478
+ exit;*/
479
+
480
+ include('views/public.php');
481
+
482
  }
483
 
484
 
public/includes/Mobile_Detect.php ADDED
@@ -0,0 +1,1341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Mobile Detect Library
4
+ * =====================
5
+ *
6
+ * Motto: "Every business should have a mobile detection script to detect mobile readers"
7
+ *
8
+ * Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
9
+ * It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
10
+ *
11
+ * @author Current authors: Serban Ghita <serbanghita@gmail.com>
12
+ * Nick Ilyin <nick.ilyin@gmail.com>
13
+ *
14
+ * Original author: Victor Stanciu <vic.stanciu@gmail.com>
15
+ *
16
+ * @license Code and contributions have 'MIT License'
17
+ * More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
18
+ *
19
+ * @link Homepage: http://mobiledetect.net
20
+ * GitHub Repo: https://github.com/serbanghita/Mobile-Detect
21
+ * Google Code: http://code.google.com/p/php-mobile-detect/
22
+ * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
23
+ * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
24
+ *
25
+ * @version 2.8.11
26
+ */
27
+
28
+ class Mobile_Detect
29
+ {
30
+ /**
31
+ * Mobile detection type.
32
+ *
33
+ * @deprecated since version 2.6.9
34
+ */
35
+ const DETECTION_TYPE_MOBILE = 'mobile';
36
+
37
+ /**
38
+ * Extended detection type.
39
+ *
40
+ * @deprecated since version 2.6.9
41
+ */
42
+ const DETECTION_TYPE_EXTENDED = 'extended';
43
+
44
+ /**
45
+ * A frequently used regular expression to extract version #s.
46
+ *
47
+ * @deprecated since version 2.6.9
48
+ */
49
+ const VER = '([\w._\+]+)';
50
+
51
+ /**
52
+ * Top-level device.
53
+ */
54
+ const MOBILE_GRADE_A = 'A';
55
+
56
+ /**
57
+ * Mid-level device.
58
+ */
59
+ const MOBILE_GRADE_B = 'B';
60
+
61
+ /**
62
+ * Low-level device.
63
+ */
64
+ const MOBILE_GRADE_C = 'C';
65
+
66
+ /**
67
+ * Stores the version number of the current release.
68
+ */
69
+ const VERSION = '2.8.11';
70
+
71
+ /**
72
+ * A type for the version() method indicating a string return value.
73
+ */
74
+ const VERSION_TYPE_STRING = 'text';
75
+
76
+ /**
77
+ * A type for the version() method indicating a float return value.
78
+ */
79
+ const VERSION_TYPE_FLOAT = 'float';
80
+
81
+ /**
82
+ * The User-Agent HTTP header is stored in here.
83
+ * @var string
84
+ */
85
+ protected $userAgent = null;
86
+
87
+ /**
88
+ * HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE.
89
+ * @var array
90
+ */
91
+ protected $httpHeaders = array();
92
+
93
+ /**
94
+ * The matching Regex.
95
+ * This is good for debug.
96
+ * @var string
97
+ */
98
+ protected $matchingRegex = null;
99
+
100
+ /**
101
+ * The matches extracted from the regex expression.
102
+ * This is good for debug.
103
+ * @var string
104
+ */
105
+ protected $matchesArray = null;
106
+
107
+ /**
108
+ * The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
109
+ *
110
+ * @deprecated since version 2.6.9
111
+ *
112
+ * @var string
113
+ */
114
+ protected $detectionType = self::DETECTION_TYPE_MOBILE;
115
+
116
+ /**
117
+ * HTTP headers that trigger the 'isMobile' detection
118
+ * to be true.
119
+ *
120
+ * @var array
121
+ */
122
+ protected static $mobileHeaders = array(
123
+
124
+ 'HTTP_ACCEPT' => array('matches' => array(
125
+ // Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/
126
+ 'application/x-obml2d',
127
+ // BlackBerry devices.
128
+ 'application/vnd.rim.html',
129
+ 'text/vnd.wap.wml',
130
+ 'application/vnd.wap.xhtml+xml'
131
+ )),
132
+ 'HTTP_X_WAP_PROFILE' => null,
133
+ 'HTTP_X_WAP_CLIENTID' => null,
134
+ 'HTTP_WAP_CONNECTION' => null,
135
+ 'HTTP_PROFILE' => null,
136
+ // Reported by Opera on Nokia devices (eg. C3).
137
+ 'HTTP_X_OPERAMINI_PHONE_UA' => null,
138
+ 'HTTP_X_NOKIA_GATEWAY_ID' => null,
139
+ 'HTTP_X_ORANGE_ID' => null,
140
+ 'HTTP_X_VODAFONE_3GPDPCONTEXT' => null,
141
+ 'HTTP_X_HUAWEI_USERID' => null,
142
+ // Reported by Windows Smartphones.
143
+ 'HTTP_UA_OS' => null,
144
+ // Reported by Verizon, Vodafone proxy system.
145
+ 'HTTP_X_MOBILE_GATEWAY' => null,
146
+ // Seen this on HTC Sensation. SensationXE_Beats_Z715e.
147
+ 'HTTP_X_ATT_DEVICEID' => null,
148
+ // Seen this on a HTC.
149
+ 'HTTP_UA_CPU' => array('matches' => array('ARM')),
150
+ );
151
+
152
+ /**
153
+ * List of mobile devices (phones).
154
+ *
155
+ * @var array
156
+ */
157
+ protected static $phoneDevices = array(
158
+ 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes
159
+ 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
160
+ 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m',
161
+ 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6',
162
+ // @todo: Is 'Dell Streak' a tablet or a phone? ;)
163
+ 'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
164
+ 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925',
165
+ 'Samsung' => 'Samsung|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750',
166
+ 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802)',
167
+ 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
168
+ 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
169
+ // http://www.micromaxinfo.com/mobiles/smartphones
170
+ // Added because the codes might conflict with Acer Tablets.
171
+ 'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b',
172
+ // @todo Complete the regex.
173
+ 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ;
174
+ 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
175
+ // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
176
+ // Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
177
+ 'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
178
+ // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
179
+ 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
180
+ 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
181
+ // Added simvalley mobile just for fun. They have some interesting devices.
182
+ // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
183
+ 'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
184
+ // Wolfgang - a brand that is sold by Aldi supermarkets.
185
+ // http://www.wolfgangmobile.com/
186
+ 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q',
187
+ 'Alcatel' => 'Alcatel',
188
+ 'Nintendo' => 'Nintendo 3DS',
189
+ // http://en.wikipedia.org/wiki/Amoi
190
+ 'Amoi' => 'Amoi',
191
+ // http://en.wikipedia.org/wiki/INQ
192
+ 'INQ' => 'INQ',
193
+ // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
194
+ 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser',
195
+ );
196
+
197
+ /**
198
+ * List of tablet devices.
199
+ *
200
+ * @var array
201
+ */
202
+ protected static $tabletDevices = array(
203
+ 'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic.
204
+ 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)|^.*Android.*Nexus(?:(?!Mobile).)*$',
205
+ 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-I9205|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T707A|SM-T807A|SM-T237P|SM-T807P|SM-P607T|SM-T217T|SM-T337T', // SCH-P709|SCH-P729|SM-T2558 - Samsung Mega - treat them like a regular phone.
206
+ // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html
207
+ 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI)\b',
208
+ // Only the Surface tablets with Windows RT are considered mobile.
209
+ // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
210
+ 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)',
211
+ // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
212
+ 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10',
213
+ // Watch out for PadFone, see #132.
214
+ // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/
215
+ 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG',
216
+ 'BlackBerryTablet' => 'PlayBook|RIM Tablet',
217
+ 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410',
218
+ 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
219
+ 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
220
+ // http://www.acer.ro/ac/ro/RO/content/drivers
221
+ // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
222
+ // http://us.acer.com/ac/en/US/content/group/tablets
223
+ // http://www.acer.de/ac/de/DE/content/models/tablets/
224
+ // Can conflict with Micromax and Motorola phones codes.
225
+ 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b',
226
+ // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
227
+ // http://us.toshiba.com/tablets/tablet-finder
228
+ // http://www.toshiba.co.jp/regza/tablet/
229
+ 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
230
+ // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
231
+ // http://www.lg.com/us/tablets
232
+ 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b',
233
+ 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b',
234
+ // Prestigio Tablets http://www.prestigio.com/support
235
+ 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD',
236
+ // http://support.lenovo.com/en_GB/downloads/default.page?#
237
+ 'LenovoTablet' => 'Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)',
238
+ // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets
239
+ 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7',
240
+ // http://www.yarvik.com/en/matrix/tablets/
241
+ 'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b',
242
+ 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
243
+ 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',
244
+ // http://www.intenso.de/kategorie_en.php?kategorie=33
245
+ // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate
246
+ 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004',
247
+ // IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
248
+ 'IRUTablet' => 'M702pro',
249
+ 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b',
250
+ // http://www.e-boda.ro/tablete-pc.html
251
+ 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
252
+ // http://www.allview.ro/produse/droseries/lista-tablete-pc/
253
+ 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
254
+ // http://wiki.archosfans.com/index.php?title=Main_Page
255
+ 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b',
256
+ // http://www.ainol.com/plugin.php?identifier=ainol&module=product
257
+ 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
258
+ // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
259
+ // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
260
+ // http://www.sony.jp/support/tablet/
261
+ 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551',
262
+ // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8
263
+ 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b',
264
+ // db + http://www.cube-tablet.com/buy-products.html
265
+ 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
266
+ // http://www.cobyusa.com/?p=pcat&pcat_id=3001
267
+ 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
268
+ // http://www.match.net.cn/products.asp
269
+ 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733',
270
+ // http://www.msi.com/support
271
+ // @todo Research the Windows Tablets.
272
+ 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b',
273
+ // @todo http://www.kyoceramobile.com/support/drivers/
274
+ // 'KyoceraTablet' => null,
275
+ // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/
276
+ // 'IntextTablet' => null,
277
+ // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
278
+ // http://www.imp3.net/14/show.php?itemid=20454
279
+ 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
280
+ // http://www.rock-chips.com/index.php?do=prod&pid=2
281
+ 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
282
+ // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
283
+ 'FlyTablet' => 'IQ310|Fly Vision',
284
+ // http://www.bqreaders.com/gb/tablets-prices-sale.html
285
+ 'bqTablet' => 'bq.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant)|Maxwell.*Lite|Maxwell.*Plus',
286
+ // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
287
+ // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
288
+ 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim',
289
+ // Nec or Medias Tab
290
+ 'NecTablet' => '\bN-06D|\bN-08D',
291
+ // Pantech Tablets: http://www.pantechusa.com/phones/
292
+ 'PantechTablet' => 'Pantech.*P4100',
293
+ // Broncho Tablets: http://www.broncho.cn/ (hard to find)
294
+ 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
295
+ // http://versusuk.com/support.html
296
+ 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b',
297
+ // http://www.zync.in/index.php/our-products/tablet-phablets
298
+ 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
299
+ // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
300
+ 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
301
+ // https://www.nabitablet.com/
302
+ 'NabiTablet' => 'Android.*\bNabi',
303
+ 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build',
304
+ // French Danew Tablets http://www.danew.com/produits-tablette.php
305
+ 'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b',
306
+ // Texet Tablets and Readers http://www.texet.ru/tablet/
307
+ 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
308
+ // Avoid detecting 'PLAYSTATION 3' as mobile.
309
+ 'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
310
+ // http://www.trekstor.de/surftabs.html
311
+ 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab',
312
+ // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
313
+ 'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b',
314
+ // http://www.advandigital.com/index.php?link=content-product&jns=JP001
315
+ // because of the short codenames we have to include whitespaces to reduce the possible conflicts.
316
+ 'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ',
317
+ // http://www.danytech.com/category/tablet-pc
318
+ 'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
319
+ // http://www.galapad.net/product.html
320
+ 'GalapadTablet' => 'Android.*\bG1\b',
321
+ // http://www.micromaxinfo.com/tablet/funbook
322
+ 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b',
323
+ // http://www.karbonnmobiles.com/products_tablet.php
324
+ 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b',
325
+ // http://www.myallfine.com/Products.asp
326
+ 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
327
+ // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
328
+ 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b',
329
+ // http://www.yonesnav.com/products/products.php
330
+ 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
331
+ // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
332
+ // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
333
+ 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
334
+ // http://www.gloryunion.cn/products.asp
335
+ // http://www.allwinnertech.com/en/apply/mobile.html
336
+ // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
337
+ // @todo: Softwiner tablets?
338
+ // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
339
+ 'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
340
+ // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
341
+ 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
342
+ // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
343
+ // @todo: add more tests.
344
+ 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)',
345
+ // http://hclmetablet.com/India/index.php
346
+ 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
347
+ // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
348
+ 'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
349
+ // http://www.visture.com/index.asp
350
+ 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
351
+ // http://www.mijncresta.nl/tablet
352
+ 'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
353
+ // MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
354
+ 'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b',
355
+ // Concorde tab
356
+ 'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan',
357
+ // GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/
358
+ 'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042',
359
+ // Modecom Tablets - http://www.modecom.eu/tablets/portal/
360
+ 'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003',
361
+ // Vonino Tablets - http://www.vonino.eu/tablets
362
+ 'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b',
363
+ // ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0
364
+ 'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1',
365
+ // Storex Tablets - http://storex.fr/espace_client/support.html
366
+ // @note: no need to add all the tablet codes since they are guided by the first regex.
367
+ 'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab',
368
+ // Generic Vodafone tablets.
369
+ 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7',
370
+ // French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb
371
+ // Aka: http://www.essentielb.fr/
372
+ 'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2',
373
+ // Ross & Moor - http://ross-moor.ru/
374
+ 'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711',
375
+ // i-mobile http://product.i-mobilephone.com/Mobile_Device
376
+ 'iMobileTablet' => 'i-mobile i-note',
377
+ // http://www.tolino.de/de/vergleichen/
378
+ 'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine',
379
+ // AudioSonic - a Kmart brand
380
+ // http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72&currentPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1
381
+ 'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b',
382
+ // AMPE Tablets - http://www.ampe.com.my/product-category/tablets/
383
+ // @todo: add them gradually to avoid conflicts.
384
+ 'AMPETablet' => 'Android.* A78 ',
385
+ // Skk Mobile - http://skkmobile.com.ph/product_tablets.php
386
+ 'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)',
387
+ // Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1
388
+ 'TecnoTablet' => 'TECNO P9',
389
+ // JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3
390
+ 'JXDTablet' => 'Android.*\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b',
391
+ // i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/
392
+ 'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)',
393
+ // http://www.intracon.eu/tablet
394
+ 'FX2Tablet' => 'FX2 PAD7|FX2 PAD10',
395
+ // http://www.xoro.de/produkte/
396
+ // @note: Might be the same brand with 'Simply tablets'
397
+ 'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151',
398
+ // http://www1.viewsonic.com/products/computing/tablets/
399
+ 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a',
400
+ // http://www.odys.de/web/internet-tablet_en.html
401
+ 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10',
402
+ // http://www.captiva-power.de/products.html#tablets-en
403
+ 'CaptivaTablet' => 'CAPTIVA PAD',
404
+ // IconBIT - http://www.iconbit.com/products/tablets/
405
+ 'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S',
406
+ // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63
407
+ 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi',
408
+ 'JaytechTablet' => 'TPC-PA762',
409
+ 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010',
410
+ // http://www.digma.ru/support/download/
411
+ // @todo: Ebooks also (if requested)
412
+ 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b',
413
+ // http://www.evolioshop.com/ro/tablete-pc.html
414
+ // http://www.evolio.ro/support/downloads_static.html?cat=2
415
+ // @todo: Research some more
416
+ 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b',
417
+ // @todo http://www.lavamobiles.com/tablets-data-cards
418
+ 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY',
419
+ // https://www.celkonmobiles.com/?_a=categoryphones&sid=2
420
+ 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b',
421
+ // http://www.mi.com/en
422
+ 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b',
423
+ // http://www.nbru.cn/index.html
424
+ 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One',
425
+ // http://navroad.com/products/produkty/tablety/
426
+ 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI',
427
+ // http://www.datawind.com/ubislate/
428
+ 'UbislateTablet' => 'UbiSlate[\s]?7C',
429
+ // http://www.pocketbook-int.com/ru/support
430
+ 'PocketBookTablet' => 'Pocketbook',
431
+ // http://www.tesco.com/direct/hudl/
432
+ 'Hudl' => 'Hudl HT7S3',
433
+ // http://www.telstra.com.au/home-phone/thub-2/
434
+ 'TelstraTablet' => 'T-Hub2',
435
+ 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bJolla\b'
436
+ );
437
+
438
+ /**
439
+ * List of mobile Operating Systems.
440
+ *
441
+ * @var array
442
+ */
443
+ protected static $operatingSystems = array(
444
+ 'AndroidOS' => 'Android',
445
+ 'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os',
446
+ 'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
447
+ 'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
448
+ // @reference: http://en.wikipedia.org/wiki/Windows_Mobile
449
+ 'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
450
+ // @reference: http://en.wikipedia.org/wiki/Windows_Phone
451
+ // http://wifeng.cn/?r=blog&a=view&id=106
452
+ // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
453
+ // http://msdn.microsoft.com/library/ms537503.aspx
454
+ 'WindowsPhoneOS' => 'Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
455
+ 'iOS' => '\biPhone.*Mobile|\biPod|\biPad',
456
+ // http://en.wikipedia.org/wiki/MeeGo
457
+ // @todo: research MeeGo in UAs
458
+ 'MeeGoOS' => 'MeeGo',
459
+ // http://en.wikipedia.org/wiki/Maemo
460
+ // @todo: research Maemo in UAs
461
+ 'MaemoOS' => 'Maemo',
462
+ 'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135
463
+ 'webOS' => 'webOS|hpwOS',
464
+ 'badaOS' => '\bBada\b',
465
+ 'BREWOS' => 'BREW',
466
+ );
467
+
468
+ /**
469
+ * List of mobile User Agents.
470
+ *
471
+ * @var array
472
+ */
473
+ protected static $browsers = array(
474
+ // @reference: https://developers.google.com/chrome/mobile/docs/user-agent
475
+ 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?',
476
+ 'Dolfin' => '\bDolfin\b',
477
+ 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',
478
+ 'Skyfire' => 'Skyfire',
479
+ 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+
480
+ 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile',
481
+ 'Bolt' => 'bolt',
482
+ 'TeaShark' => 'teashark',
483
+ 'Blazer' => 'Blazer',
484
+ // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
485
+ 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
486
+ // http://en.wikipedia.org/wiki/Midori_(web_browser)
487
+ //'Midori' => 'midori',
488
+ 'Tizen' => 'Tizen',
489
+ 'UCBrowser' => 'UC.*Browser|UCWEB',
490
+ 'baiduboxapp' => 'baiduboxapp',
491
+ 'baidubrowser' => 'baidubrowser',
492
+ // https://github.com/serbanghita/Mobile-Detect/issues/7
493
+ 'DiigoBrowser' => 'DiigoBrowser',
494
+ // http://www.puffinbrowser.com/index.php
495
+ 'Puffin' => 'Puffin',
496
+ // http://mercury-browser.com/index.html
497
+ 'Mercury' => '\bMercury\b',
498
+ // http://en.wikipedia.org/wiki/Obigo_Browser
499
+ 'ObigoBrowser' => 'Obigo',
500
+ // http://en.wikipedia.org/wiki/NetFront
501
+ 'NetFront' => 'NF-Browser',
502
+ // @reference: http://en.wikipedia.org/wiki/Minimo
503
+ // http://en.wikipedia.org/wiki/Vision_Mobile_Browser
504
+ 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger',
505
+ );
506
+
507
+ /**
508
+ * Utilities.
509
+ *
510
+ * @var array
511
+ */
512
+ protected static $utilities = array(
513
+ // Experimental. When a mobile device wants to switch to 'Desktop Mode'.
514
+ // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
515
+ // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
516
+ 'DesktopMode' => 'WPDesktop',
517
+ 'TV' => 'SonyDTV|HbbTV', // experimental
518
+ 'WebKit' => '(webkit)[ /]([\w.]+)',
519
+ 'Bot' => 'Googlebot|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|facebookexternalhit',
520
+ 'MobileBot' => 'Googlebot-Mobile|YahooSeeker/M1A1-R2D2',
521
+ // @todo: Include JXD consoles.
522
+ 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b',
523
+ 'Watch' => 'SM-V700',
524
+ );
525
+
526
+ /**
527
+ * All possible HTTP headers that represent the
528
+ * User-Agent string.
529
+ *
530
+ * @var array
531
+ */
532
+ protected static $uaHttpHeaders = array(
533
+ // The default User-Agent string.
534
+ 'HTTP_USER_AGENT',
535
+ // Header can occur on devices using Opera Mini.
536
+ 'HTTP_X_OPERAMINI_PHONE_UA',
537
+ // Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
538
+ 'HTTP_X_DEVICE_USER_AGENT',
539
+ 'HTTP_X_ORIGINAL_USER_AGENT',
540
+ 'HTTP_X_SKYFIRE_PHONE',
541
+ 'HTTP_X_BOLT_PHONE_UA',
542
+ 'HTTP_DEVICE_STOCK_UA',
543
+ 'HTTP_X_UCBROWSER_DEVICE_UA'
544
+ );
545
+
546
+ /**
547
+ * The individual segments that could exist in a User-Agent string. VER refers to the regular
548
+ * expression defined in the constant self::VER.
549
+ *
550
+ * @var array
551
+ */
552
+ protected static $properties = array(
553
+
554
+ // Build
555
+ 'Mobile' => 'Mobile/[VER]',
556
+ 'Build' => 'Build/[VER]',
557
+ 'Version' => 'Version/[VER]',
558
+ 'VendorID' => 'VendorID/[VER]',
559
+
560
+ // Devices
561
+ 'iPad' => 'iPad.*CPU[a-z ]+[VER]',
562
+ 'iPhone' => 'iPhone.*CPU[a-z ]+[VER]',
563
+ 'iPod' => 'iPod.*CPU[a-z ]+[VER]',
564
+ //'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'),
565
+ 'Kindle' => 'Kindle/[VER]',
566
+
567
+ // Browser
568
+ 'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'),
569
+ 'Coast' => array('Coast/[VER]'),
570
+ 'Dolfin' => 'Dolfin/[VER]',
571
+ // @reference: https://developer.mozilla.org/en-US/docs/User_Agent_Strings_Reference
572
+ 'Firefox' => 'Firefox/[VER]',
573
+ 'Fennec' => 'Fennec/[VER]',
574
+ // @reference: http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
575
+ 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];'),
576
+ // http://en.wikipedia.org/wiki/NetFront
577
+ 'NetFront' => 'NetFront/[VER]',
578
+ 'NokiaBrowser' => 'NokiaBrowser/[VER]',
579
+ 'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ),
580
+ 'Opera Mini' => 'Opera Mini/[VER]',
581
+ 'Opera Mobi' => 'Version/[VER]',
582
+ 'UC Browser' => 'UC Browser[VER]',
583
+ 'MQQBrowser' => 'MQQBrowser/[VER]',
584
+ 'MicroMessenger' => 'MicroMessenger/[VER]',
585
+ 'baiduboxapp' => 'baiduboxapp/[VER]',
586
+ 'baidubrowser' => 'baidubrowser/[VER]',
587
+ 'Iron' => 'Iron/[VER]',
588
+ // @note: Safari 7534.48.3 is actually Version 5.1.
589
+ // @note: On BlackBerry the Version is overwriten by the OS.
590
+ 'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
591
+ 'Skyfire' => 'Skyfire/[VER]',
592
+ 'Tizen' => 'Tizen/[VER]',
593
+ 'Webkit' => 'webkit[ /][VER]',
594
+
595
+ // Engine
596
+ 'Gecko' => 'Gecko/[VER]',
597
+ 'Trident' => 'Trident/[VER]',
598
+ 'Presto' => 'Presto/[VER]',
599
+
600
+ // OS
601
+ 'iOS' => ' \bOS\b [VER] ',
602
+ 'Android' => 'Android [VER]',
603
+ 'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
604
+ 'BREW' => 'BREW [VER]',
605
+ 'Java' => 'Java/[VER]',
606
+ // @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx
607
+ // @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases
608
+ 'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),
609
+ 'Windows Phone' => 'Windows Phone [VER]',
610
+ 'Windows CE' => 'Windows CE/[VER]',
611
+ // http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd
612
+ 'Windows NT' => 'Windows NT [VER]',
613
+ 'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'),
614
+ 'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'),
615
+ );
616
+
617
+ /**
618
+ * Construct an instance of this class.
619
+ *
620
+ * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
621
+ * If left empty, will use the global _SERVER['HTTP_*'] vars instead.
622
+ * @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
623
+ * from the $headers array instead.
624
+ */
625
+ public function __construct(
626
+ array $headers = null,
627
+ $userAgent = null
628
+ ) {
629
+ $this->setHttpHeaders($headers);
630
+ $this->setUserAgent($userAgent);
631
+ }
632
+
633
+ /**
634
+ * Get the current script version.
635
+ * This is useful for the demo.php file,
636
+ * so people can check on what version they are testing
637
+ * for mobile devices.
638
+ *
639
+ * @return string The version number in semantic version format.
640
+ */
641
+ public static function getScriptVersion()
642
+ {
643
+ return self::VERSION;
644
+ }
645
+
646
+ /**
647
+ * Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers.
648
+ *
649
+ * @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract
650
+ * the headers. The default null is left for backwards compatibilty.
651
+ */
652
+ public function setHttpHeaders($httpHeaders = null)
653
+ {
654
+ //use global _SERVER if $httpHeaders aren't defined
655
+ if (!is_array($httpHeaders) || !count($httpHeaders)) {
656
+ $httpHeaders = $_SERVER;
657
+ }
658
+
659
+ //clear existing headers
660
+ $this->httpHeaders = array();
661
+
662
+ //Only save HTTP headers. In PHP land, that means only _SERVER vars that
663
+ //start with HTTP_.
664
+ foreach ($httpHeaders as $key => $value) {
665
+ if (substr($key,0,5) == 'HTTP_') {
666
+ $this->httpHeaders[$key] = $value;
667
+ }
668
+ }
669
+ }
670
+
671
+ /**
672
+ * Retrieves the HTTP headers.
673
+ *
674
+ * @return array
675
+ */
676
+ public function getHttpHeaders()
677
+ {
678
+ return $this->httpHeaders;
679
+ }
680
+
681
+ /**
682
+ * Retrieves a particular header. If it doesn't exist, no exception/error is caused.
683
+ * Simply null is returned.
684
+ *
685
+ * @param string $header The name of the header to retrieve. Can be HTTP compliant such as
686
+ * "User-Agent" or "X-Device-User-Agent" or can be php-esque with the
687
+ * all-caps, HTTP_ prefixed, underscore seperated awesomeness.
688
+ *
689
+ * @return string|null The value of the header.
690
+ */
691
+ public function getHttpHeader($header)
692
+ {
693
+ //are we using PHP-flavored headers?
694
+ if (strpos($header, '_') === false) {
695
+ $header = str_replace('-', '_', $header);
696
+ $header = strtoupper($header);
697
+ }
698
+
699
+ //test the alternate, too
700
+ $altHeader = 'HTTP_' . $header;
701
+
702
+ //Test both the regular and the HTTP_ prefix
703
+ if (isset($this->httpHeaders[$header])) {
704
+ return $this->httpHeaders[$header];
705
+ } elseif (isset($this->httpHeaders[$altHeader])) {
706
+ return $this->httpHeaders[$altHeader];
707
+ }
708
+
709
+ return null;
710
+ }
711
+
712
+ public function getMobileHeaders()
713
+ {
714
+ return self::$mobileHeaders;
715
+ }
716
+
717
+ /**
718
+ * Get all possible HTTP headers that
719
+ * can contain the User-Agent string.
720
+ *
721
+ * @return array List of HTTP headers.
722
+ */
723
+ public function getUaHttpHeaders()
724
+ {
725
+ return self::$uaHttpHeaders;
726
+ }
727
+
728
+ /**
729
+ * Set the User-Agent to be used.
730
+ *
731
+ * @param string $userAgent The user agent string to set.
732
+ *
733
+ * @return string|null
734
+ */
735
+ public function setUserAgent($userAgent = null)
736
+ {
737
+ if (!empty($userAgent)) {
738
+ return $this->userAgent = $userAgent;
739
+ } else {
740
+ $this->userAgent = null;
741
+ foreach ($this->getUaHttpHeaders() as $altHeader) {
742
+ if (!empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban)
743
+ $this->userAgent .= $this->httpHeaders[$altHeader] . " ";
744
+ }
745
+ }
746
+
747
+ return $this->userAgent = (!empty($this->userAgent) ? trim($this->userAgent) : null);
748
+
749
+ }
750
+ }
751
+
752
+ /**
753
+ * Retrieve the User-Agent.
754
+ *
755
+ * @return string|null The user agent if it's set.
756
+ */
757
+ public function getUserAgent()
758
+ {
759
+ return $this->userAgent;
760
+ }
761
+
762
+ /**
763
+ * Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or
764
+ * self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set.
765
+ *
766
+ * @deprecated since version 2.6.9
767
+ *
768
+ * @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default
769
+ * parameter is null which will default to self::DETECTION_TYPE_MOBILE.
770
+ */
771
+ public function setDetectionType($type = null)
772
+ {
773
+ if ($type === null) {
774
+ $type = self::DETECTION_TYPE_MOBILE;
775
+ }
776
+
777
+ if ($type != self::DETECTION_TYPE_MOBILE && $type != self::DETECTION_TYPE_EXTENDED) {
778
+ return;
779
+ }
780
+
781
+ $this->detectionType = $type;
782
+ }
783
+
784
+ public function getMatchingRegex()
785
+ {
786
+ return $this->matchingRegex;
787
+ }
788
+
789
+ public function getMatchesArray()
790
+ {
791
+ return $this->matchesArray;
792
+ }
793
+
794
+ /**
795
+ * Retrieve the list of known phone devices.
796
+ *
797
+ * @return array List of phone devices.
798
+ */
799
+ public static function getPhoneDevices()
800
+ {
801
+ return self::$phoneDevices;
802
+ }
803
+
804
+ /**
805
+ * Retrieve the list of known tablet devices.
806
+ *
807
+ * @return array List of tablet devices.
808
+ */
809
+ public static function getTabletDevices()
810
+ {
811
+ return self::$tabletDevices;
812
+ }
813
+
814
+ /**
815
+ * Alias for getBrowsers() method.
816
+ *
817
+ * @return array List of user agents.
818
+ */
819
+ public static function getUserAgents()
820
+ {
821
+ return self::getBrowsers();
822
+ }
823
+
824
+ /**
825
+ * Retrieve the list of known browsers. Specifically, the user agents.
826
+ *
827
+ * @return array List of browsers / user agents.
828
+ */
829
+ public static function getBrowsers()
830
+ {
831
+ return self::$browsers;
832
+ }
833
+
834
+ /**
835
+ * Retrieve the list of known utilities.
836
+ *
837
+ * @return array List of utilities.
838
+ */
839
+ public static function getUtilities()
840
+ {
841
+ return self::$utilities;
842
+ }
843
+
844
+ /**
845
+ * Method gets the mobile detection rules. This method is used for the magic methods $detect->is*().
846
+ *
847
+ * @deprecated since version 2.6.9
848
+ *
849
+ * @return array All the rules (but not extended).
850
+ */
851
+ public static function getMobileDetectionRules()
852
+ {
853
+ static $rules;
854
+
855
+ if (!$rules) {
856
+ $rules = array_merge(
857
+ self::$phoneDevices,
858
+ self::$tabletDevices,
859
+ self::$operatingSystems,
860
+ self::$browsers
861
+ );
862
+ }
863
+
864
+ return $rules;
865
+
866
+ }
867
+
868
+ /**
869
+ * Method gets the mobile detection rules + utilities.
870
+ * The reason this is separate is because utilities rules
871
+ * don't necessary imply mobile. This method is used inside
872
+ * the new $detect->is('stuff') method.
873
+ *
874
+ * @deprecated since version 2.6.9
875
+ *
876
+ * @return array All the rules + extended.
877
+ */
878
+ public function getMobileDetectionRulesExtended()
879
+ {
880
+ static $rules;
881
+
882
+ if (!$rules) {
883
+ // Merge all rules together.
884
+ $rules = array_merge(
885
+ self::$phoneDevices,
886
+ self::$tabletDevices,
887
+ self::$operatingSystems,
888
+ self::$browsers,
889
+ self::$utilities
890
+ );
891
+ }
892
+
893
+ return $rules;
894
+ }
895
+
896
+ /**
897
+ * Retrieve the current set of rules.
898
+ *
899
+ * @deprecated since version 2.6.9
900
+ *
901
+ * @return array
902
+ */
903
+ public function getRules()
904
+ {
905
+ if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) {
906
+ return self::getMobileDetectionRulesExtended();
907
+ } else {
908
+ return self::getMobileDetectionRules();
909
+ }
910
+ }
911
+
912
+ /**
913
+ * Retrieve the list of mobile operating systems.
914
+ *
915
+ * @return array The list of mobile operating systems.
916
+ */
917
+ public static function getOperatingSystems()
918
+ {
919
+ return self::$operatingSystems;
920
+ }
921
+
922
+ /**
923
+ * Check the HTTP headers for signs of mobile.
924
+ * This is the fastest mobile check possible; it's used
925
+ * inside isMobile() method.
926
+ *
927
+ * @return bool
928
+ */
929
+ public function checkHttpHeadersForMobile()
930
+ {
931
+
932
+ foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) {
933
+ if ( isset($this->httpHeaders[$mobileHeader]) ) {
934
+ if ( is_array($matchType['matches']) ) {
935
+ foreach ($matchType['matches'] as $_match) {
936
+ if ( strpos($this->httpHeaders[$mobileHeader], $_match) !== false ) {
937
+ return true;
938
+ }
939
+ }
940
+
941
+ return false;
942
+ } else {
943
+ return true;
944
+ }
945
+ }
946
+ }
947
+
948
+ return false;
949
+
950
+ }
951
+
952
+ /**
953
+ * Magic overloading method.
954
+ *
955
+ * @method boolean is[...]()
956
+ * @param string $name
957
+ * @param array $arguments
958
+ * @return mixed
959
+ * @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is'
960
+ */
961
+ public function __call($name, $arguments)
962
+ {
963
+ //make sure the name starts with 'is', otherwise
964
+ if (substr($name, 0, 2) != 'is') {
965
+ throw new BadMethodCallException("No such method exists: $name");
966
+ }
967
+
968
+ $this->setDetectionType(self::DETECTION_TYPE_MOBILE);
969
+
970
+ $key = substr($name, 2);
971
+
972
+ return $this->matchUAAgainstKey($key);
973
+ }
974
+
975
+ /**
976
+ * Find a detection rule that matches the current User-agent.
977
+ *
978
+ * @param null $userAgent deprecated
979
+ * @return boolean
980
+ */
981
+ protected function matchDetectionRulesAgainstUA($userAgent = null)
982
+ {
983
+ // Begin general search.
984
+ foreach ($this->getRules() as $_regex) {
985
+ if (empty($_regex)) {
986
+ continue;
987
+ }
988
+ if ($this->match($_regex, $userAgent)) {
989
+ return true;
990
+ }
991
+ }
992
+
993
+ return false;
994
+ }
995
+
996
+ /**
997
+ * Search for a certain key in the rules array.
998
+ * If the key is found the try to match the corresponding
999
+ * regex agains the User-Agent.
1000
+ *
1001
+ * @param string $key
1002
+ * @param null $userAgent deprecated
1003
+ * @return mixed
1004
+ */
1005
+ protected function matchUAAgainstKey($key, $userAgent = null)
1006
+ {
1007
+ // Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc.
1008
+ $key = strtolower($key);
1009
+
1010
+ //change the keys to lower case
1011
+ $_rules = array_change_key_case($this->getRules());
1012
+
1013
+ if (array_key_exists($key, $_rules)) {
1014
+ if (empty($_rules[$key])) {
1015
+ return null;
1016
+ }
1017
+
1018
+ return $this->match($_rules[$key], $userAgent);
1019
+ }
1020
+
1021
+ return false;
1022
+ }
1023
+
1024
+ /**
1025
+ * Check if the device is mobile.
1026
+ * Returns true if any type of mobile device detected, including special ones
1027
+ * @param null $userAgent deprecated
1028
+ * @param null $httpHeaders deprecated
1029
+ * @return bool
1030
+ */
1031
+ public function isMobile($userAgent = null, $httpHeaders = null)
1032
+ {
1033
+
1034
+ if ($httpHeaders) {
1035
+ $this->setHttpHeaders($httpHeaders);
1036
+ }
1037
+
1038
+ if ($userAgent) {
1039
+ $this->setUserAgent($userAgent);
1040
+ }
1041
+
1042
+ $this->setDetectionType(self::DETECTION_TYPE_MOBILE);
1043
+
1044
+ if ($this->checkHttpHeadersForMobile()) {
1045
+ return true;
1046
+ } else {
1047
+ return $this->matchDetectionRulesAgainstUA();
1048
+ }
1049
+
1050
+ }
1051
+
1052
+ /**
1053
+ * Check if the device is a tablet.
1054
+ * Return true if any type of tablet device is detected.
1055
+ *
1056
+ * @param string $userAgent deprecated
1057
+ * @param array $httpHeaders deprecated
1058
+ * @return bool
1059
+ */
1060
+ public function isTablet($userAgent = null, $httpHeaders = null)
1061
+ {
1062
+ $this->setDetectionType(self::DETECTION_TYPE_MOBILE);
1063
+
1064
+ foreach (self::$tabletDevices as $_regex) {
1065
+ if ($this->match($_regex, $userAgent)) {
1066
+ return true;
1067
+ }
1068
+ }
1069
+
1070
+ return false;
1071
+ }
1072
+
1073
+ /**
1074
+ * This method checks for a certain property in the
1075
+ * userAgent.
1076
+ * @todo: The httpHeaders part is not yet used.
1077
+ *
1078
+ * @param string $key
1079
+ * @param string $userAgent deprecated
1080
+ * @param string $httpHeaders deprecated
1081
+ * @return bool|int|null
1082
+ */
1083
+ public function is($key, $userAgent = null, $httpHeaders = null)
1084
+ {
1085
+ // Set the UA and HTTP headers only if needed (eg. batch mode).
1086
+ if ($httpHeaders) {
1087
+ $this->setHttpHeaders($httpHeaders);
1088
+ }
1089
+
1090
+ if ($userAgent) {
1091
+ $this->setUserAgent($userAgent);
1092
+ }
1093
+
1094
+ $this->setDetectionType(self::DETECTION_TYPE_EXTENDED);
1095
+
1096
+ return $this->matchUAAgainstKey($key);
1097
+ }
1098
+
1099
+ /**
1100
+ * Some detection rules are relative (not standard),
1101
+ * because of the diversity of devices, vendors and
1102
+ * their conventions in representing the User-Agent or
1103
+ * the HTTP headers.
1104
+ *
1105
+ * This method will be used to check custom regexes against
1106
+ * the User-Agent string.
1107
+ *
1108
+ * @param $regex
1109
+ * @param string $userAgent
1110
+ * @return bool
1111
+ *
1112
+ * @todo: search in the HTTP headers too.
1113
+ */
1114
+ public function match($regex, $userAgent = null)
1115
+ {
1116
+ // Escape the special character which is the delimiter.
1117
+ $regex = str_replace('/', '\/', $regex);
1118
+ $match = (bool) preg_match('/'.$regex.'/is', (!empty($userAgent) ? $userAgent : $this->userAgent), $matches);
1119
+ // If positive match is found, store the results for debug.
1120
+ if ($match) {
1121
+ $this->matchingRegex = $regex;
1122
+ $this->matchesArray = $matches;
1123
+ }
1124
+
1125
+ return $match;
1126
+ }
1127
+
1128
+ /**
1129
+ * Get the properties array.
1130
+ *
1131
+ * @return array
1132
+ */
1133
+ public static function getProperties()
1134
+ {
1135
+ return self::$properties;
1136
+ }
1137
+
1138
+ /**
1139
+ * Prepare the version number.
1140
+ *
1141
+ * @todo Remove the error supression from str_replace() call.
1142
+ *
1143
+ * @param string $ver The string version, like "2.6.21.2152";
1144
+ *
1145
+ * @return float
1146
+ */
1147
+ public function prepareVersionNo($ver)
1148
+ {
1149
+ $ver = str_replace(array('_', ' ', '/'), '.', $ver);
1150
+ $arrVer = explode('.', $ver, 2);
1151
+
1152
+ if (isset($arrVer[1])) {
1153
+ $arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions.
1154
+ }
1155
+
1156
+ return (float) implode('.', $arrVer);
1157
+ }
1158
+
1159
+ /**
1160
+ * Check the version of the given property in the User-Agent.
1161
+ * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
1162
+ *
1163
+ * @param string $propertyName The name of the property. See self::getProperties() array
1164
+ * keys for all possible properties.
1165
+ * @param string $type Either self::VERSION_TYPE_STRING to get a string value or
1166
+ * self::VERSION_TYPE_FLOAT indicating a float value. This parameter
1167
+ * is optional and defaults to self::VERSION_TYPE_STRING. Passing an
1168
+ * invalid parameter will default to the this type as well.
1169
+ *
1170
+ * @return string|float The version of the property we are trying to extract.
1171
+ */
1172
+ public function version($propertyName, $type = self::VERSION_TYPE_STRING)
1173
+ {
1174
+ if (empty($propertyName)) {
1175
+ return false;
1176
+ }
1177
+
1178
+ //set the $type to the default if we don't recognize the type
1179
+ if ($type != self::VERSION_TYPE_STRING && $type != self::VERSION_TYPE_FLOAT) {
1180
+ $type = self::VERSION_TYPE_STRING;
1181
+ }
1182
+
1183
+ $properties = self::getProperties();
1184
+
1185
+ // Check if the property exists in the properties array.
1186
+ if (array_key_exists($propertyName, $properties)) {
1187
+
1188
+ // Prepare the pattern to be matched.
1189
+ // Make sure we always deal with an array (string is converted).
1190
+ $properties[$propertyName] = (array) $properties[$propertyName];
1191
+
1192
+ foreach ($properties[$propertyName] as $propertyMatchString) {
1193
+
1194
+ $propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString);
1195
+
1196
+ // Escape the special character which is the delimiter.
1197
+ $propertyPattern = str_replace('/', '\/', $propertyPattern);
1198
+
1199
+ // Identify and extract the version.
1200
+ preg_match('/'.$propertyPattern.'/is', $this->userAgent, $match);
1201
+
1202
+ if (!empty($match[1])) {
1203
+ $version = ( $type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1] );
1204
+
1205
+ return $version;
1206
+ }
1207
+
1208
+ }
1209
+
1210
+ }
1211
+
1212
+ return false;
1213
+ }
1214
+
1215
+ /**
1216
+ * Retrieve the mobile grading, using self::MOBILE_GRADE_* constants.
1217
+ *
1218
+ * @return string One of the self::MOBILE_GRADE_* constants.
1219
+ */
1220
+ public function mobileGrade()
1221
+ {
1222
+ $isMobile = $this->isMobile();
1223
+
1224
+ if (
1225
+ // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0)
1226
+ $this->isIOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)>=4.3 ||
1227
+ $this->isIOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)>=4.3 ||
1228
+ $this->isIOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)>=4.3 ||
1229
+
1230
+ // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
1231
+ // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
1232
+ // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
1233
+ // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
1234
+ ( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) ||
1235
+
1236
+ // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8)
1237
+ $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT)>=7.5 ||
1238
+
1239
+ // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10)
1240
+ $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=6.0 ||
1241
+ // Blackberry Playbook (1.0-2.0) - Tested on PlayBook
1242
+ $this->match('Playbook.*Tablet') ||
1243
+
1244
+ // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0)
1245
+ ( $this->version('webOS', self::VERSION_TYPE_FLOAT)>=1.4 && $this->match('Palm|Pre|Pixi') ) ||
1246
+ // Palm WebOS 3.0 - Tested on HP TouchPad
1247
+ $this->match('hp.*TouchPad') ||
1248
+
1249
+ // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices
1250
+ ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT)>=18 ) ||
1251
+
1252
+ // Chrome for Android - Tested on Android 4.0, 4.1 device
1253
+ ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=4.0 ) ||
1254
+
1255
+ // Skyfire 4.1 - Tested on Android 2.3 device
1256
+ ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT)>=4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||
1257
+
1258
+ // Opera Mobile 11.5-12: Tested on Android 2.3
1259
+ ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT)>=11.5 && $this->is('AndroidOS') ) ||
1260
+
1261
+ // Meego 1.2 - Tested on Nokia 950 and N9
1262
+ $this->is('MeeGoOS') ||
1263
+
1264
+ // Tizen (pre-release) - Tested on early hardware
1265
+ $this->is('Tizen') ||
1266
+
1267
+ // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
1268
+ // @todo: more tests here!
1269
+ $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT)>=2.0 ||
1270
+
1271
+ // UC Browser - Tested on Android 2.3 device
1272
+ ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||
1273
+
1274
+ // Kindle 3 and Fire - Tested on the built-in WebKit browser for each
1275
+ ( $this->match('Kindle Fire') ||
1276
+ $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT)>=3.0 ) ||
1277
+
1278
+ // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
1279
+ $this->is('AndroidOS') && $this->is('NookTablet') ||
1280
+
1281
+ // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7
1282
+ $this->version('Chrome', self::VERSION_TYPE_FLOAT)>=16 && !$isMobile ||
1283
+
1284
+ // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7
1285
+ $this->version('Safari', self::VERSION_TYPE_FLOAT)>=5.0 && !$isMobile ||
1286
+
1287
+ // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7
1288
+ $this->version('Firefox', self::VERSION_TYPE_FLOAT)>=10.0 && !$isMobile ||
1289
+
1290
+ // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
1291
+ $this->version('IE', self::VERSION_TYPE_FLOAT)>=7.0 && !$isMobile ||
1292
+
1293
+ // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
1294
+ $this->version('Opera', self::VERSION_TYPE_FLOAT)>=10 && !$isMobile
1295
+ ){
1296
+ return self::MOBILE_GRADE_A;
1297
+ }
1298
+
1299
+ if (
1300
+ $this->isIOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||
1301
+ $this->isIOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 ||
1302
+ $this->isIOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 ||
1303
+
1304
+ // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
1305
+ $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||
1306
+
1307
+ //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
1308
+ ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT)>=5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)<=7.0 &&
1309
+ ($this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 || $this->is('iOS')) ) ||
1310
+
1311
+ // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
1312
+ $this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
1313
+
1314
+ // @todo: report this (tested on Nokia N71)
1315
+ $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT)>=11 && $this->is('SymbianOS')
1316
+ ){
1317
+ return self::MOBILE_GRADE_B;
1318
+ }
1319
+
1320
+ if (
1321
+ // Blackberry 4.x - Tested on the Curve 8330
1322
+ $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<=5.0 ||
1323
+ // Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
1324
+ $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT)<=5.2 ||
1325
+
1326
+ // Tested on original iPhone (3.1), iPhone 3 (3.2)
1327
+ $this->isIOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)<=3.2 ||
1328
+ $this->isIOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<=3.2 ||
1329
+ $this->isIOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)<=3.2 ||
1330
+
1331
+ // Internet Explorer 7 and older - Tested on Windows XP
1332
+ $this->version('IE', self::VERSION_TYPE_FLOAT)<=7.0 && !$isMobile
1333
+ ){
1334
+ return self::MOBILE_GRADE_C;
1335
+ }
1336
+
1337
+ //All older smartphone platforms and featurephones - Any device that doesn't support media queries
1338
+ //will receive the basic, C grade experience.
1339
+ return self::MOBILE_GRADE_C;
1340
+ }
1341
+ }
public/includes/core-functions.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!function_exists('efbl_time_ago')){
3
+ function efbl_time_ago($date,$granularity=2) {
4
+ //Preparing strings to translate
5
+ $date_time_strings = array("second" => __('second', 'easy-facebook-likebox'),
6
+ "seconds" => __('seconds', 'easy-facebook-likebox'),
7
+ "minute" => __('minute', 'easy-facebook-likebox'),
8
+ "minutes" => __('minutes', 'easy-facebook-likebox'),
9
+ "hour" => __('hour', 'easy-facebook-likebox'),
10
+ "hours" => __('hours', 'easy-facebook-likebox'),
11
+ "day" => __('day', 'easy-facebook-likebox'),
12
+ "days" => __('days', 'easy-facebook-likebox'),
13
+ "week" => __('week', 'easy-facebook-likebox'),
14
+ "weeks" => __('weeks', 'easy-facebook-likebox'),
15
+ "month" => __('month', 'easy-facebook-likebox'),
16
+ "months" => __('months', 'easy-facebook-likebox'),
17
+ "year" => __('year', 'easy-facebook-likebox'),
18
+ "years" => __('years', 'easy-facebook-likebox'),
19
+ "decade" => __('decade', 'easy-facebook-likebox'),
20
+ );
21
+
22
+ $ago_text = __('ago', 'easy-facebook-likebox');
23
+ $date = strtotime($date);
24
+ $difference = time() - $date;
25
+ $periods = array('decade' => 315360000,
26
+ 'year' => 31536000,
27
+ 'month' => 2628000,
28
+ 'week' => 604800,
29
+ 'day' => 86400,
30
+ 'hour' => 3600,
31
+ 'minute' => 60,
32
+ 'second' => 1);
33
+
34
+ foreach ($periods as $key => $value) {
35
+ if ($difference >= $value) {
36
+ $time = floor($difference/$value);
37
+ $difference %= $value;
38
+ $retval .= ($retval ? ' ' : '').$time.' ';
39
+ $retval .= (($time > 1) ? $date_time_strings[$key.'s'] : $date_time_strings[$key] );
40
+ $granularity--;
41
+ }
42
+ if ($granularity == '0') { break; }
43
+ }
44
+
45
+ return ''.$retval.' '.$ago_text;
46
+ }
47
+ }
48
+
49
+ if(!function_exists('jws_fetchUrl')){
50
+ //Get JSON object of feed data
51
+ function jws_fetchUrl($url){
52
+ //Can we use cURL?
53
+ if(is_callable('curl_init')){
54
+ $ch = curl_init();
55
+ curl_setopt($ch, CURLOPT_URL, $url);
56
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
57
+ curl_setopt($ch, CURLOPT_TIMEOUT, 20);
58
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
59
+ $feedData = curl_exec($ch);
60
+ curl_close($ch);
61
+ //If not then use file_get_contents
62
+ } elseif ( ini_get('allow_url_fopen') == 1 || ini_get('allow_url_fopen') === TRUE ) {
63
+ $feedData = @file_get_contents($url);
64
+ //Or else use the WP HTTP API
65
+ } else {
66
+ if( !class_exists( 'WP_Http' ) ) include_once( ABSPATH . WPINC. '/class-http.php' );
67
+ $request = new WP_Http;
68
+ $result = $request->request($url);
69
+ $feedData = $result['body'];
70
+ }
71
+ /* echo $feedData;
72
+ exit;*/
73
+ return $feedData;
74
+
75
+ }
76
+ }
77
+
78
+ if(!function_exists('ecff_stripos_arr')){
79
+ function ecff_stripos_arr($haystack, $needle) {
80
+
81
+ if(!is_array($needle)) $needle = array($needle);
82
+ foreach($needle as $what) {
83
+ if(($pos = stripos($haystack, ltrim($what) ))!==false) return $pos;
84
+ }
85
+ return false;
86
+ }
87
+ }
88
+
89
+ if(!function_exists('ecff_makeClickableLinks')){
90
+ function ecff_makeClickableLinks($text)
91
+ {
92
+ return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $text);
93
+
94
+ }
95
+ }
96
+
97
+ if(!function_exists('ecff_hastags_to_link')){
98
+ function ecff_hastags_to_link($text){
99
+
100
+ return preg_replace('/(^|\s)#(\w*[a-zA-Z_]+\w*)/', '\1#<a href="https://www.facebook.com/hashtag/\2" target="_blank">\2</a>', $text);
101
+ }
102
+ }
public/views/feed.php ADDED
@@ -0,0 +1,511 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Represents the view for the public-facing feed of the plugin.
4
+ *
5
+ * This typically includes any information, if any, that is rendered to the
6
+ * frontend of the theme when the plugin is activated.
7
+ *
8
+ * @package Easy Facebook like box
9
+ * @author Your Name <sjaved_87@yahoo.com>
10
+ * @link http://jwebsol.com
11
+ * @copyright 2015 jwebsol
12
+ */
13
+
14
+ extract($instance);
15
+ error_reporting(0);
16
+ //Switch to test mode to disable cache
17
+ $test_mode = false;
18
+
19
+ $page_id = ($fanpage_url) ? $fanpage_url : 'jwebsol';
20
+ $access_token = ($access_token) ? $access_token : '395202813876688|73e8ede72008b231a0322e40f0072fe6';
21
+ //$access_token = ($access_token) ? $access_token : '1489500477999288|KFys5ppNi3sreihdreqPkU2ChIE';
22
+
23
+ $post_limit = ($post_limit) ? $post_limit : '10';
24
+ $number_of_posts = ($post_number) ? $post_number : '10';
25
+ $layout = ($layout) ? $layout : 'halfwidth';
26
+ $image_size = ($image_size) ? $image_size : 'normal';
27
+
28
+ if( !empty($show_logo) ) $show_logo = $show_logo; else $show_logo = 1;
29
+ if( !empty($show_image) ) $show_image = $show_image; else $show_image = 1;
30
+
31
+ //Calculate the cache time in seconds
32
+ if($cache_unit == 'minutes') $cache_unit = 60;
33
+ if($cache_unit == 'hours') $cache_unit = 60*60;
34
+ if($cache_unit == 'days') $cache_unit = 60*60*24;
35
+ $cache_seconds = $cache_duration * $cache_unit;
36
+
37
+ //setting query for "Show Posts By"
38
+ $query = 'posts';
39
+ $others_only = false;
40
+
41
+ if($post_by == 'me') $query = 'posts';
42
+ else
43
+ if($post_by == 'others') $query = 'feed';
44
+ else
45
+ if($post_by == 'onlyothers'){
46
+ $query = 'feed';
47
+ $others_only = true;
48
+ }
49
+
50
+ $trasneint_name = 'efbl_'.$query.'_'.$page_id;
51
+
52
+ //delete_transient($trasneint_name);
53
+
54
+ $posts_json = get_transient( $trasneint_name );
55
+
56
+ if($posts_json == false || $posts_json == ''){
57
+ //build query
58
+ $jws_api_url = 'https://graph.facebook.com/' .$page_id. '/'.$query.'?access_token='. $access_token . '&limit=' . $post_limit . '&locale=en_us';
59
+
60
+ //set json data
61
+ $posts_json = jws_fetchUrl($jws_api_url);
62
+
63
+ //store in databse if not in test mode
64
+ if(!$test_mode)
65
+ set_transient( $trasneint_name, $posts_json, $cache_seconds );
66
+
67
+
68
+ //exit('nocahe found');
69
+ }else{
70
+ //echo 'usign cached object ... ';
71
+ //echo 'Number of seconds '.$cache_seconds.'<br>';
72
+
73
+ }
74
+
75
+ //Interpret data with JSON
76
+ $fbData = json_decode($posts_json);
77
+
78
+ if( !empty($fbData->data) ) {
79
+
80
+ //Start wraper of feed
81
+ echo '<div class="efbl_feed_wraper">';
82
+
83
+ $i = 1;
84
+ foreach($fbData->data as $story){
85
+
86
+ //reset variables
87
+ $post_text = '';
88
+
89
+ //to check for the number of posts specified
90
+ if($i == $number_of_posts) break;
91
+
92
+ //Explode News and Page ID's into 2 values
93
+ $full_story_id = $story->id;
94
+ $PostID = explode("_", $story->id);
95
+ $page_id = $PostID[0];
96
+ $story_id = $PostID[1];
97
+
98
+ //Check the post type*/
99
+
100
+ //get the feed type
101
+ $feed_type = $story->type;
102
+ //getting number of likes
103
+ if(count($story->likes->data) > 24){
104
+ $like_url = "https://graph.facebook.com/" . $full_story_id . "/likes?summary=true&access_token=" . $access_token;
105
+ $likes_data = jws_fetchUrl( $like_url );
106
+ $efbl_likes_count = json_decode($likes_data)->summary->total_count;
107
+
108
+ }else{
109
+ $efbl_likes_count = count($story->likes->data);
110
+ }
111
+
112
+ //getting number of comments
113
+ if(count($story->comments->data) >= 25){
114
+ $comments_data = jws_fetchUrl("https://graph.facebook.com/" . $full_story_id . "/comments?summary=true&access_token=" . $access_token);
115
+ $efbl_comments_count = json_decode($comments_data)->summary->total_count;
116
+
117
+ }else{
118
+ $efbl_comments_count = count($story->comments->data);
119
+ }
120
+
121
+ //getting number of shares
122
+ $shares = $story->shares;
123
+
124
+ //get the time of story
125
+ $time = $story->created_time;
126
+ //convert time into minutes/days ago.
127
+ $time = efbl_time_ago($time);
128
+
129
+ if($feed_type == 'photo'){
130
+ $story_link = $story->link;
131
+ }else{
132
+ $story_link = 'https://www.facebook.com/'.$story->id;
133
+ }
134
+
135
+ ( isset($story->message_tags) )? $text_tags = $story->message_tags : $text_tags = $story->story_tags;
136
+
137
+ //Get the original story
138
+ if(!empty($story->story))
139
+ $post_text = htmlspecialchars($story->story);
140
+
141
+ //get mesasge
142
+ if(!empty($story->message))
143
+ $post_text = htmlspecialchars($story->message);
144
+
145
+ $post_plain_text = $post_text;
146
+
147
+ $html_check_array = array('&lt;', '�', '�', '&quot;', '&amp;','#','http');
148
+
149
+ //Convert links url to html links
150
+ $post_text = ecff_makeClickableLinks($post_text);
151
+
152
+ //convert hastags into links
153
+ $post_text = ecff_hastags_to_link($post_text);
154
+
155
+ //always use the text replace method
156
+ if( ecff_stripos_arr($post_text, $html_check_array) !== false ) {
157
+ //Loop through the tags
158
+ if($text_tags) { foreach($text_tags as $message_tag ) {
159
+ $tag_name = $message_tag[0]->name;
160
+ $tag_link = '<a href="https://facebook.com/' . $message_tag[0]->id . '" target="_blank">' . $tag_name . '</a>';
161
+ $post_text = str_replace($tag_name, $tag_link, $post_text);
162
+ } }
163
+
164
+ }else{
165
+ //not html found now use manaul loop
166
+ $message_tags_arr = array();
167
+
168
+ $j = 0;
169
+ if($text_tags){
170
+ foreach($text_tags as $message_tag ) {
171
+ $j++;
172
+
173
+ $tag_name = $message_tag[0]->name;
174
+ $tag_link = '<a href="https://facebook.com/' . $message_tag[0]->id . '" target="_blank">' . $message_tag[0]->name . '</a>';
175
+ $post_text = str_replace($tag_name, $tag_link, $post_text);
176
+ }
177
+ }
178
+
179
+ }
180
+
181
+ //Get the image suource of author
182
+ $auth_img_src = 'https://graph.facebook.com/' . $page_id . '/picture?type=large';
183
+
184
+ //get author image src
185
+ $author_image ='<a href="https://facebook.com/'.$page_id.'" ><img src="'.$auth_img_src.'" title="'. $story->from->name .'" width="40" height="40" /></a>';
186
+
187
+ if($story->object_id and $show_image){
188
+ //Get story image
189
+ $pic = 'https://graph.facebook.com/'.$story->object_id.'/picture?type='.$image_size.'&width=9999&height=9999&access_token=' . $access_token . '';
190
+ $pic_class = 'efbl_has_message';
191
+ }else{
192
+ $pic_class = 'efbl_no_image';
193
+ }
194
+
195
+ if($story->message){
196
+ $message_class = 'efbl_has_message';
197
+ }else{
198
+ $message_class = 'efbl_no_message';
199
+ }
200
+
201
+ //Divert to full width layout if no image or no video
202
+ if( $feed_type != 'video' and !isset($story->object_id))
203
+ $layout = 'fullwidth';
204
+ else
205
+ $layout = ($instance['layout']) ? $instance['layout'] : 'halfwidth';
206
+
207
+
208
+ //Start generating html
209
+ echo '<div id="efblcf" class="efbl_fb_story '.$layout.' '.$feed_type.' '.$pic_class.' '.$message_class.' ">';
210
+ if($story->object_id and $show_image and $feed_type != 'video' and !isset($story->source) ){
211
+
212
+ //if image attached
213
+ echo '<div class="efbl_story_photo">';
214
+
215
+ echo '<img src="' .$pic. '" width="'.$img_width.'"; height="'.$img_height.'"; />';
216
+
217
+ echo '<a href="#efblcf_holder" data-imagelink="' .$pic. '" data-storylink="'.$story_link.'" data-linktext="'.__('Read full story', 'easy-facebook-likebox').'" data-caption="'.$post_plain_text.'" class="efbl_feed_popup"><span class="efbl_hover"></span></a>';
218
+ echo '</div>';
219
+
220
+ }elseif( $feed_type == 'video' and $story->source){
221
+
222
+ echo '<div class="efbl_story_photo">';
223
+
224
+ if (strpos($story->source, 'youtube') > 0){
225
+
226
+ $video_url = preg_replace('/\?.*/', '', $story->source);
227
+
228
+ echo '<iframe src="'.$video_url.'" class="efbl_youtube_video"></iframe>';
229
+ echo '<a href="#efblcf_holder" data-videolink="' .$story->source. '" data-storylink="'.$story_link.'" data-linktext="'.__('Read full story', 'easy-facebook-likebox').'" data-caption="'.$post_plain_text.'" class="efbl_iframe_popup_video efbl_feed_popup"><span class="efbl_hover"></span></a>';
230
+
231
+
232
+ }elseif (strpos($story->source, 'vimeo') > 0){
233
+
234
+ $video_url = preg_replace('/\?.*/', '', $story->source);
235
+
236
+ echo '<iframe src="'.$video_url.'" class="efbl_vimeo_video"></iframe>';
237
+
238
+ echo '<a href="#efblcf_holder" data-videolink="' .$story->source. '" data-storylink="'.$story_link.'" data-linktext="'.__('Read full story', 'easy-facebook-likebox').'" data-caption="'.$post_plain_text.'" class="efbl_iframe_popup_video efbl_feed_popup"><span class="efbl_hover"></span></a>';
239
+ }else{
240
+
241
+ echo '<video src="'.$story->source.'" controls>
242
+ Your browser does not support HTML5 video.
243
+ </video>';
244
+ echo '<a href="#efblcf_holder" data-video="' .$story->source. '" data-storylink="'.$story_link.'" data-linktext="'.__('Read full story', 'easy-facebook-likebox').'" data-caption="'.$post_plain_text.'" class="efbl_iframe_popup_video efbl_feed_popup"><span class="efbl_hover"></span></a>';
245
+ }
246
+
247
+
248
+ echo '</div>';
249
+ }
250
+
251
+ echo '<div class="efbl_post_content">';
252
+
253
+ //Author information
254
+ echo '<div class="efbl_author_info">';
255
+
256
+ if($show_logo == 1){
257
+ echo '<div class="efbl_auth_logo">'
258
+ .$author_image.
259
+ '</div>';
260
+ }
261
+
262
+ echo '<div class="efbl_name_date">
263
+
264
+ <p class="efbl_author_name"> <a href="https://facebook.com/'.$page_id.'" >'
265
+ .$story->from->name.
266
+ '</a></p>
267
+
268
+ <p class="efbl_story_time">'
269
+ .$time.
270
+ '</p>
271
+
272
+ </div>
273
+
274
+ </div>';
275
+
276
+ //Story content
277
+ $story_content = '<p class="efbl_story_text">'.($post_text).'</a>';
278
+
279
+ if ( ( !empty($story->description) and $feed_type != 'link') ) {
280
+
281
+ $story_description = $story->description;
282
+ $story_content .= '<p class="story_description">'.$story_description.'</p>';
283
+
284
+ }
285
+
286
+ if( $feed_type == 'link'){
287
+
288
+ if( $story->picture){
289
+ $link_image = 'efbl_has_link_image';
290
+ }else{
291
+ $link_image = 'efbl_no_link_image';
292
+ }
293
+
294
+ $story_content .= '<div class="efbl_shared_story '.$link_image.' ">';
295
+
296
+ if($story->picture)
297
+ $story_content .= '<a href="'.$story->link.'" class="efbl_link_image" re="nofollow" target="_blank"><img src="'.$story->picture.'" /></a>';
298
+
299
+ $story_content .= '<div class="efbl_link_text">';
300
+ $story_content .= '<p class="efbl_title_link"><a href="'.$story->link.'" targe="_blank">'.$story->name.'</a></p>';
301
+
302
+ $story_content .= '<p class="efbl_link_caption">'.$story->caption.'</p>';
303
+
304
+ $story_content .= '<p class="efbl_link_description">'.$story->description.'</p>';
305
+ $story_content .= '</div>';
306
+
307
+
308
+ $story_content .= '</div>';
309
+
310
+ }
311
+
312
+ echo '<div class="efbl_content_wraper">'.nl2br($story_content).'</div>';
313
+
314
+
315
+ //end post content
316
+ echo '</div>';
317
+
318
+ /*echo "<pre>";
319
+ print_r($story);
320
+ exit;*/
321
+ //Story meta
322
+
323
+ echo '<div class="efbl_story_meta">';
324
+ //do not show whole container if none of these available
325
+ if($efbl_likes_count > 0 || $story->shares->count > 0 || $efbl_comments_count > 0) {
326
+ echo '<div class="efbl_info">';
327
+
328
+ if($efbl_likes_count > 0){
329
+ echo '<span class="efbl_likes">
330
+ <span class="efbl_like_text"><i class="fa fa-thumbs-o-up"></i></span>
331
+ <span class="efbl_likes_counter"> '.$efbl_likes_count.' </span>
332
+ </span>';
333
+ }
334
+
335
+ if($story->shares->count > 0){
336
+ echo '<span class="efbl_shares">
337
+ <span class="efbl_shares_text"><i class="fa fa-share"></i></span>
338
+ <span class="efbl_shares_counter"> '.($story->shares->count).' </span>
339
+ </span>';
340
+ }
341
+
342
+ if($efbl_comments_count > 0){
343
+ echo '<span class="efbl_comments">
344
+ <span class="efbl_comments_text"><i class="fa fa-comment-o"></i></span>
345
+ <span class="efbl_comments_counter"> '.$efbl_comments_count.' </span>
346
+ </span>';
347
+ }
348
+
349
+ echo '</div>';
350
+ }
351
+
352
+ $read_more_text = __(apply_filters('efbl_read_more_text','Read full story'), 'easy-facebook-likebox');
353
+ $share_this_text = __(apply_filters('efbl_share_text', 'Share'), 'easy-facebook-likebox');
354
+
355
+ echo '<!--Readmore div started-->
356
+ <div class="efbl_read_more_link">
357
+ <a href="'.$story_link.'" target="_blank" class="efbl_read_full_story">'.$read_more_text.'</a>
358
+
359
+ <a href="javascript:void(0)" class="efbl_share_links">'.$share_this_text.'</a>
360
+
361
+ <span class="efbl_links_container">
362
+ <a class="efbl_facebook" href="https://www.facebook.com/sharer/sharer.php?u='.$story_link.'" target="_blank"><i class="fa fa-facebook"></i></a>
363
+
364
+ <a class="efbl_twitter" href="https://twitter.com/intent/tweet?text='.$story_link.'" target="_blank"><i class="fa fa-twitter"></i></a>
365
+
366
+ <a class="efbl_linked_in" href="https://www.linkedin.com/shareArticle?mini=true&url='.$story_link.'" target="_blank"><i class="fa fa-linkedin"></i></a>
367
+
368
+ <a class="efbl_google_plus" href="https://plus.google.com/share?url='.$story_link.'" target="_blank"><i class="fa fa-google-plus"></i></a>
369
+ </span>
370
+
371
+ </div>
372
+ <!--Readmore div end-->';
373
+
374
+
375
+ if(count($story->comments->data) > 0 || count($story->likes->data) > 0){
376
+ //Comments area started
377
+ echo '<div class="efbl_comments_wraper">';
378
+ }
379
+
380
+
381
+ if($efbl_likes_count > 0){
382
+
383
+ $like_text = __(apply_filters('efbl_like_this_text','like this.'), 'easy-facebook-likebox');
384
+ $and_text = __(apply_filters('efbl_and_text', 'and '), 'easy-facebook-likebox');
385
+ $other_text = __(apply_filters('efbl_other_text', 'other '), 'easy-facebook-likebox');
386
+ $others_text = __(apply_filters('efbl_others_text', 'others '), 'easy-facebook-likebox');
387
+
388
+ echo '<div class="efbl_comments_header">';
389
+
390
+
391
+ if( $efbl_likes_count == 1 ){
392
+
393
+ echo '<a href="https://facebook.com/'.$story->likes->data[0]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[0]->name . '</a> '.$like_text;
394
+ }elseif( $efbl_likes_count == 2 ){
395
+ echo '<a href="https://facebook.com/'.$story->likes->data[0]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[0]->name . '</a> '.$and_text.' <a href="https://facebook.com/'.$story->likes->data[1]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[1]->name . '</a> '.$like_text;
396
+ }elseif( $efbl_likes_count == 3 ){
397
+
398
+ echo '<a href="https://facebook.com/'.$story->likes->data[0]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[0]->name . '</a>,
399
+ <a href="https://facebook.com/'.$story->likes->data[1]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[1]->name . '</a>
400
+ '.$and_text.' 1 '.$other_text.$like_text;
401
+
402
+ }else{
403
+
404
+ $efbl_others = $efbl_likes_count - 2;
405
+ echo '<a href="https://facebook.com/'.$story->likes->data[0]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[0]->name . '</a>,
406
+ <a href="https://facebook.com/'.$story->likes->data[1]->id.'" target="_blank" rel="nofollow">' . $story->likes->data[1]->name . '</a>
407
+ '.$and_text.' '.$efbl_others.' '.$others_text.$like_text;
408
+
409
+ }
410
+
411
+ echo '</div>';
412
+ }
413
+
414
+ if( count($story->comments->data) > 0 ){
415
+
416
+ $ci = 1;
417
+ foreach ($story->comments->data as $comment){
418
+
419
+ $comment_likes = $comment->like_count;
420
+ $comment_message = htmlspecialchars($comment->message);
421
+ $comment_time = efbl_time_ago($comment->created_time);
422
+
423
+ //do not show more than 10 comments
424
+ if($ci == 5) break;
425
+
426
+ echo '<div class="efbl_comments">';
427
+
428
+ echo '<div class="efbl_commenter_image">';
429
+
430
+ echo '<a href="https://facebook.com/'. $comment->from->id .'" target="_blank" rel="nofollow">
431
+ <img src="https://graph.facebook.com/'.$comment->from->id.'/picture" width=32 height=32>
432
+ </a>';
433
+ echo '</div>';
434
+
435
+ echo '<div class="efbl_comment_text">';
436
+
437
+ echo '<a class="efbl_comenter_name" href="https://facebook.com/'. $comment->from->id .'" target="_blank" rel="nofollow">
438
+ '.$comment->from->name.'
439
+ </a>';
440
+
441
+ echo '<p class="efbl_comment_message">'.$comment_message.'</p>';
442
+
443
+
444
+ echo '<p class="efbl_comment_time_n_likes">';
445
+
446
+ if($comment_likes)
447
+ echo '<span class="efbl_comment_like"><i class="fa fa-thumbs-o-up"></i>&nbsp;'.$comment_likes.'</span> - ';
448
+
449
+ echo '<span class="efbl_comment_time">'.$comment_time.'</spa> </p>';
450
+
451
+
452
+ echo '</div>'; //comments text
453
+
454
+ echo '</div>';
455
+
456
+ $ci++;
457
+ }
458
+
459
+ $comment_more_text = __(apply_filters('efbl_comment_on_text', 'comment on facebook'), 'easy-facebook-likebox');
460
+ echo '<div class="efbl_comments_footer">
461
+ <a href="'.$story_link.'" target="_blank" rel="nofollow"><i class="fa fa-comment-o"></i> '.$comment_more_text.' </a>
462
+ </div>';
463
+
464
+
465
+
466
+ }
467
+
468
+ if(count($story->comments->data) > 0 || count($story->likes->data) > 0){
469
+ //Comments area ends here
470
+ echo '</div>';
471
+ }
472
+
473
+
474
+
475
+ echo '</div>'; //Meta container ends here
476
+
477
+
478
+ echo '</div>';
479
+ //Incrrement the counter
480
+ $i++;
481
+ }
482
+
483
+ //Display like box here if enabled
484
+ if($show_like_box){
485
+
486
+ echo '<div class="efbl_custom_likebox">'.do_shortcode('[efb_likebox fanpage_url="'.$page_id.'" box_width="250" box_height="" colorscheme="light" locale="en_US" responsive="0" show_faces="0" show_header="0" show_stream="0" show_border="0" ]').'</div>';
487
+ }
488
+
489
+ //prepare for inline popup
490
+ echo '<div id="efblcf_holder" class="white-popup mfp-hide">
491
+
492
+ <div class="efbl_popup_wraper">
493
+
494
+ <div class="efbl_popup_left_container">
495
+ <img src="" class="efbl_popup_image" />
496
+ <iframe src="" class="efbl_popup_if_video" ></iframe>
497
+ <video src="" class="efbl_popup_video" id="html_video" controls></video>
498
+ </div>
499
+
500
+ <div class="efbl_popupp_footer">
501
+ </div>
502
+
503
+ </div>
504
+
505
+ </div>';
506
+
507
+ //End wraper
508
+ echo '</div>';
509
+ }
510
+ else
511
+ _e(apply_filters('efbl_error_message', 'Error occured while retrieving the facebook feed'), 'easy-facebook-likebox');
public/views/filters.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ efbl_read_more_text on feed.php:347
2
+ efbl_share_text on feed.php:348
3
+ efbl_like_this_text on feed.php:378
4
+ efbl_and_text on feed.php:379
5
+ efbl_other_text on feed.php:380
6
+ efbl_others_text on feed.php:381
7
+ efbl_comment_on_text on feed.php:454
8
+ efbl_error_message on feed.php:506
public/views/public.php CHANGED
@@ -16,11 +16,12 @@ $options = get_option( 'efbl_settings_display_options' );
16
  /*echo "<pre>";
17
  print_r($options);
18
  exit;*/
19
- $delay = ($options['efbl_popup_interval']) ? $options['efbl_popup_interval'] : 1000;
20
- $width = ($options['efbl_popup_width']) ? $options['efbl_popup_width'] : 400;
21
- $height = ($options['efbl_popup_height']) ? $options['efbl_popup_height'] : 300;
22
  $shortcode = $options['efbl_popup_shortcode'];
23
 
 
24
  if($options['efbl_enable_popup']){
25
 
26
  ?>
@@ -29,46 +30,39 @@ if($options['efbl_enable_popup']){
29
  </div>
30
  <!-- This file is used to markup the public facing aspect of the plugin. -->
31
 
32
- <div style="width:400px;display: none;">
33
- <div id="efbl_popup" class="white-popup" style="width:<?php echo $width?>px; height:<?php echo $height?>px">
34
  <?php
35
  if(empty($shortcode)){
36
  echo __('Please enter easy facebook like box shortcode from settings > Easy Fcebook Likebox', 'easy-facebook-likebox');
37
  }else{
38
- if( preg_match('/efb_likebox/i', $shortcode ) ){
39
- echo do_shortcode($shortcode);
40
- }else{
41
- echo __('Please enter easy facebook like box shortcode from settings > Easy Fcebook Likebox', 'easy-facebook-likebox');
42
- }
43
- }
44
  ?>
45
- </div>
46
- </div>
47
 
48
  <script type="text/javascript">
49
  jQuery(document).ready(function($) {
50
-
 
51
  $('.popup-with-form').magnificPopup({
52
  type: 'inline',
53
  preloader: false,
54
- });
55
-
56
- /*$(".efbl").fancybox({
57
- maxWidth : 800,
58
- maxHeight : 600,
59
- fitToView : true,
60
- 'scrolling' : 'no',
61
- width : '<?php echo $width?>px',
62
- height : '<?php echo $height?>px',
63
- autoSize : false,
64
- closeClick : false,
65
- openEffect : 'none',
66
- closeEffect : 'none',
67
- padding : 0,
68
- });*/
69
-
70
- openFancybox(<?php echo $delay?>);
71
 
 
 
 
72
  });
73
 
74
  function openFancybox(interval) {
16
  /*echo "<pre>";
17
  print_r($options);
18
  exit;*/
19
+ $delay = $options['efbl_popup_interval'];
20
+ $width = $options['efbl_popup_width'];
21
+ $height = $options['efbl_popup_height'];
22
  $shortcode = $options['efbl_popup_shortcode'];
23
 
24
+
25
  if($options['efbl_enable_popup']){
26
 
27
  ?>
30
  </div>
31
  <!-- This file is used to markup the public facing aspect of the plugin. -->
32
 
33
+ <div id="efbl_popup" class="white-popup mfp-hide" style="width:<?php echo $width?>px; height:<?php echo $height?>px">
 
34
  <?php
35
  if(empty($shortcode)){
36
  echo __('Please enter easy facebook like box shortcode from settings > Easy Fcebook Likebox', 'easy-facebook-likebox');
37
  }else{
38
+ echo do_shortcode($shortcode);
39
+ }
 
 
 
 
40
  ?>
41
+ </div>
 
42
 
43
  <script type="text/javascript">
44
  jQuery(document).ready(function($) {
45
+ /*$.removeCookie('dont_show', { path: '/' }); */
46
+
47
  $('.popup-with-form').magnificPopup({
48
  type: 'inline',
49
  preloader: false,
50
+
51
+ <?php if($options['efbl_do_not_show_again'] == 1){?>
52
+ callbacks: {
53
+ close: function() {
54
+ $.cookie('dont_show', '1' ,{ expires: 7, path: '/' } );
55
+ }
56
+ },
57
+ <?php }?>
58
+
59
+ });
60
+
61
+
 
 
 
 
 
62
 
63
+ if( $.cookie('dont_show') != 1)
64
+ openFancybox(<?php echo $delay?>);
65
+
66
  });
67
 
68
  function openFancybox(interval) {